新增预约添加校验

This commit is contained in:
cjw 2024-08-19 16:36:10 +08:00
parent 5e77d13b56
commit a2f59bf1b2
2 changed files with 109 additions and 1 deletions

View File

@ -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) + "}";
}
}

View File

@ -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);
} }