Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
6699bd34
提交
6699bd34
authored
3月 31, 2019
作者:
YunaiV
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
后端:增加 H5 需要的商品推荐接口
上级
b333340c
隐藏空白字符变更
内嵌
并排
正在显示
10 个修改的文件
包含
211 行增加
和
23 行删除
+211
-23
env.js
mobile-web/src/config/env.js
+2
-2
index.vue
mobile-web/src/page/page/index.vue
+14
-19
ProductSpuServiceMock.java
...cn/iocoder/mall/order/biz/mock/ProductSpuServiceMock.java
+9
-0
ProductSpuService.java
...n/java/cn/iocoder/mall/product/api/ProductSpuService.java
+7
-0
ProductSpuMapper.java
...in/java/cn/iocoder/mall/product/dao/ProductSpuMapper.java
+3
-0
ProductSpuServiceImpl.java
...n/iocoder/mall/product/service/ProductSpuServiceImpl.java
+27
-0
ProductSpuMapper.xml
...rvice-impl/src/main/resources/mapper/ProductSpuMapper.xml
+11
-0
UsersProductRecommendController.java
...ion/controller/users/UsersProductRecommendController.java
+54
-0
ProductRecommendConvert.java
...romotion/application/convert/ProductRecommendConvert.java
+8
-2
UsersProductRecommendVO.java
...omotion/application/vo/users/UsersProductRecommendVO.java
+76
-0
没有找到文件。
mobile-web/src/config/env.js
浏览文件 @
6699bd34
...
...
@@ -19,8 +19,8 @@ if (process.env.NODE_ENV == 'development') {
// baseUrl = 'http://127.0.0.1';
// baseUrl = 'http://180.167.213.26:18099';
dataSources
=
'remote'
;
//
dataSources = 'local';
//
dataSources = 'remote';
dataSources
=
'local'
;
export
{
baseUrl
,
...
...
mobile-web/src/page/page/index.vue
浏览文件 @
6699bd34
<
template
>
<div
:style=
"'background-color:'+((page.BackgroundColor==undefined||page.BackgroundColor=='')?'#fff':page.BackgroundColor)"
>
<div
:style=
"'height:'+topheight+'px'"
></div>
<!-- TODO 搜索框 -->
<!--
<search
v-if=
"item.Code=='Search'"
:data=
"item.ParameterDictionary"
v-on:settopheight=
"settopheight($event)"
></search>
-->
<van-swipe
:autoplay=
"3000"
indicator-color=
"white"
height=
"160"
>
<van-swipe-item
v-for=
"(banner, index) in banners"
:key=
"index"
>
<a
:href=
"banner.url"
>
...
...
@@ -8,26 +12,17 @@
</a>
</van-swipe-item>
</van-swipe>
<div
v-for=
"(item,index) in page.Sections"
:key=
"index"
>
<imageText
v-if=
"item.Code=='ImageText'"
:data=
"item.ParameterDictionary"
></imageText>
<pageLine
v-if=
"item.Code=='Line'"
:data=
"item.ParameterDictionary"
></pageLine>
<whitespace
v-if=
"item.Code=='Line'"
:data=
"item.ParameterDictionary"
/>
<pageText
v-if=
"item.Code=='Text'"
:data=
"item.ParameterDictionary"
></pageText>
<notice
v-if=
"item.Code=='Notice'"
:data=
"item.ParameterDictionary"
></notice>
<search
v-if=
"item.Code=='Search'"
:data=
"item.ParameterDictionary"
v-on:settopheight=
"settopheight($event)"
></search>
<pageTitle
v-if=
"item.Code=='Title'"
:data=
"item.ParameterDictionary"
></pageTitle>
<cube
v-if=
"item.Code=='Cube'"
:data=
"item.ParameterDictionary"
></cube>
<van-panel
title=
"新品推荐"
>
<div
v-for=
"(item,index) in page.Sections"
:key=
"index"
>
<product
v-if=
"item.Code=='Product'"
:data=
"item"
></product>
</div>
</van-panel>
<product
v-if=
"item.Code=='Product'"
:data=
"item"
></product>
</div>
<van-panel
title=
"热卖推荐"
>
<div
v-for=
"(item,index) in page.Sections"
:key=
"index"
>
<product
v-if=
"item.Code=='Product'"
:data=
"item"
></product>
</div>
</van-panel>
</div>
</
template
>
...
...
order/order-service-impl/src/main/java/cn/iocoder/mall/order/biz/mock/ProductSpuServiceMock.java
浏览文件 @
6699bd34
...
...
@@ -2,12 +2,16 @@ package cn.iocoder.mall.order.biz.mock;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.product.api.ProductSpuService
;
import
cn.iocoder.mall.product.api.bo.ProductSpuBO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuDetailBO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuPageBO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuAddDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuPageDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuUpdateDTO
;
import
java.util.Collection
;
import
java.util.List
;
/**
* @author Sin
* @time 2019-03-24 15:24
...
...
@@ -37,4 +41,9 @@ public class ProductSpuServiceMock implements ProductSpuService {
public
CommonResult
<
ProductSpuPageBO
>
getProductSpuPage
(
ProductSpuPageDTO
productSpuPageDTO
)
{
return
null
;
}
@Override
public
CommonResult
<
List
<
ProductSpuBO
>>
getProductSpuList
(
Collection
<
Integer
>
ids
)
{
return
null
;
}
}
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/ProductSpuService.java
浏览文件 @
6699bd34
package
cn
.
iocoder
.
mall
.
product
.
api
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.product.api.bo.ProductSpuBO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuDetailBO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuPageBO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuAddDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuPageDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuUpdateDTO
;
import
java.util.Collection
;
import
java.util.List
;
public
interface
ProductSpuService
{
CommonResult
<
ProductSpuDetailBO
>
getProductSpu
(
Integer
id
);
...
...
@@ -19,4 +23,6 @@ public interface ProductSpuService {
CommonResult
<
ProductSpuPageBO
>
getProductSpuPage
(
ProductSpuPageDTO
productSpuPageDTO
);
CommonResult
<
List
<
ProductSpuBO
>>
getProductSpuList
(
Collection
<
Integer
>
ids
);
}
\ No newline at end of file
product/product-service-impl/src/main/java/cn/iocoder/mall/product/dao/ProductSpuMapper.java
浏览文件 @
6699bd34
...
...
@@ -4,6 +4,7 @@ import cn.iocoder.mall.product.dataobject.ProductSpuDO;
import
org.apache.ibatis.annotations.Param
;
import
org.springframework.stereotype.Repository
;
import
java.util.Collection
;
import
java.util.List
;
@Repository
...
...
@@ -11,6 +12,8 @@ public interface ProductSpuMapper {
ProductSpuDO
selectById
(
Integer
id
);
List
<
ProductSpuDO
>
selectByIds
(
Collection
<
Integer
>
ids
);
void
insert
(
ProductSpuDO
productSpuDO
);
void
update
(
ProductSpuDO
productSpuDO
);
...
...
product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/ProductSpuServiceImpl.java
浏览文件 @
6699bd34
...
...
@@ -7,6 +7,7 @@ import cn.iocoder.common.framework.util.StringUtil;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.product.api.ProductSpuService
;
import
cn.iocoder.mall.product.api.bo.ProductAttrAndValuePairBO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuBO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuDetailBO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuPageBO
;
import
cn.iocoder.mall.product.api.constant.ProductErrorCodeEnum
;
...
...
@@ -212,6 +213,19 @@ public class ProductSpuServiceImpl implements ProductSpuService {
return
CommonResult
.
success
(
productSpuPage
);
}
@Override
public
CommonResult
<
List
<
ProductSpuBO
>>
getProductSpuList
(
Collection
<
Integer
>
ids
)
{
List
<
ProductSpuDO
>
spus
=
productSpuMapper
.
selectByIds
(
ids
);
return
CommonResult
.
success
(
ProductSpuConvert
.
INSTANCE
.
convert
(
spus
));
}
/**
* 校验 sku 是否合法
*
* @param productSkuAddDTOs sku 添加或修改信息
* @param productAttrDetailBOs 商品规格明细数组
* @return 是否校验通过
*/
private
CommonResult
<
Boolean
>
validProductSku
(
List
<
ProductSkuAddOrUpdateDTO
>
productSkuAddDTOs
,
List
<
ProductAttrAndValuePairBO
>
productAttrDetailBOs
)
{
// 创建 ProductAttrDetailBO 的映射。其中,KEY 为 ProductAttrDetailBO.attrValueId ,即规格值的编号
Map
<
Integer
,
ProductAttrAndValuePairBO
>
productAttrDetailBOMap
=
productAttrDetailBOs
.
stream
().
collect
(
...
...
@@ -241,6 +255,13 @@ public class ProductSpuServiceImpl implements ProductSpuService {
return
CommonResult
.
success
(
true
);
}
/**
* 获得 sku 数组中,指定规格的 sku
*
* @param attrs 指定规格
* @param skus sku 数组
* @return 符合条件的 sku
*/
private
ProductSkuDO
findProductSku
(
Collection
<
Integer
>
attrs
,
List
<
ProductSkuDO
>
skus
)
{
if
(
CollectionUtil
.
isEmpty
(
skus
))
{
return
null
;
...
...
@@ -256,6 +277,12 @@ public class ProductSpuServiceImpl implements ProductSpuService {
return
null
;
}
/**
* 根据 sku 数组,计算相关的字段到 spu 中。
*
* @param spu spu
* @param skus sku 数组
*/
private
void
initSpuFromSkus
(
ProductSpuDO
spu
,
List
<
ProductSkuAddOrUpdateDTO
>
skus
)
{
assert
skus
.
size
()
>
0
;
// 写个断言,避免下面警告
spu
.
setPrice
(
skus
.
stream
().
min
(
Comparator
.
comparing
(
ProductSkuAddOrUpdateDTO:
:
getPrice
)).
get
().
getPrice
());
// 求最小价格
...
...
product/product-service-impl/src/main/resources/mapper/ProductSpuMapper.xml
浏览文件 @
6699bd34
...
...
@@ -16,6 +16,17 @@
AND deleted = 0
</select>
<select
id=
"selectByIds"
resultType=
"ProductSpuDO"
>
SELECT
<include
refid=
"FIELDS"
/>
FROM product_spu
WHERE id IN
<foreach
item=
"id"
collection=
"ids"
separator=
","
open=
"("
close=
")"
index=
""
>
#{id}
</foreach>
AND deleted = 0
</select>
<insert
id=
"insert"
parameterType=
"ProductSpuDO"
useGeneratedKeys=
"true"
keyColumn=
"id"
keyProperty=
"id"
>
INSERT INTO product_spu (
name, sell_point, description, cid, pic_urls,
...
...
promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/controller/users/UsersProductRecommendController.java
0 → 100644
浏览文件 @
6699bd34
package
cn
.
iocoder
.
mall
.
promotion
.
application
.
controller
.
users
;
import
cn.iocoder.common.framework.constant.CommonStatusEnum
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.product.api.ProductSpuService
;
import
cn.iocoder.mall.product.api.bo.ProductSpuBO
;
import
cn.iocoder.mall.promotion.api.ProductRecommendService
;
import
cn.iocoder.mall.promotion.api.bo.ProductRecommendBO
;
import
cn.iocoder.mall.promotion.application.convert.ProductRecommendConvert
;
import
cn.iocoder.mall.promotion.application.vo.users.UsersProductRecommendVO
;
import
com.alibaba.dubbo.config.annotation.Reference
;
import
com.google.common.collect.HashMultimap
;
import
com.google.common.collect.Multimap
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.Comparator
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
@RestController
@RequestMapping
(
"users/banner"
)
@Api
(
"商品推荐模块"
)
public
class
UsersProductRecommendController
{
@Reference
(
validation
=
"true"
)
private
ProductRecommendService
productRecommendService
;
@Reference
(
validation
=
"true"
)
private
ProductSpuService
productSpuService
;
@GetMapping
(
"/list"
)
@ApiOperation
(
"获得所有 Banner 列表"
)
public
CommonResult
<
Multimap
<
Integer
,
UsersProductRecommendVO
>>
list
()
{
// 查询商品推荐列表
List
<
ProductRecommendBO
>
productRecommends
=
productRecommendService
.
getProductRecommendList
(
null
,
CommonStatusEnum
.
ENABLE
.
getValue
()).
getData
();
// 获得商品集合
List
<
ProductSpuBO
>
spus
=
productSpuService
.
getProductSpuList
(
productRecommends
.
stream
().
map
(
ProductRecommendBO:
:
getProductSpuId
).
collect
(
Collectors
.
toSet
())).
getData
();
Map
<
Integer
,
ProductSpuBO
>
spuMap
=
spus
.
stream
().
collect
(
Collectors
.
toMap
(
ProductSpuBO:
:
getId
,
account
->
account
));
// 组合结果,返回
Multimap
<
Integer
,
UsersProductRecommendVO
>
result
=
new
HashMultimap
<>();
productRecommends
.
sort
(
Comparator
.
comparing
(
ProductRecommendBO:
:
getSort
));
// 排序,按照 sort 升序
productRecommends
.
forEach
(
productRecommendBO
->
result
.
put
(
productRecommendBO
.
getType
(),
ProductRecommendConvert
.
INSTANCE
.
convert
(
spuMap
.
get
(
productRecommendBO
.
getProductSpuId
()))));
// 将 ProductSpuBO 添加到 results 中
return
CommonResult
.
success
(
result
);
}
}
\ No newline at end of file
promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/convert/ProductRecommendConvert.java
浏览文件 @
6699bd34
package
cn
.
iocoder
.
mall
.
promotion
.
application
.
convert
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.product.api.bo.ProductSpuBO
;
import
cn.iocoder.mall.promotion.api.bo.ProductRecommendBO
;
import
cn.iocoder.mall.promotion.api.bo.ProductRecommendPageBO
;
import
cn.iocoder.mall.promotion.application.vo.admins.AdminsProductRecommendPageVO
;
import
cn.iocoder.mall.promotion.application.vo.admins.AdminsProductRecommendVO
;
import
cn.iocoder.mall.promotion.application.vo.users.UsersProductRecommendVO
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.Mappings
;
import
org.mapstruct.factory.Mappers
;
...
...
@@ -23,7 +25,10 @@ public interface ProductRecommendConvert {
@Mappings
({})
CommonResult
<
AdminsProductRecommendPageVO
>
convert
(
CommonResult
<
ProductRecommendPageBO
>
result
);
// @Mappings({})
// List<UsersProductRecommendVO> convertList(List<ProductRecommendBO> banners);
@Mappings
({})
UsersProductRecommendVO
convert
(
ProductSpuBO
productSpu
);
// @Mappings({})
// List<UsersProductRecommendVO> convertList(List<ProductRecommendBO> banners);
}
\ No newline at end of file
promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/vo/users/UsersProductRecommendVO.java
0 → 100644
浏览文件 @
6699bd34
package
cn
.
iocoder
.
mall
.
promotion
.
application
.
vo
.
users
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.util.List
;
@ApiModel
(
value
=
"商品推荐 VO"
,
description
=
"不包括 SKU 信息 VO"
)
public
class
UsersProductRecommendVO
{
@ApiModelProperty
(
value
=
"商品 SPU 编号"
,
required
=
true
,
example
=
"1"
)
private
Integer
id
;
// ========== 基本信息 =========
@ApiModelProperty
(
value
=
"SPU 名字"
,
required
=
true
,
example
=
"厮大牛逼"
)
private
String
name
;
@ApiModelProperty
(
value
=
"卖点"
,
required
=
true
,
example
=
"各种 MQ 骚操作"
)
private
String
sellPoint
;
@ApiModelProperty
(
value
=
"商品主图地址的数组"
,
required
=
true
,
example
=
"http://www.iocoder.cn"
)
private
List
<
String
>
picUrls
;
// ========== Sku 相关字段 =========
/**
* 价格
*
* 目前的计算方式是,以 Sku 最小价格为准
*/
private
Integer
price
;
public
Integer
getId
()
{
return
id
;
}
public
UsersProductRecommendVO
setId
(
Integer
id
)
{
this
.
id
=
id
;
return
this
;
}
public
String
getName
()
{
return
name
;
}
public
UsersProductRecommendVO
setName
(
String
name
)
{
this
.
name
=
name
;
return
this
;
}
public
String
getSellPoint
()
{
return
sellPoint
;
}
public
UsersProductRecommendVO
setSellPoint
(
String
sellPoint
)
{
this
.
sellPoint
=
sellPoint
;
return
this
;
}
public
List
<
String
>
getPicUrls
()
{
return
picUrls
;
}
public
UsersProductRecommendVO
setPicUrls
(
List
<
String
>
picUrls
)
{
this
.
picUrls
=
picUrls
;
return
this
;
}
public
Integer
getPrice
()
{
return
price
;
}
public
UsersProductRecommendVO
setPrice
(
Integer
price
)
{
this
.
price
=
price
;
return
this
;
}
}
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论