Explorar o código

开发订单相关的接口

jinshihui hai 5 días
pai
achega
65bc384cb7

+ 37 - 1
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/ProductController.java

@@ -15,10 +15,12 @@ import com.ylx.massage.domain.dto.ProductCreateDTO;
 import com.ylx.massage.domain.dto.ProductSpecSetupDTO;
 import com.ylx.massage.domain.dto.ProductUpdateDTO;
 import com.ylx.massage.domain.vo.CategoryTreeVO;
+import com.ylx.massage.domain.vo.H5ProductVo;
 import com.ylx.massage.domain.vo.ProductDetailsVo;
 import com.ylx.massage.domain.vo.SpecComboVO;
 import com.ylx.massage.service.ProductCategoryService;
 import com.ylx.massage.service.ProductService;
+import com.ylx.massage.service.ProductSkuService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -45,8 +47,11 @@ public class ProductController extends BaseController {
     @Resource
     private ProductCategoryService productCategoryService;
 
+    @Resource
+    private ProductSkuService productSkuService;
+
     /**
-     * 分页查询商品列表
+     * 分页查询商品列表(PC端)
      *
      * @param page    分页对象
      * @param product 商品实体
@@ -76,6 +81,37 @@ public class ProductController extends BaseController {
         }
     }
 
+
+    /**
+     * 分页查询商品列表(H5端)
+     *
+     * @param page      分页对象
+     * @param product   商品实体
+     * @param sortField 排序字段(price:价格, sales:销量)
+     * @param sortOrder 排序方式(asc:升序, desc:降序)
+     * @return R<Page<H5ProductVo>> 所有数据
+     */
+    @RequestMapping(value = "/h5List", method = RequestMethod.GET)
+    @ApiOperation("H5查询商品管理列表")
+    public R<Page<H5ProductVo>> selectH5All(Page<H5ProductVo> page, Product product, @RequestParam(required = false) String sortField, @RequestParam(required = false) String sortOrder) {
+        try {
+            Page<H5ProductVo> pageResult = productService.selectH5Page(page, product, sortField, sortOrder);
+            //根据分类ID查询分类的名称
+            for (H5ProductVo record : pageResult.getRecords()) {
+                ProductCategory productCategory = this.productCategoryService.getById(record.getCategoryId());
+                if (productCategory != null) {
+                    record.setCategoryName(productCategory.getName());
+                }
+                //根据商品ID查询库存的最低价格
+                record.setOriginalPrice(productSkuService.findMinPriceByProductId(record.getId()));
+            }
+            return R.ok(pageResult);
+        } catch (Exception e) {
+            log.error("商品查询失败", e);
+            throw new RuntimeException(e);
+        }
+    }
+
     /**
      * 通过主键查询商品详情
      *

+ 6 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/domain/Product.java

@@ -96,6 +96,12 @@ public class Product implements Serializable {
     @TableField("price_money")
     private BigDecimal priceMoney;
 
+    /**
+     * 原价
+     */
+    @TableField(exist = false)
+    private BigDecimal originalPrice;
+
     /**
      * 总库存(冗余,由SKU汇总)
      */

+ 58 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/H5ProductVo.java

@@ -0,0 +1,58 @@
+package com.ylx.massage.domain.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class H5ProductVo {
+    /**
+     * 商品ID
+     */
+    private Long id;
+
+    /**
+     * 商品分类ID
+     */
+    private Long categoryId;
+
+    /**
+     * 分类名称
+     */
+    private String categoryName;
+
+    /**
+     * 商品编号
+     */
+    private String productNo;
+
+    /**
+     * 商品名称
+     */
+    private String name;
+
+    /**
+     * 商品积分价格
+     */
+    private Integer pricePoint;
+     /**
+      * 商品现金价格
+      */
+    private BigDecimal priceMoney;
+
+    /**
+     * 商品原价
+     */
+    private BigDecimal originalPrice;
+
+    /**
+     * 商品库存
+     */
+    private Integer stock;
+
+    /**
+     * 商品销售量
+     */
+    private Integer sales;
+}

+ 14 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/mapper/ProductMapper.java

@@ -1,7 +1,10 @@
 package com.ylx.massage.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ylx.massage.domain.Product;
+import com.ylx.massage.domain.vo.H5ProductVo;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 商品表(Product)表数据库访问层
@@ -11,4 +14,15 @@ import com.ylx.massage.domain.Product;
  */
 public interface ProductMapper extends BaseMapper<Product> {
 
+    /**
+     * 分页查询商品列表(H5端)-支持排序
+     *
+     * @param page      分页对象
+     * @param product   商品查询参数
+     * @param sortField 排序字段(price:价格, sales:销量)
+     * @param sortOrder 排序方式(asc:升序, desc:降序)
+     * @return Page<Product> 分页结果
+     */
+    Page<H5ProductVo> selectH5Page(Page<H5ProductVo> page, @Param("product") Product product, @Param("sortField") String sortField, @Param("sortOrder") String sortOrder);
+
 }

+ 11 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/mapper/ProductSkuMapper.java

@@ -6,6 +6,8 @@ import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Update;
 
+import java.math.BigDecimal;
+
 /**
  * 商品SKU表(ProductSku)表数据库访问层
  *
@@ -24,4 +26,13 @@ public interface ProductSkuMapper extends BaseMapper<ProductSku> {
      */
     @Update("UPDATE product_sku SET stock = stock + #{quantity} WHERE id = #{skuId} AND stock >=0 ")
     int releaseStock(@Param("skuId") Long skuId, @Param("quantity") Integer quantity);
+
+
+    /**
+     * 根据商品ID查询最低的价格
+     *
+     * @param productId 商品ID
+     * @return BigDecimal 最低的价格
+     */
+    BigDecimal findMinPriceByProductId(Long productId);
 }

+ 1 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/IProductOrderInfoService.java

@@ -3,6 +3,7 @@ package com.ylx.massage.service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ylx.common.core.domain.R;
+import com.ylx.massage.domain.Product;
 import com.ylx.massage.domain.ProductOrderInfo;
 import com.ylx.massage.domain.dto.*;
 import com.ylx.massage.domain.vo.*;

+ 14 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/ProductService.java

@@ -1,10 +1,12 @@
 package com.ylx.massage.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ylx.massage.domain.Product;
 import com.ylx.massage.domain.dto.ProductCreateDTO;
 import com.ylx.massage.domain.dto.ProductSpecSetupDTO;
 import com.ylx.massage.domain.dto.ProductUpdateDTO;
+import com.ylx.massage.domain.vo.H5ProductVo;
 import com.ylx.massage.domain.vo.SpecComboVO;
 
 import java.util.List;
@@ -57,4 +59,16 @@ public interface ProductService extends IService<Product> {
      */
     String generateProductNo(Long categoryId);
 
+
+    /**
+     * 分页查询商品列表(H5端)-支持排序
+     *
+     * @param page      分页参数
+     * @param product   商品查询参数
+     * @param sortField 排序字段(price:价格, sales:销量)
+     * @param sortOrder 排序方式(asc:升序, desc:降序)
+     * @return Page<Product> 分页结果
+     */
+    Page<H5ProductVo> selectH5Page(Page<H5ProductVo> page, Product product, String sortField, String sortOrder);
+
 }

+ 10 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/ProductSkuService.java

@@ -3,6 +3,8 @@ package com.ylx.massage.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ylx.massage.domain.ProductSku;
 
+import java.math.BigDecimal;
+
 /**
  * 商品SKU表(ProductSku)表服务接口
  *
@@ -11,4 +13,12 @@ import com.ylx.massage.domain.ProductSku;
  */
 public interface ProductSkuService extends IService<ProductSku> {
 
+    /**
+     * 根据商品ID查询最低的价格
+     *
+     * @param productId 商品ID
+     * @return BigDecimal 最低的价格
+     */
+    BigDecimal findMinPriceByProductId(Long productId);
+
 }

+ 20 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/ProductServiceImpl.java

@@ -2,9 +2,11 @@ package com.ylx.massage.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ylx.massage.domain.*;
 import com.ylx.massage.domain.dto.*;
+import com.ylx.massage.domain.vo.H5ProductVo;
 import com.ylx.massage.domain.vo.SpecComboVO;
 import com.ylx.massage.mapper.*;
 import com.ylx.massage.service.ProductService;
@@ -44,6 +46,9 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
     @Resource
     private ProductSkuMapper productSkuMapper;
 
+    @Resource
+    private ProductMapper productMapper;
+
     /**
      * 新增商品
      *
@@ -285,6 +290,21 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
         return generateProductNoByCategoryCode(categoryCode);
     }
 
+
+    /**
+     * 分页查询商品列表(H5端)-支持排序
+     *
+     * @param page      分页参数
+     * @param product   商品查询参数
+     * @param sortField 排序字段(price:价格, sales:销量)
+     * @param sortOrder 排序方式(asc:升序, desc:降序)
+     * @return Page<Product> 分页结果
+     */
+    @Override
+    public Page<H5ProductVo> selectH5Page(Page<H5ProductVo> page, Product product, String sortField, String sortOrder) {
+        return productMapper.selectH5Page(page, product, sortField, sortOrder);
+    }
+
     /**
      * 根据分类编码生成商品编号
      * 规则:分类编码 + 当前日期(yyyyMMdd) + 序列号(3位)

+ 11 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/ProductSkuServiceImpl.java

@@ -4,8 +4,11 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ylx.massage.domain.ProductSku;
 import com.ylx.massage.mapper.ProductSkuMapper;
 import com.ylx.massage.service.ProductSkuService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+
 /**
  * 商品SKU表(ProductSku)表服务实现类
  *
@@ -15,4 +18,12 @@ import org.springframework.stereotype.Service;
 @Service("productSkuService")
 public class ProductSkuServiceImpl extends ServiceImpl<ProductSkuMapper, ProductSku> implements ProductSkuService {
 
+    @Autowired
+    private ProductSkuMapper productSkuMapper;
+
+
+    @Override
+    public BigDecimal findMinPriceByProductId(Long productId) {
+        return productSkuMapper.findMinPriceByProductId(productId);
+    }
 }

+ 29 - 0
nightFragrance-massage/src/main/resources/mapper/massage/ProductMapper.xml

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ylx.massage.mapper.ProductMapper">
+
+    <!-- 分页查询商品列表(H5端)-支持排序 -->
+    <select id="selectH5Page" resultType="com.ylx.massage.domain.vo.H5ProductVo">
+        SELECT id, category_id, product_no,name,price_point, price_money, stock, sales
+        FROM product
+        WHERE deleted = 0 AND status = 1
+        <if test="product.categoryId != null">
+            AND category_id = #{product.categoryId}
+        </if>
+        <choose>
+            <when test="sortField != null and sortField != '' and sortOrder != null and sortOrder != ''">
+                ORDER BY
+                <if test="sortField == 'price'">
+                    price_money ${sortOrder == 'asc' ? 'ASC' : 'DESC'}
+                </if>
+                <if test="sortField == 'sales'">
+                    sales ${sortOrder == 'asc' ? 'ASC' : 'DESC'}
+                </if>
+            </when>
+            <otherwise>
+                ORDER BY sales DESC
+            </otherwise>
+        </choose>
+    </select>
+
+</mapper>

+ 10 - 0
nightFragrance-massage/src/main/resources/mapper/massage/ProductSkuMapper.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ylx.massage.mapper.ProductSkuMapper">
+
+    <!-- 根据商品ID查询最低的价格 -->
+    <select id="findMinPriceByProductId" resultType="java.math.BigDecimal">
+        SELECT MIN(origin_price) FROM product_sku WHERE product_id = #{productId} AND status = 1
+    </select>
+
+</mapper>