Просмотр исходного кода

运动设施和洗浴设施服务相关接口

zhangchen 2 недель назад
Родитель
Сommit
4434ba67ca

+ 86 - 0
alien-entity/src/main/java/shop/alien/entity/store/BathFacilityService.java

@@ -0,0 +1,86 @@
+package shop.alien.entity.store;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 洗浴设施及服务表
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude
+@TableName("bath_facility_service")
+@ApiModel(value = "BathFacilityService对象", description = "洗浴设施及服务表")
+public class BathFacilityService implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "门店ID")
+    @TableField("store_id")
+    private Integer storeId;
+
+    @ApiModelProperty(value = "设施分类(1:洗浴区, 2:汗蒸区, 3:休闲区, 4:餐饮区)")
+    @TableField("facility_category")
+    private Integer facilityCategory;
+
+    @ApiModelProperty(value = "名称")
+    @TableField("facility_name")
+    private String facilityName;
+
+    @ApiModelProperty(value = "收费标准")
+    @TableField("charging_standard")
+    private String chargingStandard;
+
+    @ApiModelProperty(value = "使用时间类型(0:全天, 1:选择时间)")
+    @TableField("usage_time_type")
+    private Integer usageTimeType;
+
+    @ApiModelProperty(value = "使用开始时间(HH:mm格式)")
+    @TableField("usage_start_time")
+    private String usageStartTime;
+
+    @ApiModelProperty(value = "使用结束时间(HH:mm格式)")
+    @TableField("usage_end_time")
+    private String usageEndTime;
+
+    @ApiModelProperty(value = "是否显示在店铺详情(0:隐藏, 1:显示)")
+    @TableField("display_in_store_detail")
+    private Integer displayInStoreDetail;
+
+    @ApiModelProperty(value = "删除标记, 0:未删除, 1:已删除")
+    @TableField("delete_flag")
+    @TableLogic
+    private Integer deleteFlag;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "created_time", fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "创建人ID")
+    @TableField(value = "created_user_id", fill = FieldFill.INSERT)
+    private Integer createdUserId;
+
+    @ApiModelProperty(value = "修改时间")
+    @TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updatedTime;
+
+    @ApiModelProperty(value = "修改人ID")
+    @TableField(value = "updated_user_id", fill = FieldFill.INSERT_UPDATE)
+    private Integer updatedUserId;
+}
+

+ 82 - 0
alien-entity/src/main/java/shop/alien/entity/store/SportsEquipmentFacility.java

@@ -0,0 +1,82 @@
+package shop.alien.entity.store;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 运动器材设施表
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude
+@TableName("sports_equipment_facility")
+@ApiModel(value = "SportsEquipmentFacility对象", description = "运动器材设施表")
+public class SportsEquipmentFacility implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "门店ID")
+    @TableField("store_id")
+    private Integer storeId;
+
+    @ApiModelProperty(value = "设施分类(1:有氧区, 2:力量区, 3:单功能机械区)")
+    @TableField("facility_category")
+    private Integer facilityCategory;
+
+    @ApiModelProperty(value = "设施名称")
+    @TableField("facility_name")
+    private String facilityName;
+
+    @ApiModelProperty(value = "数量")
+    @TableField("quantity")
+    private Integer quantity;
+
+    @ApiModelProperty(value = "品牌")
+    @TableField("brand")
+    private String brand;
+
+    @ApiModelProperty(value = "描述")
+    @TableField("description")
+    private String description;
+
+    @ApiModelProperty(value = "是否显示在店铺详情(0:隐藏, 1:显示)")
+    @TableField("display_in_store_detail")
+    private Integer displayInStoreDetail;
+
+    @ApiModelProperty(value = "删除标记, 0:未删除, 1:已删除")
+    @TableField("delete_flag")
+    @TableLogic
+    private Integer deleteFlag;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "created_time", fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "创建人ID")
+    @TableField(value = "created_user_id", fill = FieldFill.INSERT)
+    private Integer createdUserId;
+
+    @ApiModelProperty(value = "修改时间")
+    @TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updatedTime;
+
+    @ApiModelProperty(value = "修改人ID")
+    @TableField(value = "updated_user_id", fill = FieldFill.INSERT_UPDATE)
+    private Integer updatedUserId;
+}
+

+ 1 - 1
alien-entity/src/main/java/shop/alien/entity/store/StoreImg.java

@@ -30,7 +30,7 @@ public class StoreImg extends Model<StoreImg> {
     @TableField("store_id")
     private Integer storeId;
 
-    @ApiModelProperty(value = "图片类型, 0:其他, 1:入口图, 2:相册, 3:菜品, 4:环境, 5:价目表, 6:推荐菜, 7:菜单, 8:用户评论, 9:商家申诉,10:商家头像,11:店铺轮播图,12:联名卡图片,13:动态折扣, 14:套餐图片,15:合同照片,17:打卡广场小人图片 18: 商品发布图片 19:二手商品与用户举报图片,20头图单图模式,21头图多图模式 , 22续签合同,23,二手商品记录图片类型, 24 食品经营许可证审核前状态 25.食品经营许可证审核后状态")
+    @ApiModelProperty(value = "图片类型, 0:其他, 1:入口图, 2:相册, 3:菜品, 4:环境, 5:价目表, 6:推荐菜, 7:菜单, 8:用户评论, 9:商家申诉,10:商家头像,11:店铺轮播图,12:联名卡图片,13:动态折扣, 14:套餐图片,15:合同照片,17:打卡广场小人图片 18: 商品发布图片 19:二手商品与用户举报图片,20头图单图模式,21头图多图模式 , 22续签合同,23,二手商品记录图片类型, 24 食品经营许可证审核前状态 25.食品经营许可证审核后状态, 28:运动器材设施图片, 29:洗浴设施及服务图片")
     @TableField("img_type")
     private Integer imgType;
 

+ 66 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/BathFacilityServiceVo.java

@@ -0,0 +1,66 @@
+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 java.io.Serializable;
+import java.util.List;
+
+/**
+ * 洗浴设施及服务视图对象
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@ApiModel(value = "BathFacilityServiceVo对象", description = "洗浴设施及服务视图对象")
+public class BathFacilityServiceVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @ApiModelProperty(value = "门店ID")
+    private Integer storeId;
+
+    @ApiModelProperty(value = "设施分类(1:洗浴区, 2:汗蒸区, 3:休闲区, 4:餐饮区)")
+    private Integer facilityCategory;
+
+    @ApiModelProperty(value = "设施分类名称")
+    private String facilityCategoryName;
+
+    @ApiModelProperty(value = "名称")
+    private String facilityName;
+
+    @ApiModelProperty(value = "收费标准")
+    private String chargingStandard;
+
+    @ApiModelProperty(value = "使用时间类型(0:全天, 1:选择时间)")
+    private Integer usageTimeType;
+
+    @ApiModelProperty(value = "使用时间类型文本")
+    private String usageTimeTypeText;
+
+    @ApiModelProperty(value = "使用开始时间(HH:mm格式)")
+    private String usageStartTime;
+
+    @ApiModelProperty(value = "使用结束时间(HH:mm格式)")
+    private String usageEndTime;
+
+    @ApiModelProperty(value = "使用时间范围(如: 08:00-20:00)")
+    private String usageTimeRange;
+
+    @ApiModelProperty(value = "是否显示在店铺详情(0:隐藏, 1:显示)")
+    private Integer displayInStoreDetail;
+
+    @ApiModelProperty(value = "是否显示在店铺详情文本")
+    private String displayInStoreDetailText;
+
+    @ApiModelProperty(value = "图片列表")
+    private List<String> imageList;
+}
+

+ 57 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/SportsEquipmentFacilityVo.java

@@ -0,0 +1,57 @@
+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 java.io.Serializable;
+import java.util.List;
+
+/**
+ * 运动器材设施视图对象
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@ApiModel(value = "SportsEquipmentFacilityVo对象", description = "运动器材设施视图对象")
+public class SportsEquipmentFacilityVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @ApiModelProperty(value = "门店ID")
+    private Integer storeId;
+
+    @ApiModelProperty(value = "设施分类(1:有氧区, 2:力量区, 3:单功能机械区)")
+    private Integer facilityCategory;
+
+    @ApiModelProperty(value = "设施分类名称")
+    private String facilityCategoryName;
+
+    @ApiModelProperty(value = "设施名称")
+    private String facilityName;
+
+    @ApiModelProperty(value = "数量")
+    private Integer quantity;
+
+    @ApiModelProperty(value = "品牌")
+    private String brand;
+
+    @ApiModelProperty(value = "描述")
+    private String description;
+
+    @ApiModelProperty(value = "是否显示在店铺详情(0:隐藏, 1:显示)")
+    private Integer displayInStoreDetail;
+
+    @ApiModelProperty(value = "是否显示在店铺详情文本")
+    private String displayInStoreDetailText;
+
+    @ApiModelProperty(value = "图片列表")
+    private List<String> imageList;
+}
+

+ 17 - 0
alien-entity/src/main/java/shop/alien/mapper/BathFacilityServiceMapper.java

@@ -0,0 +1,17 @@
+package shop.alien.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import shop.alien.entity.store.BathFacilityService;
+
+/**
+ * 洗浴设施及服务 Mapper 接口
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Mapper
+public interface BathFacilityServiceMapper extends BaseMapper<BathFacilityService> {
+
+}
+

+ 17 - 0
alien-entity/src/main/java/shop/alien/mapper/SportsEquipmentFacilityMapper.java

@@ -0,0 +1,17 @@
+package shop.alien.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import shop.alien.entity.store.SportsEquipmentFacility;
+
+/**
+ * 运动器材设施 Mapper 接口
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Mapper
+public interface SportsEquipmentFacilityMapper extends BaseMapper<SportsEquipmentFacility> {
+
+}
+

+ 156 - 0
alien-store/src/main/java/shop/alien/store/controller/BathFacilityServiceController.java

@@ -0,0 +1,156 @@
+package shop.alien.store.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+import shop.alien.entity.result.R;
+import shop.alien.entity.store.BathFacilityService;
+import shop.alien.entity.store.vo.BathFacilityServiceVo;
+import shop.alien.store.service.BathFacilityServiceService;
+
+import java.util.List;
+
+/**
+ * 洗浴设施及服务Controller
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Slf4j
+@Api(tags = {"洗浴设施及服务管理"})
+@ApiSort(1)
+@CrossOrigin
+@RestController
+@RequestMapping("/bath/facility/service")
+@RequiredArgsConstructor
+public class BathFacilityServiceController {
+
+    private final BathFacilityServiceService facilityServiceService;
+
+    @ApiOperation("分页查询洗浴设施及服务列表")
+    @ApiOperationSupport(order = 1)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageNum", value = "页码", dataType = "int", paramType = "query", required = true, defaultValue = "1"),
+            @ApiImplicitParam(name = "pageSize", value = "页大小", dataType = "int", paramType = "query", required = true, defaultValue = "10"),
+            @ApiImplicitParam(name = "storeId", value = "门店ID", dataType = "int", paramType = "query", required = true),
+            @ApiImplicitParam(name = "facilityCategory", value = "设施分类(1:洗浴区, 2:汗蒸区, 3:休闲区, 4:餐饮区)", dataType = "int", paramType = "query")
+    })
+    @GetMapping("/page")
+    public R<IPage<BathFacilityServiceVo>> getPageList(
+            @RequestParam(defaultValue = "1") Integer pageNum,
+            @RequestParam(defaultValue = "10") Integer pageSize,
+            @RequestParam Integer storeId,
+            @RequestParam(required = false) Integer facilityCategory) {
+        log.info("BathFacilityServiceController.getPageList?pageNum={},pageSize={},storeId={},facilityCategory={}",
+                pageNum, pageSize, storeId, facilityCategory);
+        return R.data(facilityServiceService.getPageList(pageNum, pageSize, storeId, facilityCategory));
+    }
+
+    @ApiOperation("查询洗浴设施及服务列表")
+    @ApiOperationSupport(order = 2)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "storeId", value = "门店ID", dataType = "int", paramType = "query", required = true),
+            @ApiImplicitParam(name = "facilityCategory", value = "设施分类(1:洗浴区, 2:汗蒸区, 3:休闲区, 4:餐饮区)", dataType = "int", paramType = "query")
+    })
+    @GetMapping("/list")
+    public R<List<BathFacilityServiceVo>> getList(
+            @RequestParam Integer storeId,
+            @RequestParam(required = false) Integer facilityCategory) {
+        log.info("BathFacilityServiceController.getList?storeId={},facilityCategory={}", storeId, facilityCategory);
+        return R.data(facilityServiceService.getList(storeId, facilityCategory));
+    }
+
+    @ApiOperation("根据ID查询洗浴设施及服务详情")
+    @ApiOperationSupport(order = 3)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "主键ID", dataType = "int", paramType = "query", required = true)
+    })
+    @GetMapping("/detail")
+    public R<BathFacilityServiceVo> getDetail(@RequestParam Integer id) {
+        log.info("BathFacilityServiceController.getDetail?id={}", id);
+        BathFacilityServiceVo vo = facilityServiceService.getDetail(id);
+        if (vo == null) {
+            return R.fail("数据不存在");
+        }
+        return R.data(vo);
+    }
+
+    @ApiOperation("新增洗浴设施及服务")
+    @ApiOperationSupport(order = 4)
+    @PostMapping("/save")
+    public R<Boolean> saveFacilityService(@RequestBody BathFacilityServiceVo vo) {
+        log.info("BathFacilityServiceController.saveFacilityService?vo={}", vo);
+        try {
+            BathFacilityService facilityService = new BathFacilityService();
+            facilityService.setStoreId(vo.getStoreId());
+            facilityService.setFacilityCategory(vo.getFacilityCategory());
+            facilityService.setFacilityName(vo.getFacilityName());
+            facilityService.setChargingStandard(vo.getChargingStandard());
+            facilityService.setUsageTimeType(vo.getUsageTimeType());
+            facilityService.setUsageStartTime(vo.getUsageStartTime());
+            facilityService.setUsageEndTime(vo.getUsageEndTime());
+            facilityService.setDisplayInStoreDetail(vo.getDisplayInStoreDetail());
+            boolean result = facilityServiceService.saveFacilityService(facilityService, vo.getImageList());
+            if (result) {
+                return R.success("新增成功");
+            }
+            return R.fail("新增失败");
+        } catch (Exception e) {
+            log.error("BathFacilityServiceController.saveFacilityService异常", e);
+            return R.fail(e.getMessage());
+        }
+    }
+
+    @ApiOperation("修改洗浴设施及服务")
+    @ApiOperationSupport(order = 5)
+    @PostMapping("/update")
+    public R<Boolean> updateFacilityService(@RequestBody BathFacilityServiceVo vo) {
+        log.info("BathFacilityServiceController.updateFacilityService?vo={}", vo);
+        try {
+            if (vo.getId() == null) {
+                return R.fail("主键ID不能为空");
+            }
+            BathFacilityService facilityService = new BathFacilityService();
+            facilityService.setId(vo.getId());
+            facilityService.setStoreId(vo.getStoreId());
+            facilityService.setFacilityCategory(vo.getFacilityCategory());
+            facilityService.setFacilityName(vo.getFacilityName());
+            facilityService.setChargingStandard(vo.getChargingStandard());
+            facilityService.setUsageTimeType(vo.getUsageTimeType());
+            facilityService.setUsageStartTime(vo.getUsageStartTime());
+            facilityService.setUsageEndTime(vo.getUsageEndTime());
+            facilityService.setDisplayInStoreDetail(vo.getDisplayInStoreDetail());
+            boolean result = facilityServiceService.updateFacilityService(facilityService, vo.getImageList());
+            if (result) {
+                return R.success("修改成功");
+            }
+            return R.fail("修改失败");
+        } catch (Exception e) {
+            log.error("BathFacilityServiceController.updateFacilityService异常", e);
+            return R.fail(e.getMessage());
+        }
+    }
+
+    @ApiOperation("删除洗浴设施及服务")
+    @ApiOperationSupport(order = 6)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "主键ID", dataType = "int", paramType = "query", required = true)
+    })
+    @PostMapping("/delete")
+    public R<Boolean> deleteFacilityService(@RequestParam Integer id) {
+        log.info("BathFacilityServiceController.deleteFacilityService?id={}", id);
+        try {
+            boolean result = facilityServiceService.deleteFacilityService(id);
+            if (result) {
+                return R.success("删除成功");
+            }
+            return R.fail("删除失败");
+        } catch (Exception e) {
+            log.error("BathFacilityServiceController.deleteFacilityService异常", e);
+            return R.fail(e.getMessage());
+        }
+    }
+}
+

+ 154 - 0
alien-store/src/main/java/shop/alien/store/controller/SportsEquipmentFacilityController.java

@@ -0,0 +1,154 @@
+package shop.alien.store.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+import shop.alien.entity.result.R;
+import shop.alien.entity.store.SportsEquipmentFacility;
+import shop.alien.entity.store.vo.SportsEquipmentFacilityVo;
+import shop.alien.store.service.SportsEquipmentFacilityService;
+
+import java.util.List;
+
+/**
+ * 运动器材设施Controller
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Slf4j
+@Api(tags = {"运动器材设施管理"})
+@ApiSort(1)
+@CrossOrigin
+@RestController
+@RequestMapping("/sports/equipment/facility")
+@RequiredArgsConstructor
+public class SportsEquipmentFacilityController {
+
+    private final SportsEquipmentFacilityService facilityService;
+
+    @ApiOperation("分页查询运动器材设施列表")
+    @ApiOperationSupport(order = 1)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageNum", value = "页码", dataType = "int", paramType = "query", required = true, defaultValue = "1"),
+            @ApiImplicitParam(name = "pageSize", value = "页大小", dataType = "int", paramType = "query", required = true, defaultValue = "10"),
+            @ApiImplicitParam(name = "storeId", value = "门店ID", dataType = "int", paramType = "query", required = true),
+            @ApiImplicitParam(name = "facilityCategory", value = "设施分类(1:有氧区, 2:力量区, 3:单功能机械区)", dataType = "int", paramType = "query")
+    })
+    @GetMapping("/page")
+    public R<IPage<SportsEquipmentFacilityVo>> getPageList(
+            @RequestParam(defaultValue = "1") Integer pageNum,
+            @RequestParam(defaultValue = "10") Integer pageSize,
+            @RequestParam Integer storeId,
+            @RequestParam(required = false) Integer facilityCategory) {
+        log.info("SportsEquipmentFacilityController.getPageList?pageNum={},pageSize={},storeId={},facilityCategory={}",
+                pageNum, pageSize, storeId, facilityCategory);
+        return R.data(facilityService.getPageList(pageNum, pageSize, storeId, facilityCategory));
+    }
+
+    @ApiOperation("查询运动器材设施列表")
+    @ApiOperationSupport(order = 2)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "storeId", value = "门店ID", dataType = "int", paramType = "query", required = true),
+            @ApiImplicitParam(name = "facilityCategory", value = "设施分类(1:有氧区, 2:力量区, 3:单功能机械区)", dataType = "int", paramType = "query")
+    })
+    @GetMapping("/list")
+    public R<List<SportsEquipmentFacilityVo>> getList(
+            @RequestParam Integer storeId,
+            @RequestParam(required = false) Integer facilityCategory) {
+        log.info("SportsEquipmentFacilityController.getList?storeId={},facilityCategory={}", storeId, facilityCategory);
+        return R.data(facilityService.getList(storeId, facilityCategory));
+    }
+
+    @ApiOperation("根据ID查询运动器材设施详情")
+    @ApiOperationSupport(order = 3)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "主键ID", dataType = "int", paramType = "query", required = true)
+    })
+    @GetMapping("/detail")
+    public R<SportsEquipmentFacilityVo> getDetail(@RequestParam Integer id) {
+        log.info("SportsEquipmentFacilityController.getDetail?id={}", id);
+        SportsEquipmentFacilityVo vo = facilityService.getDetail(id);
+        if (vo == null) {
+            return R.fail("数据不存在");
+        }
+        return R.data(vo);
+    }
+
+    @ApiOperation("新增运动器材设施")
+    @ApiOperationSupport(order = 4)
+    @PostMapping("/save")
+    public R<Boolean> saveFacility(@RequestBody SportsEquipmentFacilityVo vo) {
+        log.info("SportsEquipmentFacilityController.saveFacility?vo={}", vo);
+        try {
+            SportsEquipmentFacility facility = new SportsEquipmentFacility();
+            facility.setStoreId(vo.getStoreId());
+            facility.setFacilityCategory(vo.getFacilityCategory());
+            facility.setFacilityName(vo.getFacilityName());
+            facility.setQuantity(vo.getQuantity());
+            facility.setBrand(vo.getBrand());
+            facility.setDescription(vo.getDescription());
+            facility.setDisplayInStoreDetail(vo.getDisplayInStoreDetail());
+            boolean result = facilityService.saveFacility(facility, vo.getImageList());
+            if (result) {
+                return R.success("新增成功");
+            }
+            return R.fail("新增失败");
+        } catch (Exception e) {
+            log.error("SportsEquipmentFacilityController.saveFacility异常", e);
+            return R.fail(e.getMessage());
+        }
+    }
+
+    @ApiOperation("修改运动器材设施")
+    @ApiOperationSupport(order = 5)
+    @PostMapping("/update")
+    public R<Boolean> updateFacility(@RequestBody SportsEquipmentFacilityVo vo) {
+        log.info("SportsEquipmentFacilityController.updateFacility?vo={}", vo);
+        try {
+            if (vo.getId() == null) {
+                return R.fail("主键ID不能为空");
+            }
+            SportsEquipmentFacility facility = new SportsEquipmentFacility();
+            facility.setId(vo.getId());
+            facility.setStoreId(vo.getStoreId());
+            facility.setFacilityCategory(vo.getFacilityCategory());
+            facility.setFacilityName(vo.getFacilityName());
+            facility.setQuantity(vo.getQuantity());
+            facility.setBrand(vo.getBrand());
+            facility.setDescription(vo.getDescription());
+            facility.setDisplayInStoreDetail(vo.getDisplayInStoreDetail());
+            boolean result = facilityService.updateFacility(facility, vo.getImageList());
+            if (result) {
+                return R.success("修改成功");
+            }
+            return R.fail("修改失败");
+        } catch (Exception e) {
+            log.error("SportsEquipmentFacilityController.updateFacility异常", e);
+            return R.fail(e.getMessage());
+        }
+    }
+
+    @ApiOperation("删除运动器材设施")
+    @ApiOperationSupport(order = 6)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "主键ID", dataType = "int", paramType = "query", required = true)
+    })
+    @PostMapping("/delete")
+    public R<Boolean> deleteFacility(@RequestParam Integer id) {
+        log.info("SportsEquipmentFacilityController.deleteFacility?id={}", id);
+        try {
+            boolean result = facilityService.deleteFacility(id);
+            if (result) {
+                return R.success("删除成功");
+            }
+            return R.fail("删除失败");
+        } catch (Exception e) {
+            log.error("SportsEquipmentFacilityController.deleteFacility异常", e);
+            return R.fail(e.getMessage());
+        }
+    }
+}
+

+ 72 - 0
alien-store/src/main/java/shop/alien/store/service/BathFacilityServiceService.java

@@ -0,0 +1,72 @@
+package shop.alien.store.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import shop.alien.entity.store.BathFacilityService;
+import shop.alien.entity.store.vo.BathFacilityServiceVo;
+
+import java.util.List;
+
+/**
+ * 洗浴设施及服务服务接口
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+public interface BathFacilityServiceService extends IService<BathFacilityService> {
+
+    /**
+     * 分页查询洗浴设施及服务列表
+     *
+     * @param pageNum          页码
+     * @param pageSize         页大小
+     * @param storeId          门店ID
+     * @param facilityCategory 设施分类
+     * @return IPage<BathFacilityServiceVo>
+     */
+    IPage<BathFacilityServiceVo> getPageList(Integer pageNum, Integer pageSize, Integer storeId, Integer facilityCategory);
+
+    /**
+     * 查询洗浴设施及服务列表
+     *
+     * @param storeId          门店ID
+     * @param facilityCategory 设施分类
+     * @return List<BathFacilityServiceVo>
+     */
+    List<BathFacilityServiceVo> getList(Integer storeId, Integer facilityCategory);
+
+    /**
+     * 根据ID查询详情
+     *
+     * @param id 主键ID
+     * @return BathFacilityServiceVo
+     */
+    BathFacilityServiceVo getDetail(Integer id);
+
+    /**
+     * 新增洗浴设施及服务
+     *
+     * @param facilityService 设施服务信息
+     * @param imageList       图片列表
+     * @return boolean
+     */
+    boolean saveFacilityService(BathFacilityService facilityService, List<String> imageList);
+
+    /**
+     * 修改洗浴设施及服务
+     *
+     * @param facilityService 设施服务信息
+     * @param imageList       图片列表
+     * @return boolean
+     */
+    boolean updateFacilityService(BathFacilityService facilityService, List<String> imageList);
+
+    /**
+     * 删除洗浴设施及服务
+     *
+     * @param id 主键ID
+     * @return boolean
+     */
+    boolean deleteFacilityService(Integer id);
+}
+

+ 72 - 0
alien-store/src/main/java/shop/alien/store/service/SportsEquipmentFacilityService.java

@@ -0,0 +1,72 @@
+package shop.alien.store.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import shop.alien.entity.store.SportsEquipmentFacility;
+import shop.alien.entity.store.vo.SportsEquipmentFacilityVo;
+
+import java.util.List;
+
+/**
+ * 运动器材设施服务接口
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+public interface SportsEquipmentFacilityService extends IService<SportsEquipmentFacility> {
+
+    /**
+     * 分页查询运动器材设施列表
+     *
+     * @param pageNum          页码
+     * @param pageSize         页大小
+     * @param storeId           门店ID
+     * @param facilityCategory 设施分类
+     * @return IPage<SportsEquipmentFacilityVo>
+     */
+    IPage<SportsEquipmentFacilityVo> getPageList(Integer pageNum, Integer pageSize, Integer storeId, Integer facilityCategory);
+
+    /**
+     * 查询运动器材设施列表
+     *
+     * @param storeId           门店ID
+     * @param facilityCategory 设施分类
+     * @return List<SportsEquipmentFacilityVo>
+     */
+    List<SportsEquipmentFacilityVo> getList(Integer storeId, Integer facilityCategory);
+
+    /**
+     * 根据ID查询详情
+     *
+     * @param id 主键ID
+     * @return SportsEquipmentFacilityVo
+     */
+    SportsEquipmentFacilityVo getDetail(Integer id);
+
+    /**
+     * 新增运动器材设施
+     *
+     * @param facility 设施信息
+     * @param imageList 图片列表
+     * @return boolean
+     */
+    boolean saveFacility(SportsEquipmentFacility facility, List<String> imageList);
+
+    /**
+     * 修改运动器材设施
+     *
+     * @param facility 设施信息
+     * @param imageList 图片列表
+     * @return boolean
+     */
+    boolean updateFacility(SportsEquipmentFacility facility, List<String> imageList);
+
+    /**
+     * 删除运动器材设施
+     *
+     * @param id 主键ID
+     * @return boolean
+     */
+    boolean deleteFacility(Integer id);
+}
+

+ 201 - 0
alien-store/src/main/java/shop/alien/store/service/impl/BathFacilityServiceServiceImpl.java

@@ -0,0 +1,201 @@
+package shop.alien.store.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+import shop.alien.entity.store.BathFacilityService;
+import shop.alien.entity.store.StoreImg;
+import shop.alien.entity.store.vo.BathFacilityServiceVo;
+import shop.alien.mapper.BathFacilityServiceMapper;
+import shop.alien.mapper.StoreImgMapper;
+import shop.alien.store.service.BathFacilityServiceService;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 洗浴设施及服务服务实现类
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+@Transactional(rollbackFor = Exception.class)
+public class BathFacilityServiceServiceImpl extends ServiceImpl<BathFacilityServiceMapper, BathFacilityService>
+        implements BathFacilityServiceService {
+
+    private final BathFacilityServiceMapper facilityServiceMapper;
+    private final StoreImgMapper storeImgMapper;
+
+    /**
+     * 设施分类名称映射
+     */
+    private static final String[] FACILITY_CATEGORY_NAMES = {"", "洗浴区", "汗蒸区", "休闲区", "餐饮区"};
+
+    /**
+     * 洗浴设施及服务图片类型
+     */
+    private static final Integer IMG_TYPE_BATH_FACILITY = 29;
+
+    @Override
+    public IPage<BathFacilityServiceVo> getPageList(Integer pageNum, Integer pageSize, Integer storeId, Integer facilityCategory) {
+        Page<BathFacilityService> page = new Page<>(pageNum, pageSize);
+        LambdaQueryWrapper<BathFacilityService> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(BathFacilityService::getStoreId, storeId);
+        if (facilityCategory != null) {
+            queryWrapper.eq(BathFacilityService::getFacilityCategory, facilityCategory);
+        }
+        queryWrapper.orderByDesc(BathFacilityService::getCreatedTime);
+        IPage<BathFacilityService> facilityServicePage = facilityServiceMapper.selectPage(page, queryWrapper);
+        return facilityServicePage.convert(this::convertToVo);
+    }
+
+    @Override
+    public List<BathFacilityServiceVo> getList(Integer storeId, Integer facilityCategory) {
+        LambdaQueryWrapper<BathFacilityService> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(BathFacilityService::getStoreId, storeId);
+        if (facilityCategory != null) {
+            queryWrapper.eq(BathFacilityService::getFacilityCategory, facilityCategory);
+        }
+        queryWrapper.orderByDesc(BathFacilityService::getCreatedTime);
+        List<BathFacilityService> facilityServiceList = facilityServiceMapper.selectList(queryWrapper);
+        return facilityServiceList.stream().map(this::convertToVo).collect(Collectors.toList());
+    }
+
+    @Override
+    public BathFacilityServiceVo getDetail(Integer id) {
+        BathFacilityService facilityService = facilityServiceMapper.selectById(id);
+        if (facilityService == null) {
+            return null;
+        }
+        return convertToVo(facilityService);
+    }
+
+    @Override
+    public boolean saveFacilityService(BathFacilityService facilityService, List<String> imageList) {
+        // 校验使用时间
+        validateUsageTime(facilityService);
+        // 保存设施服务信息
+        boolean result = this.save(facilityService);
+        if (result && !CollectionUtils.isEmpty(imageList)) {
+            // 保存图片
+            saveImages(facilityService.getId(), facilityService.getStoreId(), imageList);
+        }
+        return result;
+    }
+
+    @Override
+    public boolean updateFacilityService(BathFacilityService facilityService, List<String> imageList) {
+        // 校验使用时间
+        validateUsageTime(facilityService);
+        // 更新设施服务信息
+        boolean result = this.updateById(facilityService);
+        if (result && !CollectionUtils.isEmpty(imageList)) {
+            // 删除旧图片
+            LambdaQueryWrapper<StoreImg> deleteWrapper = new LambdaQueryWrapper<>();
+            deleteWrapper.eq(StoreImg::getBusinessId, facilityService.getId())
+                    .eq(StoreImg::getImgType, IMG_TYPE_BATH_FACILITY);
+            storeImgMapper.delete(deleteWrapper);
+            // 保存新图片
+            saveImages(facilityService.getId(), facilityService.getStoreId(), imageList);
+        }
+        return result;
+    }
+
+    @Override
+    public boolean deleteFacilityService(Integer id) {
+        // 删除图片
+        LambdaQueryWrapper<StoreImg> deleteWrapper = new LambdaQueryWrapper<>();
+        deleteWrapper.eq(StoreImg::getBusinessId, id)
+                .eq(StoreImg::getImgType, IMG_TYPE_BATH_FACILITY);
+        storeImgMapper.delete(deleteWrapper);
+        // 删除设施服务
+        return this.removeById(id);
+    }
+
+    /**
+     * 校验使用时间
+     */
+    private void validateUsageTime(BathFacilityService facilityService) {
+        if (facilityService.getUsageTimeType() == null) {
+            throw new RuntimeException("使用时间类型不能为空");
+        }
+        // 如果选择时间,需要填写开始时间和结束时间
+        if (facilityService.getUsageTimeType() == 1) {
+            if (!StringUtils.hasText(facilityService.getUsageStartTime())
+                    || !StringUtils.hasText(facilityService.getUsageEndTime())) {
+                throw new RuntimeException("选择时间时,开始时间和结束时间不能为空");
+            }
+            // 校验时间格式
+            if (!facilityService.getUsageStartTime().matches("^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$")
+                    || !facilityService.getUsageEndTime().matches("^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$")) {
+                throw new RuntimeException("时间格式错误,请使用HH:mm格式");
+            }
+        }
+    }
+
+    /**
+     * 保存图片
+     */
+    private void saveImages(Integer facilityServiceId, Integer storeId, List<String> imageList) {
+        for (int i = 0; i < imageList.size(); i++) {
+            StoreImg storeImg = new StoreImg();
+            storeImg.setStoreId(storeId);
+            storeImg.setImgType(IMG_TYPE_BATH_FACILITY);
+            storeImg.setBusinessId(facilityServiceId);
+            storeImg.setImgUrl(imageList.get(i));
+            storeImg.setImgSort(i + 1);
+            storeImg.setImgDescription("洗浴设施及服务图片");
+            storeImgMapper.insert(storeImg);
+        }
+    }
+
+    /**
+     * 转换为VO对象
+     */
+    private BathFacilityServiceVo convertToVo(BathFacilityService facilityService) {
+        BathFacilityServiceVo vo = new BathFacilityServiceVo();
+        BeanUtils.copyProperties(facilityService, vo);
+        // 设置分类名称
+        if (facilityService.getFacilityCategory() != null && facilityService.getFacilityCategory() > 0
+                && facilityService.getFacilityCategory() < FACILITY_CATEGORY_NAMES.length) {
+            vo.setFacilityCategoryName(FACILITY_CATEGORY_NAMES[facilityService.getFacilityCategory()]);
+        }
+        // 设置使用时间类型文本
+        if (facilityService.getUsageTimeType() != null) {
+            vo.setUsageTimeTypeText(facilityService.getUsageTimeType() == 0 ? "全天" : "选择时间");
+            // 设置使用时间范围
+            if (facilityService.getUsageTimeType() == 1
+                    && StringUtils.hasText(facilityService.getUsageStartTime())
+                    && StringUtils.hasText(facilityService.getUsageEndTime())) {
+                vo.setUsageTimeRange(facilityService.getUsageStartTime() + "-" + facilityService.getUsageEndTime());
+            }
+        }
+        // 设置显示状态文本
+        if (facilityService.getDisplayInStoreDetail() != null) {
+            vo.setDisplayInStoreDetailText(facilityService.getDisplayInStoreDetail() == 1 ? "显示" : "隐藏");
+        }
+        // 查询图片列表
+        LambdaQueryWrapper<StoreImg> imageWrapper = new LambdaQueryWrapper<>();
+        imageWrapper.eq(StoreImg::getBusinessId, facilityService.getId())
+                .eq(StoreImg::getImgType, IMG_TYPE_BATH_FACILITY);
+        imageWrapper.orderByAsc(StoreImg::getImgSort);
+        List<StoreImg> imageList = storeImgMapper.selectList(imageWrapper);
+        if (!CollectionUtils.isEmpty(imageList)) {
+            vo.setImageList(imageList.stream().map(StoreImg::getImgUrl)
+                    .collect(Collectors.toList()));
+        }
+        return vo;
+    }
+}
+

+ 173 - 0
alien-store/src/main/java/shop/alien/store/service/impl/SportsEquipmentFacilityServiceImpl.java

@@ -0,0 +1,173 @@
+package shop.alien.store.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+import shop.alien.entity.store.SportsEquipmentFacility;
+import shop.alien.entity.store.StoreImg;
+import shop.alien.entity.store.vo.SportsEquipmentFacilityVo;
+import shop.alien.mapper.SportsEquipmentFacilityMapper;
+import shop.alien.mapper.StoreImgMapper;
+import shop.alien.store.service.SportsEquipmentFacilityService;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 运动器材设施服务实现类
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+@Transactional(rollbackFor = Exception.class)
+public class SportsEquipmentFacilityServiceImpl extends ServiceImpl<SportsEquipmentFacilityMapper, SportsEquipmentFacility>
+        implements SportsEquipmentFacilityService {
+
+    private final SportsEquipmentFacilityMapper facilityMapper;
+    private final StoreImgMapper storeImgMapper;
+
+    /**
+     * 运动器材设施图片类型
+     */
+    private static final Integer IMG_TYPE_SPORTS_EQUIPMENT = 28;
+
+    /**
+     * 设施分类名称映射
+     */
+    private static final String[] FACILITY_CATEGORY_NAMES = {"", "有氧区", "力量区", "单功能机械区"};
+
+    @Override
+    public IPage<SportsEquipmentFacilityVo> getPageList(Integer pageNum, Integer pageSize, Integer storeId, Integer facilityCategory) {
+        Page<SportsEquipmentFacility> page = new Page<>(pageNum, pageSize);
+        LambdaQueryWrapper<SportsEquipmentFacility> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(SportsEquipmentFacility::getStoreId, storeId);
+        if (facilityCategory != null) {
+            queryWrapper.eq(SportsEquipmentFacility::getFacilityCategory, facilityCategory);
+        }
+        queryWrapper.orderByDesc(SportsEquipmentFacility::getCreatedTime);
+        IPage<SportsEquipmentFacility> facilityPage = facilityMapper.selectPage(page, queryWrapper);
+        return facilityPage.convert(this::convertToVo);
+    }
+
+    @Override
+    public List<SportsEquipmentFacilityVo> getList(Integer storeId, Integer facilityCategory) {
+        LambdaQueryWrapper<SportsEquipmentFacility> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(SportsEquipmentFacility::getStoreId, storeId);
+        if (facilityCategory != null) {
+            queryWrapper.eq(SportsEquipmentFacility::getFacilityCategory, facilityCategory);
+        }
+        queryWrapper.orderByDesc(SportsEquipmentFacility::getCreatedTime);
+        List<SportsEquipmentFacility> facilityList = facilityMapper.selectList(queryWrapper);
+        return facilityList.stream().map(this::convertToVo).collect(Collectors.toList());
+    }
+
+    @Override
+    public SportsEquipmentFacilityVo getDetail(Integer id) {
+        SportsEquipmentFacility facility = facilityMapper.selectById(id);
+        if (facility == null) {
+            return null;
+        }
+        return convertToVo(facility);
+    }
+
+    @Override
+    public boolean saveFacility(SportsEquipmentFacility facility, List<String> imageList) {
+        // 校验图片数量(最多20张)
+        if (!CollectionUtils.isEmpty(imageList) && imageList.size() > 20) {
+            throw new RuntimeException("实景图片最多上传20张");
+        }
+        // 保存设施信息
+        boolean result = this.save(facility);
+        if (result && !CollectionUtils.isEmpty(imageList)) {
+            // 保存图片
+            saveImages(facility.getId(), facility.getStoreId(), imageList);
+        }
+        return result;
+    }
+
+    @Override
+    public boolean updateFacility(SportsEquipmentFacility facility, List<String> imageList) {
+        // 校验图片数量(最多20张)
+        if (!CollectionUtils.isEmpty(imageList) && imageList.size() > 20) {
+            throw new RuntimeException("实景图片最多上传20张");
+        }
+        // 更新设施信息
+        boolean result = this.updateById(facility);
+        if (result && !CollectionUtils.isEmpty(imageList)) {
+            // 删除旧图片
+            LambdaQueryWrapper<StoreImg> deleteWrapper = new LambdaQueryWrapper<>();
+            deleteWrapper.eq(StoreImg::getBusinessId, facility.getId())
+                    .eq(StoreImg::getImgType, IMG_TYPE_SPORTS_EQUIPMENT);
+            storeImgMapper.delete(deleteWrapper);
+            // 保存新图片
+            saveImages(facility.getId(), facility.getStoreId(), imageList);
+        }
+        return result;
+    }
+
+    @Override
+    public boolean deleteFacility(Integer id) {
+        // 删除图片
+        LambdaQueryWrapper<StoreImg> deleteWrapper = new LambdaQueryWrapper<>();
+        deleteWrapper.eq(StoreImg::getBusinessId, id)
+                .eq(StoreImg::getImgType, IMG_TYPE_SPORTS_EQUIPMENT);
+        storeImgMapper.delete(deleteWrapper);
+        // 删除设施
+        return this.removeById(id);
+    }
+
+    /**
+     * 保存图片
+     */
+    private void saveImages(Integer facilityId, Integer storeId, List<String> imageList) {
+        for (int i = 0; i < imageList.size(); i++) {
+            StoreImg storeImg = new StoreImg();
+            storeImg.setStoreId(storeId);
+            storeImg.setImgType(IMG_TYPE_SPORTS_EQUIPMENT);
+            storeImg.setBusinessId(facilityId);
+            storeImg.setImgUrl(imageList.get(i));
+            storeImg.setImgSort(i + 1);
+            storeImg.setImgDescription("运动器材设施实景图片");
+            storeImgMapper.insert(storeImg);
+        }
+    }
+
+    /**
+     * 转换为VO对象
+     */
+    private SportsEquipmentFacilityVo convertToVo(SportsEquipmentFacility facility) {
+        SportsEquipmentFacilityVo vo = new SportsEquipmentFacilityVo();
+        BeanUtils.copyProperties(facility, vo);
+        // 设置分类名称
+        if (facility.getFacilityCategory() != null && facility.getFacilityCategory() > 0
+                && facility.getFacilityCategory() < FACILITY_CATEGORY_NAMES.length) {
+            vo.setFacilityCategoryName(FACILITY_CATEGORY_NAMES[facility.getFacilityCategory()]);
+        }
+        // 设置显示状态文本
+        if (facility.getDisplayInStoreDetail() != null) {
+            vo.setDisplayInStoreDetailText(facility.getDisplayInStoreDetail() == 1 ? "显示" : "隐藏");
+        }
+        // 查询图片列表
+        LambdaQueryWrapper<StoreImg> imageWrapper = new LambdaQueryWrapper<>();
+        imageWrapper.eq(StoreImg::getBusinessId, facility.getId())
+                .eq(StoreImg::getImgType, IMG_TYPE_SPORTS_EQUIPMENT);
+        imageWrapper.orderByAsc(StoreImg::getImgSort);
+        List<StoreImg> imageList = storeImgMapper.selectList(imageWrapper);
+        if (!CollectionUtils.isEmpty(imageList)) {
+            vo.setImageList(imageList.stream().map(StoreImg::getImgUrl)
+                    .collect(Collectors.toList()));
+        }
+        return vo;
+    }
+}
+