Browse Source

修改虚拟商品的金额精度

Yangzw 9 months ago
parent
commit
b604e32eca

+ 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")
@@ -61,4 +62,7 @@ public class ProductSkuRespVO {
     @Schema(description = "商户id", example = "8240")
     private Long merchantId;
 
+        @Schema(description = "高精度价格", example = "9255")
+        private BigDecimal highPrecisionPrice;
+
 }

+ 4 - 1
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")
@@ -18,7 +19,6 @@ public class ProductSkuSaveReqVO {
     private String name;
 
     @Schema(description = "销售价格,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "1999")
-    @NotNull(message = "销售价格,单位:分不能为空")
     private Integer price;
 
     @Schema(description = "市场价", example = "2999")
@@ -85,4 +85,7 @@ public class ProductSkuSaveReqVO {
 
     @Schema(description = "商户id", example = "8240")
     private Long merchantId;
+
+    @Schema(description = "高精度价格", example = "9255")
+    private BigDecimal highPrecisionPrice;
 }

+ 7 - 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 java.util.List;
 
@@ -82,4 +83,10 @@ public class ProductSpuPageReqVO extends PageParam {
 
     @Schema(description = "店铺编号集")
     private List<Long> shopIds;
+
+    @Schema(description = "高精度价格", example = "9255")
+    private BigDecimal highPrecisionPrice;
+
+    @Schema(description = "高精度", requiredMode = Schema.RequiredMode.REQUIRED)
+    private Boolean highPrecision;
 }

+ 9 - 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;
 
@@ -141,4 +142,12 @@ public class ProductSpuRespVO {
     private Long merchantId;
     @Schema(description = "商品支付类别")
     private Integer spuPayType;
+
+    @Schema(description = "高精度", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("高精度")
+    private Boolean highPrecision;
+
+    @Schema(description = "高精度价格", example = "9255")
+    @ExcelProperty("高精度价格")
+    private BigDecimal highPrecisionPrice;
 }

+ 8 - 1
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")
@@ -36,7 +37,6 @@ public class ProductSpuSaveReqVO {
     private Long categoryId;
 
     @Schema(description = "商品品牌编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "商品品牌不能为空")
     private Long brandId;
 
     @Schema(description = "商品封面图", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.zhongxing.cn/xx.png")
@@ -110,4 +110,11 @@ public class ProductSpuSaveReqVO {
     @NotNull(message = "商品支付类别不能为空")
     private Integer spuPayType;
 
+    @Schema(description = "高精度价格", example = "9255")
+    private BigDecimal highPrecisionPrice;
+
+    @Schema(description = "高精度", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "高精度不能为空")
+    private Boolean highPrecision;
+
 }

+ 11 - 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)
@@ -42,4 +44,13 @@ public class ProductSpuSimpleRespVO {
     private Long shopId;
     @Schema(description = "商户id", example = "8240")
     private Long merchantId;
+
+    @Schema(description = "商品支付类别", example = "2")
+    private Integer spuPayType;
+
+    @Schema(description = "高精度")
+    private Boolean highPrecision;
+
+    @Schema(description = "高精度价格", example = "9255")
+    private BigDecimal highPrecisionPrice;
 }

+ 6 - 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;
 
 /**
@@ -36,7 +37,6 @@ public class ProductSkuDO extends BaseDO {
     private Long id;
     /**
      * SPU 编号
-     *
      * 关联 {@link ProductSpuDO#getId()}
      */
     private Long spuId;
@@ -108,6 +108,11 @@ public class ProductSkuDO extends BaseDO {
 
 
     private Long merchantId;
+
+    /**
+     * 高精度价格
+     */
+    private BigDecimal highPrecisionPrice;
     /**
      * 商品属性
      */

+ 10 - 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;
 
 /**
@@ -57,13 +58,11 @@ public class ProductSpuDO extends BaseDO {
 
     /**
      * 商品分类编号
-     *
      * 关联 {@link ProductCategoryDO#getId()}
      */
     private Long categoryId;
     /**
      * 商品品牌编号
-     *
      * 关联 {@link ProductBrandDO#getId()}
      */
     private Long brandId;
@@ -83,7 +82,6 @@ public class ProductSpuDO extends BaseDO {
     private Integer sort;
     /**
      * 商品状态
-     *
      * 枚举 {@link ProductSpuStatusEnum}
      */
     private Integer status;
@@ -92,32 +90,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;
@@ -126,14 +119,12 @@ public class ProductSpuDO extends BaseDO {
 
     /**
      * 配送方式数组
-     *
      * 对应 DeliveryTypeEnum 枚举
      */
     @TableField(typeHandler = IntegerListTypeHandler.class)
     private List<Integer> deliveryTypes;
     /**
      * 物流配置模板编号
-     *
      * 对应 TradeDeliveryExpressTemplateDO 的 id 编号
      */
     private Long deliveryTemplateId;
@@ -148,7 +139,6 @@ public class ProductSpuDO extends BaseDO {
     // TODO @puhui999:字段估计要改成 brokerageType
     /**
      * 分销类型
-     *
      * false - 默认
      * true - 自行设置
      */
@@ -192,4 +182,13 @@ public class ProductSpuDO extends BaseDO {
      */
     private Integer spuPayType;
 
+    /**
+     * 高精度
+     */
+    private Boolean highPrecision;
+    /**
+     * 高精度价格
+     */
+    private BigDecimal highPrecisionPrice;
+
 }

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

@@ -13,7 +13,6 @@ import cn.newfeifan.mall.module.product.dal.dataobject.category.ProductCategoryD
 import cn.newfeifan.mall.module.product.dal.dataobject.spu.ProductSpuDO;
 import cn.newfeifan.mall.module.product.dal.mysql.spu.ProductSpuMapper;
 import cn.newfeifan.mall.module.product.enums.spu.ProductSpuStatusEnum;
-import cn.newfeifan.mall.module.product.service.brand.ProductBrandService;
 import cn.newfeifan.mall.module.product.service.category.ProductCategoryService;
 import cn.newfeifan.mall.module.product.service.favorite.ProductFavoriteService;
 import cn.newfeifan.mall.module.product.service.sku.ProductSkuService;
@@ -49,8 +48,6 @@ public class ProductSpuServiceImpl implements ProductSpuService {
     @Lazy // 循环依赖,避免报错
     private ProductSkuService productSkuService;
     @Resource
-    private ProductBrandService brandService;
-    @Resource
     private ProductCategoryService categoryService;
 
     @Resource
@@ -61,7 +58,7 @@ public class ProductSpuServiceImpl implements ProductSpuService {
     public Long createSpu(ProductSpuSaveReqVO createReqVO) {
         // 校验分类、品牌
         validateCategory(createReqVO.getCategoryId());
-        brandService.validateProductBrand(createReqVO.getBrandId());
+//        brandService.validateProductBrand(createReqVO.getBrandId());
 
         // 根据商户ID查询对应的店铺ID
         // todo 后续如果存在多店铺的情况下
@@ -92,7 +89,7 @@ public class ProductSpuServiceImpl implements ProductSpuService {
         validateSpuExists(updateReqVO.getId());
         // 校验分类、品牌
         validateCategory(updateReqVO.getCategoryId());
-        brandService.validateProductBrand(updateReqVO.getBrandId());
+//        brandService.validateProductBrand(updateReqVO.getBrandId());
         // 校验SKU
         List<ProductSkuSaveReqVO> skuSaveReqList = updateReqVO.getSkus();
         productSkuService.validateSkuList(skuSaveReqList, updateReqVO.getSpecType());
@@ -113,12 +110,19 @@ 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 已有状态则不处理

+ 14 - 0
sql/mysql/建空库SQL/12_20240611.sql

@@ -0,0 +1,14 @@
+ALTER TABLE product_spu
+    ADD COLUMN high_precision_price DECIMAL(11,6) NULL COMMENT '高精度价格',
+ADD COLUMN high_precision bit(1) NOT NULL DEFAULT b'0' COMMENT '高精度';
+
+ALTER TABLE product_sku
+    ADD COLUMN high_precision_price DECIMAL(11,6) NULL COMMENT '高精度价格';
+
+ALTER TABLE product_spu
+    MODIFY COLUMN `price` int(11) DEFAULT '-1' COMMENT '商品价格,单位使用:分',
+    MODIFY COLUMN  `cost_price` int(11) DEFAULT '-1' COMMENT '成本价,单位: 分';
+
+ALTER TABLE product_sku
+    MODIFY COLUMN `price` int(11) DEFAULT '-1' COMMENT '商品价格,单位:分',
+    MODIFY COLUMN `cost_price` int(11) DEFAULT '-1' COMMENT '成本价,单位: 分';