新增预约添加校验
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 lombok.RequiredArgsConstructor;
|
||||||
import org.dromara.common.core.exception.ServiceException;
|
import org.dromara.common.core.exception.ServiceException;
|
||||||
import org.dromara.common.core.utils.MapstructUtils;
|
import org.dromara.common.core.utils.MapstructUtils;
|
||||||
|
import org.dromara.common.core.utils.TimeBucket;
|
||||||
import org.dromara.common.satoken.utils.LoginHelper;
|
import org.dromara.common.satoken.utils.LoginHelper;
|
||||||
import org.dromara.scale.domain.ReservationDay;
|
import org.dromara.scale.domain.ReservationDay;
|
||||||
import org.dromara.scale.domain.ReservationTime;
|
import org.dromara.scale.domain.ReservationTime;
|
||||||
|
@ -47,9 +48,20 @@ public class ReservationServiceImpl implements IReservationService {
|
||||||
Long id = add.getId();
|
Long id = add.getId();
|
||||||
if (flag) {
|
if (flag) {
|
||||||
List<ReservationTime> timeList = bo.getTimeList();
|
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.setCounselorId(userId);
|
||||||
one.setDayId(id);
|
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);
|
timeMapper.insert(timeList);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue