time配置校验时间冲突

This commit is contained in:
fengjignqi
2026-05-29 08:17:06 +08:00
parent 644a68d865
commit 9318646aa4

View File

@@ -38,9 +38,11 @@ import com.yanzhenjie.recyclerview.SwipeMenuItem;
import com.yanzhenjie.recyclerview.SwipeRecyclerView;
import com.yanzhenjie.recyclerview.widget.DefaultItemDecoration;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
public class WaterConfigFragment_copy extends BaseFragment<WaterConfigFragmentLayoutCopyBinding, WaterPlanPresenter>
implements WaterPlanContract.WaterPlanView {
@@ -154,7 +156,13 @@ public class WaterConfigFragment_copy extends BaseFragment<WaterConfigFragmentLa
ToastUtil.showShort(mContext, "请至少配置一天的时间");
return;
}
//TODO 这里需要校验一下TimeData中的时间设定的时间开始时间+浇水时长,不能与当天其他时间设定的时间冲突,或者重合。需要避开。
// 校验每一天内的时间是否有冲突
String conflictMsg = checkTimeConflict();
if (conflictMsg != null) {
ToastUtil.showShort(mContext, conflictMsg);
return;
}
isConfigSubmitted = true;
break;
}
@@ -167,6 +175,54 @@ public class WaterConfigFragment_copy extends BaseFragment<WaterConfigFragmentLa
public void commitConfig() {
}
/**
* 校验每一天内的时间配置是否有冲突
* @return null表示无冲突返回具体提示信息表示有冲突
*/
private String checkTimeConflict() {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm", Locale.getDefault());
for (int dayIndex = 0; dayIndex < weekList.size(); dayIndex++) {
WaterPlanWeekEntity.DetailsBean dayBean = weekList.get(dayIndex);
List<WaterPlanWeekEntity.TimeDataBean> timeDataList = dayBean.getTimeData();
if (timeDataList == null || timeDataList.isEmpty()) {
continue;
}
// 收集该天所有有效的时间段(开始时间 + 结束时间)
List<long[]> periods = new ArrayList<>();
for (WaterPlanWeekEntity.TimeDataBean timeData : timeDataList) {
if (TextUtils.isEmpty(timeData.getStartTime()) || timeData.getDurationMin() <= 0) {
continue;
}
try {
Date startDate = sdf.parse(timeData.getStartTime());
long startMinutes = startDate.getHours() * 60 + startDate.getMinutes();
long endMinutes = startMinutes + timeData.getDurationMin();
periods.add(new long[]{startMinutes, endMinutes});
} catch (Exception e) {
e.printStackTrace();
}
}
// 检查是否有冲突
for (int i = 0; i < periods.size(); i++) {
for (int j = i + 1; j < periods.size(); j++) {
long[] p1 = periods.get(i);
long[] p2 = periods.get(j);
// 冲突条件:一个段的开始时间在另一个段的结束时间之前(即有重叠)
// 不冲突p1.end <= p2.start 或 p2.end <= p1.start
if (!(p1[1] <= p2[0] || p2[1] <= p1[0])) {
String dayName = dayBean.getWeekName();
return dayName + "的时间配置存在冲突,请调整";
}
}
}
}
return null;
}
/**
* 选择开始时间
* @param position