| New file | 
 |  |  | 
 |  |  | package com.dayu.qihealonelibrary.activity; | 
 |  |  |  | 
 |  |  | import android.Manifest; | 
 |  |  | import android.app.Activity; | 
 |  |  | import android.content.Intent; | 
 |  |  | import android.content.pm.PackageManager; | 
 |  |  | import android.os.Build; | 
 |  |  | import android.os.Bundle; | 
 |  |  | import android.os.Handler; | 
 |  |  | import android.os.Message; | 
 |  |  | import android.text.TextUtils; | 
 |  |  | import android.view.LayoutInflater; | 
 |  |  | import android.view.View; | 
 |  |  |  | 
 |  |  | import androidx.annotation.NonNull; | 
 |  |  |  | 
 |  |  | import com.dayu.baselibrary.utils.MornyUtil; | 
 |  |  | import com.dayu.baselibrary.utils.TipUtil; | 
 |  |  | import com.dayu.baselibrary.view.PassWordDialog; | 
 |  |  | import com.dayu.baselibrary.view.datepicker.CustomDatePicker; | 
 |  |  | import com.dayu.baselibrary.view.datepicker.DateFormatUtils; | 
 |  |  | import com.dayu.qihealonelibrary.databinding.ActivityMyQhaBinding; | 
 |  |  | import com.dayu.qihealonelibrary.dbBean.AdminDataBean; | 
 |  |  | import com.dayu.qihealonelibrary.dbBean.ElectricPriceBean; | 
 |  |  | import com.dayu.qihealonelibrary.utils.DeviceNumberUtils; | 
 |  |  | import com.dayu.qihealonelibrary.utils.ExcelUtil; | 
 |  |  |  | 
 |  |  | import java.io.File; | 
 |  |  | import java.util.ArrayList; | 
 |  |  | import java.util.List; | 
 |  |  |  | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * Copyright (C), 2023, | 
 |  |  |  * Author: zuo | 
 |  |  |  * Date: 2023-11-10 19:52 | 
 |  |  |  * Description: 个人中心 | 
 |  |  |  */ | 
 |  |  | public class MyActivity extends BaseActivity { | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     private CustomDatePicker beginDatePicker; | 
 |  |  |     private CustomDatePicker endDatePicker; | 
 |  |  |     long beginTime; | 
 |  |  |     long endTime; | 
 |  |  |  | 
 |  |  |     boolean isRechargeList = false; | 
 |  |  |     ActivityMyQhaBinding myBinding; | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     protected void onCreate(Bundle savedInstanceState) { | 
 |  |  |         super.onCreate(savedInstanceState); | 
 |  |  |         myBinding = ActivityMyQhaBinding.inflate(LayoutInflater.from(this)); | 
 |  |  |         setContentView(myBinding.getRoot()); | 
 |  |  |         getVersion(this); | 
 |  |  |         setData(); | 
 |  |  |         initDatePicker(); | 
 |  |  |         initView(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private void initView() { | 
 |  |  |  | 
 |  |  |         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(); | 
 |  |  | //                startActivity(new Intent(MyActivity.this, AdminSetupActivity.class)); | 
 |  |  |             } | 
 |  |  |         }); | 
 |  |  |         myBinding.myWaterPriceLL.setOnClickListener(new View.OnClickListener() { | 
 |  |  |             @Override | 
 |  |  |             public void onClick(View v) { | 
 |  |  |                 PassWordDialog passWordDialog = new PassWordDialog(MyActivity.this, new Intent(MyActivity.this, AdminSetupActivity.class)); | 
 |  |  |                 passWordDialog.show(); | 
 |  |  |             } | 
 |  |  |         }); | 
 |  |  |         myBinding.myPsw.setOnClickListener(new View.OnClickListener() { | 
 |  |  |             @Override | 
 |  |  |             public void onClick(View v) { | 
 |  |  |                 startActivity(new Intent(MyActivity.this, PassWordActivity.class)); | 
 |  |  |             } | 
 |  |  |         }); | 
 |  |  |         myBinding.myRechargeListLl.setOnClickListener(new View.OnClickListener() { | 
 |  |  |             @Override | 
 |  |  |             public void onClick(View v) { | 
 |  |  |                 startActivity(new Intent(MyActivity.this, RechargeListActivity.class)); | 
 |  |  |             } | 
 |  |  |         }); | 
 |  |  |         myBinding.myNewCardListLl.setOnClickListener(new View.OnClickListener() { | 
 |  |  |             @Override | 
 |  |  |             public void onClick(View v) { | 
 |  |  |                 startActivity(new Intent(MyActivity.this, NewCardListActivity.class)); | 
 |  |  |             } | 
 |  |  |         }); | 
 |  |  |         myBinding.myNewCardOut.setOnClickListener(new View.OnClickListener() { | 
 |  |  |             @Override | 
 |  |  |             public void onClick(View v) { | 
 |  |  |                 isRechargeList = false; | 
 |  |  |                 beginDatePicker.show(System.currentTimeMillis()); | 
 |  |  |             } | 
 |  |  |         }); | 
 |  |  |         myBinding.myRechargeOut.setOnClickListener(new View.OnClickListener() { | 
 |  |  |             @Override | 
 |  |  |             public void onClick(View v) { | 
 |  |  |                 isRechargeList = true; | 
 |  |  |                 beginDatePicker.show(System.currentTimeMillis()); | 
 |  |  |             } | 
 |  |  |         }); | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     Handler handler = new Handler(new Handler.Callback() { | 
 |  |  |         @Override | 
 |  |  |         public boolean handleMessage(@NonNull Message msg) { | 
 |  |  |             switch (msg.what) { | 
 |  |  |                 case 1: | 
 |  |  |                     TipUtil.show(MyActivity.this, "导出成功!"); | 
 |  |  |                     break; | 
 |  |  |                 case 3: | 
 |  |  |                     TipUtil.show(MyActivity.this, "记录为空!"); | 
 |  |  |                     break; | 
 |  |  |                 default: | 
 |  |  |                     TipUtil.show(MyActivity.this, "导出失败!"); | 
 |  |  |                     break; | 
 |  |  |             } | 
 |  |  |             stopAnim(); | 
 |  |  |             return false; | 
 |  |  |         } | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 导出成Excel | 
 |  |  |      */ | 
 |  |  |     private void outExcl() { | 
 |  |  |         startAnim(); | 
 |  |  |         new Thread(new Runnable() { | 
 |  |  |             @Override | 
 |  |  |             public void run() { | 
 |  |  |                 { | 
 |  |  |                     try { | 
 |  |  |                         File file = new File(ExcelUtil.outPath); | 
 |  |  |                         //文件夹是否已经存在 | 
 |  |  |                         if (!file.exists()) { | 
 |  |  |                             file.mkdirs(); | 
 |  |  |                         } | 
 |  |  |                         List listData = new ArrayList(); | 
 |  |  |                         try { | 
 |  |  |                             if (isRechargeList) { | 
 |  |  |                                 listData = asynchBaseDao.rechargeDao().ansyFindByTime(beginTime, endTime); | 
 |  |  |                             } else { | 
 |  |  |                                 listData = asynchBaseDao.userCardDao().findByTime(beginTime, endTime); | 
 |  |  |                             } | 
 |  |  |                             if (listData == null || listData.size() == 0) { | 
 |  |  |                                 handler.sendEmptyMessage(2); | 
 |  |  |                                 return; | 
 |  |  |                             } | 
 |  |  |                         } catch (Exception e) { | 
 |  |  |                             e.printStackTrace(); | 
 |  |  |                         } | 
 |  |  |                         String[] title; | 
 |  |  |                         String fileName; | 
 |  |  |                         if (listData == null || listData.size() == 0) { | 
 |  |  |                             TipUtil.show(MyActivity.this, "记录为空"); | 
 |  |  |                             return; | 
 |  |  |                         } | 
 |  |  |                         if (isRechargeList) { | 
 |  |  |                             title = new String[]{"设备序列号", "用户名", "卡号", "充值日期", "充值金额(元)", "剩余金额(元)"}; | 
 |  |  |                             fileName = file.toString() + "/" + ExcelUtil.outRechargePathName; | 
 |  |  |                         } else { | 
 |  |  |                             title = new String[]{"设备序列号", "用户名", "身份证号", "卡号", "注册日期", "电话"}; | 
 |  |  |                             fileName = file.toString() + "/" + ExcelUtil.outUserPathName; | 
 |  |  |                         } | 
 |  |  |                         ExcelUtil.initExcel(fileName, title); | 
 |  |  |                         ExcelUtil.writeObjListToExcel(listData, fileName, MyActivity.this); | 
 |  |  |                         handler.sendEmptyMessage(1); | 
 |  |  |                     } catch (Exception e) { | 
 |  |  |                         handler.sendEmptyMessage(2); | 
 |  |  |                         e.printStackTrace(); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }).start(); | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     void getVersion(Activity context) { | 
 |  |  |         int REQUEST_CODE_PERMISSION_STORAGE = 100; | 
 |  |  |         if (Build.VERSION.SDK_INT >= 23) { | 
 |  |  |             String[] permissions = { | 
 |  |  |                     Manifest.permission.READ_EXTERNAL_STORAGE, | 
 |  |  |                     Manifest.permission.WRITE_EXTERNAL_STORAGE | 
 |  |  |             }; | 
 |  |  |  | 
 |  |  |             for (String str : permissions) { | 
 |  |  |                 if (context.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) { | 
 |  |  |                     context.requestPermissions(permissions, REQUEST_CODE_PERMISSION_STORAGE); | 
 |  |  |                     return; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private void setData() { | 
 |  |  |         AdminDataBean adminData; | 
 |  |  |         try { | 
 |  |  |             adminData = baseDao.adminDao().findFirst(); | 
 |  |  |             if (adminData != null) { | 
 |  |  |                 myBinding.myAdminName.setText(adminData.getAddressCode()); | 
 |  |  |                 myBinding.myVillageNum.setText(adminData.getSerial()); | 
 |  |  | //                myBinding.myWaterPrice.setText(MornyUtil.changeF2Y(adminData.getWaterPrice())); | 
 |  |  |             } else { | 
 |  |  |                 myBinding.myAdminName.setText("请点击区域号进行设置"); | 
 |  |  |                 myBinding.myVillageNum.setText("请点击区域号进行设置"); | 
 |  |  | //                myBinding.myWaterPrice.setText("请点击区域号进行设置"); | 
 |  |  |             } | 
 |  |  |             StringBuilder msgData = new StringBuilder(); | 
 |  |  |  | 
 |  |  |             String initCode = DeviceNumberUtils.getDeviceNumber(); | 
 |  |  |             if (TextUtils.isEmpty(initCode)) { | 
 |  |  |                 msgData.append("设备未注册"); | 
 |  |  |             } else { | 
 |  |  |                 msgData.append("设备注册号:" + initCode); | 
 |  |  |             } | 
 |  |  |             myBinding.myTestConnect.setText(msgData); | 
 |  |  |             ElectricPriceBean priceBean = baseDao.electricPriceDao().findFirst(); | 
 |  |  |             if (priceBean != null) { | 
 |  |  |                 myBinding.myWaterPrice.setText(priceBean.getPrice() + "元"); | 
 |  |  |             } else { | 
 |  |  |                 myBinding.myWaterPrice.setText("1.000元"); | 
 |  |  |             } | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             e.printStackTrace(); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     protected void onStart() { | 
 |  |  |         super.onStart(); | 
 |  |  |         setData(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     private void initDatePicker() { | 
 |  |  |         long beginTimestamp = DateFormatUtils.str2Long("2009-05-01", false); | 
 |  |  |         final long endTimestamp = System.currentTimeMillis(); | 
 |  |  |  | 
 |  |  |         // 通过时间戳初始化日期,毫秒级别 | 
 |  |  |         beginDatePicker = new CustomDatePicker(this, "选择开始时间", new CustomDatePicker.Callback() { | 
 |  |  |             @Override | 
 |  |  |             public void onTimeSelected(long timestamp) { | 
 |  |  |                 beginTime = timestamp; | 
 |  |  |                 endDatePicker.show(timestamp); | 
 |  |  |             } | 
 |  |  |         }, beginTimestamp, endTimestamp); | 
 |  |  |         // 不允许点击屏幕或物理返回键关闭 | 
 |  |  |         beginDatePicker.setCancelable(false); | 
 |  |  |         // 不显示时和分 | 
 |  |  |         beginDatePicker.setCanShowPreciseTime(false); | 
 |  |  |         // 不允许循环滚动 | 
 |  |  |         beginDatePicker.setScrollLoop(false); | 
 |  |  |         // 不允许滚动动画 | 
 |  |  |         beginDatePicker.setCanShowAnim(false); | 
 |  |  |  | 
 |  |  |         endDatePicker = new CustomDatePicker(this, "选择结束时间", new CustomDatePicker.Callback() { | 
 |  |  |             @Override | 
 |  |  |             public void onTimeSelected(long timestamp) { | 
 |  |  |                 endTime = timestamp; | 
 |  |  |                 if ((endTime < beginTime) && endTime != beginTime) { | 
 |  |  |                     TipUtil.show(MyActivity.this, "结束时间不能晚于开始时间"); | 
 |  |  |                 } else { | 
 |  |  |                     try { | 
 |  |  |                         endTime = endTime + (1000 * 60 * 60 * 24) - 1; | 
 |  |  |                         outExcl(); | 
 |  |  |                     } catch (Exception e) { | 
 |  |  |                         e.printStackTrace(); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }, beginTimestamp, endTimestamp); | 
 |  |  |         // 不允许点击屏幕或物理返回键关闭 | 
 |  |  |         endDatePicker.setCancelable(false); | 
 |  |  |         // 不显示时和分 | 
 |  |  |         endDatePicker.setCanShowPreciseTime(false); | 
 |  |  |         // 不允许循环滚动 | 
 |  |  |         endDatePicker.setScrollLoop(false); | 
 |  |  |         // 不允许滚动动画 | 
 |  |  |         endDatePicker.setCanShowAnim(false); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     protected void onDestroy() { | 
 |  |  |         super.onDestroy(); | 
 |  |  |         endDatePicker.onDestroy(); | 
 |  |  |         beginDatePicker.onDestroy(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     void startAnim() { | 
 |  |  |         myBinding.avi.setVisibility(View.VISIBLE); | 
 |  |  |         myBinding.avi.show(); | 
 |  |  |         // or avi.smoothToShow(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     void stopAnim() { | 
 |  |  |         myBinding.avi.hide(); | 
 |  |  |         // or avi.smoothToHide(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  | } |