左晓为主开发手持机充值管理机
zuoxiao
2023-11-15 61a4ae8b08652f24916218037beeef594bcde83b
读取卡片相关
读取卡片byte转bean相关
31个文件已修改
1个文件已添加
779 ■■■■■ 已修改文件
app/src/main/AndroidManifest.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/MyApplication.java 114 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/activity/DomainActivity.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/activity/ElectricPriceActivity.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/activity/MyActivity.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/activity/NewCardActivity.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/activity/ParameterActivity.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/activity/PowerActivity.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/activity/RechargeListActivity.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/activity/SysActivity.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/card/CleanCard.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/card/CleanUserCard.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/card/ConfigurationPowerCard.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/card/ConfigureDeviceRegistrationCrad.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/card/DomainCard.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/card/ManageCard.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/card/PassWordCard.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/card/RegisteredCard.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/card/TestCard.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/card/UserCard.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/dao/RechargeDao.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/dbBean/DomainBean.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/net/SocketNet.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/tools/HexUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/utils/MyCommon.java 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_domain.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_ip.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_parameter.xml 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_red_card.xml 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xhdpi/logo.jpg 补丁 | 查看 | 原始文档 | blame | 历史
easysocket/src/main/java/com/easysocket/EasySocket.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/AndroidManifest.xml
@@ -36,7 +36,7 @@
    <application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:icon="@mipmap/logo"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
@@ -103,6 +103,7 @@
        <activity android:name=".activity.ParameterActivity" />
        <activity android:name=".activity.PowerActivity" />
        <activity android:name=".activity.DomainActivity"/>
        <activity android:name=".activity.ElectricPriceActivity"/>
        <meta-data
app/src/main/java/com/dayu/recharge/MyApplication.java
@@ -10,6 +10,7 @@
import com.dayu.recharge.dbBean.IpBean;
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;
@@ -52,7 +53,7 @@
        AidlUtil.getInstance().connectPrinterService(this);
        initEasySocket(false, null);
        socketConnect();
        CrashReport.initCrashReport(getApplicationContext(), "846987eae9", true);
        CrashReport.initCrashReport(getApplicationContext(), "45551598b8", true);
    }
    private boolean isAidl;
@@ -135,72 +136,77 @@
        if (!TextUtils.isEmpty(ip)
                && !TextUtils.isEmpty(String.valueOf(port))
                && !TextUtils.isEmpty(addressCode)) {
            isDoInitMachine = true;
            InitMachineRequestBean initMachineRequestBean = new InitMachineRequestBean();
            initMachineRequestBean.setControl("01");
            //130107200008    112    青泉居委会
            initMachineRequestBean.setAddress(addressCode);
            initMachineRequestBean.setXuLie(SocketUtil.getXuLie(this));
            initMachineRequestBean.setAFN("91");
            if (EasySocket.getInstance().getDefconnection() != null) {
                isDoInitMachine = true;
                InitMachineRequestBean initMachineRequestBean = new InitMachineRequestBean();
                initMachineRequestBean.setControl("01");
                //130107200008    112    青泉居委会
                initMachineRequestBean.setAddress(addressCode);
                initMachineRequestBean.setXuLie(SocketUtil.getXuLie(this));
                initMachineRequestBean.setAFN("91");
//
            Log.i("Socket", "注册报文");
            SocketNet.getInstance().sendTestMessage(initMachineRequestBean.pack(), new SocketCallBack() {
                @Override
                public void onSocketResponse(SocketData readData) {
                Log.i("Socket", "注册报文");
                SocketNet.getInstance().sendTestMessage(initMachineRequestBean.pack(), new SocketCallBack() {
                    @Override
                    public void onSocketResponse(SocketData readData) {
                    if (CRC8.isCRC8(readData.getOriginDataBytes())) {
                        //校验CRC成功
                        InitMachineBackBean initMachineBackBean = new InitMachineBackBean();
                        if (CRC8.isCRC8(readData.getOriginDataBytes())) {
                            //校验CRC成功
                            InitMachineBackBean initMachineBackBean = new InitMachineBackBean();
                        String initCode = HexUtil.bytesToHex(Arrays.copyOfRange(readData.getBodyBytes(), 2, 18));
                        //确认收到注册号报文
                        ConfirmMachineRequestBean confirmMachineRequestBean = new ConfirmMachineRequestBean();
                        confirmMachineRequestBean.setControl("01");
                        //130107200008    112    青泉居委会
                        confirmMachineRequestBean.setAddress(addressCode);
                        confirmMachineRequestBean.setXuLie(SocketUtil.getXuLie(MyApplication.this));
                        confirmMachineRequestBean.setAFN("92");
                        confirmMachineRequestBean.setInitCode(initCode);
                        Log.i("Socket", "确认注册报文");
                        SocketNet.getInstance().sendTestMessage(confirmMachineRequestBean.pack(), new SocketCallBack() {
                            String initCode = HexUtil.bytesToHex(Arrays.copyOfRange(readData.getBodyBytes(), 2, 18));
                            //确认收到注册号报文
                            ConfirmMachineRequestBean confirmMachineRequestBean = new ConfirmMachineRequestBean();
                            confirmMachineRequestBean.setControl("01");
                            //130107200008    112    青泉居委会
                            confirmMachineRequestBean.setAddress(addressCode);
                            confirmMachineRequestBean.setXuLie(SocketUtil.getXuLie(MyApplication.this));
                            confirmMachineRequestBean.setAFN("92");
                            confirmMachineRequestBean.setInitCode(initCode);
                            Log.i("Socket", "确认注册报文");
                            SocketNet.getInstance().sendTestMessage(confirmMachineRequestBean.pack(), new SocketCallBack() {
                            @Override
                            public void onSocketResponse(SocketData readData) {
                                isDoInitMachine = false;
                                if (CRC8.isCRC8(readData.getOriginDataBytes())) {
                                    byte stateByte = readData.getBodyBytes()[2];
                                    String state = BcdUtil.bcdToStr(stateByte);
                                    //BCD码00成功01失败(注册号不是服务器返回信息)
                                    if (state.equalsIgnoreCase("00")) {
                                        //保存设备注册号
                                        BaseDaoSingleton.getInstance(MyApplication.myApplication).ipDao().findFirst();
                                        WSHelper.getInstance(MyApplication.this).put("initCode", initCode);
                                        ToastUtil.show(MyApplication.this, "充值管理注册报文获取成功");
                                @Override
                                public void onSocketResponse(SocketData readData) {
                                    isDoInitMachine = false;
                                    if (CRC8.isCRC8(readData.getOriginDataBytes())) {
                                        byte stateByte = readData.getBodyBytes()[2];
                                        String state = BcdUtil.bcdToStr(stateByte);
                                        //BCD码00成功01失败(注册号不是服务器返回信息)
                                        if (state.equalsIgnoreCase("00")) {
                                            //保存设备注册号
                                            BaseDaoSingleton.getInstance(MyApplication.myApplication).ipDao().findFirst();
                                            WSHelper.getInstance(MyApplication.this).put("initCode", initCode);
                                            ToastUtil.show(MyApplication.this, "充值管理注册报文获取成功");
                                        } else {
                                            //校验CRC错误
                                            ToastUtil.show(MyApplication.this, "确认收到注册报文状态失败");
                                        }
                                    } else {
                                        //校验CRC错误
                                        ToastUtil.show(MyApplication.this, "确认收到注册报文状态失败");
                                        ToastUtil.show(MyApplication.this, "确认收到注册报文校验CRC错误");
                                    }
                                } else {
                                    //校验CRC错误
                                    ToastUtil.show(MyApplication.this, "确认收到注册报文校验CRC错误");
                                }
                            }
                            @Override
                            public void onSocketError(int code, String msg) {
                                @Override
                                public void onSocketError(int code, String msg) {
                            }
                        });
                    } else {//校验CRC错误
                        ToastUtil.show(MyApplication.this, "充值管理注册报文校验CRC错误");
                                }
                            });
                        } else {//校验CRC错误
                            ToastUtil.show(MyApplication.this, "充值管理注册报文校验CRC错误");
                        }
                    }
                }
                @Override
                public void onSocketError(int code, String msg) {
                    @Override
                    public void onSocketError(int code, String msg) {
                }
            });
                    }
                });
            }
        }
    }
app/src/main/java/com/dayu/recharge/activity/DomainActivity.java
@@ -29,12 +29,17 @@
        binding.electricOk.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String domainNumber = binding.domainNumber.getText().toString();
                String domain = binding.domain.getText().toString();
                String port = binding.port.getText().toString();
                int portInt = 0;
                if (TextUtils.isEmpty(domainNumber)) {
                    ToastUtil.show("请输入正确的域名序号");
                    return;
                }
                if (TextUtils.isEmpty(port)) {
                    ToastUtil.show("请输入正确的端口号");
                    return;
                } else {
                    portInt = Integer.valueOf(port);
                }
@@ -45,7 +50,7 @@
                    ToastUtil.show("请输入正确的端口号");
                    return;
                }
                domainBean.setDomainNumber(domainNumber);
                domainBean.setDomain(domain);
                domainBean.setPort(portInt);
                baseDao.domainPortDao().insert(domainBean);
@@ -59,11 +64,13 @@
    private void initData() {
        domainBean = baseDao.domainPortDao().findFirst();
        if (domainBean != null) {
            binding.domainOldTV.setText(domainBean.getDomain() + ":" + domainBean.getPort());
            binding.domainOldTV.setText("序号:" + domainBean.getDomainNumber() + "\n" + "域名:" + domainBean.getDomain() + "\n" + "端口号:" + domainBean.getPort());
        } else {
            domainBean = new DomainBean();
            binding.domainOldTV.setText("请设置新的域名卡信息");
        }
        domainBean = new DomainBean();
    }
}
app/src/main/java/com/dayu/recharge/activity/ElectricPriceActivity.java
@@ -13,30 +13,28 @@
 * Copyright (C), 2023,
 * Author: zuo
 * Date: 2023-11-10 10:18
 * Description:
 * Description: 电量单价
 */
public class ElectricPriceActivity extends BaseActivity {
    ActivityElectricPriceBinding electricPriceBinding;
    ElectricPriceBean priceBean;
    ElectricPriceBean electricPriceBean;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        electricPriceBinding = ActivityElectricPriceBinding.inflate(LayoutInflater.from(this));
        setContentView(electricPriceBinding.getRoot());
        initData();
        ElectricPriceBean priceBean = baseDao.electricPriceDao().findFirst();
        if (priceBean != null) {
            this.priceBean = priceBean;
            electricPriceBinding.electricOldNumber.setText(priceBean.getPrice() + "");
        }
        electricPriceBinding.electricOk.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!TextUtils.isEmpty(electricPriceBinding.electricNewNum.getText())) {
                    priceBean.setPrice(Float.parseFloat(electricPriceBinding.electricNewNum.getText().toString()));
                    baseDao.electricPriceDao().insert(priceBean);
                    electricPriceBean.setPrice(Float.parseFloat(electricPriceBinding.electricNewNum.getText().toString()));
                    baseDao.electricPriceDao().insert(electricPriceBean);
                    ToastUtil.show("保存成功");
                    initData();
                } else {
                    ToastUtil.show("请输入正确金额");
                }
@@ -46,5 +44,16 @@
    }
    private void initData() {
        ElectricPriceBean priceBean = baseDao.electricPriceDao().findFirst();
        if (priceBean != null) {
            electricPriceBean = priceBean;
            electricPriceBinding.electricOldNumber.setText(priceBean.getPrice() + "元");
        } else {
            electricPriceBean = new ElectricPriceBean();
            electricPriceBinding.electricOldNumber.setText("1.000元");
        }
    }
}
app/src/main/java/com/dayu/recharge/activity/MyActivity.java
@@ -58,8 +58,9 @@
        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();
//                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() {
@@ -187,7 +188,7 @@
            if (TextUtils.isEmpty(initCode)) {
                msgData.append(",设备未注册");
            } else {
                msgData.append(",设备已注册" + initCode);
                msgData.append(",设备已注册,设备注册号:" + initCode);
            }
            myBinding.myTestConnect.setText(msgData);
        } catch (Exception e) {
app/src/main/java/com/dayu/recharge/activity/NewCardActivity.java
@@ -157,6 +157,9 @@
                        ElectricPriceBean electricPriceBean = baseDao.electricPriceDao().findFirst();
                        if (electricPriceBean != null) {
                            userCard.setElectricityPrice(electricPriceBean.getPrice());
                        } else {
                            //默认是1元
                            userCard.setElectricityPrice(1.000f);
                        }
                        userCard.setState("00");
                        userCard.setBalance(0);
app/src/main/java/com/dayu/recharge/activity/ParameterActivity.java
@@ -41,5 +41,12 @@
                startActivity(intent);
            }
        });
        binding.parameterElectricPrice.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(ParameterActivity.this, ElectricPriceActivity.class);
                startActivity(intent);
            }
        });
    }
}
app/src/main/java/com/dayu/recharge/activity/PowerActivity.java
@@ -45,7 +45,8 @@
                    powerBean.setPower(data);
                    baseDao.powerDao().insert(powerBean);
                    ToastUtil.show("保存成功");
                    PowerActivity.this.finish();
//                    PowerActivity.this.finish();
                    initData();
                } else {
                    ToastUtil.show("请输入水泵功率");
                }
app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java
@@ -10,6 +10,8 @@
import android.view.View;
import com.dayu.recharge.card.ConfigurationPowerCard;
import com.dayu.recharge.card.DomainCard;
import com.dayu.recharge.card.UserCard;
import com.dayu.recharge.databinding.ActivityRedCardBinding;
import com.dayu.recharge.dbBean.RechargeBean;
@@ -23,11 +25,13 @@
import com.dayu.recharge.tools.NfcReadHelper;
import com.dayu.recharge.utils.CRC8;
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 java.util.Arrays;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
@@ -41,13 +45,19 @@
    private static final int USER_CRAD = 1;
    private static final int MANAGE_CRAD = 2;
    private static final int CLEAN_CARD = 3;
    private static final int REGISTERED_CARD = 4;
    private static final int CLEAN_ALL_USER = 5;
    private static final int DOMAIN_CARD = 6;
    private static final int TEST_CARD = 7;
    private static final int CONFIGURATION_CARD = 8;
    private static final int CONFIGURATION_POWER_CARD = 9;
    private static final int PASS_WORD_CRAD = 10;
    private static final int ERROR = -1;
    UserCard userCard;
    UserCardBean waterCard;
    RechargeBean rechargeBean;
    //    农户注册编号
    volatile UserCard userCard;
    ActivityRedCardBinding redCardBinding;
    @Override
@@ -57,17 +67,29 @@
        setContentView(redCardBinding.getRoot());
    }
    private void setData(String statu) {
        String initCode = WSHelper.getInstance(this).get("initCode", "");
        if (TextUtils.isEmpty(initCode)) {
            ToastUtil.show(this, "设备注册号为空,请先设置IP和管理员地址");
            return;
        }
//        redCardBinding.redVillageNum.setText("设备序列号:" + initS.getANo() + "");
        redCardBinding.redName.setText("用 户 名:" + rechargeBean.getUserName());
        redCardBinding.redRemainderMorny.setText("剩余金额:" + rechargeBean.getBalance() + "" + "元");
        redCardBinding.redStatu.setText("状    态:" + statu);
    private void setUserData(String userName, int blance, String statu) {
        viweGone(true);
        redCardBinding.redName.setText("用户姓名:" + userName);
        redCardBinding.redRemainderBlance.setText("剩余金额:" + MornyUtil.changeF2Y(blance) + "元");
        redCardBinding.redStatu.setText("卡状态:" + statu);
        if (userCard != null) {
            redCardBinding.redInitCode.setText("用户注册编号:" + userCard.getInitPeasantCode());
            Calendar calendar = userCard.getRechargeDate();
            if (calendar != null) {
                int year = calendar.get(Calendar.YEAR);
                int month = calendar.get(Calendar.MONTH); // 月份从0开始,所以需要加1
                int day = calendar.get(Calendar.DAY_OF_MONTH);
                int hour = calendar.get(Calendar.HOUR_OF_DAY);
                int minute = calendar.get(Calendar.MINUTE);
                int second = calendar.get(Calendar.SECOND);
                redCardBinding.redRechargeDate.setText("本卡最后购水日期:" + year + month + day + " " + hour + ":" + minute + ":" + second);
            } else {
                redCardBinding.redRechargeDate.setText("本卡最后购水日期:无");
            }
            redCardBinding.redRechargeNumber.setText("本卡充值次数:" + userCard.getRechargeTimes() + "");
        }
    }
@@ -93,11 +115,41 @@
                        if (oneSector != null && oneSector.size() > 0) {
                            byte cardType = oneSector.get(0)[0];
                            String cardTypeStr = HexUtil.byteToHex(cardType);
//                            switch (cardTypeStr){
//                                case
//                            }
                            switch (cardTypeStr) {
                                case MyCommon.USER_CARD_TYPE_1:
                                case MyCommon.USER_CARD_TYPE_2:
                                case MyCommon.USER_CARD_TYPE_3:
                                    userCard = UserCard.getBean(oneSector);
                            message.what = USER_CRAD;
                                    message.what = USER_CRAD;
                                    break;
                                case MyCommon.MANAGE_CRAD:
                                    message.what = MANAGE_CRAD;
                                    break;
                                case MyCommon.CLEAN_CARD_TYPE:
                                    message.what = CLEAN_CARD;
                                    break;
                                case MyCommon.REGISTERED_CARD_TYPE:
                                    message.what = REGISTERED_CARD;
                                    break;
                                case MyCommon.CLEAN_ALL_USER_CARD_TYPE:
                                    message.what = CLEAN_ALL_USER;
                                    break;
                                case MyCommon.DOMAIN_CARD_TYPE:
                                    message.what = DOMAIN_CARD;
                                    message.obj = oneSector;
                                    break;
                                case MyCommon.TEST_CARD_TYPE:
                                    message.what = TEST_CARD;
                                    break;
                                case MyCommon.CONFIGURATION_CARD_TYPE:
                                    message.what = CONFIGURATION_CARD;
                                    break;
                                case MyCommon.CONFIGURATION_POWER_CARD_TYPE:
                                    message.what = CONFIGURATION_POWER_CARD;
                                    message.obj = oneSector.get(0);
                                    break;
                            }
                        } else {
                            message.what = ERROR;
                        }
@@ -119,63 +171,79 @@
        public boolean handleMessage(Message msg) {
            switch (msg.what) {
                case USER_CRAD:
                    redCardBinding.readImgLL.setVisibility(View.GONE);
                    redCardBinding.readUserLL.setVisibility(View.VISIBLE);
                    redCardBinding.readSysLL.setVisibility(View.GONE);
                    redCardBinding.readCleanLL.setVisibility(View.GONE);
                    redCardBinding.readInitLL.setVisibility(View.GONE);
//                    selectBalance(newUserCard.getPeasantCode());
                    selectBalance(userCard.getInitPeasantCode());
                    break;
                case MANAGE_CRAD:
                    redCardBinding.readImgLL.setVisibility(View.GONE);
                    redCardBinding.readUserLL.setVisibility(View.GONE);
                    redCardBinding.readSysLL.setVisibility(View.VISIBLE);
                    redCardBinding.readCleanLL.setVisibility(View.GONE);
                    redCardBinding.readInitLL.setVisibility(View.GONE);
                    viweGone(false);
                    redCardBinding.readCardTypeTV.setText("当前为管理卡");
                    stopAnim();
                    break;
                case 3:
                    redCardBinding.readImgLL.setVisibility(View.GONE);
                    redCardBinding.readUserLL.setVisibility(View.GONE);
                    redCardBinding.readSysLL.setVisibility(View.GONE);
                    redCardBinding.readCleanLL.setVisibility(View.VISIBLE);
                    redCardBinding.readInitLL.setVisibility(View.GONE);
                case CLEAN_CARD:
                    viweGone(false);
                    redCardBinding.readCardTypeTV.setText("当前为清零卡");
                    stopAnim();
                    break;
                case 4:
                    redCardBinding.readImgLL.setVisibility(View.GONE);
                    redCardBinding.readUserLL.setVisibility(View.GONE);
                    redCardBinding.readSysLL.setVisibility(View.GONE);
                    redCardBinding.readCleanLL.setVisibility(View.GONE);
                    redCardBinding.readInitLL.setVisibility(View.VISIBLE);
                case REGISTERED_CARD:
                    viweGone(false);
                    redCardBinding.readCardTypeTV.setText("当前为重新注册设备卡");
                    stopAnim();
                    break;
                case 5:
                    redCardBinding.readImgLL.setVisibility(View.GONE);
                    redCardBinding.readUserLL.setVisibility(View.GONE);
                    redCardBinding.readSysLL.setVisibility(View.GONE);
                    redCardBinding.readCleanLL.setVisibility(View.GONE);
                    redCardBinding.readInitLL.setVisibility(View.VISIBLE);
                    redCardBinding.readInitLL.setText("当前为行政区域卡");
                case CLEAN_ALL_USER:
                    viweGone(false);
                    redCardBinding.readCardTypeTV.setText("当前为删除全部用户卡");
                    stopAnim();
                    break;
                case 6:
                    redCardBinding.readImgLL.setVisibility(View.GONE);
                    redCardBinding.readUserLL.setVisibility(View.GONE);
                    redCardBinding.readSysLL.setVisibility(View.GONE);
                    redCardBinding.readCleanLL.setVisibility(View.GONE);
                    redCardBinding.readInitLL.setVisibility(View.VISIBLE);
                    redCardBinding.readInitLL.setText("当前为设备序号卡");
                case DOMAIN_CARD:
                    viweGone(false);
                    redCardBinding.readCardTypeTV.setText("当前为设置域名卡");
                    List<byte[]> data = (List<byte[]>) msg.obj;
                    DomainCard domainCard = DomainCard.toBean(data);
                    redCardBinding.readCardDataTV.setText("序号:" + domainCard.getDomainNumber() + "\n" + "域名:" + domainCard.getDomainName() + "\n" + "端口号:" + domainCard.getPort());
                    stopAnim();
                    break;
                case TEST_CARD:
                    viweGone(false);
                    redCardBinding.readCardTypeTV.setText("当前为测试卡");
                    stopAnim();
                    break;
                case CONFIGURATION_CARD:
                    viweGone(false);
                    redCardBinding.readCardTypeTV.setText("当前为配置设备注册信息卡");
                    stopAnim();
                    break;
                case CONFIGURATION_POWER_CARD:
                    viweGone(false);
                    redCardBinding.readCardTypeTV.setText("当前配置水泵功率卡");
                    byte[] powerData = (byte[]) msg.obj;
                    ConfigurationPowerCard powerCard = ConfigurationPowerCard.toBean(powerData);
                    redCardBinding.readCardDataTV.setText(powerCard.getPower());
                    stopAnim();
                    break;
                case PASS_WORD_CRAD:
                    viweGone(false);
                    redCardBinding.readCardTypeTV.setText("当前为密码卡");
                    stopAnim();
                    break;
                default:
                    ToastUtil.show(ReadCardAcitivy.this, "卡片未注册");
                    ToastUtil.show(ReadCardAcitivy.this, "卡片无法识别");
                    stopAnim();
                    break;
            }
            return false;
        }
    });
    private void viweGone(boolean isUSerCard) {
        redCardBinding.readImgLL.setVisibility(View.GONE);
        if (isUSerCard) {
            redCardBinding.readCardTypeLL.setVisibility(View.GONE);
            redCardBinding.readUserLL.setVisibility(View.VISIBLE);
        } else {
            redCardBinding.readCardTypeLL.setVisibility(View.VISIBLE);
            redCardBinding.readUserLL.setVisibility(View.GONE);
        }
    }
    void startAnim() {
        redCardBinding.avi.setVisibility(View.VISIBLE);
@@ -192,7 +260,6 @@
     * @param initPeasantCode 农户注册编号
     */
    private void selectBalance(String initPeasantCode) {
        BalanceSelecteRequestBean requestBean = new BalanceSelecteRequestBean();
        requestBean.setAFN("94");
        requestBean.setControl("01");
@@ -230,12 +297,7 @@
                        String name = SocketUtil.fromHexString(SocketUtil.bytesToHexClean0(nameByte));
                        rechargeBean = new RechargeBean();
                        rechargeBean.setDate(System.currentTimeMillis());
                        rechargeBean.setUserName(name);
                        rechargeBean.setBalance(MornyUtil.changeF2Y(balance) + "");
//                        rechargeBean.setTotal_morn(ArithUtil.changeF2Y(userCard.getValue() + ""));
                        setData(stateText.toString());
                        setUserData(name, balance, stateText.toString());
                        stopAnim();
                    } catch (Exception e) {
                        e.printStackTrace();
app/src/main/java/com/dayu/recharge/activity/RechargeListActivity.java
@@ -10,6 +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.view.datepicker.CustomDatePicker;
import com.dayu.recharge.view.datepicker.DateFormatUtils;
@@ -44,11 +45,9 @@
    }
    private void setData() {
//        try {
//            rechargeList = SqLite_DB_Utile.getInit(this).findAll(RechargeBean.class);
//        } catch (DbException e) {
//            e.printStackTrace();
//        }
        rechargeList = baseDao.rechargeDao().findAll();
        adapter = new RechargeAdapter(this, rechargeList);
        rechargeListBinding.rechargeList.setAdapter(adapter);
    }
@@ -99,21 +98,18 @@
        endDatePicker = new CustomDatePicker(this, "选择结束时间", new CustomDatePicker.Callback() {
            @Override
            public void onTimeSelected(long timestamp) {
//                endTime = timestamp;
//                if ((endTime < beginTime) && endTime != beginTime) {
//                    ToastUtil.show(RechargeListActivity.this, "结束时间不能晚于开始时间");
//                } else {
//                    try {
//                        endTime = endTime + (1000 * 60 * 60 * 24) - 1;
//                        List<RechargeBean> userList = SqLite_DB_Utile.getInit(RechargeListActivity.this).selector(RechargeBean.class).where("date", ">=", beginTime).and("date", "<=", endTime).findAll();
//                        rechargeList.clear();
//                        rechargeList.addAll(userList);
//                        adapter.notifyDataSetChanged();
//                        getTotal();
//                    } catch (DbException e) {
//                        e.printStackTrace();
//                    }
//                }
                endTime = timestamp;
                if ((endTime < beginTime) && endTime != beginTime) {
                    ToastUtil.show(RechargeListActivity.this, "结束时间不能晚于开始时间");
                } else {
                    endTime = endTime + (1000 * 60 * 60 * 24) - 1;
                    List<RechargeBean> userList = baseDao.rechargeDao().findByTime(beginTime, endTime);
                    rechargeList.clear();
                    rechargeList.addAll(userList);
                    adapter.notifyDataSetChanged();
                    getTotal();
                }
            }
        }, beginTimestamp, endTimestamp);
        // 不允许点击屏幕或物理返回键关闭
app/src/main/java/com/dayu/recharge/activity/SysActivity.java
@@ -85,16 +85,18 @@
            public void onClick(View v) {
                Intent intent = new Intent(SysActivity.this, NFCWreatActivity.class);
                DomainBean domainBean = baseDao.domainPortDao().findFirst();
                DomainCard domainCard = new DomainCard();
                if (domainBean != null) {
                    DomainCard domainCard = new DomainCard();
                    domainCard.setDomainNumber(domainBean.getDomainNumber());
                    domainCard.setDomainName(domainBean.getDomain());
                    domainCard.setPort(domainBean.getPort());
                    intent.putExtra("domainCard", domainCard);
                    startActivity(intent);
                } else {
                    ToastUtil.show("请先设置域名");
                    domainCard.setDomainNumber("1");
                    domainCard.setDomainName("dayuyanjiuyuan.top");
                    domainCard.setPort(8888);
                }
                intent.putExtra("domainCard", domainCard);
                startActivity(intent);
            }
        });
        adminBinding.adminTest.setOnClickListener(new View.OnClickListener() {
app/src/main/java/com/dayu/recharge/card/CleanCard.java
@@ -1,6 +1,7 @@
package com.dayu.recharge.card;
import com.dayu.recharge.tools.HexUtil;
import com.dayu.recharge.utils.MyCommon;
import java.io.Serializable;
@@ -11,7 +12,7 @@
 * Description:清零卡
 */
public class CleanCard implements Serializable {
    public String cardType = "C8";//卡类型
    public String cardType = MyCommon.CLEAN_CARD_TYPE;//卡类型
    public String cardData = "3668F7A30119";//标识码
    public byte[] toByte() {
app/src/main/java/com/dayu/recharge/card/CleanUserCard.java
@@ -1,6 +1,7 @@
package com.dayu.recharge.card;
import com.dayu.recharge.tools.HexUtil;
import com.dayu.recharge.utils.MyCommon;
import java.io.Serializable;
@@ -11,13 +12,14 @@
 * Description:删除全部用户卡
 */
public class CleanUserCard implements Serializable {
    public String cardType = "BB";//卡类型
    public String cardType = MyCommon.CLEAN_ALL_USER_CARD_TYPE;//卡类型
    public String cardData = "A0B1C289";//标识码
    public byte[] toByte() {
        Zero zero=new Zero();
       return zero.toByte();
        Zero zero = new Zero();
        return zero.toByte();
    }
    public class Zero extends BaseCard {
        public byte[] toByte() {
            byte[] data = new byte[16];
app/src/main/java/com/dayu/recharge/card/ConfigurationPowerCard.java
@@ -1,6 +1,8 @@
package com.dayu.recharge.card;
import com.dayu.recharge.tools.HexUtil;
import com.dayu.recharge.utils.MyCommon;
import com.tencent.bugly.crashreport.CrashReport;
import java.io.Serializable;
@@ -16,7 +18,7 @@
public class ConfigurationPowerCard implements Serializable {
    public String cardType = "BD";//卡类型
    public String cardType = MyCommon.CONFIGURATION_POWER_CARD_TYPE;//卡类型
    public String cardData = "A0B1C289";//标识码
    public String power;//功率
@@ -29,6 +31,20 @@
        this.power = power;
    }
    public static ConfigurationPowerCard toBean(byte[] data) {
        try {
            ConfigurationPowerCard powerCard = new ConfigurationPowerCard();
            int intPower = HexUtil.get16to10(HexUtil.byteToHex(data[5]));
            powerCard.setPower(String.valueOf(intPower));
            return powerCard;
        } catch (Exception e) {
            e.printStackTrace();
            CrashReport.postCatchedException(e);
            return null;
        }
    }
    public byte[] toByte() {
        Zero zero = new Zero();
        return zero.toByte();
app/src/main/java/com/dayu/recharge/card/ConfigureDeviceRegistrationCrad.java
@@ -1,6 +1,7 @@
package com.dayu.recharge.card;
import com.dayu.recharge.tools.HexUtil;
import com.dayu.recharge.utils.MyCommon;
import java.io.Serializable;
@@ -14,7 +15,7 @@
 * 为方便现场更换设备时重新注册的问题,配置设备信息卡,首先刷卡,把原设备的注册号和ID号读到卡内,同时卡状态则00修改为FF,再新设备上刷此卡时,注册号和ID号自动写到控制器内,可以直接刷卡使用
 */
public class ConfigureDeviceRegistrationCrad implements Serializable {
    public String cardType = "BC";//卡类型
    public String cardType = MyCommon.CONFIGURATION_CARD_TYPE;//卡类型
    public String cardData = "A0B1C289";//标识码
    public byte[] toByte() {
app/src/main/java/com/dayu/recharge/card/DomainCard.java
@@ -3,10 +3,14 @@
import com.dayu.recharge.tools.BcdUtil;
import com.dayu.recharge.tools.HexUtil;
import com.dayu.recharge.utils.MornyUtil;
import com.dayu.recharge.utils.MyCommon;
import com.tencent.bugly.crashreport.CrashReport;
import java.io.Serializable;
import java.net.IDN;
import java.nio.charset.StandardCharsets;
import java.util.Calendar;
import java.util.List;
/**
 * Copyright (C), 2023,
@@ -17,7 +21,7 @@
public class DomainCard implements Serializable {
    public String cardType = "C1";//卡类型
    public String cardType = MyCommon.DOMAIN_CARD_TYPE;//卡类型
    public String domainNumber;//域名序号 (BCD格式)
    public int domainLength;//域名长度
@@ -33,6 +37,13 @@
        this.domainName = domainName;
    }
    public String getDomainNumber() {
        return domainNumber;
    }
    public void setDomainNumber(String domainNumber) {
        this.domainNumber = domainNumber;
    }
    public int getPort() {
        return port;
@@ -60,6 +71,44 @@
    }
    public static DomainCard toBean(List<byte[]> data) {
        try {
            DomainCard domainCard = new DomainCard();
            String domainNumber = BcdUtil.bcdToStr(data.get(0)[1]);
            domainCard.domainNumber = domainNumber;
            int domainLength = HexUtil.get16to10(HexUtil.byteToHex(data.get(0)[2]));
            byte[] domainData = new byte[domainLength + 7];
            int index = 0;
            for (int i = 0; i < 3; i++) {
                int jIndex;
                if (i == 0) {
                    jIndex = 3;
                } else {
                    jIndex = 0;
                }
                for (int j = jIndex; j < 15; j++) {
                    if (index < domainData.length) {
                        domainData[index] = data.get(i)[j];
                        index++;
                    }
                }
            }
            String domainStr = new String(domainData, StandardCharsets.US_ASCII);
            String domainName = domainStr.split(",")[0];
            String port = domainStr.split(",")[1].replace("#", "");
            domainCard.setDomainName(domainName);
            domainCard.setPort(Integer.valueOf(port));
            return domainCard;
        } catch (Exception e) {
            e.printStackTrace();
            CrashReport.postCatchedException(e);
        }
        return null;
    }
    /**
     * 用户卡0块
     */
app/src/main/java/com/dayu/recharge/card/ManageCard.java
@@ -3,6 +3,7 @@
import com.dayu.recharge.tools.BcdUtil;
import com.dayu.recharge.tools.HexUtil;
import com.dayu.recharge.utils.MornyUtil;
import com.dayu.recharge.utils.MyCommon;
import java.io.Serializable;
@@ -13,7 +14,7 @@
 * Description: 管理卡  第1扇区 0块
 */
public class ManageCard implements Serializable {
    public String cardType = "B2";//卡类型
    public String cardType = MyCommon.MANAGE_CRAD;//卡类型
    public String cardData = "3668F7A30119";//标识码
app/src/main/java/com/dayu/recharge/card/PassWordCard.java
@@ -1,6 +1,7 @@
package com.dayu.recharge.card;
import com.dayu.recharge.tools.HexUtil;
import com.dayu.recharge.utils.MyCommon;
/**
 * Copyright (C), 2023,
@@ -9,7 +10,7 @@
 * Description:密码卡
 */
public class PassWordCard {
    public String cardType = "B3";//卡类型
    public String cardType = MyCommon.PASS_WORD_CRAD_TYPE;//卡类型
    public String cardData = "A0B1C289";//标识码
    public class Zero extends BaseCard {
app/src/main/java/com/dayu/recharge/card/RegisteredCard.java
@@ -1,6 +1,7 @@
package com.dayu.recharge.card;
import com.dayu.recharge.tools.HexUtil;
import com.dayu.recharge.utils.MyCommon;
import java.io.Serializable;
@@ -11,7 +12,7 @@
 * Description:重新注册设备卡:用于写用户注册号
 */
public class RegisteredCard implements Serializable {
    public String cardType = "BA";//卡类型
    public String cardType = MyCommon.REGISTERED_CARD_TYPE;//卡类型
    public String cardData = "A0B1C289";//标识码
    public byte[] toByte() {
app/src/main/java/com/dayu/recharge/card/TestCard.java
@@ -1,6 +1,7 @@
package com.dayu.recharge.card;
import com.dayu.recharge.tools.HexUtil;
import com.dayu.recharge.utils.MyCommon;
import java.io.Serializable;
@@ -11,7 +12,7 @@
 * Description: 测试卡
 */
public class TestCard implements Serializable {
    public String cardType = "A4";//卡类型
    public String cardType = MyCommon.TEST_CARD_TYPE;//卡类型
    public String cardData = "A0B1C289";//标识码
    public byte[] toByte() {
app/src/main/java/com/dayu/recharge/card/UserCard.java
@@ -3,6 +3,7 @@
import com.dayu.recharge.tools.BcdUtil;
import com.dayu.recharge.tools.HexUtil;
import com.dayu.recharge.utils.MornyUtil;
import com.dayu.recharge.utils.MyCommon;
import java.io.Serializable;
import java.util.Calendar;
@@ -15,7 +16,7 @@
 * Description: 用户卡结构
 */
public class UserCard implements Serializable {
    public String cardType = "A1";//写卡标志 A1刷卡开泵前 A8刷卡开泵后  A2叠加充值
    public String cardType = MyCommon.USER_CARD_TYPE_1;//写卡标志 A1刷卡开泵前 A8刷卡开泵后  A2叠加充值
    public int rechargeTimes;//充值次数
app/src/main/java/com/dayu/recharge/dao/RechargeDao.java
@@ -9,6 +9,7 @@
import com.dayu.recharge.dbBean.RechargeBean;
import com.dayu.recharge.dbBean.RechargeBean;
import com.dayu.recharge.dbBean.UserCardBean;
import java.util.List;
@@ -31,4 +32,7 @@
    @Query("select  * from RechargeBean ")
    List<RechargeBean> findAll();
    @Query("select  * from RechargeBean where date>=:beginTime and date<=:endTime")
    List<RechargeBean> findByTime(long beginTime, long endTime);
}
app/src/main/java/com/dayu/recharge/dbBean/DomainBean.java
@@ -14,9 +14,20 @@
public class DomainBean {
    @PrimaryKey(autoGenerate = true)
    public long id;
    private String domainNumber;
    private int port;
    private String domain = "";
    public String getDomainNumber() {
        return domainNumber;
    }
    public void setDomainNumber(String domainNumber) {
        this.domainNumber = domainNumber;
    }
    public int getPort() {
        return port;
    }
app/src/main/java/com/dayu/recharge/net/SocketNet.java
@@ -51,12 +51,12 @@
        isTest = false;
        // 发送
//        EasySocket.getInstance().upMessage(dataMessage);
        if (EasySocket.getInstance().getDefOptions().getSocketAddress() != null) {
        if (EasySocket.getInstance().getDefconnection() != null) {
            EasySocket.getInstance().disconnect(false);
            EasySocket.getInstance().connect();
            this.dataMessage = dataMessage;
        } else {
            LogUtil.w("Socket地址为空");
            MyApplication.myApplication.initEasySocket(false, null);
        }
    }
@@ -107,7 +107,7 @@
                            MyApplication.myApplication.initMachineRequestBean(ipBean.getIp(), ipBean.getPort(), adminData.getAddressCode());
                        }
                    }
                }, 2000);
                }, 500);
            }
            if (dataMessage != null) {
@@ -170,7 +170,7 @@
            socketData.setBodyData(originReadData.getBodyBytes());
            socketData.setHeaderData(originReadData.getHeaderData());
            dataMessage = null;
            if (myCallBack!=null){
            if (myCallBack != null) {
                myCallBack.onSocketResponse(socketData);
            }
app/src/main/java/com/dayu/recharge/tools/HexUtil.java
@@ -62,7 +62,7 @@
        if (hex.length() < 2) {
            hex = "0" + hex;
        }
        return hex;
        return hex.toUpperCase();
    }
app/src/main/java/com/dayu/recharge/utils/MyCommon.java
@@ -8,31 +8,61 @@
 */
public class MyCommon {
    /**
     * 用户刷卡开泵前
     */
    public static final String USER_CARD_TYPE_1 = "A1";
    /**
     * 用户刷卡开泵后
     */
    public static final String USER_CARD_TYPE_2 = "A8";
    /**
     * 用户叠加充值
     */
    public static final String USER_CARD_TYPE_3 = "A2";
    public static final String CLEAN_CARD_TYPE_3 = "C8";
    /**
     * 管理卡
     */
    public static final String MANAGE_CRAD = "B2";
    /**
     * 清零卡
     */
    public static final String CLEAN_CARD_TYPE = "C8";
    public static final String REGISTERED_CARD_TYPE_3 = "BA";
    public static final String CLEAN_ALL_USER_CARD_TYPE_3 = "BB";
    /**
     * 重新注册设备卡
     */
    public static final String REGISTERED_CARD_TYPE = "BA";
    /**
     * 删除全部用户卡
     */
    public static final String CLEAN_ALL_USER_CARD_TYPE = "BB";
    /**
     * 设置域名卡
     */
    public static final String DOMAIN_CARD_TYPE_3 = "C1";
    public static final String DOMAIN_CARD_TYPE = "C1";
    /**
     * 测试卡
     */
    public static final String TEST_CARD_TYPE_3 = "A4";
    public static final String TEST_CARD_TYPE = "A4";
    /**
     * 配置设备注册信息卡
     */
    public static final String CONFIGURATION_CARD_TYPE_3 = "BC";
    public static final String CONFIGURATION_CARD_TYPE = "BC";
    /**
     * 配置水泵功率卡
     */
    public static final String CONFIGURATION_POWER_CARD_TYPE = "BD";
    /**
     * 密码卡
     */
    public static final String PASS_WORD_CRAD_TYPE = "B3";
}
app/src/main/res/layout/activity_domain.xml
@@ -18,14 +18,12 @@
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/titleBar"
        android:layout_margin="20dp"
        android:layout_marginStart="20dp"
        android:layout_marginTop="20dp"
        android:layout_marginEnd="20dp"
        android:layout_marginBottom="20dp"
        android:orientation="vertical">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="当前域名和端口:"
            android:textSize="@dimen/text_size" />
        <TextView
            android:id="@+id/domain_oldTV"
@@ -36,12 +34,22 @@
    </LinearLayout>
    <EditText
        android:id="@+id/domainNumber"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/domain_ll"
        android:layout_alignParentStart="true"
        android:layout_marginStart="20dp"
        android:layout_marginTop="20dp"
        android:layout_marginEnd="20dp"
        android:hint="请输入新的域名序号"
        android:inputType="number" />
    <EditText
        android:id="@+id/domain"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/domain_ll"
        android:layout_below="@+id/domainNumber"
        android:layout_alignParentStart="true"
        android:layout_marginStart="20dp"
        android:layout_marginTop="20dp"
app/src/main/res/layout/activity_ip.xml
@@ -28,8 +28,9 @@
        <EditText
            android:id="@+id/ip"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="socket通信IP"
            android:layout_height="wrap_content" />
            android:text="dayuyanjiuyuan.top" />
    </LinearLayout>
@@ -49,11 +50,11 @@
        <EditText
            android:id="@+id/port"
            android:layout_width="match_parent"
            android:inputType="number"
            android:layout_height="wrap_content"
            android:hint="socket通信端口"
            android:layout_height="wrap_content" />
            android:inputType="number"
            android:text="08888" />
    </LinearLayout>
    <TextView
app/src/main/res/layout/activity_parameter.xml
@@ -17,8 +17,8 @@
        android:id="@+id/parameter_domain"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
         android:layout_marginLeft="20dp"
                android:layout_marginTop="20dp"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="20dp"
        android:padding="5dp"
        android:text="域名卡设置"
        android:textSize="@dimen/text_size" />
@@ -27,8 +27,8 @@
        android:id="@+id/parameter_power"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
         android:layout_marginLeft="20dp"
                android:layout_marginTop="20dp"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="20dp"
        android:padding="5dp"
        android:text="水泵功率卡设置"
        android:textSize="@dimen/text_size" />
@@ -38,12 +38,11 @@
        android:id="@+id/parameter_electricPrice"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
         android:layout_marginLeft="20dp"
                android:layout_marginTop="20dp"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="20dp"
        android:padding="5dp"
        android:text="电量单价"
        android:textSize="@dimen/text_size"
        android:visibility="gone" />
        android:textSize="@dimen/text_size" />
</LinearLayout>
app/src/main/res/layout/activity_red_card.xml
@@ -27,66 +27,52 @@
            android:orientation="vertical">
            <TextView
                android:id="@+id/red_villageNum"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="设备序列号:"
                android:textSize="@dimen/text_size" />
            <TextView
                android:id="@+id/red_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="15dp"
                android:text="用 户 名:"
                android:text="用户姓名:"
                android:textSize="@dimen/text_size" />
<!--            <TextView-->
<!--                android:id="@+id/red_userNum"-->
<!--                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_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: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_total_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_rechargeDate"
                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_electric"-->
<!--                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_water"-->
<!--                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_rechargeNumber"
                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_statu"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="15dp"
                android:text="状    态:"
                android:text="卡状态:"
                android:textSize="@dimen/text_size" />
        </LinearLayout>
@@ -94,46 +80,38 @@
    </ScrollView>
    <TextView
        android:id="@+id/read_sysLL"
        android:layout_width="wrap_content"
    <LinearLayout
        android:id="@+id/read_cardTypeLL"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_gravity="center"
        android:layout_below="@id/titleBar"
        android:gravity="center"
        android:text="当前为管理卡"
        android:textSize="30sp"
        android:textStyle="bold"
        android:visibility="gone" />
        android:orientation="vertical"
        android:visibility="visible">
        <TextView
            android:id="@+id/read_cardTypeTV"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:layout_gravity="center"
            android:gravity="center"
            android:textSize="30sp"
            android:textStyle="bold" />
    <TextView
        android:id="@+id/read_cleanLL"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="当前为清零卡"
        android:textSize="30sp"
        android:textStyle="bold"
        android:visibility="gone" />
    <TextView
        android:id="@+id/read_initLL"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="当前为出厂设置卡"
        android:textSize="30sp"
        android:textStyle="bold"
        android:visibility="gone" />
        <TextView
            android:id="@+id/read_cardDataTV"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:layout_gravity="center"
            android:layout_marginTop="20dp"
            android:gravity="left"
            android:textSize="20sp"
            android:textStyle="bold" />
    </LinearLayout>
    <LinearLayout
@@ -142,7 +120,8 @@
        android:layout_height="match_parent"
        android:layout_below="@id/titleBar"
        android:background="#ffffff"
        android:orientation="vertical">
        android:orientation="vertical"
        android:visibility="visible">
        <TextView
            android:layout_width="match_parent"
@@ -172,13 +151,5 @@
        android:visibility="gone"
        app:indicatorColor="@color/title_bg"
        app:indicatorName="BallClipRotatePulseIndicator" />
    <TextView
        android:id="@+id/textData"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />
</RelativeLayout>
app/src/main/res/mipmap-xhdpi/logo.jpg
easysocket/src/main/java/com/easysocket/EasySocket.java
@@ -268,8 +268,8 @@
     */
    public IConnectionManager getDefconnection() {
        if (defConnection == null) {
            throw new NotNullException("你还没有创建:" + defOptions.getSocketAddress().getIp() + ":" + defOptions.getSocketAddress().getPort()
                    + "的Socket的连接,请使用com.easysocket.EasySocket.connect()方法创建一个默认的连接");
//            throw new NotNullException("你还没有创建:" + defOptions.getSocketAddress().getIp() + ":" + defOptions.getSocketAddress().getPort()
//                    + "的Socket的连接,请使用com.easysocket.EasySocket.connect()方法创建一个默认的连接");
        }
        return defConnection;
    }