| | |
| | | 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 androidx.recyclerview.widget.GridLayoutManager; |
| | | |
| | | 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.adapter.ImageRvAdapter; |
| | | import com.application.zhangshi_app_android.bean.PrivacyBean; |
| | | 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.ActivityPrivacyDetailBinding; |
| | | 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.Arrays; |
| | | import java.util.Calendar; |
| | | import java.util.HashSet; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | | |
| | | import io.reactivex.functions.Consumer; |
| | | |
| | | /** |
| | | * @author Ljj |
| | |
| | | * @desc |
| | | */ |
| | | public class TourismDetailActivity extends DLBaseActivity<ActivityTourismDetailBinding,TourismDetailActivityViewModel> { |
| | | |
| | | private int type;// 0 查看可修改删除 1 新增 2 直接修改 |
| | | private PopupWindow popupWindow; |
| | | private DailyConsumeRecordRvAdapter adapter; |
| | | |
| | | @Override |
| | |
| | | |
| | | @Override |
| | | public void initParam() { |
| | | if (getIntent().hasExtra("bean")){ |
| | | viewModel.getBeanLiveData().setValue((TourismBean) getIntent().getSerializableExtra("bean")); |
| | | 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); |
| | | adapter = new DailyConsumeRecordRvAdapter(this,viewModel); |
| | | LinearItemDecoration itemDecoration = new LinearItemDecoration(); |
| | | itemDecoration.setBottomSpace(ScreenSizeUtils.dip2px(this,20)); |
| | | binding.rvDailyConsumeRecord.addItemDecoration(itemDecoration); |
| | | binding.rvDailyConsumeRecord.setNestedScrollingEnabled(false); |
| | | setIsEdited(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 initLiveDataObserve() { |
| | | viewModel.getBeanLiveData().observe(this,bean -> { |
| | | if (bean!=null){ |
| | | adapter.setData(bean.getDailyConsumeRecordBeans()); |
| | | if (bean.getDetailList()==null){ |
| | | return; |
| | | } |
| | | //根据时间分组 |
| | | Set<String> set = new HashSet<>(); |
| | | for (ConsumeRecordBean consumeRecordBean : bean.getDetailList()) { |
| | | set.add(consumeRecordBean.getHappenTime()); |
| | | } |
| | | List<DailyConsumeRecordBean> list = new ArrayList<>(); |
| | | for (String s : set) { |
| | | DailyConsumeRecordBean dailyConsumeRecordBean = new DailyConsumeRecordBean(); |
| | | dailyConsumeRecordBean.setDate(s); |
| | | List<ConsumeRecordBean> 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); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | public void setIsEdited(boolean isEdited){ |
| | | disableAllEditText(getContentView(),isEdited); |
| | | } |
| | | public void disableAllEditText(ViewGroup viewGroup, boolean isEdited) { |
| | | for (int i = 0; i < viewGroup.getChildCount(); i++) { |
| | | View child = viewGroup.getChildAt(i); |
| | | if (child instanceof ViewGroup) { |
| | | disableAllEditText((ViewGroup) child,isEdited); |
| | | } else if (child instanceof EditText) { |
| | | child.setEnabled(isEdited); |
| | | child.setFocusable(isEdited); |
| | | child.setFocusableInTouchMode(isEdited); |
| | | if (!isEdited){ |
| | | child.clearFocus(); |
| | | viewModel.getTypeLiveData().observe(this,operateType -> { |
| | | if (operateType){ |
| | | if (type == 1) { |
| | | binding.ivOperate.setOnClickListener(v -> { |
| | | if (adapter.getData() != null){ |
| | | List<ConsumeRecordBean> 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<ConsumeRecordBean> 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<String> 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()+""); |
| | | } |
| | | }); |
| | | } |
| | | } |