| 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.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 MyActivityQHAlone extends QHAloneBaseActivity { | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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(MyActivityQHAlone.this, new Intent(MyActivityQHAlone.this, AdminSetupActivityQHAlone.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(MyActivityQHAlone.this, new Intent(MyActivityQHAlone.this, AdminSetupActivityQHAlone.class)); | 
|---|
|  |  |  | passWordDialog.show(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | myBinding.myPsw.setOnClickListener(new View.OnClickListener() { | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void onClick(View v) { | 
|---|
|  |  |  | startActivity(new Intent(MyActivityQHAlone.this, PassWordActivityQHAlone.class)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | myBinding.myRechargeListLl.setOnClickListener(new View.OnClickListener() { | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void onClick(View v) { | 
|---|
|  |  |  | startActivity(new Intent(MyActivityQHAlone.this, RechargeListActivityQHAlone.class)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | myBinding.myNewCardListLl.setOnClickListener(new View.OnClickListener() { | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void onClick(View v) { | 
|---|
|  |  |  | startActivity(new Intent(MyActivityQHAlone.this, NewCardListActivityQHAlone.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(MyActivityQHAlone.this, "导出成功!"); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 3: | 
|---|
|  |  |  | TipUtil.show(MyActivityQHAlone.this, "记录为空!"); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | TipUtil.show(MyActivityQHAlone.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(MyActivityQHAlone.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, MyActivityQHAlone.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(MyActivityQHAlone.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(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|