Commit 6ae2a580 by liyanlin

更改预约逻辑:

1、下班前预约的,只要开始时间在下班前的,服务结束的时间没有超过最晚可预约时间,就可以约;
2、如果勾选了超出最晚可预约时间是否可约,那就是只要开始时间是下班前的,就都可约。
parent 2161c272
...@@ -57,6 +57,7 @@ import org.springframework.stereotype.Service; ...@@ -57,6 +57,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
...@@ -164,15 +165,19 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper, ...@@ -164,15 +165,19 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
periodList.add(period2); periodList.add(period2);
/*5、如果开启了门店最晚预约时间,最晚可预约时间之后的时间不可用*/ /*5、下班前预约的,只要开始时间在下班前的,服务结束的时间没有超过最晚可预约时间,就可以约
if (StringUtils.isNotEmpty(latestScheduledTime) && storeClassesTechnician.getClassesManage().getLatestScheduledTimeEnable() == 1) { 如果勾选了超出最晚可预约时间是否可约,那就是只要开始时间是下班前的,就都可约
因此这里改为下班后不可约,下班前预约的做特殊时间段处理*/
Period latestScheduledTimeMillsPeriod = new Period(workEndTime, dayEndTime);
periodList.add(latestScheduledTimeMillsPeriod);
/*if (StringUtils.isNotEmpty(latestScheduledTime) && storeClassesTechnician.getClassesManage().getLatestScheduledTimeEnable() == 1) {
long latestScheduledTimeMills = simpleDateFormat.parse(day + " " + latestScheduledTime).getTime(); long latestScheduledTimeMills = simpleDateFormat.parse(day + " " + latestScheduledTime).getTime();
Period latestScheduledTimeMillsPeriod = new Period(latestScheduledTimeMills, dayEndTime); Period latestScheduledTimeMillsPeriod = new Period(latestScheduledTimeMills, dayEndTime);
periodList.add(latestScheduledTimeMillsPeriod); periodList.add(latestScheduledTimeMillsPeriod);
} else { } else {
Period latestScheduledTimeMillsPeriod = new Period(workEndTime, dayEndTime); Period latestScheduledTimeMillsPeriod = new Period(workEndTime, dayEndTime);
periodList.add(latestScheduledTimeMillsPeriod); periodList.add(latestScheduledTimeMillsPeriod);
} }*/
/*6、上班开始时间之前的时间不可用*/ /*6、上班开始时间之前的时间不可用*/
Period period3 = new Period(dayStartTime, workStartTime); Period period3 = new Period(dayStartTime, workStartTime);
...@@ -202,7 +207,13 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper, ...@@ -202,7 +207,13 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
} }
/*9、构造返回值*/ /*9、构造返回值*/
StoreTechnicianPeriod storeTechnicianDTO = new StoreTechnicianPeriod(periodList, storeClassesTechnician.getTechnicianManage()); //最晚可约时间
long latestScheduledTimeMills = simpleDateFormat.parse(day + " " + latestScheduledTime).getTime();
StoreTechnicianPeriod storeTechnicianDTO = new StoreTechnicianPeriod(periodList,
storeClassesTechnician.getTechnicianManage(),
latestScheduledTimeMills,
storeClassesTechnician.getClassesManage().getLatestScheduledTimeEnable(),
workEndTime);
storeTechnicianPeriodList.add(storeTechnicianDTO); storeTechnicianPeriodList.add(storeTechnicianDTO);
} }
...@@ -215,7 +226,10 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper, ...@@ -215,7 +226,10 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
LocalDateTime serveStartTime, LocalDateTime serveStartTime,
LocalDateTime serveEndTime) throws ParseException { LocalDateTime serveEndTime) throws ParseException {
//查询店铺的美甲师和美甲师的可用时间 //查询店铺的美甲师和美甲师的可用时间
List<StoreTechnicianPeriod> storeTechnicianPeriodList = this.queryStoreTechnicianPeriod(null, departmentId, serveStartTime.toLocalDate().toString(), Lists.newArrayList(serveId)); List<StoreTechnicianPeriod> storeTechnicianPeriodList = this.queryStoreTechnicianPeriod(null,
departmentId,
serveStartTime.toLocalDate().toString(),
Lists.newArrayList(serveId));
//服务占用的时间区间 //服务占用的时间区间
Period servePeriod = new Period(serveStartTime.toInstant(ZoneOffset.of("+8")).toEpochMilli(), serveEndTime.toInstant(ZoneOffset.of("+8")).toEpochMilli()); Period servePeriod = new Period(serveStartTime.toInstant(ZoneOffset.of("+8")).toEpochMilli(), serveEndTime.toInstant(ZoneOffset.of("+8")).toEpochMilli());
...@@ -240,7 +254,11 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper, ...@@ -240,7 +254,11 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/*1、获取美甲师和美甲师不可用时间段*/ /*1、获取美甲师和美甲师不可用时间段*/
List<StoreTechnicianPeriod> storeTechnicianDTOList = this.queryStoreTechnicianPeriod(qry.getId(), qry.getDepartmentId(), qry.getScheduleDate(), qry.getListScheduleServer().stream().map(ScheduleServeQuery::getServeId).collect(Collectors.toList())); List<StoreTechnicianPeriod> storeTechnicianDTOList = this.queryStoreTechnicianPeriod(qry.getId(),
qry.getDepartmentId(),
qry.getScheduleDate(),
qry.getListScheduleServer().stream().map(ScheduleServeQuery::getServeId).collect(Collectors.toList())
);
/*2、迭代出所有需要返回的时间节点*/ /*2、迭代出所有需要返回的时间节点*/
if (ListUtil.isEmpty(qry.getDateTimeList())) { if (ListUtil.isEmpty(qry.getDateTimeList())) {
...@@ -490,7 +508,16 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper, ...@@ -490,7 +508,16 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
ScheduleServeQuery scheduleServeQuery = treeProgram.getScheduleServeQuery(); ScheduleServeQuery scheduleServeQuery = treeProgram.getScheduleServeQuery();
for (Period period : storeTechnician.getPeriodList()) { for (Period period : storeTechnician.getPeriodList()) {
if (period.conflict(scheduleServeQuery.getPeriod())) { /*下班前预约的,只要开始时间在下班前的,服务结束的时间没有超过最晚可预约时间,就可以约
如果勾选了超出最晚可预约时间是否可约,那就是只要开始时间是下班前的,就都可约*/
if(period.in(storeTechnician.getWorkEndTime())) {
if (storeTechnician.getLatestScheduledTimeEnable() != 1 &&
scheduleServeQuery.getPeriod().getEndTime() > storeTechnician.getLatestScheduledTimeMills()) {
//未勾选
bool = false;
}
}
else if (period.conflict(scheduleServeQuery.getPeriod())) {
bool = false; bool = false;
} }
} }
......
...@@ -35,11 +35,20 @@ public class Period implements Serializable { ...@@ -35,11 +35,20 @@ public class Period implements Serializable {
return period.getEndTime() >= endTime return period.getEndTime() >= endTime
&& period.getStartTime() <= startTime; && period.getStartTime() <= startTime;
} }
public boolean in(long datetime) {
return datetime >= startTime
&& datetime <= endTime;
}
public boolean notIn(Period period) { public boolean notIn(Period period) {
return !in(period); return !in(period);
} }
public boolean notIn(long datetime) {
return !in(datetime);
}
public boolean conflict(Period period) { public boolean conflict(Period period) {
......
...@@ -15,6 +15,24 @@ public class StoreTechnicianPeriod implements Serializable { ...@@ -15,6 +15,24 @@ public class StoreTechnicianPeriod implements Serializable {
*/ */
@JsonIgnore @JsonIgnore
List<Period> periodList; List<Period> periodList;
/**
* 最晚可约时间
*/
@JsonIgnore
long latestScheduledTimeMills;
/**
* 美甲师下班时间
*/
@JsonIgnore
long workEndTime;
/**
* 超过最晚时间是否可约
*/
@JsonIgnore
Integer latestScheduledTimeEnable;
/** /**
* 美甲师id * 美甲师id
*/ */
...@@ -43,13 +61,16 @@ public class StoreTechnicianPeriod implements Serializable { ...@@ -43,13 +61,16 @@ public class StoreTechnicianPeriod implements Serializable {
} }
public StoreTechnicianPeriod(List<Period> periodList, StoreTechnician storeTechnician) { public StoreTechnicianPeriod(List<Period> periodList, StoreTechnician storeTechnician, long latestScheduledTimeMills, Integer latestScheduledTimeEnable, long workEndTime) {
this.periodList = periodList; this.periodList = periodList;
this.technicianId = storeTechnician.getId(); this.technicianId = storeTechnician.getId();
this.name = storeTechnician.getName(); this.name = storeTechnician.getName();
this.picturePath = storeTechnician.getPicturePath(); this.picturePath = storeTechnician.getPicturePath();
this.grade = storeTechnician.getGrade(); this.grade = storeTechnician.getGrade();
this.storeTechnician = storeTechnician; this.storeTechnician = storeTechnician;
this.latestScheduledTimeMills = latestScheduledTimeMills;
this.latestScheduledTimeEnable = latestScheduledTimeEnable;
this.workEndTime = workEndTime;
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment