|  |  | 
 |  |  | package com.dayu.qihealonelibrary.activity; | 
 |  |  |  | 
 |  |  | import android.content.Context; | 
 |  |  | import android.os.Build; | 
 |  |  | import android.os.Bundle; | 
 |  |  | import android.text.Editable; | 
 |  |  | import android.text.TextUtils; | 
 |  |  | import android.text.TextWatcher; | 
 |  |  | import android.view.LayoutInflater; | 
 |  |  | import android.view.View; | 
 |  |  | import android.view.inputmethod.InputMethodManager; | 
 |  |  | import android.widget.EditText; | 
 |  |  |  | 
 |  |  | import com.dayu.baselibrary.utils.MornyUtil; | 
 |  |  | import com.dayu.baselibrary.utils.TipUtil; | 
 |  |  | import com.dayu.qihealonelibrary.databinding.ActivityAdminSetupBinding; | 
 |  |  | import com.dayu.qihealonelibrary.databinding.ActivityAdminSetupQhaBinding; | 
 |  |  | import com.dayu.qihealonelibrary.dbBean.AdminDataBean; | 
 |  |  | import com.example.pickerviewlibrary.picker.TeaPickerView; | 
 |  |  | import com.example.pickerviewlibrary.picker.entity.PickerData; | 
 |  |  | import com.example.pickerviewlibrary.picker.listener.OnPickerClickListener; | 
 |  |  | import com.dayu.qihealonelibrary.dbBean.ElectricPriceBean; | 
 |  |  | import com.tencent.bugly.crashreport.CrashReport; | 
 |  |  |  | 
 |  |  | import java.lang.reflect.Method; | 
 |  |  | import java.util.zip.CRC32; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * Copyright (C), 2023, | 
 |  |  | 
 |  |  |  * Date: 2023-11-10 19:52 | 
 |  |  |  * Description: 管理员信息设置 | 
 |  |  |  */ | 
 |  |  | public class AdminSetupActivity extends QHAloneBaseActivity { | 
 |  |  | public class AdminSetupActivity extends BaseActivity { | 
 |  |  |  | 
 |  |  |     ActivityAdminSetupBinding adminBinding; | 
 |  |  |     ActivityAdminSetupQhaBinding adminBinding; | 
 |  |  |  | 
 |  |  |     public static AdminSetupActivity adminSetupActivity; | 
 |  |  |     AdminDataBean adminData = new AdminDataBean(); | 
 |  |  |     TeaPickerView pickerView; | 
 |  |  |     ElectricPriceBean electricPriceBean; | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     protected void onCreate(Bundle savedInstanceState) { | 
 |  |  |         super.onCreate(savedInstanceState); | 
 |  |  |         try { | 
 |  |  |             adminBinding = ActivityAdminSetupBinding.inflate(LayoutInflater.from(this)); | 
 |  |  |             adminBinding = ActivityAdminSetupQhaBinding.inflate(LayoutInflater.from(this)); | 
 |  |  |             setContentView(adminBinding.getRoot()); | 
 |  |  |             adminSetupActivity = this; | 
 |  |  |             setData(); | 
 |  |  |             setViewData(); | 
 |  |  |             initView(); | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             CrashReport.postCatchedException(e); | 
 |  |  |             e.printStackTrace(); | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private void initView() { | 
 |  |  |         adminBinding.setupOk.setOnClickListener(new View.OnClickListener() { | 
 |  |  |             @Override | 
 |  |  |             public void onClick(View v) { | 
 |  |  |                 if (!TextUtils.isEmpty(adminData.getCun()) | 
 |  |  |                         && !TextUtils.isEmpty(adminBinding.adminSerial.getText().toString()) | 
 |  |  |                 ) { | 
 |  |  |                     if (Integer.valueOf(adminBinding.adminSerial.getText().toString()) <= 16777215) { | 
 |  |  |                         adminBinding.adminAddressCode.setText(adminData.getAddressCode()); | 
 |  |  |                         adminData.setSerial(adminBinding.adminSerial.getText().toString()); | 
 |  |  |         adminBinding.setupOk.setOnClickListener(v -> { | 
 |  |  |             String strSerial = adminBinding.adminAddressCode.getText().toString(); | 
 |  |  |             String strAddressCode = adminBinding.adminAddressCode.getText().toString(); | 
 |  |  |             String strElectricPrice = adminBinding.electricNewNum.getText().toString(); | 
 |  |  |             if (!TextUtils.isEmpty(strAddressCode) | 
 |  |  |                     && !TextUtils.isEmpty(strSerial) && !TextUtils.isEmpty(strElectricPrice)) { | 
 |  |  |                 int electricPrice = MornyUtil.changeY2L(strElectricPrice); | 
 |  |  |                 if (Integer.valueOf(electricPrice) > 0) { | 
 |  |  |                     if (Integer.valueOf(strAddressCode) <= 65535) { | 
 |  |  |                         adminData.setAddressCode(strAddressCode); | 
 |  |  |                         adminData.setSerial(strSerial); | 
 |  |  | //                        adminData.setWaterPrice(wtaterPrice); | 
 |  |  |                         baseDao.adminDao().insert(adminData); | 
 |  |  |                         setData(); | 
 |  |  |  | 
 |  |  |                         electricPriceBean.setPrice(Float.parseFloat(strElectricPrice)); | 
 |  |  |                         baseDao.electricPriceDao().insert(electricPriceBean); | 
 |  |  |                         TipUtil.show(AdminSetupActivity.this, "设置成功", new TipUtil.TipListener() { | 
 |  |  |                             @Override | 
 |  |  |                             public void onCancle() { | 
 |  |  | 
 |  |  |                             } | 
 |  |  |                         }); | 
 |  |  |                     } else { | 
 |  |  |                         TipUtil.show(AdminSetupActivity.this, "输入的数字不能超过16777215"); | 
 |  |  |                         TipUtil.show(AdminSetupActivity.this, "输入的区域号不能超过65535"); | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                 } else { | 
 |  |  |                     TipUtil.show(AdminSetupActivity.this, "请输入完整内容"); | 
 |  |  |                     TipUtil.show(AdminSetupActivity.this, "单价不能为0"); | 
 |  |  |                 } | 
 |  |  |             } else { | 
 |  |  |                 TipUtil.show(AdminSetupActivity.this, "请输入完整内容"); | 
 |  |  |             } | 
 |  |  |         }); | 
 |  |  |  | 
 |  |  | //        setPricePoint(adminBinding.adminWaterPrice); | 
 |  |  |         //保留三位小数 | 
 |  |  |         adminBinding.electricNewNum.addTextChangedListener(new TextWatcher() { | 
 |  |  |             @Override | 
 |  |  |             public void beforeTextChanged(CharSequence s, int start, int count, int after) { | 
 |  |  |  | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             @Override | 
 |  |  |             public void onTextChanged(CharSequence s, int start, int before, int count) { | 
 |  |  |  | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             @Override | 
 |  |  |             public void afterTextChanged(Editable s) { | 
 |  |  |                 // 删除额外的小数位 | 
 |  |  |                 String text = s.toString(); | 
 |  |  |                 if (text.contains(".")) { | 
 |  |  |                     int decimalIndex = text.indexOf("."); | 
 |  |  |                     int decimalCount = text.length() - decimalIndex - 1; | 
 |  |  |                     if (decimalCount > 3) { | 
 |  |  |                         s.delete(decimalIndex + 4, s.length()); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }); | 
 |  |  |         adminBinding.choseAddress.setOnClickListener(new View.OnClickListener() { | 
 |  |  |             @Override | 
 |  |  |             public void onClick(View v) { | 
 |  |  |                 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); | 
 |  |  |                 imm.hideSoftInputFromWindow(adminBinding.adminSerial.getWindowToken(), 0); | 
 |  |  |                 intiPickerView(); | 
 |  |  |             } | 
 |  |  |         }); | 
 |  |  |         pickerView = new TeaPickerView(this); | 
 |  |  |  | 
 |  |  |         new Thread(new Runnable() { | 
 |  |  |             @Override | 
 |  |  |             public void run() { | 
 |  |  |                 pickerView.initAddressData(); | 
 |  |  |             } | 
 |  |  |         }).start(); | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     private void setData() { | 
 |  |  |     private void setViewData() { | 
 |  |  |         try { | 
 |  |  |             AdminDataBean adminData = baseDao.adminDao().findFirst(); | 
 |  |  |  | 
 |  |  |             if (adminData != null) { | 
 |  |  |                 this.adminData = adminData; | 
 |  |  |                 adminBinding.adminSerial.setText(adminData.getSerial()); | 
 |  |  |                 adminBinding.adminAddressCode.setText(adminData.getAddressCode()); | 
 |  |  |                 adminBinding.adminAddress.setText(adminData.getSheng() + adminData.getShi() + adminData.getXian() + adminData.getZhen() + adminData.getCun()); | 
 |  |  |                 adminBinding.adminWaterPrice.setText(MornyUtil.changeF2Y(adminData.getWaterPrice())); | 
 |  |  |             } | 
 |  |  |             ElectricPriceBean priceBean = baseDao.electricPriceDao().findFirst(); | 
 |  |  |             if (priceBean != null) { | 
 |  |  |                 electricPriceBean = priceBean; | 
 |  |  |                 adminBinding.electricNewNum.setText(priceBean.getPrice()+"" ); | 
 |  |  |             } else { | 
 |  |  |                 adminBinding.adminSerial.setText("12" + generateUniqueNumber(getSN())); | 
 |  |  |                 electricPriceBean = new ElectricPriceBean(); | 
 |  |  |                 adminBinding.electricNewNum.setText("1.000"); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |         } catch (Exception e) { | 
 |  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     private void intiPickerView() { | 
 |  |  |  | 
 |  |  |         try { | 
 |  |  |             pickerView.setScreenH(2) | 
 |  |  |                     .setDiscolourHook(true) | 
 |  |  |                     .setRadius(25) | 
 |  |  |                     .setContentLine(true) | 
 |  |  |                     .setRadius(25) | 
 |  |  |                     .build(); | 
 |  |  |             pickerView.show(adminBinding.choseAddress); | 
 |  |  |             pickerView.setOnPickerClickListener(new OnPickerClickListener() { | 
 |  |  |                 @Override | 
 |  |  |                 public void OnPickerClick(PickerData pickerData) { | 
 |  |  |                     adminData.setSheng("河南"); | 
 |  |  |                     adminData.setShi(pickerData.getFirstText().getName()); | 
 |  |  |                     adminData.setXian(pickerData.getSecondText().getName()); | 
 |  |  |                     if (pickerData.getThirdText() != null) { | 
 |  |  |                         adminData.setZhen(pickerData.getThirdText().getName()); | 
 |  |  |                     } else { | 
 |  |  |                         adminData.setZhen(""); | 
 |  |  |     //水单价校验 | 
 |  |  |     public static void setPricePoint(final EditText editText) { | 
 |  |  |         editText.addTextChangedListener(new TextWatcher() { | 
 |  |  |             @Override | 
 |  |  |             public void onTextChanged(CharSequence s, int start, int before, | 
 |  |  |                                       int count) { | 
 |  |  |                 if (s.toString().contains(".")) { | 
 |  |  |                     if (s.length() - 1 - s.toString().indexOf(".") > 2) { | 
 |  |  |                         s = s.toString().subSequence(0, | 
 |  |  |                                 s.toString().indexOf(".") + 3); | 
 |  |  |                         editText.setText(s); | 
 |  |  |                         editText.setSelection(s.length()); | 
 |  |  |                     } | 
 |  |  |                     if (pickerData.getFourthText() != null) { | 
 |  |  |                         adminData.setCun(pickerData.getFourthText().getName()); | 
 |  |  |                         adminData.setAddressCode(pickerData.getFourthText().getCode()); | 
 |  |  |                     } else { | 
 |  |  |                         adminData.setCun(""); | 
 |  |  |                         adminData.setAddressCode(pickerData.getSecondText().getCode()); | 
 |  |  |                 } | 
 |  |  |                 if (s.toString().trim().substring(0).equals(".")) { | 
 |  |  |                     s = "0" + s; | 
 |  |  |                     editText.setText(s); | 
 |  |  |                     editText.setSelection(2); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 if (s.toString().startsWith("0") | 
 |  |  |                         && s.toString().trim().length() > 1) { | 
 |  |  |                     if (!s.toString().substring(1, 2).equals(".")) { | 
 |  |  |                         editText.setText(s.subSequence(0, 1)); | 
 |  |  |                         editText.setSelection(1); | 
 |  |  |                     } | 
 |  |  |                     adminBinding.adminAddress.setText(adminData.getSheng() + adminData.getShi() + adminData.getXian() + adminData.getZhen() + adminData.getCun()); | 
 |  |  |                     adminBinding.adminAddressCode.setText(adminData.getAddressCode()); | 
 |  |  |                     pickerView.dismiss(); | 
 |  |  |                 } | 
 |  |  |             }); | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             CrashReport.postCatchedException(e); | 
 |  |  |             e.printStackTrace(); | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public static String getSN() { | 
 |  |  |         String serial = null; | 
 |  |  |         try { | 
 |  |  |             Class<?> c = Class.forName("android.os.SystemProperties"); | 
 |  |  |             Method get = c.getMethod("get", String.class); | 
 |  |  |             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { | 
 |  |  |                 try { | 
 |  |  |                     serial = (String) get.invoke(c, "ro.sunmi.serial"); | 
 |  |  |                 } catch (Exception e) { | 
 |  |  |                     e.printStackTrace(); | 
 |  |  |                 } | 
 |  |  |                 return serial; | 
 |  |  |             } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { | 
 |  |  |                 serial = Build.getSerial(); | 
 |  |  |                 return serial; | 
 |  |  |             } else { | 
 |  |  |                 //安卓8以下使用Build.SERIAL相同方式 | 
 |  |  |                 //return Build.SERIAL; | 
 |  |  |                 try { | 
 |  |  |                     serial = (String) get.invoke(c, "ro.serialno"); | 
 |  |  |                 } catch (Exception e) { | 
 |  |  |                     e.printStackTrace(); | 
 |  |  |                 } | 
 |  |  |                 return serial; | 
 |  |  |             } | 
 |  |  |         } catch (ClassNotFoundException e) { | 
 |  |  |             throw new RuntimeException(e); | 
 |  |  |         } catch (NoSuchMethodException e) { | 
 |  |  |             throw new RuntimeException(e); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public static String generateUniqueNumber(String input) { | 
 |  |  |         try { | 
 |  |  |             // 使用CRC32哈希函数 | 
 |  |  |             CRC32 crc32 = new CRC32(); | 
 |  |  |             crc32.update(input.getBytes()); | 
 |  |  |             long crcValue = crc32.getValue(); | 
 |  |  |             // 将哈希值映射到6位数字的范围 | 
 |  |  |             long sixDigitNumber = Math.abs(crcValue) % 1000000; | 
 |  |  |             // 格式化为6位数字的字符串 | 
 |  |  |             return String.format("%06d", sixDigitNumber); | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             e.printStackTrace(); | 
 |  |  |             return null; | 
 |  |  |         } | 
 |  |  |             @Override | 
 |  |  |             public void beforeTextChanged(CharSequence s, int start, int count, | 
 |  |  |                                           int after) { | 
 |  |  |  | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             @Override | 
 |  |  |             public void afterTextChanged(Editable s) { | 
 |  |  |                 // TODO Auto-generated method stub | 
 |  |  |  | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |         }); | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } |