소스 검색

商家端 营业时间 特殊营业时间 调整

qinxuyang 1 개월 전
부모
커밋
0241a460d1

+ 13 - 0
alien-entity/src/main/java/shop/alien/entity/store/StoreBookingBusinessHours.java

@@ -25,6 +25,7 @@ public class StoreBookingBusinessHours {
     @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
 
+
     @ApiModelProperty(value = "关联store_booking_settings表 id")
     @TableField("settings_id")
     private Integer settingsId;
@@ -79,4 +80,16 @@ public class StoreBookingBusinessHours {
     @ApiModelProperty(value = "修改人ID")
     @TableField("updated_user_id")
     private Integer updatedUserId;
+
+    @ApiModelProperty(value = "关联essential_holiday_comparison id")
+    @TableField("essential_id")
+    private Integer essentialId;
+
+    @ApiModelProperty(value = "预约 0免费 1付费")
+    @TableField("reservation")
+    private String reservation;
+
+    @ApiModelProperty(value = "预订金额")
+    @TableField("reservation_money")
+    private Double reservationMoney;
 }

+ 16 - 0
alien-entity/src/main/java/shop/alien/entity/store/dto/StoreBookingBusinessHoursDTO.java

@@ -3,6 +3,7 @@ package shop.alien.entity.store.dto;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import shop.alien.entity.store.EssentialHolidayComparison;
 
 /**
  * 预订服务营业时间DTO
@@ -17,6 +18,9 @@ public class StoreBookingBusinessHoursDTO {
     @ApiModelProperty(value = "营业时间ID(编辑时必填)")
     private Integer id;
 
+    @ApiModelProperty(value = "门店ID")
+    private Integer storeId;
+
     @ApiModelProperty(value = "关联store_booking_settings表 id", required = true)
     private Integer settingsId;
 
@@ -40,4 +44,16 @@ public class StoreBookingBusinessHoursDTO {
 
     @ApiModelProperty(value = "排序(用于同一门店多条记录的排序)")
     private Integer sort;
+
+    @ApiModelProperty(value = "关联essential_holiday_comparison id")
+    private Integer essentialId;
+
+    @ApiModelProperty(value = "预约 0免费 1付费")
+    private String reservation;
+
+    @ApiModelProperty(value = "预订金额")
+    private Double reservationMoney;
+
+    @ApiModelProperty(value = "关联的节假日信息")
+    private EssentialHolidayComparison holidayInfo;
 }

+ 25 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/StoreBookingBusinessHoursVo.java

@@ -0,0 +1,25 @@
+package shop.alien.entity.store.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import shop.alien.entity.store.EssentialHolidayComparison;
+import shop.alien.entity.store.StoreBookingBusinessHours;
+
+/**
+ * 预订服务营业时间Vo
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@JsonInclude
+@ApiModel(value = "StoreBookingBusinessHoursVo对象", description = "预订服务营业时间Vo")
+public class StoreBookingBusinessHoursVo extends StoreBookingBusinessHours {
+
+    @ApiModelProperty(value = "关联的节假日信息")
+    private EssentialHolidayComparison holidayInfo;
+}

+ 3 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/StoreMainInfoVo.java

@@ -124,4 +124,7 @@ public class StoreMainInfoVo extends StoreInfo {
     @ApiModelProperty(value = "评价数量")
     private Integer ratingCount;
 
+    @ApiModelProperty(value = "是否提供预约")
+    private Integer bookingService;
+
 }

+ 7 - 2
alien-entity/src/main/resources/mapper/StoreBookingBusinessHoursMapper.xml

@@ -5,6 +5,7 @@
     <!-- 通用查询映射结果 -->
     <resultMap id="BaseResultMap" type="shop.alien.entity.store.StoreBookingBusinessHours">
         <id column="id" property="id" />
+        <result column="store_id" property="storeId" />
         <result column="settings_id" property="settingsId" />
         <result column="business_type" property="businessType" />
         <result column="holiday_type" property="holidayType" />
@@ -18,13 +19,17 @@
         <result column="created_user_id" property="createdUserId" />
         <result column="updated_time" property="updatedTime" />
         <result column="updated_user_id" property="updatedUserId" />
+        <result column="essential_id" property="essentialId" />
+        <result column="reservation" property="reservation" />
+        <result column="reservation_money" property="reservationMoney" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, settings_id, business_type, holiday_type, holiday_date, 
+        id, store_id, settings_id, business_type, holiday_type, holiday_date, 
         booking_time_type, start_time, end_time, sort, 
-        delete_flag, created_time, created_user_id, updated_time, updated_user_id
+        delete_flag, created_time, created_user_id, updated_time, updated_user_id,
+        essential_id, reservation, reservation_money
     </sql>
 
 </mapper>

+ 25 - 0
alien-store/src/main/java/shop/alien/store/controller/StoreReservationController.java

@@ -6,7 +6,9 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.web.bind.annotation.*;
 import shop.alien.entity.result.R;
+import shop.alien.entity.store.StoreBookingBusinessHours;
 import shop.alien.entity.store.vo.StoreReservationListVo;
+import shop.alien.store.service.StoreBookingBusinessHoursService;
 import shop.alien.store.service.StoreReservationService;
 
 import java.util.Date;
@@ -28,6 +30,7 @@ import java.util.List;
 public class StoreReservationController {
 
     private final StoreReservationService storeReservationService;
+    private final StoreBookingBusinessHoursService storeBookingBusinessHoursService;
 
     @ApiOperationSupport(order = 1)
     @ApiOperation("查询商家端预约信息列表")
@@ -207,4 +210,26 @@ public class StoreReservationController {
             return R.fail("退款失败:" + e.getMessage());
         }
     }
+
+    @ApiOperationSupport(order = 7)
+    @ApiOperation("通过预订设置ID查询线上预订营业时间")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "settingsId", value = "预订设置ID(store_booking_settings表的id)", dataType = "Integer", paramType = "query", required = true)
+    })
+    @GetMapping("/getBookingBusinessHours")
+    public R<List<StoreBookingBusinessHours>> getBookingBusinessHours(@RequestParam Integer settingsId) {
+        log.info("StoreReservationController.getBookingBusinessHours?settingsId={}", settingsId);
+
+        if (settingsId == null) {
+            return R.fail("预订设置ID不能为空");
+        }
+
+        try {
+            List<StoreBookingBusinessHours> list = storeBookingBusinessHoursService.getListBySettingsId(settingsId);
+            return R.data(list);
+        } catch (Exception e) {
+            log.error("查询线上预订营业时间失败", e);
+            return R.fail("查询失败:" + e.getMessage());
+        }
+    }
 }

+ 1 - 0
alien-store/src/main/java/shop/alien/store/service/StoreBookingBusinessHoursService.java

@@ -13,6 +13,7 @@ import java.util.List;
  */
 public interface StoreBookingBusinessHoursService extends IService<StoreBookingBusinessHours> {
 
+
     /**
      * 根据设置ID查询营业时间列表
      *

+ 1 - 0
alien-store/src/main/java/shop/alien/store/service/impl/StoreBookingBusinessHoursServiceImpl.java

@@ -34,6 +34,7 @@ public class StoreBookingBusinessHoursServiceImpl extends ServiceImpl<StoreBooki
     // 时间格式正则:HH:mm
     private static final Pattern TIME_PATTERN = Pattern.compile("^([0-1][0-9]|2[0-3]):[0-5][0-9]$");
 
+
     @Override
     public List<StoreBookingBusinessHours> getListBySettingsId(Integer settingsId) {
         log.info("StoreBookingBusinessHoursServiceImpl.getListBySettingsId?settingsId={}", settingsId);

+ 24 - 1
alien-store/src/main/java/shop/alien/store/service/impl/StoreBookingSettingsServiceImpl.java

@@ -10,10 +10,12 @@ import org.springframework.beans.BeanUtils;
 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.StoreBookingSettings;
 import shop.alien.entity.store.dto.StoreBookingBusinessHoursDTO;
 import shop.alien.entity.store.dto.StoreBookingSettingsDTO;
+import shop.alien.mapper.EssentialHolidayComparisonMapper;
 import shop.alien.mapper.StoreBookingSettingsMapper;
 import shop.alien.store.service.StoreBookingBusinessHoursService;
 import shop.alien.store.service.StoreBookingSettingsService;
@@ -37,6 +39,7 @@ import java.util.regex.Pattern;
 public class StoreBookingSettingsServiceImpl extends ServiceImpl<StoreBookingSettingsMapper, StoreBookingSettings> implements StoreBookingSettingsService {
 
     private final StoreBookingBusinessHoursService storeBookingBusinessHoursService;
+    private final EssentialHolidayComparisonMapper essentialHolidayComparisonMapper;
 
     // 时间格式正则:HH:mm
     private static final Pattern TIME_PATTERN = Pattern.compile("^([0-1][0-9]|2[0-3]):[0-5][0-9]$");
@@ -287,7 +290,21 @@ public class StoreBookingSettingsServiceImpl extends ServiceImpl<StoreBookingSet
         
         if (!specialHoursList.isEmpty()) {
             List<StoreBookingBusinessHoursDTO> specialHoursDTOList = specialHoursList.stream()
-                    .map(this::convertToBusinessHoursDTO)
+                    .map(businessHours -> {
+                        StoreBookingBusinessHoursDTO hoursDTO = convertToBusinessHoursDTO(businessHours);
+                        // 如果有关联的节假日ID,查询节假日信息
+                        if (businessHours.getEssentialId() != null) {
+                            try {
+                                EssentialHolidayComparison holiday = essentialHolidayComparisonMapper.selectById(businessHours.getEssentialId());
+                                if (holiday != null) {
+                                    hoursDTO.setHolidayInfo(holiday);
+                                }
+                            } catch (Exception e) {
+                                log.warn("查询节假日信息失败,essentialId={}", businessHours.getEssentialId(), e);
+                            }
+                        }
+                        return hoursDTO;
+                    })
                     .collect(Collectors.toList());
             dto.setSpecialBusinessHoursList(specialHoursDTOList);
         }
@@ -314,6 +331,9 @@ public class StoreBookingSettingsServiceImpl extends ServiceImpl<StoreBookingSet
         businessHours.setStartTime(dto.getStartTime());
         businessHours.setEndTime(dto.getEndTime());
         businessHours.setSort(dto.getSort() != null ? dto.getSort() : 0);
+        businessHours.setEssentialId(dto.getEssentialId());
+        businessHours.setReservation(dto.getReservation());
+        businessHours.setReservationMoney(dto.getReservationMoney());
         return businessHours;
     }
 
@@ -334,6 +354,9 @@ public class StoreBookingSettingsServiceImpl extends ServiceImpl<StoreBookingSet
         dto.setStartTime(businessHours.getStartTime());
         dto.setEndTime(businessHours.getEndTime());
         dto.setSort(businessHours.getSort());
+        dto.setEssentialId(businessHours.getEssentialId());
+        dto.setReservation(businessHours.getReservation());
+        dto.setReservationMoney(businessHours.getReservationMoney());
         return dto;
     }
 

+ 27 - 2
alien-store/src/main/java/shop/alien/store/service/impl/UserReservationServiceImpl.java

@@ -15,9 +15,11 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import shop.alien.entity.store.*;
 import shop.alien.entity.store.dto.UserReservationDTO;
+import shop.alien.entity.store.vo.StoreBookingBusinessHoursVo;
 import shop.alien.entity.store.vo.StoreMainInfoVo;
 import shop.alien.entity.store.vo.StoreReservationListVo;
 import shop.alien.entity.store.vo.UserReservationVo;
+import shop.alien.mapper.EssentialHolidayComparisonMapper;
 import shop.alien.mapper.UserReservationOrderMapper;
 import shop.alien.store.vo.BookingTableItemVo;
 import shop.alien.store.vo.ReservationOrderDetailVo;
@@ -63,6 +65,8 @@ public class UserReservationServiceImpl extends ServiceImpl<UserReservationMappe
 
     private final StoreBookingBusinessHoursService storeBookingBusinessHoursService;
 
+    private final EssentialHolidayComparisonMapper essentialHolidayComparisonMapper;
+
     private ReservationOrderPageService reservationOrderPageService;
 
     @Autowired
@@ -368,12 +372,33 @@ public class UserReservationServiceImpl extends ServiceImpl<UserReservationMappe
         list.put("storeBookingSettings", storeBookingSettings);
         
         // 查询营业时间:如果有设置信息,则查询对应的营业时间
-        List<StoreBookingBusinessHours> storeBookingBusinessHours = new ArrayList<>();
+        // 特殊营业时间通过 essential_id 关联 essential_holiday_comparison 节假日表
+        List<StoreBookingBusinessHoursVo> storeBookingBusinessHours = new ArrayList<>();
         if (storeBookingSettings != null && !storeBookingSettings.isEmpty()) {
             // 获取第一个设置的ID(通常一个门店只有一个设置)
             StoreBookingSettings settings = storeBookingSettings.get(0);
             if (settings != null && settings.getId() != null) {
-                storeBookingBusinessHours = storeBookingBusinessHoursService.getListBySettingsId(settings.getId());
+                List<StoreBookingBusinessHours> businessHoursList = storeBookingBusinessHoursService.getListBySettingsId(settings.getId());
+                // 转换为 Vo 并关联节假日信息
+                for (StoreBookingBusinessHours businessHours : businessHoursList) {
+                    StoreBookingBusinessHoursVo vo = new StoreBookingBusinessHoursVo();
+                    BeanUtils.copyProperties(businessHours, vo);
+                    
+                    // 如果是特殊营业时间(business_type = 1)且有关联的节假日ID,查询节假日信息
+                    if (businessHours.getBusinessType() != null && businessHours.getBusinessType() == 1 
+                            && businessHours.getEssentialId() != null) {
+                        try {
+                            EssentialHolidayComparison holiday = essentialHolidayComparisonMapper.selectById(businessHours.getEssentialId());
+                            if (holiday != null) {
+                                vo.setHolidayInfo(holiday);
+                            }
+                        } catch (Exception e) {
+                            log.warn("查询节假日信息失败,essentialId={}", businessHours.getEssentialId(), e);
+                        }
+                    }
+                    
+                    storeBookingBusinessHours.add(vo);
+                }
             }
         }
         list.put("storeBookingBusinessHours", storeBookingBusinessHours);