Browse Source

feat(sports-equipment): 添加商户端设施详情与分类汇总接口

- 新增根据ID查询运动器材设施详情接口(getStoreDetail)
- 新增查询指定店铺按分类汇总的设备信息接口(getstoreCategorySummary)
- 实现设施详情查询服务方法(getStoreDetail)
- 实现分类汇总查询服务方法(getstoreCategorySummary)
- 在控制器中添加相应的API文档注解和参数校验
- 完善分类汇总逻辑,包含设备数量、图片列表和设备列表的整合处理
fcw 1 week ago
parent
commit
163a198fe9

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

@@ -162,5 +162,33 @@ public class SportsEquipmentFacilityController {
         log.info("SportsEquipmentFacilityController.getCategorySummary?storeId={}", storeId);
         return R.data(facilityService.getCategorySummary(storeId));
     }
+
+
+
+    @ApiOperation("根据ID查询运动器材设施详情(商户端)")
+    @ApiOperationSupport(order = 8)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "主键ID", dataType = "int", paramType = "query", required = true)
+    })
+    @GetMapping("/storeDetail")
+    public R<SportsEquipmentFacilityVo> getStoreDetail(@RequestParam Integer id) {
+        log.info("SportsEquipmentFacilityController.getStoreDetail?id={}", id);
+        SportsEquipmentFacilityVo vo = facilityService.getStoreDetail(id);
+        if (vo == null) {
+            return R.fail("数据不存在");
+        }
+        return R.data(vo);
+    }
+
+    @ApiOperation("查询指定店铺按分类汇总的设备信息(包含设备数量、图片列表和设备列表)(商户端)")
+    @ApiOperationSupport(order = 9)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "storeId", value = "门店ID", dataType = "int", paramType = "query", required = true)
+    })
+    @GetMapping("/storeCategorySummary")
+    public R<List<SportsEquipmentFacilityCategoryVo>> getstoreCategorySummary(@RequestParam Integer storeId) {
+        log.info("SportsEquipmentFacilityController.getstoreCategorySummary?storeId={}", storeId);
+        return R.data(facilityService.getstoreCategorySummary(storeId));
+    }
 }
 

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

@@ -78,5 +78,9 @@ public interface SportsEquipmentFacilityService extends IService<SportsEquipment
      * @return List<SportsEquipmentFacilityCategoryVo>
      */
     List<SportsEquipmentFacilityCategoryVo> getCategorySummary(Integer storeId);
+
+    SportsEquipmentFacilityVo getStoreDetail(Integer id);
+
+    List<SportsEquipmentFacilityCategoryVo> getstoreCategorySummary(Integer storeId);
 }
 

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

@@ -83,6 +83,15 @@ public class SportsEquipmentFacilityServiceImpl extends ServiceImpl<SportsEquipm
     }
 
     @Override
+    public SportsEquipmentFacilityVo getStoreDetail(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) {
@@ -236,5 +245,63 @@ public class SportsEquipmentFacilityServiceImpl extends ServiceImpl<SportsEquipm
         }
         return vo;
     }
+
+
+    @Override
+    public List<SportsEquipmentFacilityCategoryVo> getstoreCategorySummary(Integer storeId) {
+        List<SportsEquipmentFacilityCategoryVo> result = new ArrayList<>();
+
+        // 遍历所有分类(1:有氧区, 2:力量区, 3:单功能机械区)
+        for (int category = 1; category < FACILITY_CATEGORY_NAMES.length; category++) {
+            SportsEquipmentFacilityCategoryVo categoryVo = new SportsEquipmentFacilityCategoryVo();
+            categoryVo.setFacilityCategory(category);
+            categoryVo.setFacilityCategoryName(FACILITY_CATEGORY_NAMES[category]);
+
+            // 查询该分类下的设备列表(不分页)
+            LambdaQueryWrapper<SportsEquipmentFacility> facilityWrapper = new LambdaQueryWrapper<>();
+            facilityWrapper.eq(SportsEquipmentFacility::getStoreId, storeId)
+                    .eq(SportsEquipmentFacility::getFacilityCategory, category);
+            facilityWrapper.orderByDesc(SportsEquipmentFacility::getCreatedTime);
+            List<SportsEquipmentFacility> facilityList = facilityMapper.selectList(facilityWrapper);
+
+            // 设置设备数量
+            categoryVo.setFacilityCount(facilityList != null ? facilityList.size() : 0);
+
+            // 转换为VO列表(不包含图片,避免重复查询)
+            List<SportsEquipmentFacilityVo> facilityVoList = new ArrayList<>();
+            if (!CollectionUtils.isEmpty(facilityList)) {
+                for (SportsEquipmentFacility facility : facilityList) {
+                    SportsEquipmentFacilityVo vo = new SportsEquipmentFacilityVo();
+                    BeanUtils.copyProperties(facility, vo);
+                    // 设置分类名称
+                    vo.setFacilityCategoryName(FACILITY_CATEGORY_NAMES[category]);
+                    // 设置显示状态文本
+                    if (facility.getDisplayInStoreDetail() != null) {
+                        vo.setDisplayInStoreDetailText(facility.getDisplayInStoreDetail() == 1 ? "显示" : "隐藏");
+                    }
+                    facilityVoList.add(vo);
+                }
+            }
+            categoryVo.setFacilityList(facilityVoList);
+
+            // 查询该分类下的图片列表
+            LambdaQueryWrapper<StoreImg> imageWrapper = new LambdaQueryWrapper<>();
+            imageWrapper.eq(StoreImg::getStoreId, storeId)
+                    .eq(StoreImg::getBusinessId, category)
+                    .eq(StoreImg::getImgType, IMG_TYPE_SPORTS_EQUIPMENT);
+            imageWrapper.orderByAsc(StoreImg::getImgSort);
+            List<StoreImg> imageList = storeImgMapper.selectList(imageWrapper);
+            if (!CollectionUtils.isEmpty(imageList)) {
+                categoryVo.setImageList(imageList.stream().map(StoreImg::getImgUrl)
+                        .collect(Collectors.toList()));
+            } else {
+                categoryVo.setImageList(new ArrayList<>());
+            }
+
+            result.add(categoryVo);
+        }
+
+        return result;
+    }
 }