浏览代码

运动健身 列表 详情

qxy 2 天之前
父节点
当前提交
0c9467e3e1

+ 25 - 0
alien-entity/src/main/java/shop/alien/mapper/StoreProductItemMapper.java

@@ -1,8 +1,12 @@
 package shop.alien.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import shop.alien.entity.store.StoreProductItem;
+import shop.alien.entity.store.vo.StoreProductItemGymVo;
 
 /**
  * <p>
@@ -15,5 +19,26 @@ import shop.alien.entity.store.StoreProductItem;
 @Mapper
 public interface StoreProductItemMapper extends BaseMapper<StoreProductItem> {
 
+    /**
+     * 分页查询商品表与运动健身商品表关联数据
+     *
+     * @param page 分页对象
+     * @param storeId 门店ID
+     * @param prodName 商品名称(模糊查询)
+     * @param prodType 商品类型
+     * @return IPage<StoreProductItemGymVo>
+     */
+    IPage<StoreProductItemGymVo> getPageWithGym(Page<StoreProductItemGymVo> page,
+                                                 @Param("storeId") Integer storeId,
+                                                 @Param("prodName") String prodName,
+                                                 @Param("prodType") Integer prodType);
+
+    /**
+     * 根据ID查询商品表与运动健身商品表关联详情
+     *
+     * @param id 商品表主键ID
+     * @return StoreProductItemGymVo
+     */
+    StoreProductItemGymVo getDetailWithGym(@Param("id") Long id);
 }
 

+ 150 - 0
alien-entity/src/main/resources/mapper/StoreProductItemMapper.xml

@@ -33,5 +33,155 @@
         rejection_reason, delete_flag, created_user_id, updated_user_id, created_time, updated_time
     </sql>
 
+    <!-- 商品表与运动健身商品表关联查询结果映射 -->
+    <resultMap id="StoreProductItemGymVoResultMap" type="shop.alien.entity.store.vo.StoreProductItemGymVo">
+        <!-- store_product_item 表字段 -->
+        <id column="id" property="id" />
+        <result column="pid" property="pid" />
+        <result column="store_id" property="storeId" />
+        <result column="prod_name" property="prodName" />
+        <result column="prod_type" property="prodType" />
+        <result column="images" property="images" />
+        <result column="image_content" property="imageContent" />
+        <result column="detail_content" property="detailContent" />
+        <result column="extra_note" property="extraNote" />
+        <result column="need_reserve" property="needReserve" />
+        <result column="reserve_rule" property="reserveRule" />
+        <result column="people_limit" property="peopleLimit" />
+        <result column="usage_rule" property="usageRule" />
+        <result column="status" property="status" />
+        <result column="rejection_reason" property="rejectionReason" />
+        <result column="delete_flag" property="deleteFlag" />
+        <result column="created_user_id" property="createdUserId" />
+        <result column="updated_user_id" property="updatedUserId" />
+        <result column="created_time" property="createdTime" />
+        <result column="updated_time" property="updatedTime" />
+        <!-- store_product_gym 表字段 -->
+        <result column="gym_id" property="gymId" />
+        <result column="ext_id" property="extId" />
+        <result column="gym_name" property="name" />
+        <result column="class_mode" property="classMode" />
+        <result column="available_days" property="availableDays" />
+        <result column="total_sessions" property="totalSessions" />
+        <result column="price" property="price" />
+        <result column="course_effect" property="courseEffect" />
+        <result column="suitable_people" property="suitablePeople" />
+        <result column="suitable_membership" property="suitableMembership" />
+        <result column="shower_facility" property="showerFacility" />
+        <result column="extra_notice" property="extraNotice" />
+        <result column="gym_status" property="gymStatus" />
+        <result column="gym_delete_flag" property="gymDeleteFlag" />
+        <result column="gym_created_user_id" property="gymCreatedUserId" />
+        <result column="gym_updated_user_id" property="gymUpdatedUserId" />
+        <result column="gym_created_time" property="gymCreatedTime" />
+        <result column="gym_updated_time" property="gymUpdatedTime" />
+    </resultMap>
+
+    <!-- 分页查询商品表与运动健身商品表关联数据 -->
+    <select id="getPageWithGym" resultMap="StoreProductItemGymVoResultMap">
+        SELECT
+            -- store_product_item 表字段
+            item.id,
+            item.pid,
+            item.store_id,
+            item.prod_name,
+            item.prod_type,
+            item.images,
+            item.image_content,
+            item.detail_content,
+            item.extra_note,
+            item.need_reserve,
+            item.reserve_rule,
+            item.people_limit,
+            item.usage_rule,
+            item.status,
+            item.rejection_reason,
+            item.delete_flag,
+            item.created_user_id,
+            item.updated_user_id,
+            item.created_time,
+            item.updated_time,
+            -- store_product_gym 表字段
+            gym.id AS gym_id,
+            gym.ext_id,
+            gym.name AS gym_name,
+            gym.class_mode,
+            gym.available_days,
+            gym.total_sessions,
+            gym.price,
+            gym.course_effect,
+            gym.suitable_people,
+            gym.suitable_membership,
+            gym.shower_facility,
+            gym.extra_notice,
+            gym.status AS gym_status,
+            gym.delete_flag AS gym_delete_flag,
+            gym.created_user_id AS gym_created_user_id,
+            gym.updated_user_id AS gym_updated_user_id,
+            gym.created_time AS gym_created_time,
+            gym.updated_time AS gym_updated_time
+        FROM store_product_item item
+        LEFT JOIN store_product_gym gym ON item.id = gym.ext_id AND gym.delete_flag = 0
+        WHERE item.delete_flag = 0
+        <if test="storeId != null">
+            AND item.store_id = #{storeId}
+        </if>
+        <if test="prodName != null and prodName != ''">
+            AND item.prod_name LIKE CONCAT('%', #{prodName}, '%')
+        </if>
+        <if test="prodType != null">
+            AND item.prod_type = #{prodType}
+        </if>
+        ORDER BY item.created_time DESC
+    </select>
+
+    <!-- 根据ID查询商品表与运动健身商品表关联详情 -->
+    <select id="getDetailWithGym" resultMap="StoreProductItemGymVoResultMap">
+        SELECT
+            -- store_product_item 表字段
+            item.id,
+            item.pid,
+            item.store_id,
+            item.prod_name,
+            item.prod_type,
+            item.images,
+            item.image_content,
+            item.detail_content,
+            item.extra_note,
+            item.need_reserve,
+            item.reserve_rule,
+            item.people_limit,
+            item.usage_rule,
+            item.status,
+            item.rejection_reason,
+            item.delete_flag,
+            item.created_user_id,
+            item.updated_user_id,
+            item.created_time,
+            item.updated_time,
+            -- store_product_gym 表字段
+            gym.id AS gym_id,
+            gym.ext_id,
+            gym.name AS gym_name,
+            gym.class_mode,
+            gym.available_days,
+            gym.total_sessions,
+            gym.price,
+            gym.course_effect,
+            gym.suitable_people,
+            gym.suitable_membership,
+            gym.shower_facility,
+            gym.extra_notice,
+            gym.status AS gym_status,
+            gym.delete_flag AS gym_delete_flag,
+            gym.created_user_id AS gym_created_user_id,
+            gym.updated_user_id AS gym_updated_user_id,
+            gym.created_time AS gym_created_time,
+            gym.updated_time AS gym_updated_time
+        FROM store_product_item item
+        LEFT JOIN store_product_gym gym ON item.id = gym.ext_id AND gym.delete_flag = 0
+        WHERE item.id = #{id} AND item.delete_flag = 0
+    </select>
+
 </mapper>
 

+ 34 - 0
alien-store/src/main/java/shop/alien/store/controller/StoreProductItemController.java

@@ -7,6 +7,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.StoreProductItem;
+import shop.alien.entity.store.vo.StoreProductItemGymVo;
 import shop.alien.store.service.StoreProductItemService;
 import shop.alien.util.myBaticsPlus.QueryBuilder;
 
@@ -124,5 +125,38 @@ public class StoreProductItemController {
                 .page(storeProductItemService);
         return R.data(pageResult);
     }
+
+    @ApiOperation("用户端 运动健身列表查询")
+    @ApiOperationSupport(order = 8)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageNum", value = "页码(默认1)", dataType = "int", paramType = "query"),
+            @ApiImplicitParam(name = "pageSize", value = "页容(默认10)", dataType = "int", paramType = "query"),
+            @ApiImplicitParam(name = "storeId", value = "门店ID", dataType = "Integer", paramType = "query"),
+            @ApiImplicitParam(name = "prodName", value = "商品名称(模糊查询)", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "prodType", value = "商品类型(1酒吧-酒水 2酒吧-餐食 3美食-餐食 4运动健身-单次 5运动健身-多次)", dataType = "Integer", paramType = "query")
+    })
+    @GetMapping("/getPageWithGym")
+    public R<IPage<StoreProductItemGymVo>> getPageWithGym(
+            @RequestParam int pageNum,
+            @RequestParam int pageSize,
+            @RequestParam(required = false) Integer storeId,
+            @RequestParam(required = false) String prodName,
+            @RequestParam(required = false) Integer prodType) {
+        log.info("StoreProductItemController.getPageWithGym?pageNum={}, pageSize={}, storeId={}, prodName={}, prodType={}",
+                pageNum, pageSize, storeId, prodName, prodType);
+        IPage<StoreProductItemGymVo> pageResult = storeProductItemService.getPageWithGym(pageNum, pageSize, storeId, prodName, prodType);
+        return R.data(pageResult);
+    }
+
+    @ApiOperation("用户端 运动健身详情查询")
+    @ApiOperationSupport(order = 9)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "商品表主键ID", dataType = "Long", paramType = "query", required = true)
+    })
+    @GetMapping("/getDetailWithGym")
+    public R<StoreProductItemGymVo> getDetailWithGym(@RequestParam("id") Long id) {
+        log.info("StoreProductItemController.getDetailWithGym?id={}", id);
+        return storeProductItemService.getDetailWithGym(id);
+    }
 }
 

+ 22 - 0
alien-store/src/main/java/shop/alien/store/service/StoreProductItemService.java

@@ -1,8 +1,10 @@
 package shop.alien.store.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.StoreProductItem;
+import shop.alien.entity.store.vo.StoreProductItemGymVo;
 
 /**
  * 商品表 服务类
@@ -43,5 +45,25 @@ public interface StoreProductItemService extends IService<StoreProductItem> {
      * @return R<StoreProductItem>
      */
     R<StoreProductItem> getStoreProductItemById(Long id);
+
+    /**
+     * 分页查询商品表与运动健身商品表关联数据
+     *
+     * @param pageNum  页码
+     * @param pageSize 页容
+     * @param storeId  门店ID
+     * @param prodName 商品名称(模糊查询)
+     * @param prodType 商品类型
+     * @return IPage<StoreProductItemGymVo>
+     */
+    IPage<StoreProductItemGymVo> getPageWithGym(int pageNum, int pageSize, Integer storeId, String prodName, Integer prodType);
+
+    /**
+     * 根据ID查询商品表与运动健身商品表关联详情
+     *
+     * @param id 商品表主键ID
+     * @return R<StoreProductItemGymVo>
+     */
+    R<StoreProductItemGymVo> getDetailWithGym(Long id);
 }
 

+ 28 - 0
alien-store/src/main/java/shop/alien/store/service/impl/StoreProductItemServiceImpl.java

@@ -1,5 +1,7 @@
 package shop.alien.store.service.impl;
 
+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;
@@ -7,6 +9,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.StoreProductItem;
+import shop.alien.entity.store.vo.StoreProductItemGymVo;
 import shop.alien.mapper.StoreProductItemMapper;
 import shop.alien.store.service.StoreProductItemService;
 
@@ -61,5 +64,30 @@ public class StoreProductItemServiceImpl extends ServiceImpl<StoreProductItemMap
         }
         return R.fail("查询失败,数据不存在");
     }
+
+    @Override
+    public IPage<StoreProductItemGymVo> getPageWithGym(int pageNum, int pageSize, Integer storeId, String prodName, Integer prodType) {
+        log.info("StoreProductItemServiceImpl.getPageWithGym?pageNum={}, pageSize={}, storeId={}, prodName={}, prodType={}",
+                pageNum, pageSize, storeId, prodName, prodType);
+        Page<StoreProductItemGymVo> page = new Page<>(pageNum, pageSize);
+        if(prodType == 0){
+            return baseMapper.getPageWithGym(page, storeId, prodName, null);
+        }else{
+            return baseMapper.getPageWithGym(page, storeId, prodName, prodType);
+        }
+    }
+
+    @Override
+    public R<StoreProductItemGymVo> getDetailWithGym(Long id) {
+        log.info("StoreProductItemServiceImpl.getDetailWithGym?id={}", id);
+        if (id == null) {
+            return R.fail("ID不能为空");
+        }
+        StoreProductItemGymVo detail = baseMapper.getDetailWithGym(id);
+        if (detail != null) {
+            return R.data(detail);
+        }
+        return R.fail("查询失败,数据不存在");
+    }
 }