From 6c6d211701d931f269956c687040a1a0df69d4e9 Mon Sep 17 00:00:00 2001 From: fengjignqi <15192412330@163.com> Date: Mon, 25 May 2026 15:43:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=8E=92=E7=A8=8B=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ckkj/water/history/StatisticFragment.java | 14 +++- .../java/com/ckkj/water/network/Request.java | 10 +++ .../ckkj/water/plan/AddWaterPlanActivity.java | 12 ++- .../ckkj/water/plan/BindDeviceFragment.java | 10 +++ .../ckkj/water/plan/PlanDetailActivity.java | 12 +++ .../ckkj/water/plan/WaterConfigFragment.java | 68 +++++++++++++++- .../ckkj/water/plan/WaterPlanFragment.java | 42 +++++++--- .../plan/adapter/WaterPlanListAdapter.java | 66 +++++++-------- .../water/plan/mvp/WaterPlanContract.java | 13 ++- .../ckkj/water/plan/mvp/WaterPlanImpl.java | 80 ++++++++++++++++++- .../water/plan/mvp/WaterPlanPresenter.java | 80 ++++++++++++++++++- .../ckkj/water/utils/time/ZYTimeUtils.java | 32 ++++++++ 12 files changed, 388 insertions(+), 51 deletions(-) diff --git a/app/src/main/java/com/ckkj/water/history/StatisticFragment.java b/app/src/main/java/com/ckkj/water/history/StatisticFragment.java index c8e779e..1f0f4ed 100644 --- a/app/src/main/java/com/ckkj/water/history/StatisticFragment.java +++ b/app/src/main/java/com/ckkj/water/history/StatisticFragment.java @@ -9,10 +9,12 @@ import com.ckkj.water.plan.entity.WaterPlanWeekEntity; import com.ckkj.water.plan.mvp.WaterPlanContract; import com.ckkj.water.plan.mvp.WaterPlanPresenter; +import java.util.List; + /** * @author fengxiaoyang * @date 2026/5/16 - * @description TODO: 描述该类的作用 + * @description TODO: 统计界面 */ public class StatisticFragment extends BaseFragment implements WaterPlanContract.WaterPlanView { @@ -41,8 +43,18 @@ public class StatisticFragment extends BaseFragment list,int total) { + + } + @Override public void saveConfigSuccess(WaterPlanWeekEntity entity) { } + + @Override + public void updateConfigSuccess(WaterPlanWeekEntity entity) { + + } } diff --git a/app/src/main/java/com/ckkj/water/network/Request.java b/app/src/main/java/com/ckkj/water/network/Request.java index 4b7859e..b1c2df8 100644 --- a/app/src/main/java/com/ckkj/water/network/Request.java +++ b/app/src/main/java/com/ckkj/water/network/Request.java @@ -65,10 +65,20 @@ public interface Request { @PUT("app/v1/updataPassword") Observable updatePasswordByOld(@HeaderMap Map headMap, @Body RequestBody requestBody); + + //查询排程列表 + @GET("app/v1/schedulelist") + Observable>> scheduleList(@HeaderMap Map headMap); + + //添加排程信息 @POST("app/v1/addschedule") Observable> addSchedule(@HeaderMap Map headMap, @Body RequestBody requestBody); + //编辑排程,更新 + @PUT("app/v1/updataschedule") + Observable> updateSchedule(@HeaderMap Map headMap, @Body RequestBody requestBody); + //解绑信息 // 示例:ids array[string] //["2052921001527869441"] diff --git a/app/src/main/java/com/ckkj/water/plan/AddWaterPlanActivity.java b/app/src/main/java/com/ckkj/water/plan/AddWaterPlanActivity.java index d3af79d..36520de 100644 --- a/app/src/main/java/com/ckkj/water/plan/AddWaterPlanActivity.java +++ b/app/src/main/java/com/ckkj/water/plan/AddWaterPlanActivity.java @@ -101,7 +101,7 @@ public class AddWaterPlanActivity extends BaseActivity list,int total) { + + } + @Override public void saveConfigSuccess(WaterPlanWeekEntity entity) { } + @Override + public void updateConfigSuccess(WaterPlanWeekEntity entity) { + + } + } diff --git a/app/src/main/java/com/ckkj/water/plan/BindDeviceFragment.java b/app/src/main/java/com/ckkj/water/plan/BindDeviceFragment.java index de467fa..515198e 100644 --- a/app/src/main/java/com/ckkj/water/plan/BindDeviceFragment.java +++ b/app/src/main/java/com/ckkj/water/plan/BindDeviceFragment.java @@ -80,8 +80,18 @@ public class BindDeviceFragment extends BaseFragment list,int total) { + + } + @Override public void saveConfigSuccess(WaterPlanWeekEntity entity) { } + + @Override + public void updateConfigSuccess(WaterPlanWeekEntity entity) { + + } } diff --git a/app/src/main/java/com/ckkj/water/plan/PlanDetailActivity.java b/app/src/main/java/com/ckkj/water/plan/PlanDetailActivity.java index 7d83fe9..1cf00c1 100644 --- a/app/src/main/java/com/ckkj/water/plan/PlanDetailActivity.java +++ b/app/src/main/java/com/ckkj/water/plan/PlanDetailActivity.java @@ -16,6 +16,8 @@ import com.ckkj.water.plan.mvp.WaterPlanPresenter; import com.google.gson.Gson; import com.gyf.immersionbar.ImmersionBar; +import java.util.List; + /** * 排程详情页面 */ @@ -79,8 +81,18 @@ public class PlanDetailActivity extends BaseActivity list,int total) { + + } + @Override public void saveConfigSuccess(WaterPlanWeekEntity entity) { } + + @Override + public void updateConfigSuccess(WaterPlanWeekEntity entity) { + + } } diff --git a/app/src/main/java/com/ckkj/water/plan/WaterConfigFragment.java b/app/src/main/java/com/ckkj/water/plan/WaterConfigFragment.java index 1d784e0..85559d5 100644 --- a/app/src/main/java/com/ckkj/water/plan/WaterConfigFragment.java +++ b/app/src/main/java/com/ckkj/water/plan/WaterConfigFragment.java @@ -35,8 +35,9 @@ import java.util.List; public class WaterConfigFragment extends BaseFragment implements WaterPlanContract.WaterPlanView { private List mConfigList = new ArrayList<>(); - + //用户本地操作排程时的数据 private WaterPlanWeekEntity mConfigEntity; + //排程接口新增成功之后,接口返回的该排程在远端的数据信息 private WaterPlanWeekEntity mRemoteConfigEntity; private WaterPlanWeekAdapter mWeekAdapter; private String mPlanName = ""; @@ -114,8 +115,20 @@ public class WaterConfigFragment extends BaseFragment localDetails = mConfigEntity.getDetails(); + List remoteDetails = mRemoteConfigEntity.getDetails(); + if (localDetails == null || localDetails.size() != remoteDetails.size()) { + return true; + } + for (int i = 0; i < localDetails.size(); i++) { + WaterPlanWeekEntity.DetailsBean local = localDetails.get(i); + WaterPlanWeekEntity.DetailsBean remote = remoteDetails.get(i); + if (!equalsString(local.getStatus(), remote.getStatus()) + || !equalsString(local.getStartTime(),ZYTimeUtils.timeWithoutMillis(remote.getStartTime())) + || local.getDurationMin() != remote.getDurationMin()) { + return true; + } + } + return false; + } + private boolean equalsString(String s1, String s2) { + if (s1 == null && s2 == null) return true; + if (s1 == null || s2 == null) return false; + return s1.equals(s2); + } /** * 检查配置信息是否完成 @@ -216,10 +262,23 @@ public class WaterConfigFragment extends BaseFragment list,int total) { + + } + @Override public void saveConfigSuccess(WaterPlanWeekEntity entity) { ToastUtil.showShort(mContext, "排程新增成功"); isConfigSave = true; + // 把接口返回的 ID 设置到 mConfigEntity,便于后续更新操作 + mConfigEntity.setId(entity.getId()); + // 把 details 中每个 bean 的 id 也设置到 mConfigEntity,便于后续更新操作 + if (entity.getDetails() != null && mConfigEntity.getDetails() != null) { + for (int i = 0; i < entity.getDetails().size() && i < mConfigEntity.getDetails().size(); i++) { + mConfigEntity.getDetails().get(i).setId(entity.getDetails().get(i).getId()); + } + } //接口请求之后返回的数据,方便后面做对比 mRemoteConfigEntity = entity; if (getActivity() instanceof AddWaterPlanActivity) { @@ -227,6 +286,11 @@ public class WaterConfigFragment extends BaseFragment implements WaterPlanContract.WaterPlanView { -// private List mDevList = new ArrayList<>(); -// private WaterPlanListAdapter mAdapter; + private List mPlanList = new ArrayList<>(); + private WaterPlanListAdapter mAdapter; @Override public void initData(Bundle state) { @@ -43,14 +45,16 @@ public class WaterPlanFragment extends BaseFragment list,int total) { + hideDialogLoading(); + mPlanList = list; + mAdapter.setNewData(list); + } + + @Override public WaterPlanPresenter createPresenter() { return new WaterPlanPresenter(new WaterPlanImpl()); @@ -82,7 +94,8 @@ public class WaterPlanFragment extends BaseFragment { -// private Context mContext; -// -// public WaterPlanListAdapter(Context context, int layoutResId, @Nullable List data) { -// super(layoutResId, data); -// this.mContext = context; -// } -// -// @Override -// protected void convert(BaseViewHolder helper, WaterPlanWeekEntity.DeviceEntity item) { -// helper.setText(R.id.tv_device_name, item.getDeviceName()); -// helper.setText(R.id.tv_device_serial, item.getDeviceCode()); -// } -// -// -// -//} +package com.ckkj.water.plan.adapter; + +import android.content.Context; +import android.widget.CheckBox; + +import androidx.annotation.Nullable; + +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.ckkj.water.R; +import com.ckkj.water.plan.entity.WaterPlanWeekEntity; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class WaterPlanListAdapter extends BaseQuickAdapter { + private Context mContext; + + public WaterPlanListAdapter(Context context, int layoutResId, @Nullable List data) { + super(layoutResId, data); + this.mContext = context; + } + + @Override + protected void convert(BaseViewHolder helper, WaterPlanWeekEntity item) { + helper.setText(R.id.tv_device_name, item.getName()); + helper.setText(R.id.tv_device_serial, item.getId()); + } + + + +} diff --git a/app/src/main/java/com/ckkj/water/plan/mvp/WaterPlanContract.java b/app/src/main/java/com/ckkj/water/plan/mvp/WaterPlanContract.java index 0a8ed7d..9a4d607 100644 --- a/app/src/main/java/com/ckkj/water/plan/mvp/WaterPlanContract.java +++ b/app/src/main/java/com/ckkj/water/plan/mvp/WaterPlanContract.java @@ -5,18 +5,29 @@ import com.ckkj.water.plan.entity.WaterPlanWeekEntity; import org.json.JSONObject; +import java.util.List; +import java.util.Map; + public class WaterPlanContract { public interface CallBack { - void success(T msg); + void success(T msg,int total); void fail(String msg); } public interface DataModel{ + //查询排程列表 + void getWaterConfigList(Map map,CallBack callBack); //新增排程 void saveConfig(JSONObject json,CallBack callBack); + + void updateConfig(JSONObject json,CallBack callBack); } public interface WaterPlanView extends IView { + //查询排程列表成功 + void getWaterConfigListSuccess(List list,int total); //排程保存成功g void saveConfigSuccess(WaterPlanWeekEntity entity); + //排程更新成功 + void updateConfigSuccess(WaterPlanWeekEntity entity); } } diff --git a/app/src/main/java/com/ckkj/water/plan/mvp/WaterPlanImpl.java b/app/src/main/java/com/ckkj/water/plan/mvp/WaterPlanImpl.java index 5649d32..578cf31 100644 --- a/app/src/main/java/com/ckkj/water/plan/mvp/WaterPlanImpl.java +++ b/app/src/main/java/com/ckkj/water/plan/mvp/WaterPlanImpl.java @@ -1,6 +1,7 @@ package com.ckkj.water.plan.mvp; import com.ckkj.water.device.mvp.DeviceContract; +import com.ckkj.water.index.entity.IndexDeviceEntity; import com.ckkj.water.network.BaseBean; import com.ckkj.water.network.LoginStateManager; import com.ckkj.water.network.NetWorkManager; @@ -8,6 +9,9 @@ import com.ckkj.water.plan.entity.WaterPlanWeekEntity; import org.json.JSONObject; +import java.util.List; +import java.util.Map; + import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.annotations.NonNull; @@ -16,6 +20,40 @@ import io.reactivex.schedulers.Schedulers; public class WaterPlanImpl implements WaterPlanContract.DataModel{ + /** + * 查询排程列表 + * @param map + * @param callBack + */ + @Override + public void getWaterConfigList(Map map, WaterPlanContract.CallBack callBack) { + NetWorkManager.getRequest().scheduleList(NetWorkManager.getToken()) + .subscribeOn(Schedulers.io()) + .unsubscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer>>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + } + + @Override + public void onNext(@NonNull BaseBean> bean) { + if (bean.getCode() == 200) { + callBack.success(bean.getRows(),bean.getTotal()); + } + } + + @Override + public void onError(@NonNull Throwable e) { + callBack.fail(e.getMessage()); + } + + @Override + public void onComplete() { + } + }); + } + /** * 新增排程 * @param json @@ -36,7 +74,47 @@ public class WaterPlanImpl implements WaterPlanContract.DataModel{ @Override public void onNext(@NonNull BaseBean bean) { if (bean.getCode() == 200) { - callBack.success(bean.getData()); + callBack.success(bean.getData(),0); + } else { + callBack.fail(bean.getMessage()); + } + } + + @Override + public void onError(@NonNull Throwable e) { + callBack.fail(e.getMessage()); + } + + @Override + public void onComplete() { + } + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 更新排程信息 + * @param json + * @param callBack + */ + @Override + public void updateConfig(JSONObject json, WaterPlanContract.CallBack callBack) { + try { + NetWorkManager.getRequest().updateSchedule(NetWorkManager.getToken(),NetWorkManager.toRequestBody(json)) + .subscribeOn(Schedulers.io()) + .unsubscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + } + + @Override + public void onNext(@NonNull BaseBean bean) { + if (bean.getCode() == 200) { + callBack.success(bean.getData(),0); } else { callBack.fail(bean.getMessage()); } diff --git a/app/src/main/java/com/ckkj/water/plan/mvp/WaterPlanPresenter.java b/app/src/main/java/com/ckkj/water/plan/mvp/WaterPlanPresenter.java index f670a8d..51837d2 100644 --- a/app/src/main/java/com/ckkj/water/plan/mvp/WaterPlanPresenter.java +++ b/app/src/main/java/com/ckkj/water/plan/mvp/WaterPlanPresenter.java @@ -2,10 +2,13 @@ package com.ckkj.water.plan.mvp; import com.ckkj.water.AppConfig; import com.ckkj.water.base.BasePresenter; +import com.ckkj.water.base.entity.MineUserInfoBean; import com.ckkj.water.device.mvp.DeviceContract; import com.ckkj.water.device.mvp.DeviceImpl; import com.ckkj.water.login.mvp.LoginContract; import com.ckkj.water.login.mvp.LoginPresenter; +import com.ckkj.water.mine.mvp.MineContract; +import com.ckkj.water.mine.mvp.MinePresenter; import com.ckkj.water.network.BaseBean; import com.ckkj.water.plan.entity.WaterPlanWeekEntity; @@ -13,6 +16,10 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + public class WaterPlanPresenter extends BasePresenter { private WaterPlanImpl impl; @@ -20,6 +27,30 @@ public class WaterPlanPresenter extends BasePresenter map = new HashMap<>(); + impl.getWaterConfigList(map, new WaterPlanContract.CallBack>() { + + @Override + public void success(List List, int total) { + if(WaterPlanPresenter.this.getView() != null){ + WaterPlanPresenter.this.getView().getWaterConfigListSuccess(List, total); + } + } + + @Override + public void fail(String msg) { + if(WaterPlanPresenter.this.getView() != null){ + WaterPlanPresenter.this.getView().showError(msg); + } + } + }); + } + /** * 保存排程信息 * @param entity @@ -41,8 +72,9 @@ public class WaterPlanPresenter extends BasePresenter() { + @Override - public void success(WaterPlanWeekEntity bean) { + public void success(WaterPlanWeekEntity bean, int total) { if(WaterPlanPresenter.this.getView() != null){ WaterPlanPresenter.this.getView().saveConfigSuccess(bean); } @@ -60,4 +92,50 @@ public class WaterPlanPresenter extends BasePresenter() { + + @Override + public void success(WaterPlanWeekEntity bean, int total) { + if(WaterPlanPresenter.this.getView() != null){ + WaterPlanPresenter.this.getView().updateConfigSuccess(bean); + } + } + + @Override + public void fail(String msg) { + if(WaterPlanPresenter.this.getView() != null){ + WaterPlanPresenter.this.getView().showError(msg); + } + } + }); + + } catch (JSONException e) { + throw new RuntimeException(e); + } + } + + } diff --git a/app/src/main/java/com/ckkj/water/utils/time/ZYTimeUtils.java b/app/src/main/java/com/ckkj/water/utils/time/ZYTimeUtils.java index 9886d6f..29a0dfa 100644 --- a/app/src/main/java/com/ckkj/water/utils/time/ZYTimeUtils.java +++ b/app/src/main/java/com/ckkj/water/utils/time/ZYTimeUtils.java @@ -257,6 +257,38 @@ public class ZYTimeUtils { } catch (Exception e) { e.printStackTrace(); } + return ""; + } + + /** + * yyyy-MM-dd HH:mm:ss 转换成 yyyy-MM-dd HH:mm + * @param time + * @return + */ + public static String timeWithoutMillis(String time) { + + if (TextUtils.isEmpty(time)) { + return null; + } + try { + SimpleDateFormat sourceFormat = + new SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss", + Locale.getDefault()); + + SimpleDateFormat targetFormat = + new SimpleDateFormat( + "yyyy-MM-dd HH:mm", + Locale.getDefault()); + + Date date = sourceFormat.parse(time); + + return date == null ? "" : targetFormat.format(date); + + } catch (Exception e) { + + e.printStackTrace(); + } return ""; }