记得上下班打卡 | git大法好,push需谨慎
Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
liquidnet-bus-v1
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
董敬伟
liquidnet-bus-v1
Commits
da185943
Commit
da185943
authored
Jun 01, 2026
by
姜秀龙
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加换购价字段
parent
a100accc
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
100 additions
and
4 deletions
+100
-4
GoblinGoodsSkuInfoDetailVo.java
...net/service/goblin/dto/vo/GoblinGoodsSkuInfoDetailVo.java
+3
-0
GoblinSqbPerformanceGoodsInfoVo.java
...ervice/goblin/dto/vo/GoblinSqbPerformanceGoodsInfoVo.java
+1
-1
GoblinFrontServiceImpl.java
...t/service/goblin/service/impl/GoblinFrontServiceImpl.java
+96
-3
No files found.
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/dto/vo/GoblinGoodsSkuInfoDetailVo.java
View file @
da185943
...
...
@@ -41,6 +41,9 @@ public class GoblinGoodsSkuInfoDetailVo implements Serializable, Cloneable {
@ApiModelProperty
(
position
=
20
,
value
=
"单品销售价-原价[20,2]"
)
private
BigDecimal
sellPrice
;
@ApiModelProperty
(
value
=
"收钱吧商品(spuType=33)演出关联换购价(元);其他商品类型恒为 null;SQB 且传入 performancesId 且后台已配置时返回"
)
private
BigDecimal
settlementPrice
;
@ApiModelProperty
(
position
=
26
,
value
=
"限量[0-无限制|X:限购数量]"
)
private
Integer
buyLimit
;
@ApiModelProperty
(
position
=
27
,
value
=
"剩余库存(实时:Redis getSkuStock)"
)
...
...
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/dto/vo/GoblinSqbPerformanceGoodsInfoVo.java
View file @
da185943
...
...
@@ -19,7 +19,7 @@ public class GoblinSqbPerformanceGoodsInfoVo extends GoblinGoodsInfoVo {
@ApiModelProperty
(
value
=
"正常售价"
)
private
BigDecimal
price
;
@ApiModelProperty
(
value
=
"
换购价(不设置则按正常价)
"
)
@ApiModelProperty
(
value
=
"
收钱吧商品(spuType=33)换购价展示(元):关联 SKU 换购价最小值;非 SQB 商品恒为 null;未配置换购价时不返回
"
)
private
BigDecimal
settlementPrice
;
@ApiModelProperty
(
value
=
"已上架 SKU 明细(含 restStock、stockLess、canBuy 等,与商品详情接口字段一致)"
)
...
...
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/service/impl/GoblinFrontServiceImpl.java
View file @
da185943
...
...
@@ -394,14 +394,81 @@ public class GoblinFrontServiceImpl implements GoblinFrontService {
return
buildOnShelfSkuDetailList
(
goblinGoodsInfoVo
,
null
);
}
/**
* 从演出-商品关联构建 skuId → 后台配置的换购价(原始值,展示前需经 {@link #resolveSqbDisplaySettlementPrice})
*/
private
Map
<
String
,
BigDecimal
>
buildSqbSettlementPriceBySkuId
(
List
<
GoblinSqbPerformanceGoods
>
relations
,
String
spuId
)
{
Map
<
String
,
BigDecimal
>
map
=
new
HashMap
<>();
if
(
CollectionUtils
.
isEmpty
(
relations
))
{
return
map
;
}
String
spu
=
StringUtil
.
isBlank
(
spuId
)
?
null
:
spuId
.
trim
();
for
(
GoblinSqbPerformanceGoods
r
:
relations
)
{
if
(
r
==
null
||
StringUtil
.
isBlank
(
r
.
getSkuId
()))
{
continue
;
}
if
(
spu
!=
null
&&
(
StringUtil
.
isBlank
(
r
.
getSpuId
())
||
!
spu
.
equals
(
r
.
getSpuId
().
trim
())))
{
continue
;
}
map
.
put
(
r
.
getSkuId
().
trim
(),
r
.
getSettlementPrice
());
}
return
map
;
}
/**
* 前台展示换购价:与收钱吧下单 {@code resolveSqbUnitPriceYuan} 一致(换购价须有效且不超过 SKU 售价),但不校验用户是否已购演出门票。
*/
private
BigDecimal
resolveSqbDisplaySettlementPrice
(
GoblinGoodsSkuInfoVo
skuVo
,
BigDecimal
configuredSettlement
)
{
if
(
skuVo
==
null
||
configuredSettlement
==
null
)
{
return
null
;
}
if
(
configuredSettlement
.
compareTo
(
BigDecimal
.
ZERO
)
<=
0
)
{
return
null
;
}
BigDecimal
base
=
skuVo
.
getSellPrice
()
!=
null
?
skuVo
.
getSellPrice
()
:
skuVo
.
getPrice
();
if
(
base
==
null
)
{
return
configuredSettlement
;
}
if
(
configuredSettlement
.
compareTo
(
base
)
>
0
)
{
return
base
;
}
return
configuredSettlement
;
}
private
BigDecimal
resolveSpuMinSettlementPrice
(
List
<
GoblinGoodsSkuInfoDetailVo
>
skuList
)
{
if
(
CollectionUtils
.
isEmpty
(
skuList
))
{
return
null
;
}
BigDecimal
min
=
null
;
for
(
GoblinGoodsSkuInfoDetailVo
sku
:
skuList
)
{
if
(
sku
==
null
||
sku
.
getSettlementPrice
()
==
null
)
{
continue
;
}
if
(
min
==
null
||
sku
.
getSettlementPrice
().
compareTo
(
min
)
<
0
)
{
min
=
sku
.
getSettlementPrice
();
}
}
return
min
;
}
/**
* @param allowedSkuIds 非 null 时仅保留集合内的 SKU(用于收钱吧演出关联 SKU、spuType=33 详情)
* @param settlementPriceBySkuId 仅 spuType=33 时传入;其他商品类型忽略
*/
private
ArrayList
<
GoblinGoodsSkuInfoDetailVo
>
buildOnShelfSkuDetailList
(
GoblinGoodsInfoVo
goblinGoodsInfoVo
,
Set
<
String
>
allowedSkuIds
)
{
return
buildOnShelfSkuDetailList
(
goblinGoodsInfoVo
,
allowedSkuIds
,
null
);
}
private
ArrayList
<
GoblinGoodsSkuInfoDetailVo
>
buildOnShelfSkuDetailList
(
GoblinGoodsInfoVo
goblinGoodsInfoVo
,
Set
<
String
>
allowedSkuIds
,
Map
<
String
,
BigDecimal
>
settlementPriceBySkuId
)
{
ArrayList
<
GoblinGoodsSkuInfoDetailVo
>
list
=
ObjectUtil
.
goblinGoodsSkuInfoDetailVos
();
if
(
goblinGoodsInfoVo
==
null
)
{
return
list
;
}
boolean
sqbSpu
=
isSqbSpuGoods
(
goblinGoodsInfoVo
);
if
(!
sqbSpu
)
{
settlementPriceBySkuId
=
null
;
}
String
spuId
=
goblinGoodsInfoVo
.
getSpuId
();
List
<
String
>
skuIdList
=
goblinGoodsInfoVo
.
getSkuIdList
();
if
(
CollectionUtils
.
isEmpty
(
skuIdList
))
{
...
...
@@ -422,6 +489,7 @@ public class GoblinFrontServiceImpl implements GoblinFrontService {
int
stock
=
goblinRedisUtils
.
getSkuStock
(
pre
,
goblinGoodsSkuInfoVo
.
getSkuId
());
log
.
debug
(
"skuId:{},库存数量{}"
,
goblinGoodsSkuInfoVo
.
getSkuId
(),
stock
);
GoblinGoodsSkuInfoDetailVo
goblinGoodsSkuInfoDetailVo
=
GoblinGoodsSkuInfoDetailVo
.
getNew
();
goblinGoodsSkuInfoDetailVo
.
setSettlementPrice
(
null
);
BeanUtils
.
copyProperties
(
goblinGoodsSkuInfoVo
,
goblinGoodsSkuInfoDetailVo
);
fillSkuPicIfBlank
(
goblinGoodsSkuInfoDetailVo
,
goblinGoodsInfoVo
);
if
(
0
!=
goblinGoodsSkuInfoDetailVo
.
getBuyLimit
())
{
...
...
@@ -438,6 +506,15 @@ public class GoblinFrontServiceImpl implements GoblinFrontService {
goblinGoodsSkuInfoDetailVo
.
setStockLess
(
false
);
}
goblinGoodsSkuInfoDetailVo
.
setRestStock
(
stock
);
if
(
sqbSpu
&&
settlementPriceBySkuId
!=
null
&&
!
settlementPriceBySkuId
.
isEmpty
())
{
String
skuKey
=
goblinGoodsSkuInfoVo
.
getSkuId
();
BigDecimal
configured
=
skuKey
!=
null
?
settlementPriceBySkuId
.
get
(
skuKey
)
:
null
;
if
(
configured
==
null
&&
StringUtil
.
isNotBlank
(
sku
))
{
configured
=
settlementPriceBySkuId
.
get
(
sku
.
trim
());
}
goblinGoodsSkuInfoDetailVo
.
setSettlementPrice
(
resolveSqbDisplaySettlementPrice
(
goblinGoodsSkuInfoVo
,
configured
));
}
list
.
add
(
goblinGoodsSkuInfoDetailVo
);
}
}
...
...
@@ -464,10 +541,17 @@ public class GoblinFrontServiceImpl implements GoblinFrontService {
goblinFrontGoodDetailVo
.
setGoblinGoodsInfoVo
(
goblinGoodsInfoDetailVo
);
// int limit= getStockCount(goblinGoodsInfoVo.getStoreId());
Set
<
String
>
sqbSkuAllow
=
null
;
Map
<
String
,
BigDecimal
>
settlementPriceBySkuId
=
null
;
if
(
isSqbSpuGoods
(
goblinGoodsInfoVo
))
{
sqbSkuAllow
=
loadSqbLinkedSkuIdSet
(
spuId
,
performancesId
);
if
(
StringUtil
.
isNotBlank
(
performancesId
))
{
List
<
GoblinSqbPerformanceGoods
>
perfRelations
=
loadSqbPerformanceGoodsRelationsFromCacheOrDb
(
performancesId
);
settlementPriceBySkuId
=
buildSqbSettlementPriceBySkuId
(
perfRelations
,
spuId
);
}
}
ArrayList
<
GoblinGoodsSkuInfoDetailVo
>
list
=
buildOnShelfSkuDetailList
(
goblinGoodsInfoVo
,
sqbSkuAllow
);
ArrayList
<
GoblinGoodsSkuInfoDetailVo
>
list
=
buildOnShelfSkuDetailList
(
goblinGoodsInfoVo
,
sqbSkuAllow
,
settlementPriceBySkuId
);
//goblinGoodsInfoVo
GoblinStoreInfoVo
goblinStoreInfoVo
=
this
.
getStore
(
goblinGoodsInfoVo
.
getStoreId
());
if
(
null
!=
goblinStoreInfoVo
)
{
...
...
@@ -1300,8 +1384,17 @@ public class GoblinFrontServiceImpl implements GoblinFrontService {
BigDecimal
normalPrice
=
resolveGoodsSellPrice
(
goodsInfoVo
,
linkedSkuIds
);
frontGoods
.
setSellPrice
(
normalPrice
);
frontGoods
.
setPrice
(
normalPrice
);
frontGoods
.
setSettlementPrice
(
rel
.
getSettlementPrice
());
frontGoods
.
setGoblinGoodsSkuInfoVolist
(
buildOnShelfSkuDetailList
(
goodsInfoVo
,
linkedSkuIds
));
frontGoods
.
setSettlementPrice
(
null
);
ArrayList
<
GoblinGoodsSkuInfoDetailVo
>
skuDetailList
;
if
(
isSqbSpuGoods
(
goodsInfoVo
))
{
Map
<
String
,
BigDecimal
>
settlementPriceBySkuId
=
buildSqbSettlementPriceBySkuId
(
relations
,
rel
.
getSpuId
());
skuDetailList
=
buildOnShelfSkuDetailList
(
goodsInfoVo
,
linkedSkuIds
,
settlementPriceBySkuId
);
frontGoods
.
setSettlementPrice
(
resolveSpuMinSettlementPrice
(
skuDetailList
));
}
else
{
skuDetailList
=
buildOnShelfSkuDetailList
(
goodsInfoVo
,
linkedSkuIds
);
}
frontGoods
.
setGoblinGoodsSkuInfoVolist
(
skuDetailList
);
allGoods
.
add
(
frontGoods
);
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment