记得上下班打卡 | git大法好,push需谨慎

Commit 3a8884fc authored by 姜秀龙's avatar 姜秀龙

收钱 goods add edit

parent 3ad34a00
......@@ -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;
}
......
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);
}
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, GoblinStoreMgtGoodsSqbAddParam mgtGoodsSqbParam, GoblinGoodsInfoVo goodsInfoVo);
boolean sqbGoodsEditSpu(String uid, GoblinSqbPerfGoodsVo mgtGoodsSqbParam, GoblinGoodsInfoVo goodsInfoVo);
/**
* 商品管理:商品编辑:SKU编辑-收钱吧商品
*/
boolean sqbGoodsEditSku(String uid, GoblinStoreMgtGoodsSqbEditSkuParam mgtGoodsSqbParam, GoblinGoodsInfoVo goodsInfoVo);
}
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);
}
}
......@@ -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();
}
}
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;
}
}
......@@ -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, GoblinStoreMgtGoodsSqbAddParam mgtGoodsAddParam,
public boolean sqbGoodsEditSpu(String uid, GoblinSqbPerfGoodsVo 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.getImageList();
List<String> paramImageList = mgtGoodsAddParam.getConverImages();
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, GoblinStoreMgtGoodsSqbEditSkuParam mgtGoodsEditSkuParam,
public boolean sqbGoodsEditSku(String uid, GoblinSqbPerfGoodsVo mgtGoodsAddParam,
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;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment