Showing
15 changed files
with
568 additions
and
7 deletions
1 | +package com.yoho.ufo.dal; | ||
2 | + | ||
3 | +import java.util.List; | ||
4 | + | ||
5 | +import org.apache.ibatis.annotations.Param; | ||
6 | + | ||
7 | +import com.yoho.ufo.model.ChannelSkuCompare; | ||
8 | +import com.yoho.ufo.model.ChannelSkuCompareReq; | ||
9 | + | ||
10 | +/** | ||
11 | + * Created by caoyan. | ||
12 | + */ | ||
13 | +public interface ChannelSkuCompareMapper { | ||
14 | + | ||
15 | + int selectTotalByCondition(@Param("channelSkuCompareReq") ChannelSkuCompareReq req); | ||
16 | + | ||
17 | + List<ChannelSkuCompare> selectByCondition(@Param("channelSkuCompareReq") ChannelSkuCompareReq req); | ||
18 | + | ||
19 | +} |
@@ -2,7 +2,6 @@ package com.yoho.ufo.dal; | @@ -2,7 +2,6 @@ package com.yoho.ufo.dal; | ||
2 | 2 | ||
3 | import java.util.List; | 3 | import java.util.List; |
4 | 4 | ||
5 | -import com.yoho.ufo.model.brand.Brand; | ||
6 | import org.apache.ibatis.annotations.Param; | 5 | import org.apache.ibatis.annotations.Param; |
7 | 6 | ||
8 | import com.yoho.ufo.dal.model.Product; | 7 | import com.yoho.ufo.dal.model.Product; |
@@ -72,4 +71,6 @@ public interface ProductMapper { | @@ -72,4 +71,6 @@ public interface ProductMapper { | ||
72 | int selectProductStorageCount(@Param("product")Product product); | 71 | int selectProductStorageCount(@Param("product")Product product); |
73 | 72 | ||
74 | List<Product> selectProductStorageList(@Param("product")Product product, @Param("start")int start, @Param("rows")Integer rows); | 73 | List<Product> selectProductStorageList(@Param("product")Product product, @Param("start")int start, @Param("rows")Integer rows); |
74 | + | ||
75 | + List<Product> selectByProductName(@Param("productName") String productName); | ||
75 | } | 76 | } |
@@ -2,7 +2,6 @@ package com.yoho.ufo.dal; | @@ -2,7 +2,6 @@ package com.yoho.ufo.dal; | ||
2 | 2 | ||
3 | import java.util.List; | 3 | import java.util.List; |
4 | 4 | ||
5 | -import com.yoho.ufo.dal.model.Product; | ||
6 | import org.apache.ibatis.annotations.Param; | 5 | import org.apache.ibatis.annotations.Param; |
7 | 6 | ||
8 | import com.yoho.ufo.dal.model.StoragePrice; | 7 | import com.yoho.ufo.dal.model.StoragePrice; |
@@ -47,4 +46,6 @@ public interface StoragePriceMapper { | @@ -47,4 +46,6 @@ public interface StoragePriceMapper { | ||
47 | 46 | ||
48 | // 根据SKup等信息查询其所属productId列表 最多查询出最新的300 productId | 47 | // 根据SKup等信息查询其所属productId列表 最多查询出最新的300 productId |
49 | List<Integer> selectProductIdsBySkupInfo(@Param("storagePrice")StoragePrice storagePrice); | 48 | List<Integer> selectProductIdsBySkupInfo(@Param("storagePrice")StoragePrice storagePrice); |
49 | + | ||
50 | + List<StoragePrice> selectMinPriceByStorageIdList(@Param("list") List<Integer> storageIdList); | ||
50 | } | 51 | } |
1 | package com.yoho.ufo.dal; | 1 | package com.yoho.ufo.dal; |
2 | 2 | ||
3 | -import com.yoho.ufo.model.commoditybasicrole.color.ProductColor; | ||
4 | -import com.yoho.ufo.model.commoditybasicrole.size.Size; | ||
5 | -import com.yohobuy.ufo.model.common.PageModel; | 3 | +import java.util.List; |
4 | + | ||
6 | import org.apache.ibatis.annotations.Param; | 5 | import org.apache.ibatis.annotations.Param; |
7 | 6 | ||
8 | -import java.util.List; | 7 | +import com.yoho.ufo.model.commoditybasicrole.size.Size; |
8 | +import com.yohobuy.ufo.model.common.PageModel; | ||
9 | 9 | ||
10 | /** | 10 | /** |
11 | * 品类mapper | 11 | * 品类mapper |
@@ -83,4 +83,11 @@ public interface UfoSizeMapper { | @@ -83,4 +83,11 @@ public interface UfoSizeMapper { | ||
83 | * @return | 83 | * @return |
84 | */ | 84 | */ |
85 | List<Size> selectAllSize(); | 85 | List<Size> selectAllSize(); |
86 | + | ||
87 | + /** | ||
88 | + * 根据尺码名称查询尺码对象 | ||
89 | + * @param sizeName | ||
90 | + * @return | ||
91 | + */ | ||
92 | + List<Size> selectBySizeName(@Param("sizeName") String sizeName); | ||
86 | } | 93 | } |
1 | package com.yoho.ufo.dal.model; | 1 | package com.yoho.ufo.dal.model; |
2 | 2 | ||
3 | +import java.math.BigDecimal; | ||
4 | + | ||
3 | public class Storage { | 5 | public class Storage { |
4 | private Integer id; | 6 | private Integer id; |
5 | 7 | ||
@@ -15,6 +17,10 @@ public class Storage { | @@ -15,6 +17,10 @@ public class Storage { | ||
15 | 17 | ||
16 | private Integer createTime; | 18 | private Integer createTime; |
17 | 19 | ||
20 | + private BigDecimal suggestLowPrice; | ||
21 | + | ||
22 | + private BigDecimal suggestHighPrice; | ||
23 | + | ||
18 | public Integer getId() { | 24 | public Integer getId() { |
19 | return id; | 25 | return id; |
20 | } | 26 | } |
@@ -70,4 +76,21 @@ public class Storage { | @@ -70,4 +76,21 @@ public class Storage { | ||
70 | public void setCreateTime(Integer createTime) { | 76 | public void setCreateTime(Integer createTime) { |
71 | this.createTime = createTime; | 77 | this.createTime = createTime; |
72 | } | 78 | } |
79 | + | ||
80 | + public BigDecimal getSuggestLowPrice() { | ||
81 | + return suggestLowPrice; | ||
82 | + } | ||
83 | + | ||
84 | + public void setSuggestLowPrice(BigDecimal suggestLowPrice) { | ||
85 | + this.suggestLowPrice = suggestLowPrice; | ||
86 | + } | ||
87 | + | ||
88 | + public BigDecimal getSuggestHighPrice() { | ||
89 | + return suggestHighPrice; | ||
90 | + } | ||
91 | + | ||
92 | + public void setSuggestHighPrice(BigDecimal suggestHighPrice) { | ||
93 | + this.suggestHighPrice = suggestHighPrice; | ||
94 | + } | ||
95 | + | ||
73 | } | 96 | } |
1 | +package com.yoho.ufo.model; | ||
2 | + | ||
3 | +import java.io.Serializable; | ||
4 | +import java.math.BigDecimal; | ||
5 | + | ||
6 | +/** | ||
7 | + * 爬虫跟毒价 | ||
8 | + */ | ||
9 | +public class ChannelSkuCompare implements Serializable { | ||
10 | + | ||
11 | + | ||
12 | + private static final long serialVersionUID = 1613330087543482073L; | ||
13 | + | ||
14 | + /** | ||
15 | + * 主键 | ||
16 | + */ | ||
17 | + private Integer id; | ||
18 | + | ||
19 | + /** | ||
20 | + * 商品ID | ||
21 | + */ | ||
22 | + private Integer productId; | ||
23 | + | ||
24 | + private Integer sku; | ||
25 | + | ||
26 | + private Integer sizeId; | ||
27 | + | ||
28 | + private BigDecimal channelPrice; | ||
29 | + | ||
30 | + private BigDecimal lowRate; | ||
31 | + | ||
32 | + private BigDecimal highRate; | ||
33 | + | ||
34 | + private Integer updateTime; | ||
35 | + | ||
36 | + private String channelUrl; | ||
37 | + | ||
38 | + public Integer getId() { | ||
39 | + return id; | ||
40 | + } | ||
41 | + | ||
42 | + public void setId(Integer id) { | ||
43 | + this.id = id; | ||
44 | + } | ||
45 | + | ||
46 | + public Integer getProductId() { | ||
47 | + return productId; | ||
48 | + } | ||
49 | + | ||
50 | + public void setProductId(Integer productId) { | ||
51 | + this.productId = productId; | ||
52 | + } | ||
53 | + | ||
54 | + public Integer getSku() { | ||
55 | + return sku; | ||
56 | + } | ||
57 | + | ||
58 | + public void setSku(Integer sku) { | ||
59 | + this.sku = sku; | ||
60 | + } | ||
61 | + | ||
62 | + public Integer getSizeId() { | ||
63 | + return sizeId; | ||
64 | + } | ||
65 | + | ||
66 | + public void setSizeId(Integer sizeId) { | ||
67 | + this.sizeId = sizeId; | ||
68 | + } | ||
69 | + | ||
70 | + public BigDecimal getChannelPrice() { | ||
71 | + return channelPrice; | ||
72 | + } | ||
73 | + | ||
74 | + public void setChannelPrice(BigDecimal channelPrice) { | ||
75 | + this.channelPrice = channelPrice; | ||
76 | + } | ||
77 | + | ||
78 | + public BigDecimal getLowRate() { | ||
79 | + return lowRate; | ||
80 | + } | ||
81 | + | ||
82 | + public void setLowRate(BigDecimal lowRate) { | ||
83 | + this.lowRate = lowRate; | ||
84 | + } | ||
85 | + | ||
86 | + public BigDecimal getHighRate() { | ||
87 | + return highRate; | ||
88 | + } | ||
89 | + | ||
90 | + public void setHighRate(BigDecimal highRate) { | ||
91 | + this.highRate = highRate; | ||
92 | + } | ||
93 | + | ||
94 | + public Integer getUpdateTime() { | ||
95 | + return updateTime; | ||
96 | + } | ||
97 | + | ||
98 | + public void setUpdateTime(Integer updateTime) { | ||
99 | + this.updateTime = updateTime; | ||
100 | + } | ||
101 | + | ||
102 | + public String getChannelUrl() { | ||
103 | + return channelUrl; | ||
104 | + } | ||
105 | + | ||
106 | + public void setChannelUrl(String channelUrl) { | ||
107 | + this.channelUrl = channelUrl; | ||
108 | + } | ||
109 | + | ||
110 | + @Override | ||
111 | + public String toString() { | ||
112 | + return "ProductPool{" + | ||
113 | + "id=" + id + | ||
114 | + ", productId='" + productId + | ||
115 | + ", sku=" + sku + | ||
116 | + ", sizeId=" + sizeId + | ||
117 | + ", channelPrice=" + channelPrice + | ||
118 | + ", lowRate=" + lowRate + | ||
119 | + ", highRate=" + highRate + | ||
120 | + ", updateTime=" + updateTime + | ||
121 | + ", channelUrl=" + channelUrl + | ||
122 | + '}'; | ||
123 | + } | ||
124 | +} |
1 | +package com.yoho.ufo.model; | ||
2 | + | ||
3 | +import java.util.List; | ||
4 | + | ||
5 | +import com.alibaba.fastjson.JSONObject; | ||
6 | +import com.yoho.ufo.service.model.PageRequestBO; | ||
7 | + | ||
8 | +public class ChannelSkuCompareReq extends PageRequestBO { | ||
9 | + | ||
10 | + /** | ||
11 | + * | ||
12 | + */ | ||
13 | + private static final long serialVersionUID = 1L; | ||
14 | + | ||
15 | + private Integer sku; | ||
16 | + | ||
17 | + private Integer productId; | ||
18 | + | ||
19 | + private Integer status; | ||
20 | + | ||
21 | + private String productName; | ||
22 | + | ||
23 | + private String sizeName; | ||
24 | + | ||
25 | + private List<Integer> productIdList; | ||
26 | + | ||
27 | + private List<Integer> sizeIdList; | ||
28 | + | ||
29 | + public Integer getSku() { | ||
30 | + return sku; | ||
31 | + } | ||
32 | + | ||
33 | + public void setSku(Integer sku) { | ||
34 | + this.sku = sku; | ||
35 | + } | ||
36 | + | ||
37 | + public Integer getProductId() { | ||
38 | + return productId; | ||
39 | + } | ||
40 | + | ||
41 | + public void setProductId(Integer productId) { | ||
42 | + this.productId = productId; | ||
43 | + } | ||
44 | + | ||
45 | + public Integer getStatus() { | ||
46 | + return status; | ||
47 | + } | ||
48 | + | ||
49 | + public void setStatus(Integer status) { | ||
50 | + this.status = status; | ||
51 | + } | ||
52 | + | ||
53 | + public String getProductName() { | ||
54 | + return productName; | ||
55 | + } | ||
56 | + | ||
57 | + public void setProductName(String productName) { | ||
58 | + this.productName = productName; | ||
59 | + } | ||
60 | + | ||
61 | + public String getSizeName() { | ||
62 | + return sizeName; | ||
63 | + } | ||
64 | + | ||
65 | + public void setSizeName(String sizeName) { | ||
66 | + this.sizeName = sizeName; | ||
67 | + } | ||
68 | + | ||
69 | + public List<Integer> getProductIdList() { | ||
70 | + return productIdList; | ||
71 | + } | ||
72 | + | ||
73 | + public void setProductIdList(List<Integer> productIdList) { | ||
74 | + this.productIdList = productIdList; | ||
75 | + } | ||
76 | + | ||
77 | + public List<Integer> getSizeIdList() { | ||
78 | + return sizeIdList; | ||
79 | + } | ||
80 | + | ||
81 | + public void setSizeIdList(List<Integer> sizeIdList) { | ||
82 | + this.sizeIdList = sizeIdList; | ||
83 | + } | ||
84 | + | ||
85 | + public String toString() { | ||
86 | + return JSONObject.toJSONString(this); | ||
87 | + } | ||
88 | +} |
1 | +<?xml version="1.0" encoding="UTF-8" ?> | ||
2 | +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > | ||
3 | +<mapper namespace="com.yoho.ufo.dal.ChannelSkuCompareMapper"> | ||
4 | + <resultMap id="BaseResultMap" type="com.yoho.ufo.model.ChannelSkuCompare"> | ||
5 | + <result column="id" property="id" jdbcType="INTEGER" /> | ||
6 | + <result column="product_id" property="productId" jdbcType="INTEGER" /> | ||
7 | + <result column="sku" property="sku" jdbcType="INTEGER" /> | ||
8 | + <result column="size_id" property="sizeId" jdbcType="INTEGER" /> | ||
9 | + <result column="channel_price" property="channelPrice" jdbcType="DECIMAL" /> | ||
10 | + <result column="low_rate" property="lowRate" jdbcType="DECIMAL" /> | ||
11 | + <result column="high_rate" property="highRate" jdbcType="DECIMAL" /> | ||
12 | + <result column="update_time" property="updateTime" jdbcType="INTEGER" /> | ||
13 | + <result column="channel_url" property="channelUrl" jdbcType="VARCHAR" /> | ||
14 | + </resultMap> | ||
15 | + | ||
16 | + <sql id="Base_Column_List"> | ||
17 | + id, product_id, sku, size_id, channel_price, low_rate, high_rate, update_time, channel_url | ||
18 | + </sql> | ||
19 | + | ||
20 | + <sql id="Query_Sql" > | ||
21 | + <if test="channelSkuCompareReq.sku != null and channelSkuCompareReq.sku != 0 "> | ||
22 | + and a.sku = #{channelSkuCompareReq.sku} | ||
23 | + </if> | ||
24 | + <if test="channelSkuCompareReq.productId != null and channelSkuCompareReq.productId != 0 "> | ||
25 | + and a.product_id = #{channelSkuCompareReq.productId} | ||
26 | + </if> | ||
27 | + <if test="channelSkuCompareReq.productIdList != null and channelSkuCompareReq.productIdList.size()>0"> | ||
28 | + and a.product_id in | ||
29 | + <foreach collection="channelSkuCompareReq.productIdList" item="productId" open="(" close=")" separator=","> | ||
30 | + #{productId} | ||
31 | + </foreach> | ||
32 | + </if> | ||
33 | + <if test="channelSkuCompareReq.sizeIdList != null and channelSkuCompareReq.sizeIdList.size()>0"> | ||
34 | + and a.size_id in | ||
35 | + <foreach collection="channelSkuCompareReq.sizeIdList" item="sizeId" open="(" close=")" separator=","> | ||
36 | + #{sizeId} | ||
37 | + </foreach> | ||
38 | + </if> | ||
39 | + <if test="channelSkuCompareReq.status != null and channelSkuCompareReq.status == 0 "> | ||
40 | + and b.min_price < a.channel_price | ||
41 | + </if> | ||
42 | + <if test="channelSkuCompareReq.status != null and channelSkuCompareReq.status == 1 "> | ||
43 | + and b.min_price > a.channel_price | ||
44 | + </if> | ||
45 | + </sql> | ||
46 | + | ||
47 | + <select id="selectTotalByCondition" resultType="java.lang.Integer" parameterType="com.yoho.ufo.model.ChannelSkuCompareReq"> | ||
48 | + select count(a.id) | ||
49 | + from channel_sku_compare a | ||
50 | + <if test="channelSkuCompareReq.status != null"> | ||
51 | + LEFT JOIN product b | ||
52 | + ON( b.id=a.product_id) | ||
53 | + </if> | ||
54 | + where 1=1 | ||
55 | + <include refid="Query_Sql" /> | ||
56 | + </select> | ||
57 | + | ||
58 | + <select id="selectByCondition" resultMap="BaseResultMap" parameterType="com.yoho.ufo.model.ChannelSkuCompareReq"> | ||
59 | + select a.* | ||
60 | + from channel_sku_compare a | ||
61 | + <if test="channelSkuCompareReq.status != null"> | ||
62 | + LEFT JOIN product b | ||
63 | + ON( b.id=a.product_id) | ||
64 | + </if> | ||
65 | + where 1=1 | ||
66 | + <include refid="Query_Sql" /> | ||
67 | + order by a.product_id desc, a.sku asc | ||
68 | + <if test="channelSkuCompareReq.start!=null and channelSkuCompareReq.size != null"> | ||
69 | + limit #{channelSkuCompareReq.start},#{channelSkuCompareReq.size} | ||
70 | + </if> | ||
71 | + </select> | ||
72 | +</mapper> |
@@ -222,4 +222,7 @@ | @@ -222,4 +222,7 @@ | ||
222 | </foreach> | 222 | </foreach> |
223 | </if> | 223 | </if> |
224 | </sql> | 224 | </sql> |
225 | + <select id="selectByProductName" resultMap="BaseResultMap"> | ||
226 | + select id, product_name from product where product_name like "%"#{productName}"%" | ||
227 | + </select> | ||
225 | </mapper> | 228 | </mapper> |
@@ -9,6 +9,8 @@ | @@ -9,6 +9,8 @@ | ||
9 | <result column="storage_num" jdbcType="INTEGER" property="storageNum" /> | 9 | <result column="storage_num" jdbcType="INTEGER" property="storageNum" /> |
10 | <result column="update_time" jdbcType="INTEGER" property="updateTime" /> | 10 | <result column="update_time" jdbcType="INTEGER" property="updateTime" /> |
11 | <result column="create_time" jdbcType="INTEGER" property="createTime" /> | 11 | <result column="create_time" jdbcType="INTEGER" property="createTime" /> |
12 | + <result column="suggest_low_price" jdbcType="DECIMAL" property="suggestLowPrice" /> | ||
13 | + <result column="suggest_high_price" jdbcType="DECIMAL" property="suggestHighPrice" /> | ||
12 | </resultMap> | 14 | </resultMap> |
13 | <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer"> | 15 | <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer"> |
14 | delete from storage | 16 | delete from storage |
@@ -58,7 +60,7 @@ | @@ -58,7 +60,7 @@ | ||
58 | where id = #{storageId,jdbcType=INTEGER} and storage_num = #{oldStorageNum,jdbcType=INTEGER} | 60 | where id = #{storageId,jdbcType=INTEGER} and storage_num = #{oldStorageNum,jdbcType=INTEGER} |
59 | </update> | 61 | </update> |
60 | <select id="selectByIds" resultMap="BaseResultMap"> | 62 | <select id="selectByIds" resultMap="BaseResultMap"> |
61 | - select id, product_id, goods_id, size_id, storage_num, update_time, create_time | 63 | + select id, product_id, goods_id, size_id, storage_num, update_time, create_time, suggest_low_price, suggest_high_price |
62 | from storage where id in | 64 | from storage where id in |
63 | <foreach item="item" index="index" collection="storageIdList" open="(" separator="," close=")"> | 65 | <foreach item="item" index="index" collection="storageIdList" open="(" separator="," close=")"> |
64 | #{item} | 66 | #{item} |
@@ -161,4 +161,13 @@ | @@ -161,4 +161,13 @@ | ||
161 | </if> | 161 | </if> |
162 | order by create_time desc limit 300 | 162 | order by create_time desc limit 300 |
163 | </select> | 163 | </select> |
164 | + | ||
165 | + <select id="selectMinPriceByStorageIdList" resultMap="BaseResultMap"> | ||
166 | + select storage_id, min(price) as price | ||
167 | + from storage_price where storage_id in | ||
168 | + <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> | ||
169 | + #{item} | ||
170 | + </foreach> | ||
171 | + and status = 1 group by storage_id | ||
172 | + </select> | ||
164 | </mapper> | 173 | </mapper> |
@@ -103,4 +103,7 @@ | @@ -103,4 +103,7 @@ | ||
103 | select id, sort_id, size_name from size | 103 | select id, sort_id, size_name from size |
104 | </select> | 104 | </select> |
105 | 105 | ||
106 | + <select id="selectBySizeName" resultMap="sizeMap"> | ||
107 | + select id, size_name from size where size_name = #{sizeName} | ||
108 | + </select> | ||
106 | </mapper> | 109 | </mapper> |
1 | +package com.yoho.ufo.controller; | ||
2 | + | ||
3 | +import org.slf4j.Logger; | ||
4 | +import org.slf4j.LoggerFactory; | ||
5 | +import org.springframework.beans.factory.annotation.Autowired; | ||
6 | +import org.springframework.web.bind.annotation.RequestBody; | ||
7 | +import org.springframework.web.bind.annotation.RequestMapping; | ||
8 | +import org.springframework.web.bind.annotation.RestController; | ||
9 | + | ||
10 | +import com.yoho.ufo.model.ChannelSkuCompareReq; | ||
11 | +import com.yoho.ufo.service.IChannelSkuCompareService; | ||
12 | +import com.yoho.ufo.service.model.ApiResponse; | ||
13 | +import com.yoho.ufo.service.model.PageResponseBO; | ||
14 | +import com.yohobuy.ufo.model.resp.product.ChannelSkuCompareRspBo; | ||
15 | + | ||
16 | +@RestController | ||
17 | +@RequestMapping(value = "/channelSkuCompare") | ||
18 | +public class ChannelSkuCompareController { | ||
19 | + | ||
20 | + private static final Logger LOGGER = LoggerFactory.getLogger(ChannelSkuCompareController.class); | ||
21 | + | ||
22 | + @Autowired | ||
23 | + private IChannelSkuCompareService channelSkuCompareService; | ||
24 | + | ||
25 | + @RequestMapping(value = "/queryList") | ||
26 | + public ApiResponse queryList(@RequestBody ChannelSkuCompareReq req) { | ||
27 | + LOGGER.info("queryOrderList in. req is {}", req); | ||
28 | + PageResponseBO<ChannelSkuCompareRspBo> result = channelSkuCompareService.queryList(req); | ||
29 | + return new ApiResponse.ApiResponseBuilder().code(200).message("查询成功").data(result).build(); | ||
30 | + } | ||
31 | +} |
1 | +package com.yoho.ufo.service; | ||
2 | + | ||
3 | +import com.yoho.ufo.model.ChannelSkuCompareReq; | ||
4 | +import com.yoho.ufo.service.model.PageResponseBO; | ||
5 | +import com.yohobuy.ufo.model.resp.product.ChannelSkuCompareRspBo; | ||
6 | + | ||
7 | +/** | ||
8 | + * @author caoyan | ||
9 | + */ | ||
10 | +public interface IChannelSkuCompareService { | ||
11 | + PageResponseBO<ChannelSkuCompareRspBo> queryList(ChannelSkuCompareReq req); | ||
12 | + | ||
13 | +} |
1 | +package com.yoho.ufo.service.impl; | ||
2 | + | ||
3 | +import java.math.BigDecimal; | ||
4 | +import java.util.List; | ||
5 | +import java.util.Map; | ||
6 | +import java.util.stream.Collectors; | ||
7 | + | ||
8 | +import org.apache.commons.collections.CollectionUtils; | ||
9 | +import org.apache.commons.lang3.StringUtils; | ||
10 | +import org.elasticsearch.common.collect.Lists; | ||
11 | +import org.slf4j.Logger; | ||
12 | +import org.slf4j.LoggerFactory; | ||
13 | +import org.springframework.beans.factory.annotation.Autowired; | ||
14 | +import org.springframework.stereotype.Service; | ||
15 | + | ||
16 | +import com.yoho.ufo.dal.ChannelSkuCompareMapper; | ||
17 | +import com.yoho.ufo.dal.ProductMapper; | ||
18 | +import com.yoho.ufo.dal.StorageMapper; | ||
19 | +import com.yoho.ufo.dal.StoragePriceMapper; | ||
20 | +import com.yoho.ufo.dal.UfoSizeMapper; | ||
21 | +import com.yoho.ufo.dal.model.Product; | ||
22 | +import com.yoho.ufo.dal.model.Storage; | ||
23 | +import com.yoho.ufo.dal.model.StoragePrice; | ||
24 | +import com.yoho.ufo.model.ChannelSkuCompare; | ||
25 | +import com.yoho.ufo.model.ChannelSkuCompareReq; | ||
26 | +import com.yoho.ufo.model.commoditybasicrole.size.Size; | ||
27 | +import com.yoho.ufo.service.IChannelSkuCompareService; | ||
28 | +import com.yoho.ufo.service.model.PageResponseBO; | ||
29 | +import com.yohobuy.ufo.model.resp.product.ChannelSkuCompareRspBo; | ||
30 | + | ||
31 | +/** | ||
32 | + * @author caoyan | ||
33 | + */ | ||
34 | +@Service | ||
35 | +public class ChannelSkuCompareServiceImpl implements IChannelSkuCompareService { | ||
36 | + | ||
37 | + private static final Logger LOGGER = LoggerFactory.getLogger(ChannelSkuCompareServiceImpl.class); | ||
38 | + | ||
39 | + @Autowired | ||
40 | + private ChannelSkuCompareMapper channelSkuCompareMapper; | ||
41 | + | ||
42 | + @Autowired | ||
43 | + private ProductMapper productMapper; | ||
44 | + | ||
45 | + @Autowired | ||
46 | + private UfoSizeMapper ufoSizeMapper; | ||
47 | + | ||
48 | + @Autowired | ||
49 | + private StorageMapper storageMapper; | ||
50 | + | ||
51 | + @Autowired | ||
52 | + private StoragePriceMapper storagePriceMapper; | ||
53 | + | ||
54 | + @Override | ||
55 | + public PageResponseBO<ChannelSkuCompareRspBo> queryList(ChannelSkuCompareReq req) { | ||
56 | + LOGGER.info("queryList in. req is {}", req); | ||
57 | + if(!checkAndBuildParam(req)) { | ||
58 | + return null; | ||
59 | + } | ||
60 | + int total = channelSkuCompareMapper.selectTotalByCondition(req); | ||
61 | + if(total == 0) { | ||
62 | + return null; | ||
63 | + } | ||
64 | + | ||
65 | + List<ChannelSkuCompare> cscList = channelSkuCompareMapper.selectByCondition(req); | ||
66 | + if(CollectionUtils.isEmpty(cscList)) { | ||
67 | + return null; | ||
68 | + } | ||
69 | + | ||
70 | + //查询商品名称 | ||
71 | + List<Integer> productIdList = cscList.stream().map(ChannelSkuCompare::getProductId).collect(Collectors.toList()); | ||
72 | + List<Product> productList = productMapper.selectProductListByIds(productIdList); | ||
73 | + if(CollectionUtils.isEmpty(productList)) { | ||
74 | + return null; | ||
75 | + } | ||
76 | + Map<Integer, Product> productMap = productList.stream().collect(Collectors.toMap(Product::getId, p->p)); | ||
77 | + | ||
78 | + //查询尺码名称 | ||
79 | + List<Integer> sizeIdList = cscList.stream().map(ChannelSkuCompare::getSizeId).collect(Collectors.toList()); | ||
80 | + List<Size> sizeList = ufoSizeMapper.selectByIdList(sizeIdList); | ||
81 | + Map<Integer, String> sizeIdNameMap = sizeList.stream().collect(Collectors.toMap(Size::getId, Size::getSizeName)); | ||
82 | + | ||
83 | + //查询平台建议价 | ||
84 | + List<Integer> skuList = cscList.stream().map(ChannelSkuCompare::getSku).collect(Collectors.toList()); | ||
85 | + List<Storage> storageList = storageMapper.selectByIds(skuList); | ||
86 | + Map<Integer, Storage> storageMap = storageList.stream().collect(Collectors.toMap(Storage::getId, s->s)); | ||
87 | + | ||
88 | + //计算UFO当前价,可售sku最低价 | ||
89 | + List<StoragePrice> storagePriceList = storagePriceMapper.selectMinPriceByStorageIdList(skuList); | ||
90 | + Map<Integer, BigDecimal> storageMinPriceMap = storagePriceList.stream().collect(Collectors.toMap(StoragePrice::getStorageId, StoragePrice::getPrice)); | ||
91 | + | ||
92 | + List<ChannelSkuCompareRspBo> respList = convertToResp(cscList, productMap, sizeIdNameMap, storageMap, storageMinPriceMap); | ||
93 | + | ||
94 | + PageResponseBO<ChannelSkuCompareRspBo> result=new PageResponseBO<>(); | ||
95 | + result.setList(respList); | ||
96 | + result.setPage(req.getPage()); | ||
97 | + result.setSize(req.getSize()); | ||
98 | + result.setTotal(total); | ||
99 | + | ||
100 | + return result; | ||
101 | + } | ||
102 | + | ||
103 | + private List<ChannelSkuCompareRspBo> convertToResp(List<ChannelSkuCompare> cscList, Map<Integer, Product> productMap, | ||
104 | + Map<Integer, String> sizeIdNameMap, Map<Integer, Storage> storageMap, Map<Integer, BigDecimal> storageMinPriceMap){ | ||
105 | + List<ChannelSkuCompareRspBo> boList = Lists.newArrayList(); | ||
106 | + for(ChannelSkuCompare csc : cscList) { | ||
107 | + ChannelSkuCompareRspBo bo = new ChannelSkuCompareRspBo(); | ||
108 | + bo.setProductId(csc.getProductId()); | ||
109 | + bo.setSku(csc.getSku()); | ||
110 | + bo.setProductName(productMap.get(csc.getProductId()).getProductName()); | ||
111 | + bo.setSizeName(sizeIdNameMap.get(csc.getSizeId())); | ||
112 | + bo.setChannelPrice(getFormatPrice(csc.getChannelPrice())); | ||
113 | + bo.setChannelUrl(csc.getChannelUrl()); | ||
114 | + bo.setLowRate(csc.getLowRate().multiply(BigDecimal.valueOf(100)) + "%"); | ||
115 | + bo.setHighRate(csc.getHighRate().multiply(BigDecimal.valueOf(100)) + "%"); | ||
116 | + BigDecimal channelLowPrice = csc.getChannelPrice().multiply(BigDecimal.valueOf(1).subtract(csc.getLowRate())); | ||
117 | + BigDecimal channelHighPrice = csc.getChannelPrice().multiply(BigDecimal.valueOf(1).add(csc.getHighRate())); | ||
118 | + bo.setChannelPriceRange(getFormatPrice(channelLowPrice) + "~" + getFormatPrice(channelHighPrice)); | ||
119 | + bo.setUfoCurrentPrice(getFormatPrice(storageMinPriceMap.get(csc.getSku()))); | ||
120 | + BigDecimal ufoMinPrice = productMap.get(csc.getProductId()).getMinPrice(); | ||
121 | + bo.setUfoMinPrice(getFormatPrice(ufoMinPrice)); | ||
122 | + //毒当前价低于UFO价格红线则为异常,那么显示上回的建议价 | ||
123 | + BigDecimal suggestLowPrice = storageMap.get(csc.getSku()).getSuggestLowPrice(); | ||
124 | + BigDecimal suggestHighPrice = storageMap.get(csc.getSku()).getSuggestHighPrice(); | ||
125 | + if(null != suggestLowPrice && null != suggestHighPrice) { | ||
126 | + bo.setSuggestPriceRange(getFormatPrice(suggestLowPrice) + "~" + getFormatPrice(suggestHighPrice)); | ||
127 | + } | ||
128 | + if(csc.getChannelPrice().compareTo(ufoMinPrice) < 0) {//异常 | ||
129 | + bo.setStatus(1); | ||
130 | + }else { | ||
131 | + bo.setStatus(0);//正常 | ||
132 | + } | ||
133 | + boList.add(bo); | ||
134 | + } | ||
135 | + | ||
136 | + return boList; | ||
137 | + } | ||
138 | + | ||
139 | + private static String getFormatPrice(BigDecimal price) { | ||
140 | + return String.format("%d", price.intValue()); | ||
141 | + } | ||
142 | + | ||
143 | + private boolean checkAndBuildParam(ChannelSkuCompareReq req) { | ||
144 | + if(StringUtils.isNotEmpty(req.getProductName())) { | ||
145 | + List<Product> productList = productMapper.selectByProductName(req.getProductName()); | ||
146 | + if(CollectionUtils.isEmpty(productList)) { | ||
147 | + return false; | ||
148 | + }else { | ||
149 | + req.setProductIdList(productList.stream().map(Product::getId).collect(Collectors.toList())); | ||
150 | + } | ||
151 | + } | ||
152 | + | ||
153 | + if(StringUtils.isNotEmpty(req.getSizeName())) { | ||
154 | + List<Size> sizeList = ufoSizeMapper.selectBySizeName(req.getSizeName()); | ||
155 | + if(CollectionUtils.isEmpty(sizeList)) { | ||
156 | + return false; | ||
157 | + }else { | ||
158 | + req.setSizeIdList(sizeList.stream().map(Size::getId).collect(Collectors.toList())); | ||
159 | + } | ||
160 | + } | ||
161 | + | ||
162 | + return true; | ||
163 | + | ||
164 | + } | ||
165 | +} |
-
Please register or login to post a comment