|
|
@@ -20,9 +20,11 @@ import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.ZoneId;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
+import java.time.format.TextStyle;
|
|
|
import java.time.temporal.ChronoUnit;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
+import java.util.Locale;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
|
@@ -53,6 +55,9 @@ public class HouseOrderServziceImpl extends ServiceImpl<HouseOrderMapper, HouseO
|
|
|
@Autowired
|
|
|
ApplicationProcedureTemporaryService apts;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ ApplicationProcedureTemporaryService applicationProcedureTemporaryService;
|
|
|
+
|
|
|
@Override
|
|
|
public BigDecimal getHouseOrderPrice(int houseOrderNumber, String userId, String houseId, String liveTime, String leaveTime,Integer source) {
|
|
|
|
|
|
@@ -115,13 +120,122 @@ public class HouseOrderServziceImpl extends ServiceImpl<HouseOrderMapper, HouseO
|
|
|
String department = users.getDepartment();
|
|
|
|
|
|
|
|
|
+// 先判断免费来源是否是对的
|
|
|
BigDecimal totalPrice = new BigDecimal(0);
|
|
|
|
|
|
if (ObjectUtils.isNotEmpty(source)) {
|
|
|
if (source==1) {
|
|
|
- return totalPrice;
|
|
|
+
|
|
|
+ // 获取预定时间的开始星期和结束星期
|
|
|
+ String chineseDayOfWeek = state.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.CHINA);
|
|
|
+ Integer week = 0;
|
|
|
+ if ("星期一".equals(chineseDayOfWeek)) {
|
|
|
+ week = 1;
|
|
|
+ } else if ("星期二".equals(chineseDayOfWeek)) {
|
|
|
+ week = 2;
|
|
|
+ } else if ("星期三".equals(chineseDayOfWeek)) {
|
|
|
+ week = 3;
|
|
|
+ } else if ("星期四".equals(chineseDayOfWeek)) {
|
|
|
+ week = 4;
|
|
|
+ } else if ("星期五".equals(chineseDayOfWeek)) {
|
|
|
+ week = 5;
|
|
|
+ } else if ("星期六".equals(chineseDayOfWeek)) {
|
|
|
+ week = 6;
|
|
|
+ } else {
|
|
|
+ week = 7;
|
|
|
+ }
|
|
|
+
|
|
|
+ LocalDate localDate = state.minusDays(week - 1);
|
|
|
+ String stateTimeXq = localDate.format(dateTimeFormatter2);
|
|
|
+ LocalDate localEnd = localDate.plusDays(6);
|
|
|
+ String endTimeXq = localEnd.format(dateTimeFormatter2);
|
|
|
+// 查询该星期是否满足有2天的订单
|
|
|
+ LambdaQueryWrapper<HouseOrder> wrapperHO = new LambdaQueryWrapper<>();
|
|
|
+ wrapperHO.between(HouseOrder::getReserveLiveTime, stateTimeXq + " 00:00:00", endTimeXq + " 23:59:59")
|
|
|
+ .eq(HouseOrder::getReserveUserId, userId)
|
|
|
+ .eq(HouseOrder::getSource, 1)
|
|
|
+ .eq(HouseOrder::getPayPrice, 0)
|
|
|
+ .in(HouseOrder::getOrderStatus, 1, 2, 3, 4, 8);
|
|
|
+ List<HouseOrder> orderList = this.list(wrapperHO);
|
|
|
+
|
|
|
+ long dayDiff = 0;
|
|
|
+
|
|
|
+ for (HouseOrder houseOrder : orderList) {
|
|
|
+ String reserveLiveTime = houseOrder.getReserveLiveTime();
|
|
|
+ String reserveLeaveTime = houseOrder.getReserveLeaveTime();
|
|
|
+ LocalDateTime stateTime2 = LocalDateTime.parse(reserveLiveTime, dateTimeFormatter1);
|
|
|
+ LocalDateTime endTime2 = LocalDateTime.parse(reserveLeaveTime, dateTimeFormatter1);
|
|
|
+ LocalDate state1 = stateTime2.toLocalDate();
|
|
|
+ LocalDate end2 = endTime2.toLocalDate();
|
|
|
+ // 计算2个时间差
|
|
|
+ long until2 = state1.until(end2, ChronoUnit.DAYS);
|
|
|
+ dayDiff = dayDiff + until2;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 计算2个时间差
|
|
|
+ long until2 = state.until(end, ChronoUnit.DAYS);
|
|
|
+
|
|
|
+ Integer count = 1;
|
|
|
+ if (dayDiff + until2 > 2) {
|
|
|
+ count = 0;
|
|
|
+ } else {
|
|
|
+ for (int i = 0; i < until; i++) {
|
|
|
+ LocalDateTime dateTime1 = stateTime.plusDays(i);
|
|
|
+ LocalDateTime startS = dateTime1.withHour(0).withMinute(0).withSecond(0);
|
|
|
+ LocalDateTime endS = dateTime1.withHour(23).withMinute(59).withSecond(59);
|
|
|
+ LambdaQueryWrapper<ClassSchedule> wrapperCS = new LambdaQueryWrapper<>();
|
|
|
+ wrapperCS.eq(ClassSchedule::getJsgh, users.getCardNumber())
|
|
|
+ .between(ClassSchedule::getDateTime, startS, endS);
|
|
|
+ List<ClassSchedule> scheduleList = classScheduleService.list(wrapperCS);
|
|
|
+
|
|
|
+// 只要有一天是空的就不是免费
|
|
|
+ if (ObjectUtils.isEmpty(scheduleList)) {
|
|
|
+ count = 0;
|
|
|
+ break;
|
|
|
+ } else {
|
|
|
+ // 有课表就查询是否已经有该订单了
|
|
|
+ List<HouseOrder> list = this.getDate(dateTime1, userId, 1);
|
|
|
+ if (ObjectUtils.isNotEmpty(list)) {
|
|
|
+ count = 0;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (count > 0) {
|
|
|
+ return totalPrice;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}else if (source==2){
|
|
|
- return totalPrice;
|
|
|
+ // 获取流程
|
|
|
+ List<ApplicationProcedureTemporary> aptList = applicationProcedureTemporaryService.getApt(state, end, userId);
|
|
|
+ Integer count = 1;
|
|
|
+ if (ObjectUtils.isEmpty(aptList)) {
|
|
|
+ count=1;
|
|
|
+ } else {
|
|
|
+ ApplicationProcedureTemporary applicationProcedureTemporary = aptList.get(0);
|
|
|
+ String houseCount = applicationProcedureTemporary.getHouseCount();
|
|
|
+ String startTime = applicationProcedureTemporary.getStartTime();
|
|
|
+ String endTime1 = applicationProcedureTemporary.getEndTime();
|
|
|
+// 计算开始到结束时间有多少订单
|
|
|
+ LambdaQueryWrapper<HouseOrder> wrapper = new LambdaQueryWrapper<>();
|
|
|
+ wrapper.eq(HouseOrder::getReserveUserId, userId)
|
|
|
+ .eq(HouseOrder::getSource, 2)
|
|
|
+ .between(HouseOrder::getReserveLiveTime, startTime, endTime1)
|
|
|
+ .eq(HouseOrder::getPayPrice, 0)
|
|
|
+ .in(HouseOrder::getOrderStatus, 1, 2, 3, 4, 8);
|
|
|
+ List<HouseOrder> list = this.list(wrapper);
|
|
|
+ Integer count2 = Integer.valueOf(houseCount);
|
|
|
+ count = count2 - list.size();
|
|
|
+ }
|
|
|
+ if (count > 0) {
|
|
|
+ return totalPrice;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
|