记得上下班打卡 | 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
3a8884fc
Commit
3a8884fc
authored
Mar 30, 2026
by
姜秀龙
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
收钱 goods add edit
parent
3ad34a00
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
63 additions
and
1224 deletions
+63
-1224
GoblinStoreMgtGoodsSqbAddParam.java
...ice/goblin/dto/manage/GoblinStoreMgtGoodsSqbAddParam.java
+7
-26
IGoblinSqbGoodsService.java
...uidnet/service/goblin/service/IGoblinSqbGoodsService.java
+0
-46
IGoblinStoreMgtSqbGoodsService.java
...goblin/service/manage/IGoblinStoreMgtSqbGoodsService.java
+2
-7
GoblinSqbGoodsController.java
...t/service/goblin/controller/GoblinSqbGoodsController.java
+0
-82
GoblinStoreMgtSqbGoodsController.java
...n/controller/manage/GoblinStoreMgtSqbGoodsController.java
+9
-102
GoblinSqbGoodsServiceImpl.java
...ervice/goblin/service/impl/GoblinSqbGoodsServiceImpl.java
+0
-614
GoblinStoreMgtSqbGoodsServiceImpl.java
...ervice/impl/manage/GoblinStoreMgtSqbGoodsServiceImpl.java
+45
-347
No files found.
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/dto/manage/GoblinStoreMgtGoodsSqbAddParam.java
View file @
3a8884fc
...
...
@@ -162,32 +162,13 @@ public class GoblinStoreMgtGoodsSqbAddParam implements Serializable {
*
* @return GoblinGoodsInfoVo
*/
public
GoblinGoodsInfoVo
initEditGoodsInfoVo
()
{
GoblinGoodsInfoVo
vo
=
GoblinGoodsInfoVo
.
getNew
();
vo
.
setStoreId
(
this
.
getStoreId
());
vo
.
setSpuId
(
this
.
getSpuId
());
if
(
StringUtils
.
isBlank
(
this
.
getSpuNo
()))
{
vo
.
setSpuNo
(
vo
.
getSpuId
());
}
else
{
vo
.
setSpuNo
(
this
.
getSpuNo
());
}
vo
.
setSpuType
(
2
);
vo
.
setName
(
this
.
getName
());
// vo.setSubtitle(this.getSubtitle());
// vo.setSellPrice(this.getSellPrice());
vo
.
setIntro
(
this
.
getIntro
());
vo
.
setDetails
(
this
.
getDetails
());
vo
.
setCoverPic
(
StringUtils
.
isBlank
(
this
.
getCoverPic
())
?
this
.
getImageList
().
get
(
0
)
:
this
.
getCoverPic
());
vo
.
setVideo
(
this
.
getVideo
());
vo
.
setSpecMode
(
"1"
);
vo
.
setCateFid
(
this
.
getCateFid
());
vo
.
setCateSid
(
this
.
getCateSid
());
vo
.
setCateTid
(
this
.
getCateTid
());
vo
.
setShelvesHandle
(
this
.
getShelvesHandle
());
vo
.
setShelvesTime
(
this
.
getShelvesTime
());
vo
.
setVirtualFlg
(
"1"
);
vo
.
setImageList
(
this
.
getImageList
());
vo
.
setLogisticsTemplate
(
""
);
public
GoblinGoodsInfoVo
initEditGoodsInfoVo
(
GoblinSqbPerfGoodsVo
sqbGoods
,
GoblinGoodsInfoVo
mgtGoodsInfoVo
)
{
GoblinGoodsInfoVo
vo
=
mgtGoodsInfoVo
;
vo
.
setName
(
sqbGoods
.
getTitle
());
vo
.
setDetails
(
sqbGoods
.
getProductIntroduction
());
vo
.
setCoverPic
(
CollectionUtil
.
isEmpty
(
sqbGoods
.
getConverImages
())
?
""
:
sqbGoods
.
getConverImages
().
get
(
0
));
// vo.setImageList(sqbGoods.getConverImages());
return
vo
;
}
...
...
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/service/IGoblinSqbGoodsService.java
deleted
100644 → 0
View file @
3ad34a00
package
com
.
liquidnet
.
service
.
goblin
.
service
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.goblin.dto.vo.GoblinSqbPerfGoodsVo
;
import
com.liquidnet.service.goblin.param.shouqianba.request.GoblinSqbGoodsSyncParam
;
import
java.util.List
;
/**
* 收钱吧商品同步服务接口
*/
public
interface
IGoblinSqbGoodsService
{
/**
* 根据搜索条件拉取商城商品列表
*
* @return 过滤后的商品列表
*/
ResponseDto
<
List
<
GoblinSqbPerfGoodsVo
>>
getProductList
();
/**
* 批量新增商品到 goblin 系统(不存在则新增)
*
* @param storeId 门店ID
* @param items 待新增商品列表
* @return 结果
*/
ResponseDto
<
String
>
addGoods
(
String
storeId
,
List
<
GoblinSqbPerfGoodsVo
>
items
);
/**
* 批量更新商品到 goblin 系统(仅更新已存在)
*
* @param storeId 门店ID
* @param items 待更新商品列表
* @return 结果
*/
ResponseDto
<
String
>
updateGoods
(
String
storeId
,
List
<
GoblinSqbPerfGoodsVo
>
items
);
/**
* 查询演出关联商品列表(先查 Redis 缓存,未命中则查 MySQL 并写入缓存)
*
* @param performancesId 演出ID
* @return 演出关联商品列表
*/
ResponseDto
<
List
<
GoblinSqbPerfGoodsVo
>>
getPerfGoods
(
String
performancesId
);
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/service/manage/IGoblinStoreMgtSqbGoodsService.java
View file @
3a8884fc
package
com
.
liquidnet
.
service
.
goblin
.
service
.
manage
;
import
com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtGoodsSqbAddParam
;
import
com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtGoodsSqbEditSkuParam
;
import
com.liquidnet.service.goblin.dto.vo.GoblinGoodsInfoVo
;
import
com.liquidnet.service.goblin.dto.vo.GoblinGoodsSkuInfoVo
;
import
com.liquidnet.service.goblin.dto.vo.GoblinSqbPerfGoodsVo
;
import
java.util.List
;
...
...
@@ -20,10 +19,6 @@ public interface IGoblinStoreMgtSqbGoodsService {
/**
* 商品管理:商品编辑:SPU编辑-收钱吧商品
*/
boolean
sqbGoodsEditSpu
(
String
uid
,
GoblinS
toreMgtGoodsSqbAddParam
mgtGoodsSqbParam
,
GoblinGoodsInfoVo
goodsInfoVo
);
boolean
sqbGoodsEditSpu
(
String
uid
,
GoblinS
qbPerfGoodsVo
mgtGoodsSqbParam
,
GoblinGoodsInfoVo
goodsInfoVo
);
/**
* 商品管理:商品编辑:SKU编辑-收钱吧商品
*/
boolean
sqbGoodsEditSku
(
String
uid
,
GoblinStoreMgtGoodsSqbEditSkuParam
mgtGoodsSqbParam
,
GoblinGoodsInfoVo
goodsInfoVo
);
}
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/controller/GoblinSqbGoodsController.java
deleted
100644 → 0
View file @
3ad34a00
package
com
.
liquidnet
.
service
.
goblin
.
controller
;
import
com.liquidnet.commons.lang.util.CurrentUtil
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.goblin.dto.vo.GoblinSqbPerfGoodsVo
;
import
com.liquidnet.service.goblin.service.IGoblinSqbGoodsService
;
import
com.liquidnet.service.goblin.util.GoblinRedisUtils
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
com.liquidnet.service.goblin.param.shouqianba.request.GoblinSqbGoodsSyncParam
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
/**
* 收钱吧商品同步 Controller
*/
@Slf4j
@Api
(
tags
=
"收钱吧商品同步"
)
@RestController
@RequestMapping
(
"/sqb/goods"
)
public
class
GoblinSqbGoodsController
{
@Autowired
IGoblinSqbGoodsService
goblinSqbGoodsService
;
@Autowired
GoblinRedisUtils
goblinRedisUtils
;
/**
* 查询所有商城及商品列表
* 后端自动拉取所有商城,循环获取每个商城的商品列表,聚合返回前端
*/
@GetMapping
(
"/list"
)
@ApiOperation
(
"查询收钱吧所有商城及商品列表"
)
public
ResponseDto
<
List
<
GoblinSqbPerfGoodsVo
>>
list
()
{
return
goblinSqbGoodsService
.
getProductList
();
}
/**
* 批量新增收钱吧商品
*/
@PostMapping
(
"/add"
)
@ApiOperation
(
"批量新增收钱吧商品"
)
public
ResponseDto
<
String
>
addGoods
(
@RequestParam
(
"storeId"
)
String
storeId
,
@RequestBody
@Validated
List
<
GoblinSqbPerfGoodsVo
>
items
)
{
String
currentUid
=
CurrentUtil
.
getCurrentUid
();
if
(!
goblinRedisUtils
.
hasStoreId
(
currentUid
,
storeId
))
{
log
.
warn
(
"[收钱吧商品同步] 批量新增: 无权操作该店铺, uid={}, storeId={}"
,
currentUid
,
storeId
);
return
ResponseDto
.
failure
(
"无权操作该店铺"
);
}
return
goblinSqbGoodsService
.
addGoods
(
storeId
,
items
);
}
/**
* 批量更新收钱吧商品
*/
@PostMapping
(
"/update"
)
@ApiOperation
(
"批量更新收钱吧商品"
)
public
ResponseDto
<
String
>
updateGoods
(
@RequestParam
(
"storeId"
)
String
storeId
,
@RequestBody
@Validated
List
<
GoblinSqbPerfGoodsVo
>
items
)
{
String
currentUid
=
CurrentUtil
.
getCurrentUid
();
if
(!
goblinRedisUtils
.
hasStoreId
(
currentUid
,
storeId
))
{
log
.
warn
(
"[收钱吧商品同步] 批量更新: 无权操作该店铺, uid={}, storeId={}"
,
currentUid
,
storeId
);
return
ResponseDto
.
failure
(
"无权操作该店铺"
);
}
return
goblinSqbGoodsService
.
updateGoods
(
storeId
,
items
);
}
/**
* 查询演出关联商品列表(C端)
* 先查 Redis 缓存(TTL 5min),未命中则查 MySQL 并写入缓存
*/
@GetMapping
(
"/performance/goods/{performancesId}"
)
@ApiOperation
(
"查询演出关联商品列表"
)
public
ResponseDto
<
List
<
GoblinSqbPerfGoodsVo
>>
getPerfGoods
(
@PathVariable
String
performancesId
)
{
return
goblinSqbGoodsService
.
getPerfGoods
(
performancesId
);
}
}
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/controller/manage/GoblinStoreMgtSqbGoodsController.java
View file @
3a8884fc
...
...
@@ -36,7 +36,6 @@ import java.util.Objects;
/**
* 收钱吧商品管理
*/
@ApiSupport
(
order
=
1
)
@Api
(
tags
=
"收钱吧商品管理"
)
@Slf4j
@Validated
...
...
@@ -83,113 +82,21 @@ public class GoblinStoreMgtSqbGoodsController {
@ApiOperationSupport
(
order
=
2
)
@ApiOperation
(
value
=
"商品编辑:SPU编辑-收钱吧商品"
,
notes
=
"只修改商品信息,不包含价格库存相关信息"
)
@PutMapping
(
"edit_spu"
)
public
ResponseDto
<
Object
>
editSpu
(
@Valid
@RequestBody
GoblinStoreMgtGoodsSqbAddParam
mgtGoodsSqbEditParam
)
{
String
currentUid
=
CurrentUtil
.
getCurrentUid
(),
storeId
=
mgtGoodsSqbEditParam
.
getStoreId
();
public
ResponseDto
<
Object
>
editSpu
(
@RequestParam
(
"storeId"
)
String
storeId
,
@RequestBody
@Validated
List
<
GoblinSqbPerfGoodsVo
>
items
)
{
String
currentUid
=
CurrentUtil
.
getCurrentUid
();
if
(!
goblinRedisUtils
.
hasStoreId
(
currentUid
,
storeId
))
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"149002"
));
GoblinGoodsInfoVo
mgtGoodsInfoVo
;
if
(
StringUtils
.
isBlank
(
mgtGoodsSqbEditParam
.
getSpuId
())
||
null
==
(
mgtGoodsInfoVo
=
goblinRedisUtils
.
getGoodsInfoVo
(
mgtGoodsSqbEditParam
.
getSpuId
()))
||
!
mgtGoodsInfoVo
.
getStoreId
().
equals
(
storeId
)
||
!
mgtGoodsInfoVo
.
getDelFlg
().
equals
(
"0"
))
{
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"149010"
));
}
if
(
mgtGoodsInfoVo
.
getSpuType
()
!=
2
)
{
return
ResponseDto
.
failure
(
ErrorCode
.
HTTP_PARAM_ERROR
.
getCode
(),
"无效操作,该商品非券类商品"
);
}
if
(!
mgtGoodsInfoVo
.
getName
().
equals
(
mgtGoodsSqbEditParam
.
getName
())
&&
goblinMongoUtils
.
countMgtGoodsInfoVo
(
mgtGoodsSqbEditParam
.
getName
())
>
0
)
{
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"149007"
));
}
if
(!
mgtGoodsSqbEditParam
.
getShelvesHandle
().
equals
(
mgtGoodsInfoVo
.
getShelvesHandle
())
&&
mgtGoodsInfoVo
.
getShelvesStatus
().
equals
(
"3"
))
{
return
ResponseDto
.
failure
(
ErrorCode
.
HTTP_PARAM_ERROR
.
getCode
(),
"上架处理方式只限商品未上架时变更"
);
}
String
cateFid
=
mgtGoodsSqbEditParam
.
getCateFid
(),
cateSid
=
mgtGoodsSqbEditParam
.
getCateSid
(),
cateTid
=
mgtGoodsSqbEditParam
.
getCateTid
();
List
<
GoblinSelfGoodsCategoryVo
>
selfGoodsCategoryVos
=
goblinStoreMgtExtraService
.
listCategoryVo
();
if
(
selfGoodsCategoryVos
.
stream
().
noneMatch
(
r
->
r
.
getCateId
().
equals
(
cateFid
)
&&
r
.
getGrade
().
equals
(
"1"
)))
{
return
ResponseDto
.
failure
(
ErrorCode
.
HTTP_PARAM_ERROR
.
getCode
(),
"商品一级分类无效"
);
}
if
(
StringUtils
.
isNotBlank
(
cateSid
)
&&
selfGoodsCategoryVos
.
stream
().
noneMatch
(
r
->
r
.
getCateId
().
equals
(
cateSid
)
&&
r
.
getGrade
().
equals
(
"2"
)))
{
return
ResponseDto
.
failure
(
ErrorCode
.
HTTP_PARAM_ERROR
.
getCode
(),
"商品二级分类无效"
);
}
if
(
StringUtils
.
isNotBlank
(
cateTid
)
&&
selfGoodsCategoryVos
.
stream
().
noneMatch
(
r
->
r
.
getCateId
().
equals
(
cateTid
)
&&
r
.
getGrade
().
equals
(
"3"
)))
{
return
ResponseDto
.
failure
(
ErrorCode
.
HTTP_PARAM_ERROR
.
getCode
(),
"商品三级分类无效"
);
}
if
(
log
.
isDebugEnabled
())
{
log
.
debug
(
"收钱吧商品管理:商品编辑:SPU编辑:[GoblinStoreMgtGoodsSqbAddParam={}]"
,
JsonUtils
.
toJson
(
mgtGoodsSqbEditParam
));
log
.
debug
(
"收钱吧商品管理:商品编辑:SPU编辑:[GoblinStoreMgtGoodsSqbAddParam={}]"
,
JsonUtils
.
toJson
(
items
));
}
boolean
resultFlg
=
goblinstoreMgtSqbGoodsService
.
sqbGoodsEditSpu
(
currentUid
,
mgtGoodsSqbEditParam
,
mgtGoodsInfoVo
);
return
resultFlg
?
ResponseDto
.
success
()
:
ResponseDto
.
failure
();
}
@ApiOperationSupport
(
order
=
3
)
@ApiOperation
(
value
=
"商品编辑:SKU编辑-收钱吧商品"
,
notes
=
"只修改单品信息,不包含商品信息"
)
@PostMapping
(
"edit_sku"
)
public
ResponseDto
<
Object
>
editSku
(
@Valid
@RequestBody
GoblinStoreMgtGoodsSqbEditSkuParam
mgtGoodsSqbEditSkuParam
)
{
String
currentUid
=
CurrentUtil
.
getCurrentUid
(),
storeId
=
mgtGoodsSqbEditSkuParam
.
getStoreId
();
if
(!
goblinRedisUtils
.
hasStoreId
(
currentUid
,
storeId
))
{
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"149002"
));
}
String
paramSkuId
=
mgtGoodsSqbEditSkuParam
.
getSkuId
();
GoblinGoodsSkuInfoVo
mgtGoodsSkuInfoVo
;
if
(
StringUtils
.
isBlank
(
paramSkuId
)
||
null
==
(
mgtGoodsSkuInfoVo
=
goblinRedisUtils
.
getGoodsSkuInfoVo
(
paramSkuId
))
||
!
mgtGoodsSkuInfoVo
.
getStoreId
().
equals
(
storeId
)
||
!
mgtGoodsSkuInfoVo
.
getDelFlg
().
equals
(
"0"
))
{
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"149011"
));
}
if
(
mgtGoodsSkuInfoVo
.
getSkuType
()
!=
2
)
{
return
ResponseDto
.
failure
(
ErrorCode
.
HTTP_PARAM_ERROR
.
getCode
(),
"无效操作,该商品非券类商品"
);
}
if
(
log
.
isDebugEnabled
())
{
log
.
debug
(
"收钱吧商品管理:商品编辑:SKU编辑:[GoblinStoreMgtGoodsSqbEditSkuParam={}]"
,
JsonUtils
.
toJson
(
mgtGoodsSqbEditSkuParam
));
}
GoblinGoodsInfoVo
goodsInfoVo
=
goblinRedisUtils
.
getGoodsInfoVo
(
mgtGoodsSkuInfoVo
.
getSpuId
());
mgtGoodsSqbEditSkuParam
.
setStock
(
mgtGoodsSkuInfoVo
.
getStock
());
mgtGoodsSqbEditSkuParam
.
setSkuStock
(
mgtGoodsSkuInfoVo
.
getSkuStock
());
Integer
operStock
=
mgtGoodsSqbEditSkuParam
.
getOperStock
();
if
(
null
!=
operStock
&&
operStock
!=
0
)
{
int
operStockVal
=
Math
.
abs
(
operStock
);
Integer
stock
=
mgtGoodsSkuInfoVo
.
getStock
();
Integer
skuStock
=
mgtGoodsSkuInfoVo
.
getSkuStock
();
int
surplusStock
=
goblinRedisUtils
.
getSkuStock
(
null
,
paramSkuId
);
if
(
operStock
<
0
&&
surplusStock
>
0
&&
surplusStock
>=
operStockVal
)
{
if
(
goblinRedisUtils
.
decrSkuStock
(
null
,
paramSkuId
,
operStockVal
)
<
0
)
{
goblinRedisUtils
.
incrSkuStock
(
null
,
paramSkuId
,
operStockVal
);
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"149012"
));
}
else
{
mgtGoodsSqbEditSkuParam
.
setSkuStock
(
skuStock
-
operStockVal
);
mgtGoodsSqbEditSkuParam
.
setStock
(
stock
-
operStockVal
);
}
}
else
if
(
operStock
>
0
)
{
goblinRedisUtils
.
incrSkuStock
(
null
,
paramSkuId
,
operStockVal
);
mgtGoodsSqbEditSkuParam
.
setSkuStock
(
skuStock
+
operStockVal
);
mgtGoodsSqbEditSkuParam
.
setStock
(
stock
+
operStockVal
);
}
else
{
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"149012"
));
}
for
(
GoblinSqbPerfGoodsVo
item
:
items
)
{
GoblinGoodsInfoVo
mgtGoodsInfoVo
=
goblinRedisUtils
.
getGoodsInfoVo
(
item
.
getSpuId
());
goblinstoreMgtSqbGoodsService
.
sqbGoodsEditSpu
(
currentUid
,
item
,
mgtGoodsInfoVo
);
}
if
(
goblinstoreMgtSqbGoodsService
.
sqbGoodsEditSku
(
currentUid
,
mgtGoodsSqbEditSkuParam
,
goodsInfoVo
))
{
mgtGoodsSkuInfoVo
=
goblinRedisUtils
.
getGoodsSkuInfoVo
(
paramSkuId
);
mgtGoodsSkuInfoVo
.
setSurplusStock
(
goblinRedisUtils
.
getSkuStock
(
null
,
paramSkuId
));
return
ResponseDto
.
success
(
mgtGoodsSkuInfoVo
);
}
else
{
if
(
null
!=
operStock
&&
operStock
!=
0
)
{
int
operStockVal
=
Math
.
abs
(
operStock
);
if
(
operStock
>
0
)
{
goblinRedisUtils
.
decrSkuStock
(
null
,
paramSkuId
,
operStockVal
);
}
else
{
goblinRedisUtils
.
incrSkuStock
(
null
,
paramSkuId
,
operStockVal
);
}
}
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"149013"
));
}
return
ResponseDto
.
success
();
}
}
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/service/impl/GoblinSqbGoodsServiceImpl.java
deleted
100644 → 0
View file @
3ad34a00
package
com
.
liquidnet
.
service
.
goblin
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.goblin.dto.GoblinGoodsSpecDto
;
import
com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtGoodsAddParam
;
import
com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtGoodsEditSkuParam
;
import
com.liquidnet.service.goblin.dto.vo.GoblinGoodsInfoVo
;
import
com.liquidnet.service.goblin.dto.vo.GoblinGoodsSkuInfoVo
;
import
com.liquidnet.service.goblin.dto.vo.GoblinSqbPerfGoodsVo
;
import
com.liquidnet.service.goblin.config.properties.ShouqianbaProperties
;
import
com.liquidnet.service.goblin.entity.GoblinSqbGoodsExt
;
import
com.liquidnet.service.goblin.entity.GoblinSqbPerformanceGoods
;
import
com.liquidnet.service.goblin.mapper.GoblinSqbGoodsExtMapper
;
import
com.liquidnet.service.goblin.mapper.GoblinSqbPerformanceGoodsMapper
;
import
com.liquidnet.service.goblin.mapper.GoblinSqbPerformanceConfigMapper
;
import
com.liquidnet.service.goblin.entity.GoblinSqbPerformanceConfig
;
import
com.liquidnet.service.goblin.param.shouqianba.request.CommonRequest
;
import
com.liquidnet.service.goblin.param.shouqianba.request.MallListQueryRequest
;
import
com.liquidnet.service.goblin.param.shouqianba.request.MallProductsQueryRequest
;
import
com.liquidnet.service.goblin.param.shouqianba.response.data.MallListQueryData
;
import
com.liquidnet.service.goblin.param.shouqianba.response.data.MallProductsQueryData
;
import
com.liquidnet.service.goblin.service.IGoblinShouQianBaService
;
import
com.liquidnet.service.goblin.service.IGoblinSqbGoodsService
;
import
com.liquidnet.service.goblin.util.GoblinMongoUtils
;
import
com.liquidnet.service.goblin.dto.vo.GoblinSelfMarketingVo
;
import
com.liquidnet.service.goblin.util.GoblinRedisUtils
;
import
com.liquidnet.service.goblin.util.GoblinSqbRedisUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
com.liquidnet.commons.lang.util.DateUtil
;
import
com.liquidnet.service.goblin.dto.vo.GoblinGoodsSpecVo
;
import
com.liquidnet.service.goblin.service.manage.IGoblinstoreMgtGoodsService
;
import
com.liquidnet.service.goblin.dto.manage.*
;
import
com.liquidnet.service.goblin.util.ObjectUtil
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
* 收钱吧商品同步服务实现
*/
@Slf4j
@Service
public
class
GoblinSqbGoodsServiceImpl
implements
IGoblinSqbGoodsService
{
@Autowired
private
ShouqianbaProperties
shouqianbaProperties
;
@Autowired
private
GoblinSqbGoodsExtMapper
goblinSqbGoodsExtMapper
;
@Autowired
private
GoblinSqbPerformanceGoodsMapper
goblinSqbPerformanceGoodsMapper
;
@Autowired
private
IGoblinShouQianBaService
goblinShouQianBaService
;
@Autowired
private
GoblinSqbRedisUtils
goblinSqbRedisUtils
;
@Autowired
private
GoblinRedisUtils
goblinRedisUtils
;
@Autowired
private
GoblinSqbPerformanceConfigMapper
goblinSqbPerformanceConfigMapper
;
@Autowired
private
GoblinMongoUtils
goblinMongoUtils
;
@Autowired
private
IGoblinstoreMgtGoodsService
goblinstoreMgtGoodsService
;
@Override
public
ResponseDto
<
List
<
GoblinSqbPerfGoodsVo
>>
getProductList
()
{
try
{
List
<
GoblinSqbPerfGoodsVo
>
result
=
new
ArrayList
<>();
List
<
MallListQueryData
>
mallList
=
fetchAllMalls
();
if
(
CollectionUtils
.
isEmpty
(
mallList
))
{
return
ResponseDto
.
success
(
new
ArrayList
<>());
}
// 获取本地已同步的商品 SPU 映射,用于标记同步状态
List
<
String
>
mallSns
=
mallList
.
stream
().
map
(
MallListQueryData:
:
getMallSn
).
distinct
()
.
collect
(
Collectors
.
toList
());
List
<
GoblinSqbGoodsExt
>
syncedGoods
=
goblinSqbGoodsExtMapper
.
selectList
(
new
LambdaQueryWrapper
<
GoblinSqbGoodsExt
>()
.
in
(
GoblinSqbGoodsExt:
:
getMallSn
,
mallSns
)
.
eq
(
GoblinSqbGoodsExt:
:
getDelFlg
,
"0"
));
Set
<
String
>
syncedSqbSpuKeySet
=
syncedGoods
.
stream
()
.
map
(
g
->
g
.
getMallSn
()
+
":"
+
g
.
getSqbSpuId
())
.
collect
(
Collectors
.
toSet
());
for
(
MallListQueryData
mall
:
mallList
)
{
List
<
MallProductsQueryData
>
products
=
fetchAllProducts
(
mall
);
if
(!
CollectionUtils
.
isEmpty
(
products
))
{
for
(
MallProductsQueryData
product
:
products
)
{
GoblinSqbPerfGoodsVo
goblinSqbPerfGoodsVo
=
getGoblinSqbPerfGoodsVo
(
mall
,
product
);
goblinSqbPerfGoodsVo
.
setSynced
(
syncedSqbSpuKeySet
.
contains
(
mall
.
getMallSn
()
+
":"
+
product
.
getSpuId
()));
result
.
add
(
goblinSqbPerfGoodsVo
);
}
}
}
return
ResponseDto
.
success
(
result
);
}
catch
(
Exception
e
)
{
log
.
error
(
"search mall products error"
,
e
);
return
ResponseDto
.
failure
(
"查询收钱吧商品失败: "
+
e
.
getMessage
());
}
}
private
static
GoblinSqbPerfGoodsVo
getGoblinSqbPerfGoodsVo
(
MallListQueryData
mall
,
MallProductsQueryData
product
)
{
GoblinSqbPerfGoodsVo
goblinSqbPerfGoodsVo
=
new
GoblinSqbPerfGoodsVo
();
goblinSqbPerfGoodsVo
.
setMallSn
(
mall
.
getMallSn
());
goblinSqbPerfGoodsVo
.
setMallName
(
mall
.
getMallName
());
goblinSqbPerfGoodsVo
.
setSignature
(
mall
.
getSignature
());
goblinSqbPerfGoodsVo
.
setSpuId
(
product
.
getSpuId
());
goblinSqbPerfGoodsVo
.
setTitle
(
product
.
getTitle
());
goblinSqbPerfGoodsVo
.
setProductIntroduction
(
product
.
getProductIntroduction
());
goblinSqbPerfGoodsVo
.
setConverImages
(
product
.
getConverImages
());
goblinSqbPerfGoodsVo
.
setSkuResults
(
product
.
getSkuResults
());
return
goblinSqbPerfGoodsVo
;
}
/**
* 循环获取所有商城列表(支持游标分页)
*/
private
List
<
MallListQueryData
>
fetchAllMalls
()
{
List
<
MallListQueryData
>
allMalls
=
new
ArrayList
<>();
int
count
=
100
;
String
lastMallSn
=
null
;
while
(
true
)
{
MallListQueryRequest
mallRequest
=
new
MallListQueryRequest
();
mallRequest
.
setAppid
(
shouqianbaProperties
.
getAppId
());
MallListQueryRequest
.
Filter
filter
=
new
MallListQueryRequest
.
Filter
();
filter
.
setSeller
(
buildSeller
());
mallRequest
.
setFilter
(
filter
);
MallListQueryRequest
.
Cursor
cursor
=
new
MallListQueryRequest
.
Cursor
();
cursor
.
setCursorField
(
"id"
);
cursor
.
setCount
(
count
);
// 最大支持1000
cursor
.
setEndCursor
(
lastMallSn
);
mallRequest
.
setCursor
(
cursor
);
MallListQueryRequest
.
Sort
sort
=
new
MallListQueryRequest
.
Sort
();
sort
.
setSortField
(
"id"
);
sort
.
setSort
(
"DESC"
);
mallRequest
.
setSort
(
sort
);
List
<
MallListQueryData
>
batch
=
goblinShouQianBaService
.
queryMallList
(
mallRequest
);
if
(
CollectionUtils
.
isEmpty
(
batch
))
{
break
;
}
allMalls
.
addAll
(
batch
);
lastMallSn
=
batch
.
get
(
batch
.
size
()
-
1
).
getMallSn
();
// 如果拉取数量小于 count,说明是最后一页
if
(
batch
.
size
()
!=
count
)
{
break
;
}
}
return
allMalls
;
}
/**
* 循环获取某个商城下的所有商品列表(支持搜索和游标分页)
*/
private
List
<
MallProductsQueryData
>
fetchAllProducts
(
MallListQueryData
mall
)
{
MallProductsQueryRequest
productRequest
=
new
MallProductsQueryRequest
();
productRequest
.
setAppid
(
shouqianbaProperties
.
getAppId
());
productRequest
.
setSeller
(
buildSeller
());
CommonRequest
.
Mall
mallId
=
new
CommonRequest
.
Mall
();
mallId
.
setMallSn
(
mall
.
getMallSn
());
mallId
.
setSignature
(
mall
.
getSignature
());
productRequest
.
setMallID
(
mallId
);
return
goblinShouQianBaService
.
queryMallProducts
(
productRequest
);
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ResponseDto
<
String
>
addGoods
(
String
storeId
,
List
<
GoblinSqbPerfGoodsVo
>
items
)
{
if
(
CollectionUtils
.
isEmpty
(
items
))
return
ResponseDto
.
failure
(
"新增商品列表不能为空"
);
int
newCount
=
0
,
existCount
=
0
,
failCount
=
0
;
String
currentUid
=
"system"
;
for
(
GoblinSqbPerfGoodsVo
item
:
items
)
{
String
sqbSpuid
=
item
.
getSpuId
(),
mallSn
=
item
.
getMallSn
(),
mallSignature
=
item
.
getSignature
();
if
(
StringUtils
.
isEmpty
(
sqbSpuid
))
{
failCount
++;
continue
;
}
try
{
LambdaQueryWrapper
<
GoblinSqbGoodsExt
>
queryWrapper
=
new
LambdaQueryWrapper
<>();
queryWrapper
.
eq
(
GoblinSqbGoodsExt:
:
getSqbSpuId
,
sqbSpuid
)
.
eq
(
GoblinSqbGoodsExt:
:
getMallSn
,
mallSn
)
.
eq
(
GoblinSqbGoodsExt:
:
getDelFlg
,
"0"
);
if
(
goblinSqbGoodsExtMapper
.
selectCount
(
queryWrapper
)
>
0
)
{
existCount
++;
continue
;
}
// 1. 组装 AddParam
GoblinStoreMgtGoodsAddParam
addParam
=
buildMgtGoodsAddParam
(
storeId
,
item
);
// 2. 初始化 VOs
LocalDateTime
now
=
LocalDateTime
.
now
();
GoblinGoodsInfoVo
goodsInfoVo
=
addParam
.
initGoodsInfoVo
();
goodsInfoVo
.
setCreatedBy
(
currentUid
);
goodsInfoVo
.
setCreatedAt
(
now
);
goodsInfoVo
.
setSpuType
(
33
);
goodsInfoVo
.
setVirtualFlg
(
"1"
);
goodsInfoVo
.
setSpuNo
(
goodsInfoVo
.
getSpuId
());
ArrayList
<
GoblinGoodsSpecVo
>
goodsSpecVoList
=
ObjectUtil
.
getGoblinGoodsSpecVoArrayList
();
List
<
GoblinGoodsSkuInfoVo
>
goodsSkuInfoVoList
=
ObjectUtil
.
getGoblinGoodsSkuInfoVoArrayList
();
List
<
GoblinSqbGoodsExt
>
goblinSqbGoodsExtsList
=
ObjectUtil
.
getGoblinSqbGoodsExtArrayList
();
addParam
.
initGoodsSkuInfoVo
(
goodsInfoVo
,
goodsSkuInfoVoList
,
goodsSpecVoList
);
// 3. 建立并保存映射关系
for
(
GoblinGoodsSkuInfoVo
skuVo
:
goodsSkuInfoVoList
)
{
skuVo
.
setSkuType
(
33
);
skuVo
.
setVirtualFlg
(
"1"
);
skuVo
.
setCreatedBy
(
currentUid
);
skuVo
.
setCreatedAt
(
now
);
// 使用 skuNo 暂存的 sqbSkuId 建立映射
String
sqbSkuId
=
skuVo
.
getSkuNo
();
goblinSqbGoodsExtsList
.
add
(
buildExt
(
goodsInfoVo
.
getSpuId
(),
skuVo
.
getSkuId
(),
mallSn
,
mallSignature
,
sqbSpuid
,
sqbSkuId
,
now
));
}
// 4. 调用管理端 Service 加
goblinstoreMgtGoodsService
.
goodsAdd
(
goodsInfoVo
,
goodsSkuInfoVoList
);
// 5. 建立映射
for
(
GoblinSqbGoodsExt
goblinSqbGoodsExt
:
goblinSqbGoodsExtsList
)
{
goblinSqbGoodsExtMapper
.
insert
(
goblinSqbGoodsExt
);
}
newCount
++;
}
catch
(
Exception
e
)
{
log
.
error
(
"[收钱吧新增商品同步] 异常, sqbProductId={}"
,
sqbSpuid
,
e
);
failCount
++;
}
}
return
ResponseDto
.
success
(
String
.
format
(
"新增完成:同步 %d, 已存在 %d, 失败 %d"
,
newCount
,
existCount
,
failCount
));
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ResponseDto
<
String
>
updateGoods
(
String
storeId
,
List
<
GoblinSqbPerfGoodsVo
>
items
)
{
if
(
CollectionUtils
.
isEmpty
(
items
))
return
ResponseDto
.
failure
(
"更新商品列表不能为空"
);
int
updateCount
=
0
,
notFoundCount
=
0
,
failCount
=
0
;
String
currentUid
=
"system"
;
for
(
GoblinSqbPerfGoodsVo
item
:
items
)
{
String
sqbSpuId
=
item
.
getSpuId
(),
mallSn
=
item
.
getMallSn
();
try
{
LambdaQueryWrapper
<
GoblinSqbGoodsExt
>
queryWrapper
=
new
LambdaQueryWrapper
<>();
queryWrapper
.
eq
(
GoblinSqbGoodsExt:
:
getSqbSpuId
,
sqbSpuId
)
.
eq
(
GoblinSqbGoodsExt:
:
getMallSn
,
mallSn
)
.
eq
(
GoblinSqbGoodsExt:
:
getDelFlg
,
"0"
);
List
<
GoblinSqbGoodsExt
>
existingExts
=
goblinSqbGoodsExtMapper
.
selectList
(
queryWrapper
);
if
(
CollectionUtils
.
isEmpty
(
existingExts
))
{
notFoundCount
++;
continue
;
}
String
spuId
=
existingExts
.
get
(
0
).
getSpuId
();
GoblinGoodsInfoVo
mgtGoodsInfoVo
=
goblinRedisUtils
.
getGoodsInfoVo
(
spuId
);
if
(
null
==
mgtGoodsInfoVo
)
{
notFoundCount
++;
continue
;
}
// 2. 编辑 SPU
// 注意:这里需要根据 MallProductsQueryData 构建参数,建议增加一个重载方法或做转换
GoblinSqbPerfGoodsVo
perfGoodsVo
=
new
GoblinSqbPerfGoodsVo
();
perfGoodsVo
.
setTitle
(
item
.
getTitle
());
perfGoodsVo
.
setProductIntroduction
(
item
.
getProductIntroduction
());
perfGoodsVo
.
setConverImages
(
item
.
getConverImages
());
perfGoodsVo
.
setSkuResults
(
item
.
getSkuResults
());
GoblinStoreMgtGoodsAddParam
addParam
=
buildMgtGoodsAddParam
(
storeId
,
perfGoodsVo
);
addParam
.
setSpuId
(
spuId
);
addParam
.
setSpuNo
(
spuId
);
goblinstoreMgtGoodsService
.
goodsEditSpu
(
currentUid
,
addParam
,
mgtGoodsInfoVo
);
// 3. 编辑 SKU
Map
<
String
,
String
>
sqbToSysSkuMap
=
new
HashMap
<>();
for
(
GoblinSqbGoodsExt
ext
:
existingExts
)
{
sqbToSysSkuMap
.
put
(
ext
.
getSqbSkuId
()
!=
null
?
ext
.
getSqbSkuId
()
:
"PLACEHOLDER"
,
ext
.
getSkuId
());
}
List
<
MallProductsQueryData
.
Sku
>
sqbSkus
=
item
.
getSkuResults
();
Set
<
String
>
processedSqbSkuIds
=
new
HashSet
<>();
if
(
CollectionUtils
.
isEmpty
(
sqbSkus
))
{
String
skuId
=
sqbToSysSkuMap
.
get
(
"PLACEHOLDER"
);
if
(
skuId
!=
null
)
{
processSkuUpdate
(
currentUid
,
storeId
,
skuId
,
item
,
null
);
processedSqbSkuIds
.
add
(
"PLACEHOLDER"
);
}
}
else
{
for
(
MallProductsQueryData
.
Sku
sqbSku
:
sqbSkus
)
{
String
skuId
=
sqbToSysSkuMap
.
get
(
sqbSku
.
getSkuId
());
if
(
skuId
!=
null
)
{
// 已存在,执行更新
processSkuUpdate
(
currentUid
,
storeId
,
skuId
,
item
,
sqbSku
);
processedSqbSkuIds
.
add
(
sqbSku
.
getSkuId
());
}
else
{
// 新增 SKU
List
<
String
>
oldSkuIdList
=
new
ArrayList
<>(
mgtGoodsInfoVo
.
getSkuIdList
());
processSkuAddition
(
currentUid
,
storeId
,
mgtGoodsInfoVo
,
item
,
sqbSku
);
List
<
String
>
newSkuIdList
=
mgtGoodsInfoVo
.
getSkuIdList
();
// 找出新增的 skuId
String
newSkuId
=
newSkuIdList
.
stream
()
.
filter
(
id
->
!
oldSkuIdList
.
contains
(
id
))
.
findFirst
().
orElse
(
null
);
if
(
newSkuId
!=
null
)
{
GoblinSqbGoodsExt
newExt
=
new
GoblinSqbGoodsExt
();
newExt
.
setMallSn
(
mallSn
);
newExt
.
setSqbSpuId
(
sqbSpuId
);
newExt
.
setSqbSkuId
(
sqbSku
.
getSkuId
());
newExt
.
setSpuId
(
spuId
);
newExt
.
setSkuId
(
newSkuId
);
newExt
.
setDelFlg
(
"0"
);
newExt
.
setCreatedAt
(
LocalDateTime
.
now
());
goblinSqbGoodsExtMapper
.
insert
(
newExt
);
processedSqbSkuIds
.
add
(
sqbSku
.
getSkuId
());
}
}
}
}
// 4. 处理被删除的 SKU
LocalDateTime
now
=
LocalDateTime
.
now
();
for
(
GoblinSqbGoodsExt
ext
:
existingExts
)
{
String
sqbSkuId
=
ext
.
getSqbSkuId
()
!=
null
?
ext
.
getSqbSkuId
()
:
"PLACEHOLDER"
;
if
(!
processedSqbSkuIds
.
contains
(
sqbSkuId
))
{
processSkuDeletion
(
currentUid
,
ext
,
mgtGoodsInfoVo
);
// 假删除
ext
.
setDelFlg
(
"1"
);
ext
.
setDeletedBy
(
currentUid
);
ext
.
setDeletedAt
(
now
);
ext
.
setUpdatedAt
(
now
);
goblinSqbGoodsExtMapper
.
updateById
(
ext
);
}
}
updateCount
++;
}
catch
(
Exception
e
)
{
log
.
error
(
"[收钱吧更新商品同步] 异常, sqbSpuId={}"
,
item
.
getSpuId
(),
e
);
failCount
++;
}
}
return
ResponseDto
.
success
(
String
.
format
(
"更新完成:更新 %d, 未找到 %d, 失败 %d"
,
updateCount
,
notFoundCount
,
failCount
));
}
private
void
processSkuUpdate
(
String
currentUid
,
String
storeId
,
String
skuId
,
GoblinSqbPerfGoodsVo
productsData
,
MallProductsQueryData
.
Sku
sqbSku
)
{
GoblinGoodsSkuInfoVo
mgtGoodsSkuInfoVo
=
goblinRedisUtils
.
getGoodsSkuInfoVo
(
skuId
);
if
(
null
==
mgtGoodsSkuInfoVo
)
return
;
GoblinGoodsInfoVo
mgtGoodsInfoVo
=
goblinRedisUtils
.
getGoodsInfoVo
(
mgtGoodsSkuInfoVo
.
getSpuId
());
if
(
null
==
mgtGoodsInfoVo
)
return
;
GoblinStoreMgtGoodsEditSkuParam
editSkuParam
=
new
GoblinStoreMgtGoodsEditSkuParam
();
editSkuParam
.
setStoreId
(
storeId
);
editSkuParam
.
setSpuId
(
mgtGoodsSkuInfoVo
.
getSpuId
());
editSkuParam
.
setSkuId
(
skuId
);
editSkuParam
.
setSkuPic
(
mgtGoodsSkuInfoVo
.
getSkuPic
());
if
(!
CollectionUtils
.
isEmpty
(
productsData
.
getConverImages
()))
{
editSkuParam
.
setSkuPic
(
productsData
.
getConverImages
().
get
(
0
));
}
if
(
sqbSku
!=
null
)
{
BigDecimal
price
=
BigDecimal
.
valueOf
(
sqbSku
.
getPrice
()).
divide
(
BigDecimal
.
valueOf
(
100
));
editSkuParam
.
setPrice
(
price
);
editSkuParam
.
setSellPrice
(
price
);
editSkuParam
.
setPriceMember
(
price
);
}
else
{
editSkuParam
.
setPrice
(
mgtGoodsSkuInfoVo
.
getPrice
());
editSkuParam
.
setSellPrice
(
mgtGoodsSkuInfoVo
.
getSellPrice
());
editSkuParam
.
setPriceMember
(
mgtGoodsSkuInfoVo
.
getPriceMember
());
}
editSkuParam
.
setSkuSpecList
(
mgtGoodsSkuInfoVo
.
getSkuSpecList
());
editSkuParam
.
setSkuAppear
(
"0"
);
editSkuParam
.
setBuyFactor
(
"0"
);
editSkuParam
.
setSkuValidity
(
DateUtil
.
Formatter
.
yyyyMMddHHmmss
.
format
(
mgtGoodsSkuInfoVo
.
getSkuValidity
()));
// 设置库存,用户要求不修改之前的库存
editSkuParam
.
setStock
(
mgtGoodsSkuInfoVo
.
getStock
());
editSkuParam
.
setSkuStock
(
mgtGoodsSkuInfoVo
.
getSkuStock
());
// 库存增量逻辑
/*
* int newSqbTotal = (sqbSku != null && sqbSku.getQuantity() != null) ?
* sqbSku.getQuantity().intValue() : 0;
* int oldTotal = mgtGoodsSkuInfoVo.getStock() != null ?
* mgtGoodsSkuInfoVo.getStock() : 0;
* int operStock = newSqbTotal - oldTotal;
*
* if (operStock != 0) {
* int operStockVal = Math.abs(operStock);
* int currentRedisSurplus = goblinRedisUtils.getSkuStock(null, skuId);
* if (operStock < 0) {
* if (currentRedisSurplus >= operStockVal) {
* if (goblinRedisUtils.decrSkuStock(null, skuId, operStockVal) >= 0) {
* editSkuParam.setStock(oldTotal - operStockVal);
* editSkuParam.setSkuStock(mgtGoodsSkuInfoVo.getSkuStock() - operStockVal);
* }
* } else {
* goblinRedisUtils.setSkuStock(null, skuId, newSqbTotal);
* editSkuParam.setStock(newSqbTotal);
* editSkuParam.setSkuStock(newSqbTotal);
* }
* } else {
* goblinRedisUtils.incrSkuStock(null, skuId, operStockVal);
* editSkuParam.setStock(oldTotal + operStockVal);
* editSkuParam.setSkuStock(mgtGoodsSkuInfoVo.getSkuStock() + operStockVal);
* }
* } else {
* editSkuParam.setStock(oldTotal);
* editSkuParam.setSkuStock(mgtGoodsSkuInfoVo.getSkuStock());
* }
*/
goblinstoreMgtGoodsService
.
goodsEditSku
(
currentUid
,
editSkuParam
,
mgtGoodsSkuInfoVo
,
mgtGoodsInfoVo
,
Collections
.
emptyMap
(),
Collections
.
emptyMap
());
}
private
void
processSkuAddition
(
String
currentUid
,
String
storeId
,
GoblinGoodsInfoVo
mgtGoodsInfoVo
,
GoblinSqbPerfGoodsVo
item
,
MallProductsQueryData
.
Sku
sqbSku
)
{
GoblinStoreMgtGoodsEditSkuParam
addSkuParam
=
new
GoblinStoreMgtGoodsEditSkuParam
();
addSkuParam
.
setStoreId
(
storeId
);
addSkuParam
.
setSpuId
(
mgtGoodsInfoVo
.
getSpuId
());
addSkuParam
.
setSkuPic
(
CollectionUtils
.
isEmpty
(
item
.
getConverImages
())
?
""
:
item
.
getConverImages
().
get
(
0
));
// 规格处理:收钱吧如果没有详细规格,使用默认规格
List
<
GoblinGoodsSpecDto
>
specList
=
new
ArrayList
<>();
GoblinGoodsSpecDto
defaultSpec
=
new
GoblinGoodsSpecDto
();
defaultSpec
.
setSpecName
(
"默认"
);
defaultSpec
.
setSpecVname
(
StringUtils
.
isNotBlank
(
sqbSku
.
getSkuName
())
?
sqbSku
.
getSkuName
()
:
"默认"
);
specList
.
add
(
defaultSpec
);
addSkuParam
.
setSkuSpecList
(
specList
);
BigDecimal
price
=
BigDecimal
.
valueOf
(
sqbSku
.
getPrice
()).
divide
(
BigDecimal
.
valueOf
(
100
));
addSkuParam
.
setPrice
(
price
);
addSkuParam
.
setSellPrice
(
price
);
addSkuParam
.
setPriceMember
(
price
);
addSkuParam
.
setStock
(
sqbSku
.
getQuantity
()
!=
null
?
sqbSku
.
getQuantity
().
intValue
()
:
0
);
addSkuParam
.
setSkuStock
(
addSkuParam
.
getStock
());
addSkuParam
.
setSkuAppear
(
"0"
);
addSkuParam
.
setBuyFactor
(
"0"
);
addSkuParam
.
setSkuValidity
(
DateUtil
.
Formatter
.
yyyyMMddHHmmss
.
format
(
LocalDateTime
.
now
().
plusYears
(
10
)));
goblinstoreMgtGoodsService
.
goodsEditSkuAdd
(
currentUid
,
addSkuParam
,
mgtGoodsInfoVo
);
}
private
void
processSkuDeletion
(
String
currentUid
,
GoblinSqbGoodsExt
ext
,
GoblinGoodsInfoVo
mgtGoodsInfoVo
)
{
GoblinGoodsSkuInfoVo
delSkuInfoVo
=
goblinRedisUtils
.
getGoodsSkuInfoVo
(
ext
.
getSkuId
());
if
(
delSkuInfoVo
!=
null
)
{
goblinstoreMgtGoodsService
.
goodsEditSkuDel
(
currentUid
,
delSkuInfoVo
,
mgtGoodsInfoVo
);
}
}
private
GoblinStoreMgtGoodsAddParam
buildMgtGoodsAddParam
(
String
storeId
,
GoblinSqbPerfGoodsVo
productsData
)
{
GoblinStoreMgtGoodsAddParam
param
=
new
GoblinStoreMgtGoodsAddParam
();
param
.
setStoreId
(
storeId
);
param
.
setName
(
productsData
.
getTitle
());
String
intro
=
productsData
.
getProductIntroduction
();
if
(
StringUtils
.
isNotBlank
(
intro
))
{
// 简单的截断处理,防止数据库过长报错,同时优先保留文本部分(如果有的话)
if
(
intro
.
length
()
>
250
)
{
intro
=
intro
.
substring
(
0
,
250
);
}
}
param
.
setIntro
(
intro
);
param
.
setImageList
(
productsData
.
getConverImages
());
param
.
setDetails
(
productsData
.
getProductIntroduction
());
param
.
setSpecMode
(
"1"
);
param
.
setShelvesHandle
(
"1"
);
param
.
setVirtualFlg
(
"1"
);
// 设置默认分类
param
.
setCateFid
(
"22199125131096"
);
param
.
setCateSid
(
"22199125143778"
);
param
.
setCateTid
(
"22199125200983"
);
List
<
GoblinStoreMgtGoodsAddSkuParam
>
skuParams
=
new
ArrayList
<>();
List
<
MallProductsQueryData
.
Sku
>
sqbSkus
=
productsData
.
getSkuResults
();
if
(!
CollectionUtils
.
isEmpty
(
sqbSkus
))
{
for
(
MallProductsQueryData
.
Sku
sqbSku
:
sqbSkus
)
{
skuParams
.
add
(
buildMgtSkuParam
(
sqbSku
,
productsData
.
getConverImages
()));
}
}
param
.
setSkuParamList
(
skuParams
);
return
param
;
}
private
GoblinStoreMgtGoodsAddSkuParam
buildMgtSkuParam
(
MallProductsQueryData
.
Sku
sqbSku
,
List
<
String
>
images
)
{
GoblinStoreMgtGoodsAddSkuParam
sku
=
new
GoblinStoreMgtGoodsAddSkuParam
();
sku
.
setSkuPic
(!
CollectionUtils
.
isEmpty
(
images
)
?
images
.
get
(
0
)
:
""
);
List
<
GoblinGoodsSpecDto
>
specList
=
new
ArrayList
<>();
GoblinGoodsSpecDto
defaultSpec
=
new
GoblinGoodsSpecDto
();
defaultSpec
.
setSpecName
(
"默认"
);
defaultSpec
.
setSpecVname
(
StringUtils
.
isNotBlank
(
sqbSku
.
getSkuName
())
?
sqbSku
.
getSkuName
()
:
"默认"
);
specList
.
add
(
defaultSpec
);
sku
.
setSkuSpecList
(
specList
);
BigDecimal
price
=
BigDecimal
.
valueOf
(
sqbSku
.
getPrice
()).
divide
(
BigDecimal
.
valueOf
(
100
));
sku
.
setPrice
(
price
);
sku
.
setSellPrice
(
price
);
sku
.
setStock
(
sqbSku
.
getQuantity
()
!=
null
?
sqbSku
.
getQuantity
().
intValue
()
:
999
);
sku
.
setSkuValidity
(
DateUtil
.
Formatter
.
yyyyMMddHHmmss
.
format
(
LocalDateTime
.
now
().
plusYears
(
1
)));
sku
.
setSkuAppear
(
"0"
);
sku
.
setBuyFactor
(
"0"
);
sku
.
setSkuNo
(
sqbSku
.
getSkuId
());
return
sku
;
}
@Override
public
ResponseDto
<
List
<
GoblinSqbPerfGoodsVo
>>
getPerfGoods
(
String
performancesId
)
{
// 1. 获取演出级全局配置
GoblinSqbPerformanceConfig
config
=
goblinSqbPerformanceConfigMapper
.
selectOne
(
new
LambdaQueryWrapper
<
GoblinSqbPerformanceConfig
>()
.
eq
(
GoblinSqbPerformanceConfig:
:
getPerformancesId
,
performancesId
));
// 2. 如果开启了自动下架,检查演出状态
if
(
config
!=
null
&&
Integer
.
valueOf
(
1
).
equals
(
config
.
getAutoOffline
()))
{
// 通过 Mongo 营销活动或者 Redis 查询演出详情判断是否结束
if
(
isPerformanceEnded
(
performancesId
))
{
log
.
info
(
"[收钱吧] 演出已结束,且开启了自动下架,返回空列表, performancesId={}"
,
performancesId
);
return
ResponseDto
.
success
(
new
ArrayList
<>());
}
}
List
<
GoblinSqbPerfGoodsVo
>
cached
=
goblinSqbRedisUtils
.
getPerfGoods
(
performancesId
);
if
(
cached
!=
null
)
return
ResponseDto
.
success
(
cached
);
try
{
LambdaQueryWrapper
<
GoblinSqbPerformanceGoods
>
query
=
new
LambdaQueryWrapper
<>();
query
.
eq
(
GoblinSqbPerformanceGoods:
:
getPerformancesId
,
performancesId
)
.
eq
(
GoblinSqbPerformanceGoods:
:
getStatus
,
1
).
orderByAsc
(
GoblinSqbPerformanceGoods:
:
getSort
);
List
<
GoblinSqbPerformanceGoods
>
relations
=
goblinSqbPerformanceGoodsMapper
.
selectList
(
query
);
if
(
CollectionUtils
.
isEmpty
(
relations
))
{
List
<
GoblinSqbPerfGoodsVo
>
empty
=
new
ArrayList
<>();
goblinSqbRedisUtils
.
setPerfGoods
(
performancesId
,
empty
);
return
ResponseDto
.
success
(
empty
);
}
List
<
GoblinSqbPerfGoodsVo
>
result
=
new
ArrayList
<>();
for
(
GoblinSqbPerformanceGoods
rel
:
relations
)
{
GoblinSqbPerfGoodsVo
vo
=
new
GoblinSqbPerfGoodsVo
();
result
.
add
(
vo
);
}
goblinSqbRedisUtils
.
setPerfGoods
(
performancesId
,
result
);
return
ResponseDto
.
success
(
result
);
}
catch
(
Exception
e
)
{
log
.
error
(
"[收钱吧] getPerfGoods 异常"
,
e
);
return
ResponseDto
.
failure
(
"查询失败"
);
}
}
private
boolean
isPerformanceEnded
(
String
performancesId
)
{
try
{
// 借鉴 GoblinMongoUtils 中的逻辑,通过关联的官方营销活动状态判断演出状态
// status: 2 表示活动结束, 7 表示停用
List
<
GoblinSelfMarketingVo
>
marketingList
=
goblinMongoUtils
.
getSelfMarketingByPerformanceId
(
performancesId
);
if
(!
CollectionUtils
.
isEmpty
(
marketingList
))
{
GoblinSelfMarketingVo
marketing
=
marketingList
.
get
(
0
);
if
(
Integer
.
valueOf
(
2
).
equals
(
marketing
.
getStatus
())
||
Integer
.
valueOf
(
7
).
equals
(
marketing
.
getStatus
()))
{
return
true
;
}
}
}
catch
(
Exception
e
)
{
log
.
error
(
"[收钱吧] 校验演出自动下架状态异常, performancesId={}"
,
performancesId
,
e
);
}
return
false
;
}
private
CommonRequest
.
Seller
buildSeller
()
{
CommonRequest
.
Seller
seller
=
new
CommonRequest
.
Seller
();
seller
.
setMerchantId
(
shouqianbaProperties
.
getMerchantId
());
seller
.
setMerchantUserId
(
shouqianbaProperties
.
getMerchantUserId
());
seller
.
setRole
(
shouqianbaProperties
.
getRole
());
return
seller
;
}
private
GoblinSqbGoodsExt
buildExt
(
String
spuId
,
String
skuId
,
String
mallSn
,
String
mallSignature
,
String
sqbSpuId
,
String
sqbSkuId
,
LocalDateTime
now
)
{
GoblinSqbGoodsExt
ext
=
new
GoblinSqbGoodsExt
();
ext
.
setSpuId
(
spuId
);
ext
.
setSkuId
(
skuId
);
ext
.
setMallSn
(
mallSn
);
ext
.
setSignature
(
mallSignature
);
ext
.
setSqbSpuId
(
sqbSpuId
);
ext
.
setSqbSkuId
(
sqbSkuId
);
ext
.
setDelFlg
(
"0"
);
ext
.
setCreatedAt
(
now
);
ext
.
setUpdatedAt
(
now
);
return
ext
;
}
}
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/service/impl/manage/GoblinStoreMgtSqbGoodsServiceImpl.java
View file @
3a8884fc
...
...
@@ -10,6 +10,7 @@ import com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtGoodsSqbAddParam;
import
com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtGoodsSqbEditSkuParam
;
import
com.liquidnet.service.goblin.dto.manage.vo.GoblinMgtCategorySpecVo
;
import
com.liquidnet.service.goblin.dto.vo.*
;
import
com.liquidnet.service.goblin.param.shouqianba.response.data.MallProductsQueryData
;
import
com.liquidnet.service.goblin.service.manage.IGoblinStoreMgtSqbGoodsService
;
import
com.liquidnet.service.goblin.util.GoblinMongoUtils
;
import
com.liquidnet.service.goblin.util.GoblinRedisUtils
;
...
...
@@ -182,164 +183,15 @@ public class GoblinStoreMgtSqbGoodsServiceImpl implements IGoblinStoreMgtSqbGood
initGoodsCategorySpecObjs
));
}
public
boolean
sqbGoodsEditSpu
(
String
uid
,
GoblinS
toreMgtGoodsSqbAddParam
mgtGoodsAddParam
,
public
boolean
sqbGoodsEditSpu
(
String
uid
,
GoblinS
qbPerfGoodsVo
mgtGoodsAddParam
,
GoblinGoodsInfoVo
mgtGoodsInfoVo
)
{
String
spuId
=
mgtGoodsAddParam
.
getSpuId
();
GoblinStoreMgtGoodsSqbAddParam
initParam
=
new
GoblinStoreMgtGoodsSqbAddParam
();
GoblinGoodsInfoVo
updateSpuInfoVo
=
mgtGoodsAddParam
.
initEditGoodsInfoVo
();
boolean
updateTagFlg
=
false
,
updateExtagFlg
=
false
,
updateArtagFlg
=
false
;
List
<
GoblinGoodsTagVo
>
befTagVoList
=
mgtGoodsInfoVo
.
getTagVoList
();
boolean
befTagIsEmptyFlg
=
CollectionUtils
.
isEmpty
(
befTagVoList
);
List
<
GoblinGoodsExtagVo
>
befExtagVoList
=
mgtGoodsInfoVo
.
getExtagVoList
();
boolean
befExtagIsEmptyFlg
=
CollectionUtils
.
isEmpty
(
befExtagVoList
);
List
<
GoblinGoodsExtagVo
>
befArtagVoList
=
mgtGoodsInfoVo
.
getArtagVoList
();
boolean
befArtagIsEmptyFlg
=
CollectionUtils
.
isEmpty
(
befArtagVoList
);
boolean
paramTagIsEmptyFlg
,
paramExtagIsEmptyFlg
,
paramArtagIsEmptyFlg
;
List
<
GoblinGoodsTagVo
>
paramTagVoList
=
ObjectUtil
.
getGoblinGoodsTagVoArrayList
();
List
<
GoblinGoodsExtagVo
>
paramExtagVoList
=
ObjectUtil
.
getGoblinGoodsExtagVoArrayList
();
List
<
GoblinGoodsExtagVo
>
paramArtagVoList
=
ObjectUtil
.
getGoblinGoodsExtagVoArrayList
();
{
// 标签处理
List
<
String
>
goodsTagIdList
=
mgtGoodsAddParam
.
getTagList
(),
goodsExtagIdList
=
mgtGoodsAddParam
.
getExtagList
(),
goodsArtagIdList
=
mgtGoodsAddParam
.
getArtagList
();
if
(!
CollectionUtils
.
isEmpty
(
goodsTagIdList
))
{
List
<
GoblinSelfTagVo
>
selfGoodsTagVos
=
goblinRedisUtils
.
getSelfTagVos
();
for
(
int
i
=
0
;
i
<
goodsTagIdList
.
size
();
i
++)
for
(
GoblinSelfTagVo
r
:
selfGoodsTagVos
)
if
(
r
.
getTagId
().
equals
(
goodsTagIdList
.
get
(
i
))
&&
r
.
getTagBelong
().
equals
(
"0"
))
{
paramTagVoList
.
add
(
GoblinGoodsTagVo
.
getNew
().
copy
(
r
).
setSort
(
i
));
break
;
}
}
List
<
GoblinSelfTagVo
>
selfExtagVos
=
null
;
if
(!
CollectionUtils
.
isEmpty
(
goodsExtagIdList
))
{
selfExtagVos
=
goblinRedisUtils
.
getSelfExtagVos
();
for
(
int
i
=
0
;
i
<
goodsExtagIdList
.
size
();
i
++)
for
(
GoblinSelfTagVo
r
:
selfExtagVos
)
if
(
r
.
getTagId
().
equals
(
goodsExtagIdList
.
get
(
i
))
&&
r
.
getTagBelong
().
equals
(
"1"
)
&&
!
r
.
getTagType
().
equals
(
"5"
))
{
paramExtagVoList
.
add
(
GoblinGoodsExtagVo
.
getNew
().
copy
(
r
).
setSort
(
i
));
break
;
}
}
if
(!
CollectionUtils
.
isEmpty
(
goodsArtagIdList
))
{
selfExtagVos
=
CollectionUtils
.
isEmpty
(
selfExtagVos
)
?
goblinRedisUtils
.
getSelfExtagVos
()
:
selfExtagVos
;
for
(
int
i
=
0
;
i
<
goodsArtagIdList
.
size
();
i
++)
for
(
GoblinSelfTagVo
r
:
selfExtagVos
)
if
(
r
.
getTagId
().
equals
(
goodsArtagIdList
.
get
(
i
))
&&
r
.
getTagBelong
().
equals
(
"1"
))
{
paramArtagVoList
.
add
(
GoblinGoodsExtagVo
.
getNew
().
copy
(
r
).
setSort
(
i
));
break
;
}
}
paramTagIsEmptyFlg
=
CollectionUtils
.
isEmpty
(
paramTagVoList
);
paramExtagIsEmptyFlg
=
CollectionUtils
.
isEmpty
(
paramExtagVoList
);
paramArtagIsEmptyFlg
=
CollectionUtils
.
isEmpty
(
paramArtagVoList
);
if
(!
befTagIsEmptyFlg
||
!
paramTagIsEmptyFlg
)
{
if
(!
befTagIsEmptyFlg
&&
!
paramTagIsEmptyFlg
)
{
if
(
paramTagVoList
.
size
()
!=
befTagVoList
.
size
())
{
updateTagFlg
=
true
;
}
else
{
List
<
String
>
befTagIdList
=
befTagVoList
.
stream
().
map
(
GoblinGoodsTagVo:
:
getTagId
)
.
collect
(
Collectors
.
toList
());
for
(
GoblinGoodsTagVo
vo
:
paramTagVoList
)
{
if
(!
befTagIdList
.
contains
(
vo
.
getTagId
()))
{
updateTagFlg
=
true
;
break
;
}
}
}
}
else
{
updateTagFlg
=
true
;
}
}
if
(
updateTagFlg
)
{
updateSpuInfoVo
.
setTagVoList
(
paramTagIsEmptyFlg
?
ObjectUtil
.
getGoblinGoodsTagVoArrayList
()
:
paramTagVoList
);
}
if
(!
befExtagIsEmptyFlg
||
!
paramExtagIsEmptyFlg
)
{
if
(!
befExtagIsEmptyFlg
&&
!
paramExtagIsEmptyFlg
)
{
if
(
paramExtagVoList
.
size
()
!=
befExtagVoList
.
size
())
{
updateExtagFlg
=
true
;
}
else
{
List
<
String
>
befExtagIdList
=
befExtagVoList
.
stream
().
map
(
GoblinGoodsExtagVo:
:
getTagId
)
.
collect
(
Collectors
.
toList
());
for
(
GoblinGoodsExtagVo
vo
:
paramExtagVoList
)
{
if
(!
befExtagIdList
.
contains
(
vo
.
getTagId
()))
{
updateExtagFlg
=
true
;
break
;
}
}
}
}
else
{
updateExtagFlg
=
true
;
}
}
if
(
updateExtagFlg
)
{
updateSpuInfoVo
.
setExtagVoList
(
paramExtagIsEmptyFlg
?
ObjectUtil
.
getGoblinGoodsExtagVoArrayList
()
:
paramExtagVoList
);
}
if
(!
befArtagIsEmptyFlg
||
!
paramArtagIsEmptyFlg
)
{
if
(!
befArtagIsEmptyFlg
&&
!
paramArtagIsEmptyFlg
)
{
if
(
paramArtagVoList
.
size
()
!=
befArtagVoList
.
size
())
{
updateArtagFlg
=
true
;
}
else
{
List
<
String
>
befArtagIdList
=
befArtagVoList
.
stream
().
map
(
GoblinGoodsExtagVo:
:
getTagId
)
.
collect
(
Collectors
.
toList
());
for
(
GoblinGoodsExtagVo
vo
:
paramArtagVoList
)
{
if
(!
befArtagIdList
.
contains
(
vo
.
getTagId
()))
{
updateArtagFlg
=
true
;
break
;
}
}
}
}
else
{
updateArtagFlg
=
true
;
}
}
if
(
updateArtagFlg
)
{
updateSpuInfoVo
.
setArtagVoList
(
paramArtagIsEmptyFlg
?
ObjectUtil
.
getGoblinGoodsExtagVoArrayList
()
:
paramArtagVoList
);
}
}
boolean
updateSsidFlg
=
false
;
List
<
String
>
ssidList
=
mgtGoodsAddParam
.
getSsidList
();
boolean
paramSsidListIsEmptyFlg
=
CollectionUtils
.
isEmpty
(
ssidList
);
List
<
GoblinServiceSupportVo
>
serviceSupportVoList
=
mgtGoodsInfoVo
.
getServiceSupportVoList
();
boolean
befServiceSupportVoListIsEmptyFlg
=
CollectionUtils
.
isEmpty
(
serviceSupportVoList
);
{
// 服务支持处理
if
(!
befServiceSupportVoListIsEmptyFlg
||
!
paramSsidListIsEmptyFlg
)
{
if
(!
befServiceSupportVoListIsEmptyFlg
&&
!
paramSsidListIsEmptyFlg
)
{
if
(
serviceSupportVoList
.
size
()
!=
ssidList
.
size
())
{
updateSsidFlg
=
true
;
}
else
{
List
<
String
>
befSsidList
=
serviceSupportVoList
.
stream
().
map
(
GoblinServiceSupportVo:
:
getSsid
)
.
collect
(
Collectors
.
toList
());
for
(
String
ssid
:
ssidList
)
{
if
(!
befSsidList
.
contains
(
ssid
))
{
updateSsidFlg
=
true
;
break
;
}
}
}
}
else
{
updateSsidFlg
=
true
;
}
}
if
(
updateSsidFlg
)
{
updateSpuInfoVo
.
setServiceSupportVoList
(
paramSsidListIsEmptyFlg
?
ObjectUtil
.
getGoblinServiceSupportVoArrayList
()
:
goblinMongoUtils
.
getServiceSupportVos
(
ssidList
));
}
}
GoblinGoodsInfoVo
updateSpuInfoVo
=
initParam
.
initEditGoodsInfoVo
(
mgtGoodsAddParam
,
mgtGoodsInfoVo
);
boolean
updateImageFlg
=
false
;
List
<
String
>
paramImageList
=
mgtGoodsAddParam
.
get
ImageList
();
List
<
String
>
paramImageList
=
mgtGoodsAddParam
.
get
ConverImages
();
List
<
String
>
befImageList
=
mgtGoodsInfoVo
.
getImageList
();
{
// 图片处理
if
(
befImageList
.
size
()
!=
paramImageList
.
size
())
{
...
...
@@ -361,50 +213,8 @@ public class GoblinStoreMgtSqbGoodsServiceImpl implements IGoblinStoreMgtSqbGood
if
(
goblinMongoUtils
.
updateGoodsInfoVo
(
updateSpuInfoVo
))
{
goblinRedisUtils
.
delGoodsInfoVo
(
updateSpuInfoVo
.
getSpuId
());
log
.
info
(
"商品管理:SPU编辑[UID={},PARAMS={}]"
,
uid
,
JsonUtils
.
toJson
(
mgtGoodsAddParam
));
GoblinGoodsSkuInfoVo
updateSkuInfoVo
=
GoblinGoodsSkuInfoVo
.
getNew
();
updateSkuInfoVo
.
setSpuId
(
updateSpuInfoVo
.
getSpuId
());
updateSkuInfoVo
.
setSkuNo
(
updateSpuInfoVo
.
getSpuNo
());
// updateSkuInfoVo.setName(updateSpuInfoVo.getName());
// updateSkuInfoVo.setSubtitle(updateSpuInfoVo.getSubtitle());
updateSkuInfoVo
.
setVirtualFlg
(
updateSpuInfoVo
.
getVirtualFlg
());
updateSkuInfoVo
.
setLogisticsTemplate
(
updateSpuInfoVo
.
getLogisticsTemplate
());
updateSkuInfoVo
.
setSkuPic
(
updateSpuInfoVo
.
getCoverPic
());
// 默认使用SPU的
updateSkuInfoVo
.
setUpdatedBy
(
updateSpuInfoVo
.
getUpdatedBy
());
updateSkuInfoVo
.
setUpdatedAt
(
updateSpuInfoVo
.
getUpdatedAt
());
LinkedList
<
Object
[]>
updateGoodsInfoObjs
=
CollectionUtil
.
linkedListObjectArr
();
LinkedList
<
Object
[]>
updateGoodsSkuObjs
=
CollectionUtil
.
linkedListObjectArr
();
// 参与活动的同一商品更新处理
List
<
String
>
marketSpuIdList
=
goblinMongoUtils
.
updateGoodsInfoVoForMarket
(
spuId
,
mgtGoodsInfoVo
.
getSpuNo
(),
updateSpuInfoVo
);
if
(!
CollectionUtils
.
isEmpty
(
marketSpuIdList
))
{
marketSpuIdList
.
forEach
(
marketSpuId
->
{
goblinRedisUtils
.
delGoodsInfoVo
(
marketSpuId
);
updateGoodsInfoObjs
.
add
(
new
Object
[]
{
updateSpuInfoVo
.
getSpuNo
(),
updateSpuInfoVo
.
getName
(),
updateSpuInfoVo
.
getSubtitle
(),
updateSpuInfoVo
.
getSellPrice
(),
updateSpuInfoVo
.
getIntro
(),
updateSpuInfoVo
.
getDetails
(),
updateSpuInfoVo
.
getCoverPic
(),
updateSpuInfoVo
.
getVideo
(),
"2"
,
updateSpuInfoVo
.
getCateFid
(),
updateSpuInfoVo
.
getCateSid
(),
updateSpuInfoVo
.
getCateTid
(),
updateSpuInfoVo
.
getShelvesHandle
(),
updateSpuInfoVo
.
getShelvesTime
(),
updateSpuInfoVo
.
getSpuValidity
(),
updateSpuInfoVo
.
getVirtualFlg
(),
updateSpuInfoVo
.
getLogisticsTemplate
(),
updateSpuInfoVo
.
getUpdatedBy
(),
updateSpuInfoVo
.
getUpdatedAt
(),
updateSpuInfoVo
.
getSpuErpCode
(),
marketSpuId
});
updateGoodsSkuObjs
.
add
(
new
Object
[]
{
updateSkuInfoVo
.
getSkuNo
(),
updateSkuInfoVo
.
getVirtualFlg
(),
updateSkuInfoVo
.
getLogisticsTemplate
(),
updateSkuInfoVo
.
getSkuPic
(),
updateSkuInfoVo
.
getUpdatedBy
(),
updateSkuInfoVo
.
getUpdatedAt
(),
marketSpuId
});
});
}
// goblinMongoUtils.updateGoodsSkuInfoVoBySpuId(updateSkuInfoVo);
goblinMongoUtils
.
updateGoodsSkuInfoVoPropBySpuId
(
updateSkuInfoVo
);
goblinRedisUtils
.
delGoodsSkuInfoVo
(
mgtGoodsInfoVo
.
getSkuIdList
().
get
(
0
));
LinkedList
<
String
>
toMqSqls
=
CollectionUtil
.
linkedListString
();
toMqSqls
.
add
(
SqlMapping
.
get
(
"goblin_goods.update_by_edit"
));
...
...
@@ -421,66 +231,6 @@ public class GoblinStoreMgtSqbGoodsServiceImpl implements IGoblinStoreMgtSqbGood
updateSpuInfoVo
.
getUpdatedAt
(),
updateSpuInfoVo
.
getSpuErpCode
(),
updateSpuInfoVo
.
getSpuId
()
});
toMqSqls
.
add
(
SqlMapping
.
get
(
"goblin_goods_sku.update_by_edit_coupon_spu"
));
updateGoodsSkuObjs
.
add
(
new
Object
[]
{
updateSkuInfoVo
.
getSkuNo
(),
updateSkuInfoVo
.
getVirtualFlg
(),
updateSkuInfoVo
.
getLogisticsTemplate
(),
updateSkuInfoVo
.
getSkuPic
(),
updateSkuInfoVo
.
getUpdatedBy
(),
updateSkuInfoVo
.
getUpdatedAt
(),
updateSkuInfoVo
.
getSpuId
()
});
toMqSqls
.
add
(
SqlMapping
.
get
(
"candy_coupon.goods_spu_update"
));
LinkedList
<
Object
[]>
updateCandyCouponObjs
=
CollectionUtil
.
linkedListObjectArr
();
updateCandyCouponObjs
.
add
(
new
Object
[]
{
updateSpuInfoVo
.
getName
(),
updateSpuInfoVo
.
getIntro
(),
updateSpuInfoVo
.
getUpdatedBy
(),
updateSpuInfoVo
.
getUpdatedAt
(),
spuId
});
toMqSqls
.
add
(
SqlMapping
.
get
(
"goblin_goods_tag.delete"
));
LinkedList
<
Object
[]>
deleteGoodsTagObjs
=
CollectionUtil
.
linkedListObjectArr
();
toMqSqls
.
add
(
SqlMapping
.
get
(
"goblin_goods_tag.insert_byreplace"
));
LinkedList
<
Object
[]>
initGoodsTagObjs
=
CollectionUtil
.
linkedListObjectArr
();
if
(
updateTagFlg
)
{
if
(!
befTagIsEmptyFlg
)
{
deleteGoodsTagObjs
.
add
(
new
Object
[]
{
spuId
,
'0'
});
}
if
(!
paramTagIsEmptyFlg
)
{
updateSpuInfoVo
.
getTagVoList
().
forEach
(
vo
->
initGoodsTagObjs
.
add
(
new
Object
[]
{
spuId
,
vo
.
getTagId
(),
vo
.
getSort
(),
"0"
}));
}
}
if
(
updateExtagFlg
)
{
if
(!
befExtagIsEmptyFlg
)
{
deleteGoodsTagObjs
.
add
(
new
Object
[]
{
spuId
,
'1'
});
}
if
(!
paramExtagIsEmptyFlg
)
{
updateSpuInfoVo
.
getExtagVoList
().
forEach
(
vo
->
initGoodsTagObjs
.
add
(
new
Object
[]
{
spuId
,
vo
.
getTagId
(),
vo
.
getSort
(),
"1"
}));
}
}
toMqSqls
.
add
(
SqlMapping
.
get
(
"goblin_goods_artag.delete"
));
LinkedList
<
Object
[]>
deleteGoodsArTagObjs
=
CollectionUtil
.
linkedListObjectArr
();
toMqSqls
.
add
(
SqlMapping
.
get
(
"goblin_goods_artag.insert_byreplace"
));
LinkedList
<
Object
[]>
initGoodsArTagObjs
=
CollectionUtil
.
linkedListObjectArr
();
if
(
updateArtagFlg
)
{
if
(!
befArtagIsEmptyFlg
)
{
deleteGoodsArTagObjs
.
add
(
new
Object
[]
{
spuId
,
'1'
});
}
if
(!
paramArtagIsEmptyFlg
)
{
updateSpuInfoVo
.
getArtagVoList
().
forEach
(
vo
->
initGoodsArTagObjs
.
add
(
new
Object
[]
{
spuId
,
vo
.
getTagId
(),
vo
.
getSort
(),
"1"
}));
}
}
toMqSqls
.
add
(
SqlMapping
.
get
(
"goblin_goods_service_support.delete"
));
LinkedList
<
Object
[]>
deleteServiceSupportObjs
=
CollectionUtil
.
linkedListObjectArr
();
toMqSqls
.
add
(
SqlMapping
.
get
(
"goblin_goods_service_support.insert_byreplace"
));
LinkedList
<
Object
[]>
initServiceSupportObjs
=
CollectionUtil
.
linkedListObjectArr
();
if
(
updateSsidFlg
)
{
if
(!
befServiceSupportVoListIsEmptyFlg
)
{
deleteServiceSupportObjs
.
add
(
new
Object
[]
{
spuId
});
}
if
(!
paramSsidListIsEmptyFlg
)
{
updateSpuInfoVo
.
getServiceSupportVoList
()
.
forEach
(
vo
->
initServiceSupportObjs
.
add
(
new
Object
[]
{
spuId
,
vo
.
getSsid
()
}));
}
}
toMqSqls
.
add
(
SqlMapping
.
get
(
"goblin_goods_image.delete"
));
LinkedList
<
Object
[]>
deleteGoodsImageObjs
=
CollectionUtil
.
linkedListObjectArr
();
...
...
@@ -493,112 +243,60 @@ public class GoblinStoreMgtSqbGoodsServiceImpl implements IGoblinStoreMgtSqbGood
}
queueUtils
.
sendMsgByRedis
(
MQConst
.
GoblinQueue
.
SQL_GOODS
.
getKey
(),
SqlMapping
.
gets
(
toMqSqls
,
updateGoodsInfoObjs
,
updateGoodsSkuObjs
,
updateCandyCouponObjs
,
deleteGoodsTagObjs
,
initGoodsTagObjs
,
deleteGoodsArTagObjs
,
initGoodsArTagObjs
,
deleteServiceSupportObjs
,
initServiceSupportObjs
,
deleteGoodsImageObjs
,
SqlMapping
.
gets
(
toMqSqls
,
updateGoodsInfoObjs
,
deleteGoodsImageObjs
,
initGoodsImageObjs
));
this
.
sqbGoodsEditSku
(
uid
,
mgtGoodsAddParam
,
mgtGoodsInfoVo
);
return
true
;
}
return
false
;
}
public
boolean
sqbGoodsEditSku
(
String
uid
,
GoblinS
toreMgtGoodsSqbEditSkuParam
mgtGoodsEditSku
Param
,
public
boolean
sqbGoodsEditSku
(
String
uid
,
GoblinS
qbPerfGoodsVo
mgtGoodsAdd
Param
,
GoblinGoodsInfoVo
goodsInfoVo
)
{
LocalDateTime
nowTime
=
LocalDateTime
.
now
();
List
<
MallProductsQueryData
.
Sku
>
skuResults
=
mgtGoodsAddParam
.
getSkuResults
();
if
(
goodsInfoVo
==
null
||
CollectionUtils
.
isEmpty
(
goodsInfoVo
.
getSkuIdList
()))
{
return
false
;
}
GoblinGoodsSkuInfoVo
updateSkuInfoVo
=
mgtGoodsEditSkuParam
.
initEditGoodsSkuInfoVo
();
updateSkuInfoVo
.
setUpdatedBy
(
uid
);
updateSkuInfoVo
.
setUpdatedAt
(
nowTime
);
String
skuId
=
updateSkuInfoVo
.
getSkuId
();
if
(
goblinMongoUtils
.
updateGoodsSkuInfoVo
(
updateSkuInfoVo
))
{
goblinRedisUtils
.
delGoodsSkuInfoVo
(
skuId
);
log
.
info
(
"商品管理:SKU编辑[UID={},PARAMS={}]"
,
uid
,
JsonUtils
.
toJson
(
mgtGoodsEditSkuParam
));
LinkedList
<
Object
[]>
updateGoodsSkuForMarketObjs
=
CollectionUtil
.
linkedListObjectArr
();
// 参与活动的同一商品更新处理
List
<
String
>
marketSkuIdList
=
goblinRedisUtils
.
getSkuRe
(
updateSkuInfoVo
.
getSkuId
());
if
(!
CollectionUtils
.
isEmpty
(
marketSkuIdList
))
{
goblinMongoUtils
.
updateGoodsSkuInfoVoForMarket
(
marketSkuIdList
,
updateSkuInfoVo
);
marketSkuIdList
.
forEach
(
marketSkuId
->
{
goblinRedisUtils
.
delGoodsSkuInfoVo
(
marketSkuId
);
updateGoodsSkuForMarketObjs
.
add
(
new
Object
[]
{
updateSkuInfoVo
.
getStock
(),
updateSkuInfoVo
.
getIsTrueName
(),
updateSkuInfoVo
.
getUseScope
(),
updateSkuInfoVo
.
getValFace
(),
updateSkuInfoVo
.
getEffectAt
(),
updateSkuInfoVo
.
getExpireAt
(),
updateSkuInfoVo
.
getUpdatedBy
(),
updateSkuInfoVo
.
getUpdatedAt
(),
marketSkuId
});
});
// 先拿到 spu 下所有 sku 详情,后续只更新命中的 skuId,其余仅参与价格区间重算
for
(
String
spuSkuId
:
goodsInfoVo
.
getSkuIdList
())
{
String
skuId
=
spuSkuId
;
if
(
StringUtils
.
isBlank
(
spuSkuId
))
{
continue
;
}
BigDecimal
priceGe
=
BigDecimal
.
ZERO
,
priceLe
=
BigDecimal
.
ZERO
;
for
(
String
skuIdStr
:
goodsInfoVo
.
getSkuIdList
())
{
GoblinGoodsSkuInfoVo
skuInfoVo
=
goblinRedisUtils
.
getGoodsSkuInfoVo
(
skuIdStr
);
if
(
null
!=
skuInfoVo
&&
skuInfoVo
.
getDelFlg
().
equals
(
"0"
))
{
priceGe
=
priceGe
.
compareTo
(
BigDecimal
.
ZERO
)
==
0
?
skuInfoVo
.
getPrice
()
:
(
priceGe
.
compareTo
(
skuInfoVo
.
getPrice
())
>
0
?
skuInfoVo
.
getPrice
()
:
priceGe
);
priceLe
=
priceLe
.
compareTo
(
skuInfoVo
.
getPrice
())
<
0
?
skuInfoVo
.
getPrice
()
:
priceLe
;
GoblinGoodsSkuInfoVo
skuInfoVo
=
goblinRedisUtils
.
getGoodsSkuInfoVo
(
spuSkuId
);
if
(
skuInfoVo
!=
null
&&
"0"
.
equals
(
skuInfoVo
.
getDelFlg
()))
{
for
(
MallProductsQueryData
.
Sku
sku
:
skuResults
)
{
if
(
sku
.
getSkuId
().
equals
(
spuSkuId
))
{
skuInfoVo
.
setName
(
sku
.
getSkuName
());
skuInfoVo
.
setPrice
(
BigDecimal
.
valueOf
(
sku
.
getPrice
()));
skuInfoVo
.
setUpdatedBy
(
uid
);
skuInfoVo
.
setUpdatedAt
(
nowTime
);
if
(
goblinMongoUtils
.
updateGoodsSkuInfoVo
(
skuInfoVo
))
{
goblinRedisUtils
.
delGoodsSkuInfoVo
(
sku
.
getSkuId
());
LinkedList
<
String
>
toMqSqls
=
CollectionUtil
.
linkedListString
();
toMqSqls
.
add
(
SqlMapping
.
get
(
"goblin_goods_sku.update_by_edit_for_coupon"
));
LinkedList
<
Object
[]>
updateGoodsSkuObjs
=
CollectionUtil
.
linkedListObjectArr
();
updateGoodsSkuObjs
.
add
(
new
Object
[]
{
skuInfoVo
.
getPrice
(),
skuInfoVo
.
getPriceMember
(),
skuInfoVo
.
getStock
(),
skuInfoVo
.
getSkuStock
(),
skuInfoVo
.
getBuyLimit
(),
skuInfoVo
.
getUpdatedBy
(),
skuInfoVo
.
getUpdatedAt
(),
skuId
});
queueUtils
.
sendMsgByRedis
(
MQConst
.
GoblinQueue
.
SQL_GOODS
.
getKey
(),
SqlMapping
.
gets
(
toMqSqls
,
updateGoodsSkuObjs
));
return
true
;
}
break
;
}
}
}
boolean
updateGoodsInfoVoFlg
=
false
;
LinkedList
<
Object
[]>
updateGoodsObjs
=
CollectionUtil
.
linkedListObjectArr
();
if
(
priceGe
.
compareTo
(
goodsInfoVo
.
getPriceGe
())
!=
0
||
priceLe
.
compareTo
(
goodsInfoVo
.
getPriceLe
())
!=
0
)
{
updateGoodsInfoVoFlg
=
true
;
goodsInfoVo
.
setPriceGe
(
priceGe
);
goodsInfoVo
.
setPriceLe
(
priceLe
);
goodsInfoVo
.
setUpdatedBy
(
uid
);
goodsInfoVo
.
setUpdatedAt
(
nowTime
);
updateGoodsObjs
.
add
(
new
Object
[]
{
priceGe
,
priceLe
,
uid
,
nowTime
,
goodsInfoVo
.
getSpuId
()
});
}
if
(
updateGoodsInfoVoFlg
)
{
goblinMongoUtils
.
updateGoodsInfoVo
(
goodsInfoVo
);
goblinRedisUtils
.
delGoodsInfoVo
(
goodsInfoVo
.
getSpuId
());
}
LinkedList
<
String
>
toMqSqls
=
CollectionUtil
.
linkedListString
();
toMqSqls
.
add
(
SqlMapping
.
get
(
"goblin_goods_sku.update_by_edit_for_market2"
));
// LinkedList<Object[]> updateGoodsSkuForMarketObjs =
// CollectionUtil.linkedListObjectArr();
toMqSqls
.
add
(
SqlMapping
.
get
(
"goblin_goods_sku.update_by_edit_for_coupon"
));
LinkedList
<
Object
[]>
updateGoodsSkuObjs
=
CollectionUtil
.
linkedListObjectArr
();
updateGoodsSkuObjs
.
add
(
new
Object
[]
{
updateSkuInfoVo
.
getPrice
(),
updateSkuInfoVo
.
getPriceMember
(),
updateSkuInfoVo
.
getStock
(),
updateSkuInfoVo
.
getSkuStock
(),
updateSkuInfoVo
.
getBuyLimit
(),
updateSkuInfoVo
.
getUpdatedBy
(),
updateSkuInfoVo
.
getUpdatedAt
(),
skuId
});
toMqSqls
.
add
(
SqlMapping
.
get
(
"goblin_goods_sku_coupon.update"
));
LinkedList
<
Object
[]>
updateGoodsSkuCouponObjs
=
CollectionUtil
.
linkedListObjectArr
();
updateGoodsSkuCouponObjs
.
add
(
new
Object
[]
{
updateSkuInfoVo
.
getUseScope
(),
updateSkuInfoVo
.
getValFace
(),
updateSkuInfoVo
.
getIsTrueName
(),
updateSkuInfoVo
.
getEffectAt
(),
updateSkuInfoVo
.
getExpireAt
(),
skuId
});
toMqSqls
.
add
(
SqlMapping
.
get
(
"candy_coupon.goods_sku_update"
));
LinkedList
<
Object
[]>
updateCandyCouponObjs
=
CollectionUtil
.
linkedListObjectArr
();
updateCandyCouponObjs
.
add
(
new
Object
[]
{
updateSkuInfoVo
.
getValFace
(),
updateSkuInfoVo
.
getIsTrueName
(),
updateSkuInfoVo
.
getEffectAt
(),
updateSkuInfoVo
.
getExpireAt
(),
updateSkuInfoVo
.
getUpdatedBy
(),
updateSkuInfoVo
.
getUpdatedAt
(),
skuId
});
toMqSqls
.
add
(
SqlMapping
.
get
(
"candy_coupon_rule.goods_sku_update"
));
LinkedList
<
Object
[]>
updateCandyCouponRuleObjs
=
CollectionUtil
.
linkedListObjectArr
();
String
busiName
=
"%s"
;
switch
(
updateSkuInfoVo
.
getUseScope
())
{
// 适用范围[101-音乐节|102-小型演出(livehouse演出)|103-巡演]
case
101
:
// 音乐节
busiName
=
String
.
format
(
busiName
,
"草莓、M_DSK、五百里音乐节"
);
// 按杨要求文案'音乐节'改'草莓、M_DSK、五百里音乐节'
break
;
case
102
:
// 小型演出(LiveHouse演出)
busiName
=
String
.
format
(
busiName
,
"小型演出(LiveHouse演出)系列"
);
break
;
case
103
:
// 巡演
busiName
=
String
.
format
(
busiName
,
"巡演 系列"
);
break
;
}
updateCandyCouponRuleObjs
.
add
(
new
Object
[]
{
updateSkuInfoVo
.
getUseScope
(),
busiName
,
skuId
});
toMqSqls
.
add
(
SqlMapping
.
get
(
"goblin_goods.update_by_edit_sku"
));
// LinkedList<Object[]> updateGoodsObjs = CollectionUtil.linkedListObjectArr();
queueUtils
.
sendMsgByRedis
(
MQConst
.
GoblinQueue
.
SQL_GOODS
.
getKey
(),
SqlMapping
.
gets
(
toMqSqls
,
updateGoodsSkuForMarketObjs
,
updateGoodsSkuObjs
,
updateGoodsSkuCouponObjs
,
updateCandyCouponObjs
,
updateCandyCouponRuleObjs
,
updateGoodsObjs
));
return
true
;
}
return
false
;
}
...
...
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