时间段合并

tags/yfai-mes-ext-v1.0
王杰 1 year ago
parent 777743541c
commit c4deb833d7

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

Loading…
Cancel
Save