package com.application.zhangshi_app_android.ui.function; import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import android.widget.PopupWindow; import com.android.app_base.base.BaseConfig; import com.android.app_base.base.dialog.BaseDialog; import com.android.app_base.base.dialog.UIDialog; import com.android.app_base.utils.ScreenSizeUtils; import com.android.app_base.utils.Utils; import com.android.app_base.utils.rxbus.MessageEvent; import com.android.app_base.utils.rxbus.RxBus; import com.android.app_base.widget.LinearItemDecoration; import com.application.zhangshi_app_android.BR; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.adapter.DailyConsumeRecordRvAdapter; import com.application.zhangshi_app_android.bean.ConsumeRecordBean; import com.application.zhangshi_app_android.bean.DailyConsumeRecordBean; import com.application.zhangshi_app_android.bean.TourismBean; import com.application.zhangshi_app_android.databinding.ActivityTourismDetailBinding; import com.application.zhangshi_app_android.ui.DLBaseActivity; import com.github.gzuliyujiang.wheelpicker.DatePicker; import com.github.gzuliyujiang.wheelpicker.annotation.DateMode; import com.github.gzuliyujiang.wheelpicker.contract.OnDatePickedListener; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Calendar; import java.util.HashSet; import java.util.List; import java.util.Set; import io.reactivex.functions.Consumer; /** * @author Ljj * @date 2023.04.28. 22:05 * @desc */ public class TourismDetailActivity extends DLBaseActivity { private int type;// 0 查看可修改删除 1 新增 2 直接修改 private PopupWindow popupWindow; private DailyConsumeRecordRvAdapter adapter; @Override public int getLayoutId() { return R.layout.activity_tourism_detail; } @Override public int getVariableId() { return BR.viewModel; } @Override public void initParam() { type = getIntent().getIntExtra(BaseConfig.EXTRA_TYPE,0); if (type == 0 || type == 2){ TourismBean bean = (TourismBean) getIntent().getSerializableExtra("bean"); if (bean != null){ viewModel.getBeanLiveData().setValue(bean); } } } @Override public void initView() { adapter = new DailyConsumeRecordRvAdapter(this,viewModel); LinearItemDecoration itemDecoration = new LinearItemDecoration(); itemDecoration.setBottomSpace(ScreenSizeUtils.dip2px(this,20)); binding.rvDailyConsumeRecord.addItemDecoration(itemDecoration); binding.rvDailyConsumeRecord.setNestedScrollingEnabled(false); binding.rvDailyConsumeRecord.setAdapter(adapter); if (type == 1){ viewModel.getTypeLiveData().setValue(true); binding.titleBar.setTitle("新增旅游费用记录"); }else if (type == 0){ popupWindow = initPopUpWindow(View.inflate(this,R.layout.pop_operate_delete,null)); popupWindow.getContentView().findViewById(R.id.tv_modify).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { viewModel.getTypeLiveData().setValue(true); popupWindow.dismiss(); } }); popupWindow.getContentView().findViewById(R.id.tv_delete).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { popupWindow.dismiss(); new UIDialog.Builder(getSelfActivity()) .setTitle("您确定要删除项目吗") .setContent("项目删除后将无法恢复") .setConfirm("确定") .setCancel("取消") .setListener(new UIDialog.OnListener() { @Override public void onConfirm(BaseDialog dialog) { viewModel.delete(); } }) .show(); } }); viewModel.getTypeLiveData().setValue(false); }else if (type == 2){ viewModel.getTypeLiveData().setValue(true); } binding.etStartTime.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DatePicker datePicker = getDatePicker(); datePicker.setTitle("选择开始时间"); datePicker.setOnDatePickedListener(new OnDatePickedListener() { @Override public void onDatePicked(int year, int month, int day) { //以yyyy-MM-dd的格式显示,月日小于10时前面补0 binding.etStartTime.setText(String.format("%d-%02d-%02d", year, month, day)); String startTime = binding.etStartTime.getText().toString(); String endTime = binding.etEndTime.getText().toString(); if (TextUtils.isEmpty(endTime)){ binding.etEndTime.setText(String.format("%d-%02d-%02d", year, month, day)); endTime = binding.etEndTime.getText().toString(); }else { //比较开始时间和结束时间的大小 if (Utils.compareDate(startTime,endTime) > 0){ //交换 binding.etStartTime.setText(endTime); binding.etEndTime.setText(startTime); } } binding.etStartTime.clearFocus(); } }); datePicker.show(); } }); binding.etEndTime.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DatePicker datePicker = getDatePicker(); datePicker.setTitle("选择结束时间"); datePicker.setOnDatePickedListener(new OnDatePickedListener() { @Override public void onDatePicked(int year, int month, int day) { binding.etEndTime.setText(String.format("%d-%02d-%02d", year, month , day)); String startTime = binding.etStartTime.getText().toString(); String endTime = binding.etEndTime.getText().toString(); if (TextUtils.isEmpty(startTime)){ binding.etStartTime.setText(String.format("%d-%02d-%02d", year, month, day)); startTime = binding.etStartTime.getText().toString(); }else { //比较开始时间和结束时间的大小 if (Utils.compareDate(startTime,endTime) > 0){ //交换 binding.etStartTime.setText(endTime); binding.etEndTime.setText(startTime); } } binding.etEndTime.clearFocus(); } }); datePicker.show(); } }); binding.ivAddDailyConsumeRecord.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DatePicker datePicker = getDatePicker(); datePicker.setTitle("选择消费日期"); datePicker.getWheelLayout().setDateMode(DateMode.MONTH_DAY); datePicker.setOnDatePickedListener(new OnDatePickedListener() { @Override public void onDatePicked(int year, int month, int day) { DailyConsumeRecordBean dailyConsumeRecordBean = new DailyConsumeRecordBean(); dailyConsumeRecordBean.setDate(month+"月"+day+"日"); adapter.addItem(0,dailyConsumeRecordBean); adapter.setFold(true,0); } }); datePicker.show(); } }); } @Override public void initData() { } @Override public void initLiveDataObserve() { viewModel.getBeanLiveData().observe(this,bean -> { if (bean!=null){ if (bean.getDetailList()==null){ return; } //根据时间分组 Set set = new HashSet<>(); for (ConsumeRecordBean consumeRecordBean : bean.getDetailList()) { set.add(consumeRecordBean.getHappenTime()); } List list = new ArrayList<>(); for (String s : set) { DailyConsumeRecordBean dailyConsumeRecordBean = new DailyConsumeRecordBean(); dailyConsumeRecordBean.setDate(s); List consumeRecordBeans = new ArrayList<>(); for (ConsumeRecordBean consumeRecordBean : bean.getDetailList()) { if (s.equals(consumeRecordBean.getHappenTime())){ consumeRecordBeans.add(consumeRecordBean); dailyConsumeRecordBean.setDailyMoney(consumeRecordBean.getDayCost()); } } dailyConsumeRecordBean.setConsumeRecordBeans(consumeRecordBeans); list.add(dailyConsumeRecordBean); } adapter.setData(list); } }); viewModel.getTypeLiveData().observe(this,operateType -> { if (operateType){ if (type == 1) { binding.ivOperate.setOnClickListener(v -> { if (adapter.getData() != null){ List list = new ArrayList<>(); for (DailyConsumeRecordBean bean : adapter.getData()) { if (bean.getConsumeRecordBeans() != null){ for (ConsumeRecordBean consumeRecordBean : bean.getConsumeRecordBeans()) { consumeRecordBean.setHappenTime(bean.getDate()); } list.addAll(bean.getConsumeRecordBeans()); } } if (viewModel.getBeanLiveData().getValue() == null){ return; } viewModel.getBeanLiveData().getValue().setDetailList(list); } viewModel.add(); }); }else { binding.ivOperate.setOnClickListener(v -> { if (adapter.getData() != null){ List list = new ArrayList<>(); for (DailyConsumeRecordBean bean : adapter.getData()) { if (bean.getConsumeRecordBeans() != null){ for (ConsumeRecordBean consumeRecordBean : bean.getConsumeRecordBeans()) { consumeRecordBean.setHappenTime(bean.getDate()); } list.addAll(bean.getConsumeRecordBeans()); } } if (viewModel.getBeanLiveData().getValue() == null){ return; } viewModel.getBeanLiveData().getValue().setDetailList(list); } viewModel.update(); }); } }else { binding.ivOperate.setOnClickListener(v -> { popupWindow.showAsDropDown(binding.ivOperate,-ScreenSizeUtils.dip2px(this,85) +binding.ivOperate.getWidth(),0); }); } }); RxBus.getInstance().toObservable(this, MessageEvent.class) .subscribe(messageEvent -> { if (messageEvent.getMessageEventCode() == MessageEvent.EVENT_TOURISM_CONSUME_CHANGE){ if (adapter.getItemCount() == 0 || adapter.getData() == null){ binding.etTotalCost.setText("0"); binding.etTotalCost1.setText("0"); binding.etTraffic.setText("0"); binding.etStay.setText("0"); binding.etShopping.setText("0"); binding.etEntrance.setText("0"); binding.etEat.setText("0"); return; } Set dateSet = new HashSet<>(); double totalCost = 0,traffic = 0,stay = 0,shopping = 0,entrance = 0,eat = 0; for (DailyConsumeRecordBean dailyConsumeRecordBean : adapter.getData()) { dateSet.add(dailyConsumeRecordBean.getDate()); totalCost += dailyConsumeRecordBean.getDailyMoney(); if (dailyConsumeRecordBean.getConsumeRecordBeans() != null){ for (ConsumeRecordBean consumeRecordBean : dailyConsumeRecordBean.getConsumeRecordBeans()){ traffic += consumeRecordBean.getTraffic(); stay += consumeRecordBean.getStay(); shopping += consumeRecordBean.getShopping(); entrance += consumeRecordBean.getEntrance(); eat += consumeRecordBean.getEat(); } } } binding.etTotalCost.setText(BigDecimal.valueOf(totalCost).stripTrailingZeros().toPlainString()); binding.etTotalCost1.setText(BigDecimal.valueOf(totalCost).stripTrailingZeros().toPlainString()); binding.etTraffic.setText(BigDecimal.valueOf(traffic).stripTrailingZeros().toPlainString()); binding.etStay.setText(BigDecimal.valueOf(stay).stripTrailingZeros().toPlainString()); binding.etShopping.setText(BigDecimal.valueOf(shopping).stripTrailingZeros().toPlainString()); binding.etEntrance.setText(BigDecimal.valueOf(entrance).stripTrailingZeros().toPlainString()); binding.etEat.setText(BigDecimal.valueOf(eat).stripTrailingZeros().toPlainString()); binding.etTotalDay.setText(dateSet.size()+""); } }); } }