Bläddra i källkod

Merge branch 'dev/2024/0607/update-app-Y' of feifan/mall-backend-app into master

修改虚拟商品的金额精度
Yangzw 10 månader sedan
förälder
incheckning
46daac122f

+ 4 - 0
feifan-module-mall/feifan-module-product-biz/src/main/java/cn/newfeifan/mall/module/product/controller/admin/spu/vo/ProductSkuRespVO.java

@@ -3,6 +3,7 @@ package cn.newfeifan.mall.module.product.controller.admin.spu.vo;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 @Schema(description = "管理后台 - 商品 SKU Response VO")
@@ -48,4 +49,7 @@ public class ProductSkuRespVO {
     @Schema(description = "属性数组")
     private List<ProductSkuSaveReqVO.Property> properties;
 
+    @Schema(description = "高精度价格", example = "9255")
+    private BigDecimal highPrecisionPrice;
+
 }

+ 3 - 0
feifan-module-mall/feifan-module-product-biz/src/main/java/cn/newfeifan/mall/module/product/controller/admin/spu/vo/ProductSkuSaveReqVO.java

@@ -7,6 +7,7 @@ import lombok.NoArgsConstructor;
 
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
 import java.util.List;
 
 @Schema(description = "管理后台 - 商品 SKU 创建/更新 Request VO")
@@ -73,4 +74,6 @@ public class ProductSkuSaveReqVO {
 
     }
 
+    @Schema(description = "高精度价格", example = "9255")
+    private BigDecimal highPrecisionPrice;
 }

+ 6 - 0
feifan-module-mall/feifan-module-product-biz/src/main/java/cn/newfeifan/mall/module/product/controller/admin/spu/vo/ProductSpuPageReqVO.java

@@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode;
 import lombok.ToString;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 import static cn.newfeifan.mall.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@@ -55,4 +56,9 @@ public class ProductSpuPageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
 
+    @Schema(description = "高精度价格", example = "9255")
+    private BigDecimal highPrecisionPrice;
+
+    @Schema(description = "高精度", requiredMode = Schema.RequiredMode.REQUIRED)
+    private Boolean highPrecision;
 }

+ 8 - 0
feifan-module-mall/feifan-module-product-biz/src/main/java/cn/newfeifan/mall/module/product/controller/admin/spu/vo/ProductSpuRespVO.java

@@ -9,6 +9,7 @@ import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.List;
 
@@ -123,4 +124,11 @@ public class ProductSpuRespVO {
     @ExcelProperty("商品点击量")
     private Integer browseCount;
 
+    @Schema(description = "高精度", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("高精度")
+    private Boolean highPrecision;
+
+    @Schema(description = "高精度价格", example = "9255")
+    @ExcelProperty("高精度价格")
+    private BigDecimal highPrecisionPrice;
 }

+ 9 - 0
feifan-module-mall/feifan-module-product-biz/src/main/java/cn/newfeifan/mall/module/product/controller/admin/spu/vo/ProductSpuSaveReqVO.java

@@ -6,6 +6,7 @@ import lombok.Data;
 import javax.validation.Valid;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
 import java.util.List;
 
 @Schema(description = "管理后台 - 商品 SPU 新增/更新 Request VO")
@@ -93,4 +94,12 @@ public class ProductSpuSaveReqVO {
     @Valid
     private List<ProductSkuSaveReqVO> skus;
 
+
+    @Schema(description = "高精度价格", example = "9255")
+    private BigDecimal highPrecisionPrice;
+
+    @Schema(description = "高精度", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "高精度不能为空")
+    private Boolean highPrecision;
+
 }

+ 10 - 0
feifan-module-mall/feifan-module-product-biz/src/main/java/cn/newfeifan/mall/module/product/controller/admin/spu/vo/ProductSpuSimpleRespVO.java

@@ -4,6 +4,8 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.ToString;
 
+import java.math.BigDecimal;
+
 @Schema(description = "管理后台 - 商品 SPU 精简 Response VO")
 @Data
 @ToString(callSuper = true)
@@ -37,5 +39,13 @@ public class ProductSpuSimpleRespVO {
 
     @Schema(description = "商品浏览量", requiredMode = Schema.RequiredMode.REQUIRED, example = "2000")
     private Integer browseCount;
+    @Schema(description = "商品支付类别", example = "2")
+    private Integer spuPayType;
+
+    @Schema(description = "高精度")
+    private Boolean highPrecision;
+
+    @Schema(description = "高精度价格", example = "9255")
+    private BigDecimal highPrecisionPrice;
 
 }

+ 5 - 1
feifan-module-mall/feifan-module-product-biz/src/main/java/cn/newfeifan/mall/module/product/dal/dataobject/sku/ProductSkuDO.java

@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler;
 import lombok.*;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -54,7 +55,6 @@ public class ProductSkuDO extends BaseDO {
 
     /**
      * SPU 编号
-     *
      * 关联 {@link ProductSpuDO#getId()}
      */
     private Long spuId;
@@ -113,6 +113,10 @@ public class ProductSkuDO extends BaseDO {
      */
     private Integer salesCount;
 
+    /**
+     * 高精度价格
+     */
+    private BigDecimal highPrecisionPrice;
     /**
      * 商品属性
      */

+ 9 - 11
feifan-module-mall/feifan-module-product-biz/src/main/java/cn/newfeifan/mall/module/product/dal/dataobject/spu/ProductSpuDO.java

@@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import lombok.*;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -62,13 +63,11 @@ public class ProductSpuDO extends BaseDO {
 
     /**
      * 商品分类编号
-     *
      * 关联 {@link ProductCategoryDO#getId()}
      */
     private Long categoryId;
     /**
      * 商品品牌编号
-     *
      * 关联 {@link ProductBrandDO#getId()}
      */
     private Long brandId;
@@ -88,7 +87,6 @@ public class ProductSpuDO extends BaseDO {
     private Integer sort;
     /**
      * 商品状态
-     *
      * 枚举 {@link ProductSpuStatusEnum}
      */
     private Integer status;
@@ -97,32 +95,27 @@ public class ProductSpuDO extends BaseDO {
 
     /**
      * 规格类型
-     *
      * false - 单规格
      * true - 多规格
      */
     private Boolean specType;
     /**
      * 商品价格,单位使用:分
-     *
      * 基于其对应的 {@link ProductSkuDO#getPrice()} sku单价最低的商品的
      */
     private Integer price;
     /**
      * 市场价,单位使用:分
-     *
      * 基于其对应的 {@link ProductSkuDO#getMarketPrice()} sku单价最低的商品的
      */
     private Integer marketPrice;
     /**
      * 成本价,单位使用:分
-     *
      * 基于其对应的 {@link ProductSkuDO#getCostPrice()} sku单价最低的商品的
      */
     private Integer costPrice;
     /**
      * 库存
-     *
      * 基于其对应的 {@link ProductSkuDO#getStock()} 求和
      */
     private Integer stock;
@@ -131,14 +124,12 @@ public class ProductSpuDO extends BaseDO {
 
     /**
      * 配送方式数组
-     *
      * 对应 DeliveryTypeEnum 枚举
      */
     @TableField(typeHandler = IntegerListTypeHandler.class)
     private List<Integer> deliveryTypes;
     /**
      * 物流配置模板编号
-     *
      * 对应 TradeDeliveryExpressTemplateDO 的 id 编号
      */
     private Long deliveryTemplateId;
@@ -153,7 +144,6 @@ public class ProductSpuDO extends BaseDO {
     // TODO @puhui999:字段估计要改成 brokerageType
     /**
      * 分销类型
-     *
      * false - 默认
      * true - 自行设置
      */
@@ -181,4 +171,12 @@ public class ProductSpuDO extends BaseDO {
      * 商品支付类别
      */
     private Integer spuPayType;
+    /**
+     * 高精度
+     */
+    private Boolean highPrecision;
+    /**
+     * 高精度价格
+     */
+    private BigDecimal highPrecisionPrice;
 }

+ 12 - 6
feifan-module-mall/feifan-module-product-biz/src/main/java/cn/newfeifan/mall/module/product/service/spu/ProductSpuServiceImpl.java

@@ -102,12 +102,18 @@ public class ProductSpuServiceImpl implements ProductSpuService {
      * @param skus 商品 SKU 数组
      */
     private void initSpuFromSkus(ProductSpuDO spu, List<ProductSkuSaveReqVO> skus) {
-        // sku 单价最低的商品的价格
-        spu.setPrice(getMinValue(skus, ProductSkuSaveReqVO::getPrice));
-        // sku 单价最低的商品的市场价格
-        spu.setMarketPrice(getMinValue(skus, ProductSkuSaveReqVO::getMarketPrice));
-        // sku 单价最低的商品的成本价格
-        spu.setCostPrice(getMinValue(skus, ProductSkuSaveReqVO::getCostPrice));
+        //是否是高精度商品
+        if(!spu.getHighPrecision()){
+            // sku 单价最低的商品的价格
+            spu.setPrice(getMinValue(skus, ProductSkuSaveReqVO::getPrice));
+            // sku 单价最低的商品的市场价格
+            spu.setMarketPrice(getMinValue(skus, ProductSkuSaveReqVO::getMarketPrice));
+            // sku 单价最低的商品的成本价格
+            spu.setCostPrice(getMinValue(skus, ProductSkuSaveReqVO::getCostPrice));
+        }else{
+            // sku 单价最低的商品的价格
+            spu.setHighPrecisionPrice(getMinValue(skus, ProductSkuSaveReqVO::getHighPrecisionPrice));
+        }
         // skus 库存总数
         spu.setStock(getSumValue(skus, ProductSkuSaveReqVO::getStock, Integer::sum));
         // 若是 spu 已有状态则不处理