Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
d0ce6090
提交
d0ce6090
authored
8月 01, 2020
作者:
YunaiV
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修改 system-service-app 导入的数据库脚本
上级
8646d0a6
全部展开
显示空白字符变更
内嵌
并排
正在显示
40 个修改的文件
包含
227 行增加
和
889 行删除
+227
-889
ProductSpuRpc.java
...cn/iocoder/mall/productservice/rpc/spu/ProductSpuRpc.java
+12
-3
ProductSpuManager.java
...er/mall/productservice/manager/spu/ProductSpuManager.java
+15
-4
ProductSpuRpcImpl.java
...ocoder/mall/productservice/rpc/spu/ProductSpuRpcImpl.java
+5
-0
ProductAttrService.java
.../mall/productservice/service/attr/ProductAttrService.java
+14
-0
ProductSkuBO.java
.../cn/iocoder/mall/product/biz/bo/product/ProductSkuBO.java
+0
-45
ProductSpuServiceImpl.java
...r/mall/product/biz/service/spu/ProductSpuServiceImpl.java
+0
-8
ProductSkuBO.java
...ain/java/cn/iocoder/mall/product/api/bo/ProductSkuBO.java
+0
-45
ProductAttrAddDTO.java
...va/cn/iocoder/mall/product/api/dto/ProductAttrAddDTO.java
+0
-21
ProductAttrUpdateDTO.java
...cn/iocoder/mall/product/api/dto/ProductAttrUpdateDTO.java
+0
-28
ProductAttrValueAddDTO.java
.../iocoder/mall/product/api/dto/ProductAttrValueAddDTO.java
+0
-27
ProductAttrValueUpdateDTO.java
...coder/mall/product/api/dto/ProductAttrValueUpdateDTO.java
+0
-29
MQStreamConfiguration.java
...cn/iocoder/mall/product/config/MQStreamConfiguration.java
+0
-10
MQStreamProducer.java
...ava/cn/iocoder/mall/product/message/MQStreamProducer.java
+0
-27
ProductAttrServiceImpl.java
.../iocoder/mall/product/service/ProductAttrServiceImpl.java
+0
-74
ProductSpuServiceImpl.java
...n/iocoder/mall/product/service/ProductSpuServiceImpl.java
+0
-12
package-info.java
...ava/cn/iocoder/mall/searchservice/enums/package-info.java
+1
-0
SearchProductPageQuerySortFieldEnum.java
...ce/enums/product/SearchProductPageQuerySortFieldEnum.java
+35
-0
SearchProductConvert.java
...l/searchservice/convert/product/SearchProductConvert.java
+10
-3
SearchProductManager.java
...l/searchservice/manager/product/SearchProductManager.java
+3
-3
SearchProductService.java
...l/searchservice/service/product/SearchProductService.java
+93
-3
SearchProductBO.java
...all/searchservice/service/product/bo/SearchProductBO.java
+3
-4
SearchProductConditionBO.java
...hservice/service/product/bo/SearchProductConditionBO.java
+3
-18
SearchProductPageQueryBO.java
...hservice/service/product/bo/SearchProductPageQueryBO.java
+6
-17
SearchProductSaveBO.java
...searchservice/service/product/bo/SearchProductSaveBO.java
+2
-2
ProductPageBO.java
...ain/java/cn/iocoder/mall/search/biz/bo/ProductPageBO.java
+0
-22
JPAConfiguration.java
...a/cn/iocoder/mall/search/biz/config/JPAConfiguration.java
+0
-9
FieldAnalyzer.java
...va/cn/iocoder/mall/search/biz/constant/FieldAnalyzer.java
+0
-26
ProductSearchConvert.java
...iocoder/mall/search/biz/convert/ProductSearchConvert.java
+0
-17
ProductRepository.java
...ava/cn/iocoder/mall/search/biz/dao/ProductRepository.java
+0
-69
ESProductDO.java
...va/cn/iocoder/mall/search/biz/dataobject/ESProductDO.java
+0
-96
ProductConditionDTO.java
...a/cn/iocoder/mall/search/biz/dto/ProductConditionDTO.java
+0
-29
ProductSearchServiceImpl.java
...der/mall/search/biz/service/ProductSearchServiceImpl.java
+1
-94
ProductSearchService.java
...java/cn/iocoder/mall/search/api/ProductSearchService.java
+0
-8
ProductBO.java
...rc/main/java/cn/iocoder/mall/search/api/bo/ProductBO.java
+0
-86
ProductPageBO.java
...ain/java/cn/iocoder/mall/search/api/bo/ProductPageBO.java
+0
-22
ProductSearchServiceImpl.java
...der/mall/search/biz/service/ProductSearchServiceImpl.java
+0
-20
mall_system_data.sql
...m-service-app/src/main/resources/sql/mall_system_data.sql
+0
-0
mall_system_schema.sql
...service-app/src/main/resources/sql/mall_system_schema.sql
+16
-0
UserPassportController.java
...l/userweb/controller/passport/UserPassportController.java
+2
-2
PassportManager.java
...ocoder/mall/userweb/manager/passport/PassportManager.java
+6
-6
没有找到文件。
product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/rpc/spu/ProductSpuRpc.java
浏览文件 @
d0ce6090
...
@@ -46,11 +46,20 @@ public interface ProductSpuRpc {
...
@@ -46,11 +46,20 @@ public interface ProductSpuRpc {
CommonResult
<
List
<
ProductSpuRespDTO
>>
listProductSpus
(
List
<
Integer
>
productSpuIds
);
CommonResult
<
List
<
ProductSpuRespDTO
>>
listProductSpus
(
List
<
Integer
>
productSpuIds
);
/**
/**
* 获得商品 SPU分页
* 获得商品 SPU
分页
*
*
* @param pageDTO 商品 SPU分页查询
* @param pageDTO 商品 SPU
分页查询
* @return 商品 SPU分页结果
* @return 商品 SPU
分页结果
*/
*/
CommonResult
<
PageResult
<
ProductSpuRespDTO
>>
pageProductSpu
(
ProductSpuPageReqDTO
pageDTO
);
CommonResult
<
PageResult
<
ProductSpuRespDTO
>>
pageProductSpu
(
ProductSpuPageReqDTO
pageDTO
);
/**
* 顺序获得商品 SPU 编号数组
*
* @param limit 数量
* @param lastSpuId 最后一个商品 SPU 编号
* @return 商品 SPU 编号数组
*/
CommonResult
<
List
<
Integer
>>
listProductSpuIds
(
Integer
limit
,
Integer
lastSpuId
);
}
}
product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/manager/spu/ProductSpuManager.java
浏览文件 @
d0ce6090
...
@@ -47,6 +47,10 @@ public class ProductSpuManager {
...
@@ -47,6 +47,10 @@ public class ProductSpuManager {
@Autowired
@Autowired
private
ProductMQProducer
productMQProducer
;
private
ProductMQProducer
productMQProducer
;
private
static
ProductSpuManager
self
()
{
return
(
ProductSpuManager
)
AopContext
.
currentProxy
();
}
/**
/**
* 创建商品 SPU 和 SKU
* 创建商品 SPU 和 SKU
*
*
...
@@ -158,6 +162,17 @@ public class ProductSpuManager {
...
@@ -158,6 +162,17 @@ public class ProductSpuManager {
return
categoryBO
;
return
categoryBO
;
}
}
/**
* 顺序获得商品 SPU 编号数组
*
* @param limit 数量
* @param lastSpuId 最后一个商品 SPU 编号
* @return 商品 SPU 编号数组
*/
public
List
<
Integer
>
listProductSpuIds
(
Integer
limit
,
Integer
lastSpuId
)
{
return
productAttrService
.
listProductSpuIds
(
limit
,
lastSpuId
);
}
private
List
<
ProductAttrKeyValueBO
>
checkProductAttr
(
List
<
ProductSkuCreateOrUpdateBO
>
skuBOs
)
{
private
List
<
ProductAttrKeyValueBO
>
checkProductAttr
(
List
<
ProductSkuCreateOrUpdateBO
>
skuBOs
)
{
// 第一步,校验 SKU 使用到的规格是否存在
// 第一步,校验 SKU 使用到的规格是否存在
Set
<
Integer
>
attrValueIds
=
new
HashSet
<>();
Set
<
Integer
>
attrValueIds
=
new
HashSet
<>();
...
@@ -192,8 +207,4 @@ public class ProductSpuManager {
...
@@ -192,8 +207,4 @@ public class ProductSpuManager {
return
attrKeyValueBOs
;
return
attrKeyValueBOs
;
}
}
private
ProductSpuManager
self
()
{
return
(
ProductSpuManager
)
AopContext
.
currentProxy
();
}
}
}
product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/rpc/spu/ProductSpuRpcImpl.java
浏览文件 @
d0ce6090
...
@@ -49,4 +49,9 @@ public class ProductSpuRpcImpl implements ProductSpuRpc {
...
@@ -49,4 +49,9 @@ public class ProductSpuRpcImpl implements ProductSpuRpc {
return
success
(
productSpuManager
.
pageProductSpu
(
pageDTO
));
return
success
(
productSpuManager
.
pageProductSpu
(
pageDTO
));
}
}
@Override
public
CommonResult
<
List
<
Integer
>>
listProductSpuIds
(
Integer
limit
,
Integer
lastSpuId
)
{
return
success
(
productSpuManager
.
listProductSpuIds
(
limit
,
lastSpuId
));
}
}
}
product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/attr/ProductAttrService.java
浏览文件 @
d0ce6090
...
@@ -208,4 +208,18 @@ public class ProductAttrService {
...
@@ -208,4 +208,18 @@ public class ProductAttrService {
return
ProductAttrConvert
.
INSTANCE
.
convertList03
(
productAttrValueDOs
);
return
ProductAttrConvert
.
INSTANCE
.
convertList03
(
productAttrValueDOs
);
}
}
/**
* 顺序获得商品 SPU 编号数组
*
* 一般情况下,该接口我们用于提供顺序的 SPU 编号数组,以便调用方进一步根据自己需要获取商品信息
* 例如说,搜索服务会不断获取商品编号,重建该商品编号的索引
*
* @param limit 数量
* @param lastSpuId 最后一个商品 SPU 编号
* @return 商品 SPU 编号数组
*/
public
List
<
Integer
>
listProductSpuIds
(
Integer
limit
,
Integer
lastSpuId
)
{
return
null
;
}
}
}
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/product/ProductSkuBO.java
deleted
100644 → 0
浏览文件 @
8646d0a6
package
cn
.
iocoder
.
mall
.
product
.
biz
.
bo
.
product
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
/**
* 商品 SKU BO
*/
@Data
@Accessors
(
chain
=
true
)
public
class
ProductSkuBO
implements
Serializable
{
/**
* sku 编号
*/
private
Integer
id
;
/**
* 商品编号
*/
private
Integer
spuId
;
/**
* 状态
*/
private
Integer
status
;
/**
* 图片地址
*/
private
String
picURL
;
// /**
// * 规格值数组
// */
// // TODO 芋艿,这个属性目前未进行设置
// private List<ProductAttrAndValuePairBO> attrs;
/**
* 价格,单位:分
*/
private
Integer
price
;
/**
* 库存数量
*/
private
Integer
quantity
;
}
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/spu/ProductSpuServiceImpl.java
浏览文件 @
d0ce6090
...
@@ -30,16 +30,8 @@ import java.util.stream.Collectors;
...
@@ -30,16 +30,8 @@ import java.util.stream.Collectors;
@Service
@Service
public
class
ProductSpuServiceImpl
implements
ProductSpuService
{
public
class
ProductSpuServiceImpl
implements
ProductSpuService
{
@Autowired
private
ProductSpuMapper
productSpuMapper
;
@Autowired
private
ProductSkuMapper
productSkuMapper
;
@Autowired
private
ProductCategoryMapper
productCategoryMapper
;
@Autowired
@Autowired
private
ProductAttrService
productAttrService
;
private
ProductAttrService
productAttrService
;
@Autowired
private
ProductCategoryService
productCategoryService
;
@Override
@Override
public
ProductSpuDetailBO
getProductSpuDetail
(
Integer
spuId
)
{
public
ProductSpuDetailBO
getProductSpuDetail
(
Integer
spuId
)
{
...
...
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/bo/ProductSkuBO.java
deleted
100644 → 0
浏览文件 @
8646d0a6
package
cn
.
iocoder
.
mall
.
product
.
api
.
bo
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
/**
* 商品 SKU BO
*/
@Data
@Accessors
(
chain
=
true
)
public
class
ProductSkuBO
implements
Serializable
{
/**
* sku 编号
*/
private
Integer
id
;
/**
* 商品编号
*/
private
Integer
spuId
;
/**
* 状态
*/
private
Integer
status
;
/**
* 图片地址
*/
private
String
picURL
;
// /**
// * 规格值数组
// */
// // TODO 芋艿,这个属性目前未进行设置
// private List<ProductAttrAndValuePairBO> attrs;
/**
* 价格,单位:分
*/
private
Integer
price
;
/**
* 库存数量
*/
private
Integer
quantity
;
}
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/dto/ProductAttrAddDTO.java
deleted
100644 → 0
浏览文件 @
8646d0a6
package
cn
.
iocoder
.
mall
.
product
.
api
.
dto
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotEmpty
;
/**
* Product 规格添加 DTO
*/
@Data
@Accessors
(
chain
=
true
)
public
class
ProductAttrAddDTO
{
/**
* 名称
*/
@NotEmpty
(
message
=
"规格名不能为空"
)
private
String
name
;
}
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/dto/ProductAttrUpdateDTO.java
deleted
100644 → 0
浏览文件 @
8646d0a6
package
cn
.
iocoder
.
mall
.
product
.
api
.
dto
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.NotNull
;
/**
* Product 规格修改 DTO
*/
@Data
@Accessors
(
chain
=
true
)
public
class
ProductAttrUpdateDTO
{
/**
* 规格编号
*/
@NotNull
(
message
=
"规格编号不能为空"
)
private
Integer
id
;
/**
* 名称
*/
@NotEmpty
(
message
=
"规格名不能为空"
)
private
String
name
;
}
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/dto/ProductAttrValueAddDTO.java
deleted
100644 → 0
浏览文件 @
8646d0a6
package
cn
.
iocoder
.
mall
.
product
.
api
.
dto
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.NotNull
;
/**
* Product 规格值添加 DTO
*/
@Data
@Accessors
(
chain
=
true
)
public
class
ProductAttrValueAddDTO
{
/**
* 规格编号
*/
@NotNull
(
message
=
"规格编号不能为空"
)
private
Integer
attrId
;
/**
* 名称
*/
@NotEmpty
(
message
=
"规格值名不能为空"
)
private
String
name
;
}
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/dto/ProductAttrValueUpdateDTO.java
deleted
100644 → 0
浏览文件 @
8646d0a6
package
cn
.
iocoder
.
mall
.
product
.
api
.
dto
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.NotNull
;
/**
* Product 规格值修改 DTO
*
* 注意,不允许修改所属规格
*/
@Data
@Accessors
(
chain
=
true
)
public
class
ProductAttrValueUpdateDTO
{
/**
* 规格值编号
*/
@NotNull
(
message
=
"规格编号不能为空"
)
private
Integer
id
;
/**
* 名称
*/
@NotEmpty
(
message
=
"规格名不能为空"
)
private
String
name
;
}
product/product-service-impl/src/main/java/cn/iocoder/mall/product/config/MQStreamConfiguration.java
deleted
100644 → 0
浏览文件 @
8646d0a6
package
cn
.
iocoder
.
mall
.
product
.
config
;
import
cn.iocoder.mall.product.message.MQStreamProducer
;
import
org.springframework.cloud.stream.annotation.EnableBinding
;
import
org.springframework.context.annotation.Configuration
;
@Configuration
@EnableBinding
(
MQStreamProducer
.
class
)
public
class
MQStreamConfiguration
{
}
product/product-service-impl/src/main/java/cn/iocoder/mall/product/message/MQStreamProducer.java
deleted
100644 → 0
浏览文件 @
8646d0a6
package
cn
.
iocoder
.
mall
.
product
.
message
;
import
org.springframework.cloud.stream.annotation.Output
;
import
org.springframework.messaging.MessageChannel
;
/**
* Spring Cloud Stream Source 接口
*/
public
interface
MQStreamProducer
{
/**
* 商品更新 Output
*/
String
PRODUCT_UPDATE_OUTPUT
=
"product-update-output"
;
@Output
(
PRODUCT_UPDATE_OUTPUT
)
MessageChannel
productUpdateOutput
();
// default boolean sendProductUpdateMessage(ProductUpdateMessage message) {
// // 创建 Spring Message 对象
// Message<ProductUpdateMessage> springMessage = MessageBuilder.withPayload(message)
// .build();
// // 发送消息
// return productUpdateOutput().send(springMessage);
// }
}
product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/ProductAttrServiceImpl.java
浏览文件 @
d0ce6090
...
@@ -35,28 +35,6 @@ public class ProductAttrServiceImpl implements ProductAttrService {
...
@@ -35,28 +35,6 @@ public class ProductAttrServiceImpl implements ProductAttrService {
@Autowired
@Autowired
private
ProductAttrValueMapper
productAttrValueMapper
;
private
ProductAttrValueMapper
productAttrValueMapper
;
@Override
public
ProductAttrPageBO
getProductAttrPage
(
ProductAttrPageDTO
productAttrPageDTO
)
{
ProductAttrPageBO
productAttrPageBO
=
new
ProductAttrPageBO
();
// 查询分页数据
int
offset
=
(
productAttrPageDTO
.
getPageNo
()-
1
)
*
productAttrPageDTO
.
getPageSize
();
productAttrPageBO
.
setAttrs
(
ProductAttrConvert
.
INSTANCE
.
convert
(
productAttrMapper
.
selectListByNameLike
(
productAttrPageDTO
.
getName
(),
offset
,
productAttrPageDTO
.
getPageSize
())));
// 查询分页总数
productAttrPageBO
.
setCount
(
productAttrMapper
.
selectCountByNameLike
(
productAttrPageDTO
.
getName
()));
// 将规格值拼接上去
if
(!
productAttrPageBO
.
getAttrs
().
isEmpty
())
{
Set
<
Integer
>
attrIds
=
productAttrPageBO
.
getAttrs
().
stream
().
map
(
ProductAttrDetailBO:
:
getId
).
collect
(
Collectors
.
toSet
());
List
<
ProductAttrValueDO
>
attrValues
=
productAttrValueMapper
.
selectListByAttrIds
(
attrIds
);
ImmutableListMultimap
<
Integer
,
ProductAttrValueDO
>
attrValueMap
=
Multimaps
.
index
(
attrValues
,
ProductAttrValueDO:
:
getAttrId
);
// KEY 是 attrId ,VALUE 是 ProductAttrValueDO 数组
for
(
ProductAttrDetailBO
productAttrDetailBO
:
productAttrPageBO
.
getAttrs
())
{
productAttrDetailBO
.
setValues
(
ProductAttrConvert
.
INSTANCE
.
convert2
(((
attrValueMap
).
get
(
productAttrDetailBO
.
getId
()))));
}
}
// 返回结果
return
productAttrPageBO
;
}
@Override
@Override
public
List
<
ProductAttrSimpleBO
>
getProductAttrList
()
{
public
List
<
ProductAttrSimpleBO
>
getProductAttrList
()
{
// 查询所有开启的规格数组
// 查询所有开启的规格数组
...
@@ -74,57 +52,5 @@ public class ProductAttrServiceImpl implements ProductAttrService {
...
@@ -74,57 +52,5 @@ public class ProductAttrServiceImpl implements ProductAttrService {
return
attrs
;
return
attrs
;
}
}
@Override
public
ProductAttrValueBO
addProductAttrValue
(
Integer
adminId
,
ProductAttrValueAddDTO
productAttrValueAddDTO
)
{
// 校验规格名不重复
if
(
productAttrValueMapper
.
selectByAttrIdAndName
(
productAttrValueAddDTO
.
getAttrId
(),
productAttrValueAddDTO
.
getName
())
!=
null
)
{
throw
ServiceExceptionUtil
.
exception
(
ProductErrorCodeEnum
.
PRODUCT_ATTR_VALUE_EXISTS
.
getCode
());
}
// 插入到数据库
ProductAttrValueDO
productAttrValueDO
=
ProductAttrConvert
.
INSTANCE
.
convert
(
productAttrValueAddDTO
)
.
setStatus
(
ProductAttrConstants
.
ATTR_VALUE_STATUS_ENABLE
);
productAttrValueDO
.
setCreateTime
(
new
Date
());
productAttrValueDO
.
setDeleted
(
DeletedStatusEnum
.
DELETED_NO
.
getValue
());
productAttrValueMapper
.
insert
(
productAttrValueDO
);
// 返回成功
return
ProductAttrConvert
.
INSTANCE
.
convert2
(
productAttrValueDO
);
}
@Override
public
Boolean
updateProductAttrValue
(
Integer
adminId
,
ProductAttrValueUpdateDTO
productAttrValueUpdateDTO
)
{
// 校验存在
ProductAttrValueDO
productAttrValueDO
=
productAttrValueMapper
.
selectById
(
productAttrValueUpdateDTO
.
getId
());
if
(
productAttrValueDO
==
null
)
{
throw
ServiceExceptionUtil
.
exception
(
ProductErrorCodeEnum
.
PRODUCT_ATTR_VALUE_NOT_EXIST
.
getCode
());
}
// 校验规格名不重复
ProductAttrValueDO
existsAttrDO
=
productAttrValueMapper
.
selectByAttrIdAndName
(
productAttrValueDO
.
getAttrId
(),
productAttrValueUpdateDTO
.
getName
());
if
(
existsAttrDO
!=
null
&&
!
existsAttrDO
.
getId
().
equals
(
productAttrValueUpdateDTO
.
getId
()))
{
throw
ServiceExceptionUtil
.
exception
(
ProductErrorCodeEnum
.
PRODUCT_ATTR_VALUE_EXISTS
.
getCode
());
}
// 更新到数据库
ProductAttrValueDO
updateProductValue
=
ProductAttrConvert
.
INSTANCE
.
convert
(
productAttrValueUpdateDTO
);
productAttrValueMapper
.
update
(
updateProductValue
);
// 返回成功
return
true
;
}
@Override
public
Boolean
updateProductAttrValueStatus
(
Integer
adminId
,
Integer
productAttrValueId
,
Integer
status
)
{
// 校验存在
ProductAttrValueDO
productAttrValueDO
=
productAttrValueMapper
.
selectById
(
productAttrValueId
);
if
(
productAttrValueDO
==
null
)
{
throw
ServiceExceptionUtil
.
exception
(
ProductErrorCodeEnum
.
PRODUCT_ATTR_VALUE_NOT_EXIST
.
getCode
());
}
// 校验状态
if
(
productAttrValueDO
.
getStatus
().
equals
(
status
))
{
throw
ServiceExceptionUtil
.
exception
(
ProductErrorCodeEnum
.
PRODUCT_ATTR_VALUE_STATUS_EQUALS
.
getCode
());
}
// 更新到数据库
ProductAttrValueDO
updateProductAttrValue
=
new
ProductAttrValueDO
().
setId
(
productAttrValueId
).
setStatus
(
status
);
productAttrValueMapper
.
update
(
updateProductAttrValue
);
// 返回成功
return
true
;
}
}
}
product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/ProductSpuServiceImpl.java
浏览文件 @
d0ce6090
...
@@ -42,9 +42,6 @@ public class ProductSpuServiceImpl implements ProductSpuService {
...
@@ -42,9 +42,6 @@ public class ProductSpuServiceImpl implements ProductSpuService {
@Autowired
@Autowired
private
ProductAttrServiceImpl
productAttrService
;
private
ProductAttrServiceImpl
productAttrService
;
@Autowired
private
MQStreamProducer
mqStreamProducer
;
// @Override
// @Override
// public ProductSpuBO getProductSpuDetail(Integer id) {
// public ProductSpuBO getProductSpuDetail(Integer id) {
// ProductSpuDO productSpuDO = productSpuMapper.selectById(id);
// ProductSpuDO productSpuDO = productSpuMapper.selectById(id);
...
@@ -86,15 +83,6 @@ public class ProductSpuServiceImpl implements ProductSpuService {
...
@@ -86,15 +83,6 @@ public class ProductSpuServiceImpl implements ProductSpuService {
return
spus
;
return
spus
;
}
}
@Override
public
ProductSpuDetailBO
addProductSpu
(
Integer
adminId
,
ProductSpuAddDTO
productSpuAddDTO
)
{
// 如果新增生成,发送创建商品 Topic 消息
// TODO 芋艿,先不考虑事务的问题。等后面的 fescar 一起搞
sendProductUpdateMessage
(
productSpuDetailBO
.
getId
());
// 返回成功
return
productSpuDetailBO
;
}
@Override
@Override
public
Boolean
updateProductSpuSort
(
Integer
adminId
,
Integer
spuId
,
Integer
sort
)
{
public
Boolean
updateProductSpuSort
(
Integer
adminId
,
Integer
spuId
,
Integer
sort
)
{
// 校验 Spu 是否存在
// 校验 Spu 是否存在
...
...
search-service-project/search-service-api/src/main/java/cn/iocoder/mall/searchservice/enums/package-info.java
0 → 100644
浏览文件 @
d0ce6090
package
cn
.
iocoder
.
mall
.
searchservice
.
enums
;
search-service-project/search-service-api/src/main/java/cn/iocoder/mall/searchservice/enums/product/SearchProductPageQuerySortFieldEnum.java
0 → 100644
浏览文件 @
d0ce6090
package
cn
.
iocoder
.
mall
.
searchservice
.
enums
.
product
;
/**
* 搜索商品分页查询的排序字段枚举
*/
public
enum
SearchProductPageQuerySortFieldEnum
{
/**
* 购买价格
*/
BUY_PRICE
(
"buyPrice"
);
/**
* 字段
*/
private
final
String
field
;
SearchProductPageQuerySortFieldEnum
(
String
field
)
{
this
.
field
=
field
;
}
public
String
getField
()
{
return
field
;
}
public
static
boolean
contains
(
String
field
)
{
for
(
SearchProductPageQuerySortFieldEnum
fieldEnum
:
values
())
{
if
(
field
.
equals
(
fieldEnum
.
getField
()))
{
return
true
;
}
}
return
false
;
}
}
search-service-project/search-service-app/src/main/java/cn/iocoder/mall/searchservice/convert/product/SearchProductConvert.java
浏览文件 @
d0ce6090
package
cn
.
iocoder
.
mall
.
searchservice
.
convert
.
product
;
package
cn
.
iocoder
.
mall
.
searchservice
.
convert
.
product
;
import
cn.iocoder.common.framework.vo.PageResult
;
import
cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryRespDTO
;
import
cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryRespDTO
;
import
cn.iocoder.mall.productservice.rpc.spu.dto.ProductSpuRespDTO
;
import
cn.iocoder.mall.productservice.rpc.spu.dto.ProductSpuRespDTO
;
import
cn.iocoder.mall.searchservice.dal.es.dataobject.ESProductDO
;
import
cn.iocoder.mall.searchservice.dal.es.dataobject.ESProductDO
;
import
cn.iocoder.mall.searchservice.service.product.bo.SearchProductCreateBO
;
import
cn.iocoder.mall.searchservice.service.product.bo.SearchProductBO
;
import
cn.iocoder.mall.searchservice.service.product.bo.SearchProductSaveBO
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.Mapping
;
import
org.mapstruct.Mapping
;
import
org.mapstruct.factory.Mappers
;
import
org.mapstruct.factory.Mappers
;
import
org.springframework.data.domain.Page
;
@Mapper
@Mapper
public
interface
SearchProductConvert
{
public
interface
SearchProductConvert
{
...
@@ -23,8 +26,12 @@ public interface SearchProductConvert {
...
@@ -23,8 +26,12 @@ public interface SearchProductConvert {
@Mapping
(
source
=
"spu.picUrls"
,
target
=
"picUrls"
)
@Mapping
(
source
=
"spu.picUrls"
,
target
=
"picUrls"
)
@Mapping
(
source
=
"spu.visible"
,
target
=
"visible"
)
@Mapping
(
source
=
"spu.visible"
,
target
=
"visible"
)
@Mapping
(
source
=
"spu.sort"
,
target
=
"sort"
)
@Mapping
(
source
=
"spu.sort"
,
target
=
"sort"
)
SearchProduct
Creat
eBO
convert
(
ProductSpuRespDTO
spu
,
ProductCategoryRespDTO
category
);
SearchProduct
Sav
eBO
convert
(
ProductSpuRespDTO
spu
,
ProductCategoryRespDTO
category
);
ESProductDO
convert
(
SearchProductCreateBO
bean
);
ESProductDO
convert
(
SearchProductSaveBO
bean
);
@Mapping
(
source
=
"content"
,
target
=
"list"
)
@Mapping
(
source
=
"getTotalElements"
,
target
=
"total"
)
PageResult
<
SearchProductBO
>
convert
(
Page
<
ESProductDO
>
searchPage
);
}
}
search-service-project/search-service-app/src/main/java/cn/iocoder/mall/searchservice/manager/product/SearchProductManager.java
浏览文件 @
d0ce6090
...
@@ -11,7 +11,7 @@ import cn.iocoder.mall.productservice.rpc.spu.ProductSpuRpc;
...
@@ -11,7 +11,7 @@ import cn.iocoder.mall.productservice.rpc.spu.ProductSpuRpc;
import
cn.iocoder.mall.productservice.rpc.spu.dto.ProductSpuRespDTO
;
import
cn.iocoder.mall.productservice.rpc.spu.dto.ProductSpuRespDTO
;
import
cn.iocoder.mall.searchservice.convert.product.SearchProductConvert
;
import
cn.iocoder.mall.searchservice.convert.product.SearchProductConvert
;
import
cn.iocoder.mall.searchservice.service.product.SearchProductService
;
import
cn.iocoder.mall.searchservice.service.product.SearchProductService
;
import
cn.iocoder.mall.searchservice.service.product.bo.SearchProduct
Creat
eBO
;
import
cn.iocoder.mall.searchservice.service.product.bo.SearchProduct
Sav
eBO
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.dubbo.config.annotation.DubboReference
;
import
org.apache.dubbo.config.annotation.DubboReference
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
@@ -62,7 +62,7 @@ public class SearchProductManager {
...
@@ -62,7 +62,7 @@ public class SearchProductManager {
return
false
;
return
false
;
}
}
// 保存商品到 ES 中
// 保存商品到 ES 中
SearchProduct
Creat
eBO
searchProductCreateBO
=
SearchProductConvert
.
INSTANCE
.
convert
(
SearchProduct
Sav
eBO
searchProductCreateBO
=
SearchProductConvert
.
INSTANCE
.
convert
(
productSpuResult
.
getData
(),
getProductCategoryResult
.
getData
());
productSpuResult
.
getData
(),
getProductCategoryResult
.
getData
());
ProductSkuRespDTO
productSku
=
listProductSkusResult
.
getData
().
stream
()
ProductSkuRespDTO
productSku
=
listProductSkusResult
.
getData
().
stream
()
.
min
(
Comparator
.
comparing
(
ProductSkuRespDTO:
:
getPrice
)).
orElse
(
null
);
.
min
(
Comparator
.
comparing
(
ProductSkuRespDTO:
:
getPrice
)).
orElse
(
null
);
...
@@ -72,7 +72,7 @@ public class SearchProductManager {
...
@@ -72,7 +72,7 @@ public class SearchProductManager {
searchProductCreateBO
.
setOriginalPrice
(
productSku
.
getPrice
());
searchProductCreateBO
.
setOriginalPrice
(
productSku
.
getPrice
());
searchProductCreateBO
.
setBuyPrice
(
productSku
.
getPrice
());
searchProductCreateBO
.
setBuyPrice
(
productSku
.
getPrice
());
searchProductCreateBO
.
setQuantity
(
productSku
.
getQuantity
());
searchProductCreateBO
.
setQuantity
(
productSku
.
getQuantity
());
searchProductService
.
creat
eSearchProduct
(
searchProductCreateBO
);
searchProductService
.
sav
eSearchProduct
(
searchProductCreateBO
);
return
true
;
return
true
;
}
}
...
...
search-service-project/search-service-app/src/main/java/cn/iocoder/mall/searchservice/service/product/SearchProductService.java
浏览文件 @
d0ce6090
package
cn
.
iocoder
.
mall
.
searchservice
.
service
.
product
;
package
cn
.
iocoder
.
mall
.
searchservice
.
service
.
product
;
import
cn.iocoder.common.framework.util.CollectionUtils
;
import
cn.iocoder.common.framework.util.StringUtils
;
import
cn.iocoder.common.framework.vo.PageResult
;
import
cn.iocoder.common.framework.vo.SortingField
;
import
cn.iocoder.mall.searchservice.convert.product.SearchProductConvert
;
import
cn.iocoder.mall.searchservice.convert.product.SearchProductConvert
;
import
cn.iocoder.mall.searchservice.dal.es.dataobject.ESProductDO
;
import
cn.iocoder.mall.searchservice.dal.es.dataobject.ESProductDO
;
import
cn.iocoder.mall.searchservice.dal.es.repository.ESProductRepository
;
import
cn.iocoder.mall.searchservice.dal.es.repository.ESProductRepository
;
import
cn.iocoder.mall.searchservice.service.product.bo.SearchProductCreateBO
;
import
cn.iocoder.mall.searchservice.enums.product.SearchProductPageQuerySortFieldEnum
;
import
cn.iocoder.mall.searchservice.service.product.bo.SearchProductBO
;
import
cn.iocoder.mall.searchservice.service.product.bo.SearchProductConditionBO
;
import
cn.iocoder.mall.searchservice.service.product.bo.SearchProductPageQueryBO
;
import
cn.iocoder.mall.searchservice.service.product.bo.SearchProductSaveBO
;
import
org.elasticsearch.index.query.QueryBuilders
;
import
org.elasticsearch.search.aggregations.Aggregation
;
import
org.elasticsearch.search.aggregations.AggregationBuilders
;
import
org.elasticsearch.search.aggregations.bucket.terms.LongTerms
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.elasticsearch.core.ElasticsearchTemplate
;
import
org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.Assert
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.List
;
@Service
@Service
public
class
SearchProductService
{
public
class
SearchProductService
{
@Autowired
@Autowired
private
ESProductRepository
productRepository
;
private
ESProductRepository
productRepository
;
@Autowired
private
ElasticsearchTemplate
elasticsearchTemplate
;
// 因为需要使用到聚合操作,只好引入 ElasticsearchTemplate 。
/**
* 搜索商品分页结果
*
* @param pageQueryBO 分页查询条件
* @return 商品信息
*/
public
PageResult
<
SearchProductBO
>
getSearchPage
(
SearchProductPageQueryBO
pageQueryBO
)
{
checkSortFieldInvalid
(
pageQueryBO
.
getSorts
());
// 执行查询
Page
<
ESProductDO
>
searchPage
=
productRepository
.
search
(
pageQueryBO
.
getCid
(),
pageQueryBO
.
getKeyword
(),
pageQueryBO
.
getPageNo
(),
pageQueryBO
.
getPageSize
(),
pageQueryBO
.
getSorts
());
// 转换结果
return
SearchProductConvert
.
INSTANCE
.
convert
(
searchPage
);
}
private
void
checkSortFieldInvalid
(
List
<
SortingField
>
sorts
)
{
if
(
CollectionUtils
.
isEmpty
(
sorts
))
{
return
;
}
sorts
.
forEach
(
sortingField
->
Assert
.
isTrue
(
SearchProductPageQuerySortFieldEnum
.
contains
(
sortingField
.
getField
()),
String
.
format
(
"排序字段(%s) 不在允许范围内"
,
sortingField
.
getField
())));
}
public
void
createSearchProduct
(
SearchProductCreateBO
createBO
)
{
/**
ESProductDO
productDO
=
SearchProductConvert
.
INSTANCE
.
convert
(
createBO
);
* 保存商品信息到 ES 中
*
* @param saveBO 商品信息
*/
public
void
saveSearchProduct
(
SearchProductSaveBO
saveBO
)
{
ESProductDO
productDO
=
SearchProductConvert
.
INSTANCE
.
convert
(
saveBO
);
productRepository
.
save
(
productDO
);
productRepository
.
save
(
productDO
);
}
}
/**
* 获得指定关键字对应的搜索条件
*
* 在我们搜索商品时,需要获得关键字可选择的分类、品牌等等搜索条件,方便用户进一步检索
*
* @param keyword 关键字
* @param fields 需要返回的搜索条件。目前可传入的参数为
* 1. category :商品分类,会返回商品分类编号
* @return 搜索条件
*/
public
SearchProductConditionBO
getSearchCondition
(
String
keyword
,
Collection
<
String
>
fields
)
{
// 创建 ES 搜索条件
NativeSearchQueryBuilder
nativeSearchQueryBuilder
=
new
NativeSearchQueryBuilder
();
// 筛选
if
(
StringUtils
.
hasText
(
keyword
))
{
// 如果有 keyword ,就去匹配
nativeSearchQueryBuilder
.
withQuery
(
QueryBuilders
.
multiMatchQuery
(
keyword
,
"name"
,
"sellPoint"
,
"categoryName"
));
}
else
{
nativeSearchQueryBuilder
.
withQuery
(
QueryBuilders
.
matchAllQuery
());
}
// 聚合
if
(
fields
.
contains
(
"category"
))
{
// 商品分类
nativeSearchQueryBuilder
.
addAggregation
(
AggregationBuilders
.
terms
(
"cids"
).
field
(
"cid"
));
}
// 执行查询,返回结果
return
elasticsearchTemplate
.
query
(
nativeSearchQueryBuilder
.
build
(),
response
->
{
SearchProductConditionBO
result
=
new
SearchProductConditionBO
();
// categoryIds 聚合
Aggregation
categoryIdsAggregation
=
response
.
getAggregations
().
get
(
"cids"
);
if
(
categoryIdsAggregation
!=
null
)
{
result
.
setCids
(
new
ArrayList
<>());
for
(
LongTerms
.
Bucket
bucket
:
(((
LongTerms
)
categoryIdsAggregation
).
getBuckets
()))
{
result
.
getCids
().
add
(
bucket
.
getKeyAsNumber
().
intValue
());
}
}
// 返回结果
return
result
;
});
}
}
}
search
/search-biz/src/main/java/cn/iocoder/mall/search/biz/bo/
ProductBO.java
→
search
-service-project/search-service-app/src/main/java/cn/iocoder/mall/searchservice/service/product/bo/Search
ProductBO.java
浏览文件 @
d0ce6090
package
cn
.
iocoder
.
mall
.
search
.
biz
.
bo
;
package
cn
.
iocoder
.
mall
.
search
service
.
service
.
product
.
bo
;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
import
java.util.List
;
import
java.util.List
;
/**
/**
*
商品 ES
BO
*
搜索商品
BO
*/
*/
@Data
@Data
@Accessors
(
chain
=
true
)
@Accessors
(
chain
=
true
)
public
class
ProductBO
implements
Serializable
{
public
class
SearchProductBO
{
private
Integer
id
;
private
Integer
id
;
...
...
search
/search-biz/src/main/java/cn/iocoder/mall/search/biz/bo/
ProductConditionBO.java
→
search
-service-project/search-service-app/src/main/java/cn/iocoder/mall/searchservice/service/product/bo/Search
ProductConditionBO.java
浏览文件 @
d0ce6090
package
cn
.
iocoder
.
mall
.
search
.
biz
.
bo
;
package
cn
.
iocoder
.
mall
.
search
service
.
service
.
product
.
bo
;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
lombok.experimental.Accessors
;
...
@@ -10,26 +10,11 @@ import java.util.List;
...
@@ -10,26 +10,11 @@ import java.util.List;
*/
*/
@Data
@Data
@Accessors
(
chain
=
true
)
@Accessors
(
chain
=
true
)
public
class
ProductConditionBO
{
public
class
Search
ProductConditionBO
{
/**
/**
* 商品分类数组
* 商品分类数组
*/
*/
private
List
<
Category
>
categories
;
private
List
<
Integer
>
cids
;
@Data
@Accessors
(
chain
=
true
)
public
static
class
Category
{
/**
* 分类编号
*/
private
Integer
id
;
/**
* 分类名称
*/
private
String
name
;
}
}
}
search
/search-biz/src/main/java/cn/iocoder/mall/search/biz/dto/ProductSearchPageDT
O.java
→
search
-service-project/search-service-app/src/main/java/cn/iocoder/mall/searchservice/service/product/bo/SearchProductPageQueryB
O.java
浏览文件 @
d0ce6090
package
cn
.
iocoder
.
mall
.
search
.
biz
.
dt
o
;
package
cn
.
iocoder
.
mall
.
search
service
.
service
.
product
.
b
o
;
import
cn.iocoder.common.framework.
util.CollectionUtil
;
import
cn.iocoder.common.framework.
vo.PageParam
;
import
cn.iocoder.common.framework.vo.SortingField
;
import
cn.iocoder.common.framework.vo.SortingField
;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
lombok.experimental.Accessors
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Set
;
/**
/**
* 商品检索分
页 DT
O
* 商品检索分
查询 B
O
*/
*/
@Data
@Data
@Accessors
(
chain
=
true
)
@Accessors
(
chain
=
true
)
public
class
ProductSearchPageDTO
{
public
class
SearchProductPageQueryBO
extends
PageParam
{
public
static
final
Set
<
String
>
SORT_FIELDS
=
CollectionUtil
.
asSet
(
"buyPrice"
);
/**
/**
* 分类编号
* 分类编号
...
@@ -25,18 +22,10 @@ public class ProductSearchPageDTO {
...
@@ -25,18 +22,10 @@ public class ProductSearchPageDTO {
* 关键字
* 关键字
*/
*/
private
String
keyword
;
private
String
keyword
;
/**
* 页码
*/
private
Integer
pageNo
;
/**
* 分页大小
*/
private
Integer
pageSize
;
/**
/**
* 排序字段数组
* 排序字段数组
*
*
*/
*/
private
List
<
SortingField
>
sorts
;
private
List
<
SortingField
>
sorts
;
...
...
search-service-project/search-service-app/src/main/java/cn/iocoder/mall/searchservice/service/product/bo/SearchProduct
Creat
eBO.java
→
search-service-project/search-service-app/src/main/java/cn/iocoder/mall/searchservice/service/product/bo/SearchProduct
Sav
eBO.java
浏览文件 @
d0ce6090
...
@@ -6,11 +6,11 @@ import lombok.experimental.Accessors;
...
@@ -6,11 +6,11 @@ import lombok.experimental.Accessors;
import
java.util.List
;
import
java.util.List
;
/**
/**
* 搜索商品
创建
BO
* 搜索商品
保存
BO
*/
*/
@Data
@Data
@Accessors
@Accessors
public
class
SearchProduct
Creat
eBO
{
public
class
SearchProduct
Sav
eBO
{
private
Integer
id
;
private
Integer
id
;
...
...
search/search-biz/src/main/java/cn/iocoder/mall/search/biz/bo/ProductPageBO.java
deleted
100644 → 0
浏览文件 @
8646d0a6
package
cn
.
iocoder
.
mall
.
search
.
biz
.
bo
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
import
java.util.List
;
@Data
@Accessors
(
chain
=
true
)
public
class
ProductPageBO
implements
Serializable
{
/**
* 管理员数组
*/
private
List
<
ProductBO
>
list
;
/**
* 总量
*/
private
Integer
total
;
}
search/search-biz/src/main/java/cn/iocoder/mall/search/biz/config/JPAConfiguration.java
deleted
100644 → 0
浏览文件 @
8646d0a6
package
cn
.
iocoder
.
mall
.
search
.
biz
.
config
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories
;
@Configuration
@EnableElasticsearchRepositories
(
basePackages
=
"cn.iocoder.mall.search.biz.dao"
)
public
class
JPAConfiguration
{
}
search/search-biz/src/main/java/cn/iocoder/mall/search/biz/constant/FieldAnalyzer.java
deleted
100644 → 0
浏览文件 @
8646d0a6
package
cn
.
iocoder
.
mall
.
search
.
biz
.
constant
;
/**
* ES 字段分析器的枚举类
*
* 关于 IK 分词,文章 https://blog.csdn.net/xsdxs/article/details/72853288 不错。
* 目前项目使用的 ES 版本是 6.7.1 ,可以在 https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-7-1 下载。
* 如果不知道怎么安装 ES ,可以看 https://blog.csdn.net/chengyuqiang/article/details/78837712 简单。
*/
public
class
FieldAnalyzer
{
/**
* IK 最大化分词
*
* 会将文本做最细粒度的拆分
*/
public
static
final
String
IK_MAX_WORD
=
"ik_max_word"
;
/**
* IK 智能分词
*
* 会做最粗粒度的拆分
*/
public
static
final
String
IK_SMART
=
"ik_smart"
;
}
search/search-biz/src/main/java/cn/iocoder/mall/search/biz/convert/ProductSearchConvert.java
deleted
100644 → 0
浏览文件 @
8646d0a6
package
cn
.
iocoder
.
mall
.
search
.
biz
.
convert
;
import
cn.iocoder.mall.search.biz.bo.ProductBO
;
import
cn.iocoder.mall.search.biz.dataobject.ESProductDO
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.factory.Mappers
;
import
java.util.List
;
@Mapper
public
interface
ProductSearchConvert
{
ProductSearchConvert
INSTANCE
=
Mappers
.
getMapper
(
ProductSearchConvert
.
class
);
List
<
ProductBO
>
convert
(
List
<
ESProductDO
>
list
);
}
search/search-biz/src/main/java/cn/iocoder/mall/search/biz/dao/ProductRepository.java
deleted
100644 → 0
浏览文件 @
8646d0a6
package
cn
.
iocoder
.
mall
.
search
.
biz
.
dao
;
import
cn.iocoder.common.framework.util.CollectionUtil
;
import
cn.iocoder.common.framework.util.StringUtil
;
import
cn.iocoder.common.framework.vo.SortingField
;
import
cn.iocoder.mall.search.biz.dataobject.ESProductDO
;
import
org.elasticsearch.common.lucene.search.function.FunctionScoreQuery
;
import
org.elasticsearch.index.query.QueryBuilders
;
import
org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder
;
import
org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders
;
import
org.elasticsearch.search.sort.SortBuilders
;
import
org.elasticsearch.search.sort.SortOrder
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.PageRequest
;
import
org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder
;
import
org.springframework.data.elasticsearch.repository.ElasticsearchRepository
;
import
org.springframework.stereotype.Repository
;
import
java.util.List
;
import
static
org
.
elasticsearch
.
index
.
query
.
QueryBuilders
.
matchQuery
;
@Repository
public
interface
ProductRepository
extends
ElasticsearchRepository
<
ESProductDO
,
Integer
>
{
@Deprecated
ESProductDO
findByName
(
String
name
);
default
Page
<
ESProductDO
>
search
(
Integer
cid
,
String
keyword
,
Integer
pageNo
,
Integer
pageSize
,
List
<
SortingField
>
sortFields
)
{
NativeSearchQueryBuilder
nativeSearchQueryBuilder
=
new
NativeSearchQueryBuilder
()
.
withPageable
(
PageRequest
.
of
(
pageNo
-
1
,
pageSize
));
// 筛选条件 cid
if
(
cid
!=
null
)
{
nativeSearchQueryBuilder
.
withFilter
(
QueryBuilders
.
termQuery
(
"cid"
,
cid
));
}
// 筛选
if
(
StringUtil
.
hasText
(
keyword
))
{
FunctionScoreQueryBuilder
.
FilterFunctionBuilder
[]
functions
=
{
// TODO 芋艿,分值随便打的
new
FunctionScoreQueryBuilder
.
FilterFunctionBuilder
(
matchQuery
(
"name"
,
keyword
),
ScoreFunctionBuilders
.
weightFactorFunction
(
10
)),
new
FunctionScoreQueryBuilder
.
FilterFunctionBuilder
(
matchQuery
(
"sellPoint"
,
keyword
),
ScoreFunctionBuilders
.
weightFactorFunction
(
2
)),
new
FunctionScoreQueryBuilder
.
FilterFunctionBuilder
(
matchQuery
(
"categoryName"
,
keyword
),
ScoreFunctionBuilders
.
weightFactorFunction
(
3
)),
// new FunctionScoreQueryBuilder.FilterFunctionBuilder(matchQuery("description", keyword),
// ScoreFunctionBuilders.weightFactorFunction(2)), // TODO 芋艿,目前这么做,如果商品描述很长,在按照价格降序,会命中超级多的关键字。
};
FunctionScoreQueryBuilder
functionScoreQueryBuilder
=
QueryBuilders
.
functionScoreQuery
(
functions
)
.
scoreMode
(
FunctionScoreQuery
.
ScoreMode
.
SUM
)
.
setMinScore
(
2
F
);
// TODO 芋艿,需要考虑下 score
nativeSearchQueryBuilder
.
withQuery
(
functionScoreQueryBuilder
);
}
else
{
nativeSearchQueryBuilder
.
withQuery
(
QueryBuilders
.
matchAllQuery
());
}
// 排序
if
(!
CollectionUtil
.
isEmpty
(
sortFields
))
{
sortFields
.
forEach
(
sortField
->
nativeSearchQueryBuilder
.
withSort
(
SortBuilders
.
fieldSort
(
sortField
.
getField
())
.
order
(
SortOrder
.
fromString
(
sortField
.
getOrder
()))));
}
else
if
(
StringUtil
.
hasText
(
keyword
))
{
nativeSearchQueryBuilder
.
withSort
(
SortBuilders
.
scoreSort
().
order
(
SortOrder
.
DESC
));
}
else
{
nativeSearchQueryBuilder
.
withSort
(
SortBuilders
.
fieldSort
(
"sort"
).
order
(
SortOrder
.
DESC
));
}
// 执行查询
return
search
(
nativeSearchQueryBuilder
.
build
());
}
}
search/search-biz/src/main/java/cn/iocoder/mall/search/biz/dataobject/ESProductDO.java
deleted
100644 → 0
浏览文件 @
8646d0a6
package
cn
.
iocoder
.
mall
.
search
.
biz
.
dataobject
;
import
cn.iocoder.mall.search.biz.constant.FieldAnalyzer
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
org.springframework.data.annotation.Id
;
import
org.springframework.data.elasticsearch.annotations.Document
;
import
org.springframework.data.elasticsearch.annotations.Field
;
import
org.springframework.data.elasticsearch.annotations.FieldType
;
import
java.util.List
;
/**
* 商品 ES DO
*/
@Document
(
indexName
=
"product"
,
type
=
"spu"
,
shards
=
1
,
replicas
=
0
)
@Data
@Accessors
(
chain
=
true
)
public
class
ESProductDO
{
@Id
private
Integer
id
;
// ========== 基本信息 =========
/**
* SPU 名字
*/
@Field
(
analyzer
=
FieldAnalyzer
.
IK_MAX_WORD
,
type
=
FieldType
.
Text
)
private
String
name
;
/**
* 卖点
*/
@Field
(
analyzer
=
FieldAnalyzer
.
IK_MAX_WORD
,
type
=
FieldType
.
Text
)
private
String
sellPoint
;
/**
* 描述
*/
@Field
(
analyzer
=
FieldAnalyzer
.
IK_MAX_WORD
,
type
=
FieldType
.
Text
)
private
String
description
;
/**
* 分类编号
*/
private
Integer
cid
;
/**
* 分类名
*/
@Field
(
analyzer
=
FieldAnalyzer
.
IK_MAX_WORD
,
type
=
FieldType
.
Text
)
private
String
categoryName
;
/**
* 商品主图地数组
*/
private
List
<
String
>
picUrls
;
// ========== 其他信息 =========
/**
* 是否上架商品(是否可见)。
*
* true 为已上架
* false 为已下架
*/
private
Boolean
visible
;
/**
* 排序字段
*/
private
Integer
sort
;
// ========== Sku 相关字段 =========
/**
* 原价格,单位:分
*/
private
Integer
originalPrice
;
/**
* 购买价格,单位:分。
*/
private
Integer
buyPrice
;
/**
* 库存数量
*/
private
Integer
quantity
;
// ========== 促销活动相关字段 =========
// 目前只促销单体商品促销,目前仅限制折扣。
/**
* 促销活动编号
*/
private
Integer
promotionActivityId
;
/**
* 促销活动标题
*/
private
String
promotionActivityTitle
;
/**
* 促销活动类型
*/
private
Integer
promotionActivityType
;
}
search/search-biz/src/main/java/cn/iocoder/mall/search/biz/dto/ProductConditionDTO.java
deleted
100644 → 0
浏览文件 @
8646d0a6
package
cn
.
iocoder
.
mall
.
search
.
biz
.
dto
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.util.Collection
;
/**
* 获得商品检索条件 DTO
*/
@Data
@Accessors
(
chain
=
true
)
public
class
ProductConditionDTO
{
/**
* Field - 商品分类
*/
public
static
final
String
FIELD_CATEGORY
=
"category"
;
/**
* 关键字
*/
private
String
keyword
;
/**
* 需要返回的搜索条件的 fields 名
*/
private
Collection
<
String
>
fields
;
}
search/search-biz/src/main/java/cn/iocoder/mall/search/biz/service/ProductSearchServiceImpl.java
浏览文件 @
d0ce6090
...
@@ -19,8 +19,7 @@ public class ProductSearchServiceImpl implements ProductSearchService {
...
@@ -19,8 +19,7 @@ public class ProductSearchServiceImpl implements ProductSearchService {
@Autowired
@Autowired
private
ProductRepository
productRepository
;
private
ProductRepository
productRepository
;
@Autowired
private
ElasticsearchTemplate
elasticsearchTemplate
;
// 因为需要使用到聚合操作,只好引入 ElasticsearchTemplate 。
// @Reference(validation = "true", version = "${dubbo.consumer.ProductSpuService.version}")
// @Reference(validation = "true", version = "${dubbo.consumer.ProductSpuService.version}")
// private ProductSpuService productSpuService;
// private ProductSpuService productSpuService;
...
@@ -51,97 +50,5 @@ public class ProductSearchServiceImpl implements ProductSearchService {
...
@@ -51,97 +50,5 @@ public class ProductSearchServiceImpl implements ProductSearchService {
// return rebuildCounts;
// return rebuildCounts;
// }
// }
//
//
// @Override
// public Boolean save(Integer id) {
// // 获得商品性情
// ProductSpuDetailBO result = productSpuService.getProductSpuDetail(id);
// // 存储到 ES 中
// ESProductDO product = convert(result);
// productRepository.save(product);
// // 返回成功
// return true;
// }
//
// @SuppressWarnings("OptionalGetWithoutIsPresent")
// private ESProductDO convert(ProductSpuDetailBO spu) {
// // 获得最小价格的 SKU ,用于下面的价格计算
// ProductSpuDetailBO.Sku sku = spu.getSkus().stream().min(Comparator.comparing(ProductSpuDetailBO.Sku::getPrice)).get();
// // 价格计算
// CalcSkuPriceBO calSkuPriceResult = cartService.calcSkuPrice(sku.getId());
// // 拼装结果
// return ProductSearchConvert.INSTANCE.convert(spu, calSkuPriceResult);
// }
//
// @Override
// public ProductPageBO getSearchPage(ProductSearchPageDTO searchPageDTO) {
// checkSortFieldInvalid(searchPageDTO.getSorts());
// // 执行查询
// Page<ESProductDO> searchPage = productRepository.search(searchPageDTO.getCid(), searchPageDTO.getKeyword(),
// searchPageDTO.getPageNo(), searchPageDTO.getPageSize(), searchPageDTO.getSorts());
// // 转换结果
// return new ProductPageBO()
// .setList(ProductSearchConvert.INSTANCE.convert(searchPage.getContent()))
// .setTotal((int) searchPage.getTotalElements());
// }
private
void
checkSortFieldInvalid
(
List
<
SortingField
>
sorts
)
{
if
(
CollectionUtil
.
isEmpty
(
sorts
))
{
return
;
}
sorts
.
forEach
(
sortingField
->
Assert
.
isTrue
(
ProductSearchPageDTO
.
SORT_FIELDS
.
contains
(
sortingField
.
getField
()),
String
.
format
(
"排序字段(%s) 不在允许范围内"
,
sortingField
.
getField
())));
}
@Override
public
Integer
rebuild
()
{
return
null
;
}
@Override
public
Boolean
save
(
Integer
id
)
{
return
null
;
}
// @Override
// public ProductConditionBO getSearchCondition(ProductConditionDTO conditionDTO) {
// // 创建 ES 搜索条件
// NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
// // 筛选
// if (StringUtil.hasText(conditionDTO.getKeyword())) { // 如果有 keyword ,就去匹配
// nativeSearchQueryBuilder.withQuery(QueryBuilders.multiMatchQuery(conditionDTO.getKeyword(),
// "name", "sellPoint", "categoryName"));
// } else {
// nativeSearchQueryBuilder.withQuery(QueryBuilders.matchAllQuery());
// }
// // 聚合
// if (conditionDTO.getFields().contains(ProductConditionDTO.FIELD_CATEGORY)) { // 商品分类
// nativeSearchQueryBuilder.addAggregation(AggregationBuilders.terms("cids").field("cid"));
// }
// // 执行查询
// ProductConditionBO condition = elasticsearchTemplate.query(nativeSearchQueryBuilder.build(), response -> {
// ProductConditionBO result = new ProductConditionBO();
// // categoryIds 聚合
// Aggregation categoryIdsAggregation = response.getAggregations().get("cids");
// if (categoryIdsAggregation != null) {
// result.setCategories(new ArrayList<>());
// for (LongTerms.Bucket bucket : (((LongTerms) categoryIdsAggregation).getBuckets())) {
// result.getCategories().add(new ProductConditionBO.Category().setId(bucket.getKeyAsNumber().intValue()));
// }
// }
// // 返回结果
// return result;
// });
// // 聚合其它数据源
// if (!CollectionUtil.isEmpty(condition.getCategories())) {
// // 查询指定的 ProductCategoryBO 数组,并转换成 ProductCategoryBO Map
// Map<Integer, ProductCategoryBO> categoryMap = productCategoryService.getListByIds(
// condition.getCategories().stream().map(ProductConditionBO.Category::getId).collect(Collectors.toList()))
// .stream().collect(Collectors.toMap(ProductCategoryBO::getId, category -> category));
// // 设置分类名
// condition.getCategories().forEach(category -> category.setName(categoryMap.get(category.getId()).getName()));
// }
// // 返回结果
// return condition;
// }
}
}
search/search-service-api/src/main/java/cn/iocoder/mall/search/api/ProductSearchService.java
浏览文件 @
d0ce6090
...
@@ -9,14 +9,6 @@ public interface ProductSearchService {
...
@@ -9,14 +9,6 @@ public interface ProductSearchService {
Integer
rebuild
();
Integer
rebuild
();
/**
* 构建商品的搜索索引
*
* @param id 商品编号
* @return 构建结果
*/
Boolean
save
(
Integer
id
);
ProductPageBO
getSearchPage
(
ProductSearchPageDTO
searchPageDTO
);
ProductPageBO
getSearchPage
(
ProductSearchPageDTO
searchPageDTO
);
ProductConditionBO
getSearchCondition
(
ProductConditionDTO
conditionDTO
);
ProductConditionBO
getSearchCondition
(
ProductConditionDTO
conditionDTO
);
...
...
search/search-service-api/src/main/java/cn/iocoder/mall/search/api/bo/ProductBO.java
deleted
100644 → 0
浏览文件 @
8646d0a6
package
cn
.
iocoder
.
mall
.
search
.
biz
.
bo
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
import
java.util.List
;
/**
* 商品 ES BO
*/
@Data
@Accessors
(
chain
=
true
)
public
class
ProductBO
implements
Serializable
{
private
Integer
id
;
// ========== 基本信息 =========
/**
* SPU 名字
*/
private
String
name
;
/**
* 卖点
*/
private
String
sellPoint
;
/**
* 描述
*/
private
String
description
;
/**
* 分类编号
*/
private
Integer
cid
;
/**
* 分类名
*/
private
String
categoryName
;
/**
* 商品主图地数组
*/
private
List
<
String
>
picUrls
;
// ========== 其他信息 =========
/**
* 是否上架商品(是否可见)。
*
* true 为已上架
* false 为已下架
*/
private
Boolean
visible
;
/**
* 排序字段
*/
private
Integer
sort
;
// ========== Sku 相关字段 =========
/**
* 原价格,单位:分
*/
private
Integer
originalPrice
;
/**
* 购买价格,单位:分。
*/
private
Integer
buyPrice
;
/**
* 库存数量
*/
private
Integer
quantity
;
// ========== 促销活动相关字段 =========
// 目前只促销单体商品促销,目前仅限制折扣。
/**
* 促销活动编号
*/
private
Integer
promotionActivityId
;
/**
* 促销活动标题
*/
private
String
promotionActivityTitle
;
/**
* 促销活动类型
*/
private
Integer
promotionActivityType
;
}
search/search-service-api/src/main/java/cn/iocoder/mall/search/api/bo/ProductPageBO.java
deleted
100644 → 0
浏览文件 @
8646d0a6
package
cn
.
iocoder
.
mall
.
search
.
biz
.
bo
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
import
java.util.List
;
@Data
@Accessors
(
chain
=
true
)
public
class
ProductPageBO
implements
Serializable
{
/**
* 管理员数组
*/
private
List
<
ProductBO
>
list
;
/**
* 总量
*/
private
Integer
total
;
}
search/search-service-impl/src/main/java/cn/iocoder/mall/search/biz/service/ProductSearchServiceImpl.java
浏览文件 @
d0ce6090
...
@@ -68,26 +68,6 @@ public class ProductSearchServiceImpl implements ProductSearchService {
...
@@ -68,26 +68,6 @@ public class ProductSearchServiceImpl implements ProductSearchService {
return
rebuildCounts
;
return
rebuildCounts
;
}
}
@Override
public
ProductPageBO
getSearchPage
(
ProductSearchPageDTO
searchPageDTO
)
{
checkSortFieldInvalid
(
searchPageDTO
.
getSorts
());
// 执行查询
Page
<
ESProductDO
>
searchPage
=
productRepository
.
search
(
searchPageDTO
.
getCid
(),
searchPageDTO
.
getKeyword
(),
searchPageDTO
.
getPageNo
(),
searchPageDTO
.
getPageSize
(),
searchPageDTO
.
getSorts
());
// 转换结果
return
new
ProductPageBO
()
.
setList
(
ProductSearchConvert
.
INSTANCE
.
convert
(
searchPage
.
getContent
()))
.
setTotal
((
int
)
searchPage
.
getTotalElements
());
}
private
void
checkSortFieldInvalid
(
List
<
SortingField
>
sorts
)
{
if
(
CollectionUtil
.
isEmpty
(
sorts
))
{
return
;
}
sorts
.
forEach
(
sortingField
->
Assert
.
isTrue
(
ProductSearchPageDTO
.
SORT_FIELDS
.
contains
(
sortingField
.
getField
()),
String
.
format
(
"排序字段(%s) 不在允许范围内"
,
sortingField
.
getField
())));
}
@Override
@Override
public
ProductConditionBO
getSearchCondition
(
ProductConditionDTO
conditionDTO
)
{
public
ProductConditionBO
getSearchCondition
(
ProductConditionDTO
conditionDTO
)
{
// 创建 ES 搜索条件
// 创建 ES 搜索条件
...
...
doc
s/sql/mall_system_data.sql
→
system-service-project/system-service-app/src/main/resource
s/sql/mall_system_data.sql
浏览文件 @
d0ce6090
差异被折叠。
点击展开。
doc
s/sql/mall_system_schema.sql
→
system-service-project/system-service-app/src/main/resource
s/sql/mall_system_schema.sql
浏览文件 @
d0ce6090
...
@@ -195,6 +195,22 @@ CREATE TABLE `system_data_dict` (
...
@@ -195,6 +195,22 @@ CREATE TABLE `system_data_dict` (
PRIMARY
KEY
(
`id`
)
USING
BTREE
PRIMARY
KEY
(
`id`
)
USING
BTREE
)
ENGINE
=
InnoDB
AUTO_INCREMENT
=
67
DEFAULT
CHARSET
=
utf8mb4
COMMENT
=
'数据字典'
;
)
ENGINE
=
InnoDB
AUTO_INCREMENT
=
67
DEFAULT
CHARSET
=
utf8mb4
COMMENT
=
'数据字典'
;
-- ----------------------------
-- Table structure for system_error_code
-- ----------------------------
CREATE
TABLE
`system_error_code`
(
`id`
int
(
11
)
NOT
NULL
AUTO_INCREMENT
COMMENT
'错误码编号'
,
`code`
int
(
11
)
NOT
NULL
DEFAULT
'0'
COMMENT
'错误码编码'
,
`message`
varchar
(
255
)
NOT
NULL
DEFAULT
''
COMMENT
'错误码错误提示'
,
`type`
tinyint
(
4
)
NOT
NULL
COMMENT
'错误码类型'
,
`group`
varchar
(
64
)
NOT
NULL
COMMENT
'错误码分组'
,
`memo`
varchar
(
255
)
DEFAULT
NULL
COMMENT
'错误码备注'
,
`create_time`
datetime
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
COMMENT
'创建时间'
,
`update_time`
datetime
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
ON
UPDATE
CURRENT_TIMESTAMP
COMMENT
'最后更新时间'
,
`deleted`
bit
(
1
)
NOT
NULL
DEFAULT
b
'0'
COMMENT
'是否删除'
,
PRIMARY
KEY
(
`id`
)
USING
BTREE
)
ENGINE
=
InnoDB
AUTO_INCREMENT
=
350
DEFAULT
CHARSET
=
utf8mb4
COMMENT
=
'错误码'
;
-- ----------------------------
-- ----------------------------
-- Table structure for system_exception_log
-- Table structure for system_exception_log
-- ----------------------------
-- ----------------------------
...
...
user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/passport/UserPassportController.java
浏览文件 @
d0ce6090
...
@@ -5,7 +5,7 @@ import cn.iocoder.common.framework.vo.CommonResult;
...
@@ -5,7 +5,7 @@ import cn.iocoder.common.framework.vo.CommonResult;
import
cn.iocoder.mall.userweb.controller.passport.vo.PassportLoginBySmsReqVO
;
import
cn.iocoder.mall.userweb.controller.passport.vo.PassportLoginBySmsReqVO
;
import
cn.iocoder.mall.userweb.controller.passport.vo.UserPassportSendSmsRespVO
;
import
cn.iocoder.mall.userweb.controller.passport.vo.UserPassportSendSmsRespVO
;
import
cn.iocoder.mall.userweb.controller.passport.vo.PassportAccessTokenRespVO
;
import
cn.iocoder.mall.userweb.controller.passport.vo.PassportAccessTokenRespVO
;
import
cn.iocoder.mall.userweb.manager.passport.
User
PassportManager
;
import
cn.iocoder.mall.userweb.manager.passport.PassportManager
;
import
cn.iocoder.security.annotations.RequiresNone
;
import
cn.iocoder.security.annotations.RequiresNone
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiOperation
;
...
@@ -24,7 +24,7 @@ import static cn.iocoder.common.framework.vo.CommonResult.success;
...
@@ -24,7 +24,7 @@ import static cn.iocoder.common.framework.vo.CommonResult.success;
public
class
UserPassportController
{
public
class
UserPassportController
{
@Autowired
@Autowired
private
User
PassportManager
userPassportManager
;
private
PassportManager
userPassportManager
;
@PostMapping
(
"/login-by-sms"
)
@PostMapping
(
"/login-by-sms"
)
@ApiOperation
(
"手机验证码登陆"
)
@ApiOperation
(
"手机验证码登陆"
)
...
...
user-web-app/src/main/java/cn/iocoder/mall/userweb/manager/passport/
User
PassportManager.java
→
user-web-app/src/main/java/cn/iocoder/mall/userweb/manager/passport/PassportManager.java
浏览文件 @
d0ce6090
...
@@ -9,21 +9,21 @@ import cn.iocoder.mall.userservice.enums.sms.UserSmsSceneEnum;
...
@@ -9,21 +9,21 @@ import cn.iocoder.mall.userservice.enums.sms.UserSmsSceneEnum;
import
cn.iocoder.mall.userservice.rpc.sms.UserSmsCodeRpc
;
import
cn.iocoder.mall.userservice.rpc.sms.UserSmsCodeRpc
;
import
cn.iocoder.mall.userservice.rpc.user.UserRpc
;
import
cn.iocoder.mall.userservice.rpc.user.UserRpc
;
import
cn.iocoder.mall.userservice.rpc.user.dto.UserRespDTO
;
import
cn.iocoder.mall.userservice.rpc.user.dto.UserRespDTO
;
import
cn.iocoder.mall.userweb.controller.passport.vo.PassportAccessTokenRespVO
;
import
cn.iocoder.mall.userweb.controller.passport.vo.PassportLoginBySmsReqVO
;
import
cn.iocoder.mall.userweb.controller.passport.vo.PassportLoginBySmsReqVO
;
import
cn.iocoder.mall.userweb.controller.passport.vo.UserPassportSendSmsRespVO
;
import
cn.iocoder.mall.userweb.controller.passport.vo.UserPassportSendSmsRespVO
;
import
cn.iocoder.mall.userweb.controller.passport.vo.PassportAccessTokenRespVO
;
import
cn.iocoder.mall.userweb.convert.passport.PassportConvert
;
import
cn.iocoder.mall.userweb.convert.passport.PassportConvert
;
import
org.apache.dubbo.config.annotation.Reference
;
import
org.apache.dubbo.config.annotation.
Dubbo
Reference
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
@Service
@Service
public
class
User
PassportManager
{
public
class
PassportManager
{
@Reference
(
version
=
"${dubbo.consumer.UserSmsCodeRpc.version}"
,
validation
=
"false"
)
@
Dubbo
Reference
(
version
=
"${dubbo.consumer.UserSmsCodeRpc.version}"
,
validation
=
"false"
)
private
UserSmsCodeRpc
userSmsCodeRpc
;
private
UserSmsCodeRpc
userSmsCodeRpc
;
@Reference
(
version
=
"${dubbo.consumer.UserRpc.version}"
,
validation
=
"false"
)
@
Dubbo
Reference
(
version
=
"${dubbo.consumer.UserRpc.version}"
,
validation
=
"false"
)
private
UserRpc
userRpc
;
private
UserRpc
userRpc
;
@Reference
(
version
=
"${dubbo.consumer.OAuth2Rpc.version}"
,
validation
=
"false"
)
@
Dubbo
Reference
(
version
=
"${dubbo.consumer.OAuth2Rpc.version}"
,
validation
=
"false"
)
private
OAuth2Rpc
oauth2Rpc
;
private
OAuth2Rpc
oauth2Rpc
;
public
PassportAccessTokenRespVO
loginBySms
(
PassportLoginBySmsReqVO
loginBySmsDTO
,
String
ip
)
{
public
PassportAccessTokenRespVO
loginBySms
(
PassportLoginBySmsReqVO
loginBySmsDTO
,
String
ip
)
{
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论