新增预约添加校验
This commit is contained in:
parent
5e77d13b56
commit
a2f59bf1b2
|
@ -0,0 +1,96 @@
|
|||
package org.dromara.common.core.utils;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @Description TODO
|
||||
* @Auther caojiawei
|
||||
* @Date 2019/7/5 10:44
|
||||
* @Version 1.0
|
||||
**/
|
||||
public class TimeBucket {
|
||||
private static final ThreadLocal<DateFormat> FORMATS = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
|
||||
|
||||
private final Date start;
|
||||
|
||||
private final Date end;
|
||||
|
||||
public TimeBucket(Date start, Date end) {
|
||||
if (start.after(end)) {
|
||||
throw new IllegalArgumentException("时间段无效(开始日期需要小于结束日期)");
|
||||
}
|
||||
this.start = start;
|
||||
this.end = end;
|
||||
}
|
||||
|
||||
public TimeBucket(String start, String end) throws ParseException {
|
||||
this(parse(start), parse(end));
|
||||
}
|
||||
|
||||
public TimeBucket(long startTime, long endTime) {
|
||||
this(new Date(startTime), new Date(endTime));
|
||||
}
|
||||
|
||||
/**
|
||||
* TimeBucket会返回重叠的时间段
|
||||
* 若返回null说明没有重叠的时间段
|
||||
*
|
||||
* @param buckets 时间段
|
||||
* @return
|
||||
*/
|
||||
public static TimeBucket union(TimeBucket... buckets) {
|
||||
//长度为1无需判断
|
||||
if (buckets == null || buckets.length <= 1) {
|
||||
return null;
|
||||
}
|
||||
for (int i = 0; i < buckets.length - 1; i++) {
|
||||
long start = buckets[i].getStartTime();
|
||||
long end = buckets[i].getEndTime();
|
||||
for (int j = i + 1; j < buckets.length; j++) {
|
||||
if (buckets[j].getStartTime() > start) {
|
||||
start = buckets[j].getStartTime();
|
||||
}
|
||||
if (buckets[j].getEndTime() < end) {
|
||||
end = buckets[j].getEndTime();
|
||||
}
|
||||
if (start < end) {
|
||||
return new TimeBucket(start, end);
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public Date getStart() {
|
||||
return start;
|
||||
}
|
||||
|
||||
public Date getEnd() {
|
||||
return end;
|
||||
}
|
||||
|
||||
public long getStartTime() {
|
||||
return start.getTime();
|
||||
}
|
||||
|
||||
public long getEndTime() {
|
||||
return end.getTime();
|
||||
}
|
||||
|
||||
private static Date parse(String str) throws ParseException {
|
||||
return FORMATS.get().parse(str);
|
||||
}
|
||||
|
||||
private static String format(Date str) {
|
||||
return FORMATS.get().format(str);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "TimeBucket{start=" + format(start) + ";end=" + format(end) + "}";
|
||||
}
|
||||
|
||||
}
|
|
@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.core.utils.TimeBucket;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.scale.domain.ReservationDay;
|
||||
import org.dromara.scale.domain.ReservationTime;
|
||||
|
@ -47,9 +48,20 @@ public class ReservationServiceImpl implements IReservationService {
|
|||
Long id = add.getId();
|
||||
if (flag) {
|
||||
List<ReservationTime> timeList = bo.getTimeList();
|
||||
for (ReservationTime one : timeList) {
|
||||
int size = timeList.size();
|
||||
if (size == 0) {
|
||||
throw new ServiceException("请选择可预约时间");
|
||||
}
|
||||
TimeBucket[] buckets = new TimeBucket[size];
|
||||
for (int i = 0; i < size; i++) {
|
||||
ReservationTime one = timeList.get(i);
|
||||
one.setCounselorId(userId);
|
||||
one.setDayId(id);
|
||||
buckets[i] = new TimeBucket(one.getStartTime(), one.getEndTime());
|
||||
}
|
||||
TimeBucket union = TimeBucket.union(buckets);
|
||||
if (union != null) {
|
||||
throw new ServiceException("可预约时间有重复");
|
||||
}
|
||||
timeMapper.insert(timeList);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue