time配置校验时间冲突
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user