| | |
| | | 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.OptionPicker; |
| | | import com.github.gzuliyujiang.wheelpicker.annotation.DateMode; |
| | | import com.github.gzuliyujiang.wheelpicker.contract.OnDatePickedListener; |
| | | import com.github.gzuliyujiang.wheelpicker.contract.OnOptionPickedListener; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.Calendar; |
| | | import java.util.HashSet; |
| | | import java.util.List; |
| | |
| | | public class TourismDetailActivity extends DLBaseActivity<ActivityTourismDetailBinding,TourismDetailActivityViewModel> { |
| | | private int type;// 0 查看可修改删除 1 新增 2 直接修改 |
| | | private PopupWindow popupWindow; |
| | | private DailyConsumeRecordRvAdapter adapter; |
| | | |
| | | @Override |
| | | public int getLayoutId() { |
| | |
| | | |
| | | @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("新增旅游费用记录"); |
| | |
| | | } |
| | | }); |
| | | datePicker.show(); |
| | | |
| | | } |
| | | }); |
| | | binding.ivAddDailyConsumeRecord.setOnClickListener(new View.OnClickListener() { |
| | | binding.etWhereabouts.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() { |
| | | List<String> list = Arrays.asList("国内","国外"); |
| | | OptionPicker picker = getOptionPicker(list); |
| | | picker.setTitle("选择去向"); |
| | | picker.setOnOptionPickedListener(new OnOptionPickedListener() { |
| | | @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); |
| | | public void onOptionPicked(int position, Object item) { |
| | | binding.etWhereabouts.setText(item.toString()); |
| | | binding.etWhereabouts.clearFocus(); |
| | | } |
| | | }); |
| | | datePicker.show(); |
| | | picker.show(); |
| | | } |
| | | }); |
| | | binding.etTourismNature.setOnClickListener(new View.OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | List<String> list = Arrays.asList("公费","自费","邀请"); |
| | | OptionPicker picker = getOptionPicker(list); |
| | | picker.setTitle("选择旅游性质"); |
| | | picker.setOnOptionPickedListener(new OnOptionPickedListener() { |
| | | @Override |
| | | public void onOptionPicked(int position, Object item) { |
| | | binding.etTourismNature.setText(item.toString()); |
| | | binding.etTourismNature.clearFocus(); |
| | | } |
| | | }); |
| | | picker.show(); |
| | | } |
| | | }); |
| | | binding.etTourismWay.setOnClickListener(new View.OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | List<String> list = Arrays.asList("参团","自由行","自驾游","半自由半自驾","其他"); |
| | | OptionPicker picker = getOptionPicker(list); |
| | | picker.setTitle("选择旅游方式"); |
| | | picker.setOnOptionPickedListener(new OnOptionPickedListener() { |
| | | @Override |
| | | public void onOptionPicked(int position, Object item) { |
| | | binding.etTourismWay.setText(item.toString()); |
| | | binding.etTourismWay.clearFocus(); |
| | | } |
| | | }); |
| | | picker.show(); |
| | | } |
| | | }); |
| | | } |
| | |
| | | @Override |
| | | public void initLiveDataObserve() { |
| | | viewModel.getBeanLiveData().observe(this,bean -> { |
| | | if (bean!=null){ |
| | | 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); |
| | | } |
| | | |
| | | }); |
| | | 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(); |
| | | }); |
| | | } |
| | |
| | | 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()+""); |
| | | } |
| | | }); |
| | | } |