Browse Source

价格服务,实体类调整

chao 4 years ago
parent
commit
b3fcef3cc8

+ 61 - 0
src/main/java/com/caimei365/commodity/controller/ProductPriceApi.java

@@ -0,0 +1,61 @@
+package com.caimei365.commodity.controller;
+
+import com.caimei365.commodity.model.ResponseJson;
+import com.caimei365.commodity.model.vo.PriceVo;
+import com.caimei365.commodity.service.PriceService;
+import io.swagger.annotations.Api;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 商品价格API
+ *
+ * @author : Charles
+ * @date : 2021/4/9
+ */
+@Api(tags="商品价格API")
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/commodity/price")
+public class ProductPriceApi {
+
+    private final PriceService priceService;
+    /**
+     * 获取商品详情价格
+     *
+     * spi旧接口:/product/detail/price
+     *
+     * @param userId      用户Id
+     * @param productId   商品Id
+     */
+    @GetMapping("detail")
+    public ResponseJson<PriceVo> getDetailPrice(Integer userId, Integer productId) {
+        if (null == userId || null == productId) {
+            return ResponseJson.error("参数错误", null);
+        }
+        return priceService.getDetailPrice(userId, productId);
+    }
+
+    /**
+     * 获取商品列表价格
+     *
+     * spi旧接口:product/listPrice
+     *
+     * @param userId       用户Id
+     * @param productIds   商品Id
+     * @return
+     */
+    @GetMapping("/list")
+    public ResponseJson<List<PriceVo>> getProductPrice(Integer userId, String productIds) {
+        if (null == userId || StringUtils.isEmpty(productIds)) {
+            return ResponseJson.error("参数错误", null);
+        }
+        return priceService.getListPrice(userId, productIds);
+    }
+
+}

+ 2 - 0
src/main/java/com/caimei365/commodity/controller/TestWebClientApi.java

@@ -1,5 +1,6 @@
 package com.caimei365.commodity.controller;
 
+import io.swagger.annotations.Api;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -15,6 +16,7 @@ import javax.annotation.Resource;
  * @author : Charles
  * @date : 2021/02/20
  */
+@Api(tags="测试WebClient")
 @RequestMapping("/commodity")
 @RestController
 public class TestWebClientApi {

+ 21 - 0
src/main/java/com/caimei365/commodity/mapper/PriceMapper.java

@@ -0,0 +1,21 @@
+package com.caimei365.commodity.mapper;
+
+import com.caimei365.commodity.model.vo.PriceVo;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/4/9
+ */
+@Mapper
+public interface PriceMapper {
+    /**
+     * 根据商品id查找价格
+     *
+     * @param productId 商品id
+     * @return PriceVo
+     */
+    PriceVo getDetailPrice(Integer productId);
+}

+ 13 - 0
src/main/java/com/caimei365/commodity/mapper/PromotionsMapper.java

@@ -0,0 +1,13 @@
+package com.caimei365.commodity.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/4/9
+ */
+@Mapper
+public interface PromotionsMapper {
+}

+ 4 - 4
src/main/java/com/caimei365/commodity/mapper/SearchMapper.java

@@ -1,10 +1,10 @@
 package com.caimei365.commodity.mapper;
 
 import com.caimei365.commodity.model.search.*;
-import com.caimei365.commodity.model.vo.ArticleListVo;
-import com.caimei365.commodity.model.vo.EquipmentListVo;
-import com.caimei365.commodity.model.vo.ProductListVo;
-import com.caimei365.commodity.model.vo.ShopListVo;
+import com.caimei365.commodity.model.search.ArticleListVo;
+import com.caimei365.commodity.model.search.EquipmentListVo;
+import com.caimei365.commodity.model.search.ProductListVo;
+import com.caimei365.commodity.model.search.ShopListVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 

+ 1 - 1
src/main/java/com/caimei365/commodity/model/vo/ArticleListVo.java → src/main/java/com/caimei365/commodity/model/search/ArticleListVo.java

@@ -1,4 +1,4 @@
-package com.caimei365.commodity.model.vo;
+package com.caimei365.commodity.model.search;
 
 import lombok.Data;
 

+ 1 - 1
src/main/java/com/caimei365/commodity/model/vo/EquipmentListVo.java → src/main/java/com/caimei365/commodity/model/search/EquipmentListVo.java

@@ -1,4 +1,4 @@
-package com.caimei365.commodity.model.vo;
+package com.caimei365.commodity.model.search;
 
 import lombok.Data;
 

+ 1 - 1
src/main/java/com/caimei365/commodity/model/vo/ProductListVo.java → src/main/java/com/caimei365/commodity/model/search/ProductListVo.java

@@ -1,4 +1,4 @@
-package com.caimei365.commodity.model.vo;
+package com.caimei365.commodity.model.search;
 
 import lombok.Data;
 

+ 1 - 1
src/main/java/com/caimei365/commodity/model/vo/ShopListVo.java → src/main/java/com/caimei365/commodity/model/search/ShopListVo.java

@@ -1,4 +1,4 @@
-package com.caimei365.commodity.model.vo;
+package com.caimei365.commodity.model.search;
 
 import lombok.Data;
 

+ 93 - 0
src/main/java/com/caimei365/commodity/model/vo/PriceVo.java

@@ -0,0 +1,93 @@
+package com.caimei365.commodity.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 商品价格
+ *
+ * @author : Charles
+ * @date : 2021/4/9
+ */
+@Data
+public class PriceVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 商品productID
+     */
+    private Integer productId;
+    /**
+     * 供应商ID
+     */
+    private Integer supplierId;
+    /**
+     * 价格(计算后)
+     */
+    private Double price;
+    /**
+     * 划线价格
+     */
+    private Double originalPrice;
+    /**
+     * 最小购买量
+     */
+    private Integer minBuyNumber;
+    /**
+     * 是否公开机构价 0公开价格 1不公开价格
+     */
+    private Integer priceFlag;
+    /**
+     * 阶梯价标志
+     */
+    private Integer ladderPriceFlag;
+    /**
+     * 市场价
+     */
+    private Double normalPrice;
+    /**
+     * 成本价
+     */
+    private Double costPrice;
+    /**
+     * 比例成本百分比
+     */
+    private Double costProportional;
+    /**
+     * 成本价选中标志:1固定成本 2比例成
+     */
+    private Integer costCheckFlag;
+    /**
+     * 用户身份: 2-会员机构, 4-普通机构
+     */
+    private Integer userIdentity;
+
+    /**
+     * 购买数量: 1逐步增长,2以起订量增长(起订量的倍数增长)
+     */
+    private Integer step;
+    /**
+     * 商品是否处于活动状态 1是 0否
+     */
+    private Integer actStatus;
+    /**
+     * 促销活动
+     */
+    private PromotionsVo promotions;
+    /**
+     * 机构税率
+     */
+    private BigDecimal taxRate;
+    /**
+     * 是否含税 0不含税,1含税,2未知
+     */
+    private String includedTax;
+
+    /**
+     * 发票类型(基于是否含税基础) 1增值税票,2普通票, 3不能开票
+     */
+    private String invoiceType;
+
+}
+

+ 78 - 0
src/main/java/com/caimei365/commodity/model/vo/PromotionsVo.java

@@ -0,0 +1,78 @@
+package com.caimei365.commodity.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 促销活动
+ *
+ * @author : Charles
+ * @date : 2021/4/9
+ */
+@Data
+public class PromotionsVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private Integer id;
+    /**
+     * 促销名称
+     */
+    private String name;
+    /**
+     * 促销描述
+     */
+    private String description;
+    /**
+     * 分类: 1单品促销,2凑单促销,3店铺促销
+     */
+    private Integer type;
+    /**
+     * 促销方式:1优惠,2满减,3满赠
+     */
+    private Integer mode;
+    /**
+     * 优惠价/满减/满赠的设定价格(如满999赠商品)
+     */
+    private BigDecimal touchPrice;
+    /**
+     * 减免价格
+     */
+    private BigDecimal reducedPrice;
+    /**
+     * 开始时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date beginTime;
+    /**
+     * 结束时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endTime;
+    /**
+     * 时效:1永久,2区间过期,其它无效
+     */
+    private Integer status;
+    /**
+     * 店铺id(店铺促销时供应商ID)
+     */
+    private Integer supplierId;
+    /**
+     * 商品id
+     */
+    private Integer productId;
+    /**
+     * 主订单id
+     */
+    private Integer orderId;
+//    /**
+//     * 该优惠下商品
+//     */
+//    private List<CartItem> productList;
+//    /**
+//     * 该优惠下赠品品
+//     */
+//    private List<CartItem> giftList;
+}

+ 31 - 0
src/main/java/com/caimei365/commodity/service/PriceService.java

@@ -0,0 +1,31 @@
+package com.caimei365.commodity.service;
+
+import com.caimei365.commodity.model.ResponseJson;
+import com.caimei365.commodity.model.vo.PriceVo;
+
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/4/9
+ */
+public interface PriceService {
+    /**
+     * 获取商品详情价格
+     *
+     * @param userId      用户Id
+     * @param productId   商品Id
+     * @return PriceVo
+     */
+    ResponseJson<PriceVo> getDetailPrice(Integer userId, Integer productId);
+    /**
+     * 获取商品列表价格
+     *
+     * @param userId       用户Id
+     * @param productIds   商品Id
+     * @return List<PriceVo>
+     */
+    ResponseJson<List<PriceVo>> getListPrice(Integer userId, String productIds);
+}

+ 126 - 0
src/main/java/com/caimei365/commodity/service/impl/PriceServiceImpl.java

@@ -0,0 +1,126 @@
+package com.caimei365.commodity.service.impl;
+
+import com.caimei365.commodity.mapper.PriceMapper;
+import com.caimei365.commodity.mapper.PromotionsMapper;
+import com.caimei365.commodity.model.ResponseJson;
+import com.caimei365.commodity.model.vo.PriceVo;
+import com.caimei365.commodity.service.PriceService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/4/9
+ */
+@Slf4j
+@Service
+public class PriceServiceImpl implements PriceService {
+    @Resource
+    private PriceMapper priceMapper;
+    @Resource
+    private PromotionsMapper promotionsMapper;
+    /**
+     * 获取商品详情价格
+     *
+     * @param userId    用户Id
+     * @param productId 商品Id
+     * @return PriceVo
+     */
+    @Override
+    public ResponseJson<PriceVo> getDetailPrice(Integer userId, Integer productId) {
+        // 数据库获取基本价格信息
+        PriceVo price = priceMapper.getDetailPrice(productId);
+        // 根据用户id设置详细价格
+        //setPriceByUserId(price, userId);
+        // 屏蔽成本价
+        price.setCostProportional(0d);
+        price.setCostPrice(0d);
+
+
+        return null;
+    }
+
+    /**
+     * 获取商品列表价格
+     *
+     * @param userId     用户Id
+     * @param productIds 商品Id
+     * @return List<PriceVo>
+     */
+    @Override
+    public ResponseJson<List<PriceVo>> getListPrice(Integer userId, String productIds) {
+        return null;
+    }
+
+
+//    private void setPriceByUserId(PriceVo price, Integer userId) {
+//        // 默认非促销活动状态
+//        price.setActStatus(0);
+//        // 设置划线价
+//        price.setOriginalPrice(price.getPrice());
+//        // 根据商品id查询商品活动
+//        PromotionsVo promotions = promotionsMapper.getPromotionsByProductId(price.getProductId());
+//        //促销活动价
+//        if (null != promotions) {
+//            if (promotions.getMode() == 3) {
+//                // 获取赠品
+//                List<CartItem> giftList = promotionsMapper.getProductGifts(promotions.getId());
+//                promotions.setGiftList(giftList);
+//            }
+//            price.setActStatus(1);
+//            price.setPromotions(promotions);
+//            price.setLadderPriceFlag(0);
+//            if (promotions.getType() == 1 && promotions.getMode() == 1 && null != promotions.getTouchPrice()) {
+//                price.setPrice(promotions.getTouchPrice().doubleValue());
+//                //添加税费
+//                if ("0".equals(price.getIncludedTax()) && ("1".equals(price.getInvoiceType()) || "2".equals(price.getInvoiceType()))) {
+//                    BigDecimal addedValueTax = MathUtil.div(MathUtil.mul(promotions.getTouchPrice(), price.getTaxRate()), BigDecimal.valueOf(100));
+//                    promotions.setTouchPrice(MathUtil.add(promotions.getTouchPrice(),addedValueTax));
+//                }
+//            }
+//        } else {
+//            if (null != user) {
+//                if (1 == price.getLadderPriceFlag()) {
+//                    // 阶梯价
+//                    LadderPrice ladderPrice = priceMapper.findLowerLadderPrice(price.getProductId());
+//                    LadderPrice ladderPrice2 = priceMapper.findMaxLadderPrice(price.getProductId());
+//                    if (null != ladderPrice) {
+//                        price.setPrice(ladderPrice.getBuyPrice());
+//                        if (null != ladderPrice2){
+//                            price.setMinBuyNumber(ladderPrice2.getBuyNum());
+//                        }
+//                    } else {
+//                        price.setLadderPriceFlag(0);
+//                    }
+//                } else {
+//                    // 复购价
+//                    Double repurchase = priceMapper.getRepurchasePrice(price.getProductId(), user.getUserID());
+//                    if (null != repurchase && repurchase > 0) {
+//                        price.setPrice(repurchase);
+//                        price.setLadderPriceFlag(0);
+//                    }
+//                }
+//            }
+//        }
+//        //添加税费
+//        if ("0".equals(price.getIncludedTax()) && ("1".equals(price.getInvoiceType()) || "2".equals(price.getInvoiceType()))) {
+//            price.setPrice(price.getPrice() + (price.getPrice().doubleValue() * price.getTaxRate().doubleValue()) /100);
+//        }
+//        if (null == user) {
+//            price.setPrice(0d);
+//            price.setCostPrice(0d);
+//            price.setUserIdentity(0);
+//        } else {
+//            // 用户身份: 2-会员机构, 4-普通机构
+//            price.setUserIdentity(user.getUserIdentity());
+//        }
+//    }
+
+
+
+}

+ 1 - 2
src/main/java/com/caimei365/commodity/service/impl/SearchProductServiceImpl.java

@@ -5,13 +5,12 @@ import com.aliyun.opensearch.sdk.dependencies.org.json.JSONException;
 import com.aliyun.opensearch.sdk.dependencies.org.json.JSONObject;
 import com.aliyun.opensearch.sdk.generated.commons.OpenSearchClientException;
 import com.aliyun.opensearch.sdk.generated.commons.OpenSearchException;
-import com.aliyun.opensearch.sdk.generated.search.DeepPaging;
 import com.aliyun.opensearch.sdk.generated.search.SearchParams;
 import com.caimei365.commodity.components.SearchOpenService;
 import com.caimei365.commodity.mapper.SearchMapper;
 import com.caimei365.commodity.model.ResponseJson;
 import com.caimei365.commodity.model.vo.PageVo;
-import com.caimei365.commodity.model.vo.ProductListVo;
+import com.caimei365.commodity.model.search.ProductListVo;
 import com.caimei365.commodity.service.SearchProductService;
 import com.caimei365.commodity.utils.Json2PojoUtil;
 import com.caimei365.commodity.utils.PriceUtil;

+ 4 - 0
src/main/java/com/caimei365/commodity/service/impl/SearchQueryServiceImpl.java

@@ -11,6 +11,10 @@ import com.aliyun.opensearch.sdk.generated.search.*;
 import com.caimei365.commodity.components.SearchOpenService;
 import com.caimei365.commodity.mapper.SearchMapper;
 import com.caimei365.commodity.model.ResponseJson;
+import com.caimei365.commodity.model.search.ArticleListVo;
+import com.caimei365.commodity.model.search.EquipmentListVo;
+import com.caimei365.commodity.model.search.ProductListVo;
+import com.caimei365.commodity.model.search.ShopListVo;
 import com.caimei365.commodity.model.vo.*;
 import com.caimei365.commodity.service.SearchQueryService;
 import com.caimei365.commodity.utils.Json2PojoUtil;

+ 4 - 4
src/main/java/com/caimei365/commodity/utils/Json2PojoUtil.java

@@ -2,10 +2,10 @@ package com.caimei365.commodity.utils;
 
 import com.aliyun.opensearch.sdk.dependencies.org.json.JSONArray;
 import com.aliyun.opensearch.sdk.dependencies.org.json.JSONObject;
-import com.caimei365.commodity.model.vo.ArticleListVo;
-import com.caimei365.commodity.model.vo.EquipmentListVo;
-import com.caimei365.commodity.model.vo.ProductListVo;
-import com.caimei365.commodity.model.vo.ShopListVo;
+import com.caimei365.commodity.model.search.ArticleListVo;
+import com.caimei365.commodity.model.search.EquipmentListVo;
+import com.caimei365.commodity.model.search.ProductListVo;
+import com.caimei365.commodity.model.search.ShopListVo;
 
 import java.util.ArrayList;
 import java.util.List;

+ 23 - 0
src/main/resources/mapper/PriceMapper.xml

@@ -0,0 +1,23 @@
+<?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.caimei365.commodity.mapper.PriceMapper">
+    <select id="getDetailPrice" resultType="com.caimei365.commodity.model.vo.PriceVo">
+        select
+            p.productID as productId,
+            p.price1 as price,
+            p.minBuyNumber as minBuyNumber,
+            p.price1TextFlag as priceFlag,
+            p.ladderPriceFlag as ladderPriceFlag,
+            p.normalPrice as normalPrice,
+            p.costPrice as costPrice,
+            p.costProportional as costProportional,
+            p.costCheckFlag as costCheckFlag,
+            p.step as step,
+            p.shopID as supplierId,
+            p.taxPoint as taxRate,
+            p.includedTax as includedTax,
+            p.invoiceType as invoiceType
+        from product p
+        where productID = #{productId}
+    </select>
+</mapper>

+ 5 - 0
src/main/resources/mapper/PromotionsMapper.xml

@@ -0,0 +1,5 @@
+<?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.caimei365.commodity.mapper.PromotionsMapper">
+
+</mapper>

+ 4 - 4
src/main/resources/mapper/SearchMapper.xml

@@ -267,7 +267,7 @@
 		limit 1
     </select>
     <!-- 搜索容错 商品列表 -->
-    <select id="queryProduct" resultType="com.caimei365.commodity.model.vo.ProductListVo">
+    <select id="queryProduct" resultType="com.caimei365.commodity.model.search.ProductListVo">
         select
             p.productID as productId,
             p.`name` as name,
@@ -346,7 +346,7 @@
         </choose>
     </select>
     <!-- 搜索容错 供应商列表 -->
-    <select id="querySupplier" resultType="com.caimei365.commodity.model.vo.ShopListVo">
+    <select id="querySupplier" resultType="com.caimei365.commodity.model.search.ShopListVo">
         select
             s.shopID as shopId,
             s.name as name,
@@ -363,7 +363,7 @@
         and s.name like concat('%',#{keyword},'%')
     </select>
     <!-- 搜索容错 项目仪器列表 -->
-    <select id="queryEquipment" resultType="com.caimei365.commodity.model.vo.EquipmentListVo">
+    <select id="queryEquipment" resultType="com.caimei365.commodity.model.search.EquipmentListVo">
         select
             e.id as id,
             e.title as name,
@@ -375,7 +375,7 @@
         order by e.docBoost desc
     </select>
     <!-- 搜索容错 文章列表 -->
-    <select id="queryArticle" resultType="com.caimei365.commodity.model.vo.ArticleListVo">
+    <select id="queryArticle" resultType="com.caimei365.commodity.model.search.ArticleListVo">
         select
             a.id as articleId,
             a.title as title,