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; }