|
|
|
@ -20,14 +20,12 @@ public class JxMergeTimeSlotsService implements IJxMergeTimeSlotsService {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<JxMergeTimeSlotsModel> mergeTimeSlots(List<JxMergeTimeSlotsModel> timeSlots) {
|
|
|
|
|
// 如果只剩一个时间段直接返回
|
|
|
|
|
if (timeSlots.size() == 1) return timeSlots;
|
|
|
|
|
for (int i = 0; i < timeSlots.size(); i++) {
|
|
|
|
|
for (int j = i + 1; j < timeSlots.size(); j++) {
|
|
|
|
|
JxMergeTimeSlotsModel timeSlot1 = timeSlots.get(i);
|
|
|
|
|
JxMergeTimeSlotsModel timeSlot2 = timeSlots.get(j);
|
|
|
|
|
JxMergeTimeSlotsModel mergeSlot = compareToMarge(timeSlot1, timeSlot2);
|
|
|
|
|
// 如果两个时间段能合并则递归继续合并
|
|
|
|
|
if (null != mergeSlot) {
|
|
|
|
|
timeSlots.remove(timeSlot1);
|
|
|
|
|
timeSlots.remove(timeSlot2);
|
|
|
|
@ -40,12 +38,9 @@ public class JxMergeTimeSlotsService implements IJxMergeTimeSlotsService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private JxMergeTimeSlotsModel compareToMarge(JxMergeTimeSlotsModel timeSlot1, JxMergeTimeSlotsModel timeSlot2) {
|
|
|
|
|
// 如果两个时间段完全没有交集则直接返回
|
|
|
|
|
if (timeSlot1.getEndDate().before(timeSlot2.getStartDate()) || timeSlot1.getStartDate().after(timeSlot2.getEndDate())) return null;
|
|
|
|
|
// 如果有完全包含则去掉小的那个
|
|
|
|
|
else if (!timeSlot1.getStartDate().after(timeSlot2.getStartDate()) && !timeSlot1.getEndDate().before(timeSlot2.getEndDate())) return timeSlot1;
|
|
|
|
|
else if (!timeSlot2.getStartDate().after(timeSlot1.getStartDate()) && !timeSlot2.getEndDate().before(timeSlot1.getEndDate())) return timeSlot2;
|
|
|
|
|
// 有交集则合并
|
|
|
|
|
else if (timeSlot1.getStartDate().before(timeSlot2.getStartDate()) && timeSlot1.getEndDate().before(timeSlot2.getEndDate())) return new JxMergeTimeSlotsModel().copy(timeSlot1).mergeEnd(timeSlot2.getEndTime(), timeSlot2.getEndDate());
|
|
|
|
|
else if (timeSlot2.getStartDate().before(timeSlot1.getStartDate()) && timeSlot2.getEndDate().before(timeSlot1.getEndDate())) return new JxMergeTimeSlotsModel().copy(timeSlot2).mergeEnd(timeSlot1.getEndTime(), timeSlot1.getEndDate());
|
|
|
|
|
else return null;
|
|
|
|
|