package com.application.zhangshi_app_android.ui.function; import static com.android.app_base.base.BaseConfig.CODE_SUCCESS; import android.app.Application; import androidx.annotation.NonNull; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import com.android.app_base.base.StateViewEnum; import com.android.app_base.base.viewmodel.BaseViewModel; import com.android.app_base.http.ResultData; import com.android.app_base.utils.RxUtils; import com.application.zhangshi_app_android.bean.MeetingStaBean; import com.application.zhangshi_app_android.bean.MeetingStaRequestBean; import com.application.zhangshi_app_android.bean.PageResponseBean; import com.application.zhangshi_app_android.data.DataRepository; import java.util.ArrayList; import java.util.List; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; import io.reactivex.functions.Action; /** * @author Ljj * @date 2023.03.18. 10:00 * @desc 家大事记 viewmodel */ public class MeetingStaActivityViewModel extends BaseViewModel { private MutableLiveData> checkListLiveData;//选中的数据 private MutableLiveData> dataListLiveData;//所有数据 private MutableLiveData operateTypeLiveData;//右上角操作框 操作类型 0 弹出选择操作 1.完成 2.删除 private MutableLiveData requestBeanLiveData;//请求参数 private MutableLiveData> moreListLiveData;//下拉加载数据 private MutableLiveData> finishDeleteListLiveData;//已经完成删除的数据,用于adapter的remove操作 //创建并初始化ViewModel public MeetingStaActivityViewModel(@NonNull Application application) { super(application); } //DataRepository 是一个数据仓库类,负责管理数据的获取和存储, // 该方法通过调用 DataRepository.getInstance() 来获取 DataRepository 的单例实例,并将其返回model。 @Override protected DataRepository initModel() { return DataRepository.getInstance(); } /** * 获取家大事 * 记 */ //getRequestBeanLiveData().getValue() 检查请求数据的 LiveData 是否为空。 // 如果为空,则创建一个新的MeetingRequestBean 对象,并将其设置为 LiveData 的值,以确保请求数据不为 null。 public void getMeetingSta() { if (getRequestBeanLiveData().getValue() == null){ getRequestBeanLiveData().setValue(new MeetingStaRequestBean()); } //设置请求数据对象的页码为 1,表示要获取第一页的数据。 getRequestBeanLiveData().getValue().setPageNum(1); //通过model(ViewModel 中的数据仓库对象)发起网络请求,并将请求数据转换为 Map 类型,以便发送给服务器。 model.getMeetingSta(getRequestBeanLiveData().getValue().toMap()) //应用线程调度器,确保观察者在正确的线程上运行。 .compose(RxUtils.schedulersTransformer()) //订阅这个网络请求的结果 .subscribe(new Observer>>() { @Override //将订阅对象添加到 addSubscribe() 中,以便在不再需要时取消订阅。 //创建 Disposable 对象来管理订阅 // 使用 Disposable,可以有效地管理异步操作的生命周期,确保资源在不再需要时被正确释放。 public void onSubscribe(Disposable d) { addSubscribe(d); } @Override //onNext()处理成功获取数据的情况 public void onNext(ResultData> data) { if (data.getCode() == CODE_SUCCESS){ if (data.getData().getData().isEmpty()){ //更新界面状态为 StateViewEnum.DATA_NULL changeStateView(StateViewEnum.DATA_NULL); }else { //隐藏状态视图并将数据列表发布到 dataListLiveData changeStateView(StateViewEnum.HIDE); dataListLiveData.postValue(data.getData().getData ()); } //如果返回的数据不成功,则将服务器返回的消息发布到 messageLiveData,以便通知用户。 }else { messageLiveData.postValue(data.getMsg()); } } @Override //onError()处理发生错误的情况,将错误消息发布到 messageLiveData。 public void onError(Throwable e) { messageLiveData.postValue(e.getMessage()); } @Override public void onComplete() { } }); } /** * 加载更多 */ public void getMoreMeeting() { if (getRequestBeanLiveData().getValue() == null){ getRequestBeanLiveData().setValue(new MeetingStaBean()); } getRequestBeanLiveData().getValue().setPageNum(getRequestBeanLiveData().getValue().getPageNum() + 1); model.getMeetingSta(getRequestBeanLiveData().getValue().toMap()) .compose(RxUtils.schedulersTransformer()) .doFinally(new Action() { @Override public void run() throws Exception { changeStateView(StateViewEnum.DATA_FINISH); } }) .subscribe(new Observer>>() { @Override public void onSubscribe(Disposable d) { addSubscribe(d); } @Override public void onNext(ResultData> data) { if (data.getCode() == CODE_SUCCESS){ if (data.getData().getData().isEmpty()){ messageLiveData.postValue("没有更多数据了"); }else { changeStateView(StateViewEnum.HIDE); moreListLiveData.postValue(data.getData().getData()); } }else { messageLiveData.postValue(data.getMsg()); } } @Override public void onError(Throwable e) { messageLiveData.postValue(e.getMessage()); } @Override public void onComplete() { } }); } /** * 删除家大事记 */ public void deleteCheckList() { List deleteList = getCheckListLiveData().getValue(); if (deleteList == null){ return; } StringBuffer sb = new StringBuffer(); deleteList.forEach(MeetingStaBean -> sb.append(MeetingStaBean.getId()).append(",")); sb.deleteCharAt(sb.length()-1); model.deleteMeetingSta(sb.toString()) .compose(RxUtils.schedulersTransformer()) .subscribe(new Observer>() { @Override public void onSubscribe(Disposable d) { addSubscribe(d); } @Override public void onNext(ResultData stringResultData) { if (stringResultData.getCode() == CODE_SUCCESS){ messageLiveData.postValue("删除成功"); finishDeleteListLiveData.postValue(checkListLiveData.getValue()); getCheckListLiveData().postValue(new ArrayList<>()); }else { messageLiveData.postValue(stringResultData.getMsg()); } } @Override public void onError(Throwable e) { messageLiveData.postValue(e.getMessage()); } @Override public void onComplete() { } }); } /** * 删除单个数据 */ public void deleteItem(MeetingStaBean bean) { model.deleteMeetingSta(String.valueOf(bean.getId())) .compose(RxUtils.schedulersTransformer()) .subscribe(new Observer>() { @Override public void onSubscribe(Disposable d) { addSubscribe(d); } @Override public void onNext(ResultData stringResultData) { if (stringResultData.getCode() == CODE_SUCCESS){ List list = new ArrayList<>(); list.add(bean); finishDeleteListLiveData.postValue(list); messageLiveData.postValue("删除成功"); }else { messageLiveData.postValue(stringResultData.getMsg()); } } @Override public void onError(Throwable e) { messageLiveData.postValue(e.getMessage()); } @Override public void onComplete() { } }); } public MutableLiveData> getCheckListLiveData() { if (checkListLiveData==null){ checkListLiveData = new MutableLiveData<>(); checkListLiveData.postValue(new ArrayList<>()); } if (checkListLiveData.getValue() == null){ checkListLiveData.postValue(new ArrayList<>()); } return checkListLiveData; } public void setCheckListLiveData(MutableLiveData> checkListLiveData) { this.checkListLiveData = checkListLiveData; } @NonNull //NonNull 用于标记方法参数、返回值、字段或方法的返回类型不允许为 null //getRequestBeanLiveData() 获取一个包含MeetingRequestBean 数据的 MutableLiveData 对象。 public MutableLiveData getRequestBeanLiveData() { if (requestBeanLiveData == null){ requestBeanLiveData = new MutableLiveData<>(); } if (requestBeanLiveData.getValue() == null){ requestBeanLiveData.setValue(new MeetingStaRequestBean()); } return requestBeanLiveData; } public void setRequestBeanLiveData(MutableLiveData requestBeanLiveData) { this.requestBeanLiveData = requestBeanLiveData; } public MutableLiveData> getDataListLiveData() { if (dataListLiveData == null){ dataListLiveData = new MutableLiveData<>(); } return dataListLiveData; } public void setDataListLiveData(MutableLiveData> dataListLiveData) { this.dataListLiveData = dataListLiveData; } @NonNull public MutableLiveData> getMoreListLiveData() { if (moreListLiveData == null){ moreListLiveData = new MutableLiveData<>(); } return moreListLiveData; } public void setMoreListLiveData(MutableLiveData> moreListLiveData) { this.moreListLiveData = moreListLiveData; } @NonNull public MutableLiveData getOperateTypeLiveData() { if (operateTypeLiveData == null){ operateTypeLiveData = new MutableLiveData<>(); operateTypeLiveData.setValue(0); } return operateTypeLiveData; } public void setOperateTypeLiveData(MutableLiveData operateTypeLiveData) { this.operateTypeLiveData = operateTypeLiveData; } public LiveData> getFinishDeleteListLiveData() { if (finishDeleteListLiveData == null){ finishDeleteListLiveData = new MutableLiveData<>(); } return finishDeleteListLiveData; } public void setFinishDeleteListLiveData(MutableLiveData> finishDeleteListLiveData) { this.finishDeleteListLiveData = finishDeleteListLiveData; } /** * 改变排序 * @param b true 降序 false 升序 */ // public void changeOrder(boolean b) { // List list = getDataListLiveData().getValue(); // if (list == null || list.isEmpty()){ // return; // } // if (b) { // // 从新到旧,null排最后 // list.sort((o1, o2) -> { // String happenTime1 = o1.getHappenTime(); // String happenTime2 = o2.getHappenTime(); // if (TextUtils.isEmpty(happenTime1) && TextUtils.isEmpty(happenTime2)) { // return 0; // } else if (TextUtils.isEmpty(happenTime1)) { // return 1; // } else if (TextUtils.isEmpty(happenTime2)) { // return -1; // } else { // Date date1 = Utils.parseDate(happenTime1); // Date date2 = Utils.parseDate(happenTime2); // if (date1 != null && date2 != null) { // return date2.compareTo(date1); // } // return 0; // } // }); // } else { // // 从旧到新,null排最前 // list.sort((o1, o2) -> { // String happenTime1 = o1.getHappenTime(); // String happenTime2 = o2.getHappenTime(); // if (TextUtils.isEmpty(happenTime1) && TextUtils.isEmpty(happenTime2)) { // return 0; // } else if (TextUtils.isEmpty(happenTime1)) { // return -1; // } else if (TextUtils.isEmpty(happenTime2)) { // return 1; // } else { // Date date1 = Utils.parseDate(happenTime1); // Date date2 = Utils.parseDate(happenTime2); // if (date1 != null && date2 != null) { // return date1.compareTo(date2); // } // return 0; // } // }); // } // getDataListLiveData().setValue(list); // } /** * 本家数据 置顶 */ public void ownTop(){ List list = getDataListLiveData().getValue(); if (list == null || list.isEmpty()){ return; } //根据ownData值为1的 放到前面 list.sort((o1, o2) -> { if (o1.getOwnData() == 1 && o2.getOwnData() == 0) { return -1; } else if (o1.getOwnData() == 0 && o2.getOwnData() == 1) { return 1; } return 0; }); getDataListLiveData().setValue(list); } }