|
|
@@ -4,14 +4,15 @@ import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
-import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.context.annotation.Lazy;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.util.StringUtils;
|
|
|
import shop.alien.entity.store.EssentialHolidayComparison;
|
|
|
import shop.alien.entity.store.StoreBookingBusinessHours;
|
|
|
+import shop.alien.entity.store.StoreBookingCategory;
|
|
|
import shop.alien.entity.store.StoreBookingSettings;
|
|
|
import shop.alien.entity.store.StoreBusinessInfo;
|
|
|
import shop.alien.entity.store.dto.StoreBookingBusinessHoursDTO;
|
|
|
@@ -20,6 +21,7 @@ import shop.alien.mapper.EssentialHolidayComparisonMapper;
|
|
|
import shop.alien.mapper.StoreBookingSettingsMapper;
|
|
|
import shop.alien.mapper.StoreBusinessInfoMapper;
|
|
|
import shop.alien.store.service.StoreBookingBusinessHoursService;
|
|
|
+import shop.alien.store.service.StoreBookingCategoryService;
|
|
|
import shop.alien.store.service.StoreBookingSettingsService;
|
|
|
import shop.alien.util.common.JwtUtil;
|
|
|
|
|
|
@@ -37,12 +39,23 @@ import java.util.regex.Pattern;
|
|
|
@Slf4j
|
|
|
@Service
|
|
|
@Transactional
|
|
|
-@RequiredArgsConstructor
|
|
|
public class StoreBookingSettingsServiceImpl extends ServiceImpl<StoreBookingSettingsMapper, StoreBookingSettings> implements StoreBookingSettingsService {
|
|
|
|
|
|
private final StoreBookingBusinessHoursService storeBookingBusinessHoursService;
|
|
|
private final EssentialHolidayComparisonMapper essentialHolidayComparisonMapper;
|
|
|
private final StoreBusinessInfoMapper storeBusinessInfoMapper;
|
|
|
+ private final StoreBookingCategoryService storeBookingCategoryService;
|
|
|
+
|
|
|
+ public StoreBookingSettingsServiceImpl(
|
|
|
+ StoreBookingBusinessHoursService storeBookingBusinessHoursService,
|
|
|
+ EssentialHolidayComparisonMapper essentialHolidayComparisonMapper,
|
|
|
+ StoreBusinessInfoMapper storeBusinessInfoMapper,
|
|
|
+ @Lazy StoreBookingCategoryService storeBookingCategoryService) {
|
|
|
+ this.storeBookingBusinessHoursService = storeBookingBusinessHoursService;
|
|
|
+ this.essentialHolidayComparisonMapper = essentialHolidayComparisonMapper;
|
|
|
+ this.storeBusinessInfoMapper = storeBusinessInfoMapper;
|
|
|
+ this.storeBookingCategoryService = storeBookingCategoryService;
|
|
|
+ }
|
|
|
|
|
|
// 时间格式正则:HH:mm
|
|
|
private static final Pattern TIME_PATTERN = Pattern.compile("^([0-1][0-9]|2[0-3]):[0-5][0-9]$");
|
|
|
@@ -185,6 +198,30 @@ public class StoreBookingSettingsServiceImpl extends ServiceImpl<StoreBookingSet
|
|
|
public boolean saveSettingsWithBusinessHours(StoreBookingSettingsDTO dto) {
|
|
|
log.info("StoreBookingSettingsServiceImpl.saveSettingsWithBusinessHours?dto={}", dto);
|
|
|
|
|
|
+ // 校验:如果有保留时长(retain_position_flag = 1),保留时长不能超过分类中的最短最长预订时间
|
|
|
+ // 如果当前门店没有分类,那保留时长可随意设置
|
|
|
+ if (dto.getRetainPositionFlag() != null && dto.getRetainPositionFlag() == 1) {
|
|
|
+ if (dto.getRetentionDuration() != null && dto.getRetentionDuration() > 0) {
|
|
|
+ // 查询该门店下所有分类的最短最长预订时间(最小值)
|
|
|
+ List<StoreBookingCategory> categories = storeBookingCategoryService.getCategoryList(dto.getStoreId());
|
|
|
+ // 如果门店有分类,才进行校验
|
|
|
+ if (categories != null && !categories.isEmpty()) {
|
|
|
+ Integer minMaxBookingTime = categories.stream()
|
|
|
+ .filter(c -> c.getMaxBookingTime() != null && c.getMaxBookingTime() > 0)
|
|
|
+ .map(StoreBookingCategory::getMaxBookingTime)
|
|
|
+ .min(Integer::compareTo)
|
|
|
+ .orElse(null);
|
|
|
+
|
|
|
+ if (minMaxBookingTime != null && dto.getRetentionDuration() > minMaxBookingTime) {
|
|
|
+ log.warn("保留时长不能超过最长预订时长,retentionDuration={}, minMaxBookingTime={}",
|
|
|
+ dto.getRetentionDuration(), minMaxBookingTime);
|
|
|
+ throw new RuntimeException("保留时长不能超过最长预订时长");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 如果门店没有分类,跳过校验,保留时长可随意设置
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// 1. 先保存或更新设置信息
|
|
|
StoreBookingSettings settings = new StoreBookingSettings();
|
|
|
settings.setId(dto.getId());
|