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

Commit c49455bc authored by 胡佳晨's avatar 胡佳晨

提交 正在下单配置

parent 8ea653fa
package com.liquidnet.service.goblin.dto.manage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.util.List;
@ApiModel(value = "GoblinStorePurchaseItemParam")
@Data
public class GoblinStoreZhengzaiCommonParam {
@ApiModelProperty(required = true, value = "商铺活动Id", example = "1")
@NotBlank(message = "商铺活动Id不能为空")
private String selfMarketId;
@ApiModelProperty(required = true, value = "商铺Id", example = "1")
@NotBlank(message = "商铺id不能为空")
private String storeId;
@ApiModelProperty(required = true, value = "spuId", example = "1")
@NotBlank(message = "spuId不能空")
private String spuId;
@ApiModelProperty(required = true, value = "相关配置")
private List<GoblinStoreZhengzaiItemParam> goblinStoreZhengzaiItemParams;
}
package com.liquidnet.service.goblin.dto.manage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
@ApiModel(value = "GoblinStorePurchaseItemParam")
@Data
public class GoblinStoreZhengzaiItemParam {
@ApiModelProperty(required = true, value = "skuId", example = "1")
@NotBlank(message = "skuId不能为空")
private String skuId;
@ApiModelProperty(required = true, value = "活动价格", example = "1.00")
@NotBlank(message = "活动价格不能为空")
private BigDecimal priceMarketing;
@ApiModelProperty(required = true, value = "活动库存", example = "1.00")
@NotBlank(message = "活动库存不能为空")
private Integer stockMarketing;
@ApiModelProperty(required = true, value = "用户限购[0-不限购|x-限购数量]", example = "1")
@NotBlank(message = "用户限购类型不能为空")
private Integer buyLimit;
@ApiModelProperty(required = true, value = "购买条件[0-全部用户|1-仅支持会员|2-指定用户可买]", example = "1")
@NotBlank(message = "购买条件不能为空")
private Integer buyFactor;
@ApiModelProperty(required = false, value = "购买限制人员名单[购买限制为2-指定用户时必填]", example = "")
private String buyRoster;
}
package com.liquidnet.service.goblin.dto.vo;
import com.liquidnet.service.goblin.dto.GoblinGoodsSpecDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
@ApiModel(value = "GoblinStorePurchaseSkuVo", description = "限时秒杀活动-商品SkuVo")
@Data
public class GoblinSelfZhengzaiSkuVo implements Serializable, Cloneable {
private static final long serialVersionUID = 8425727558228094904L;
@ApiModelProperty(position = 0, value = "单品规格信息")
private List<GoblinGoodsSpecDto> skuSpecList;
@ApiModelProperty(position = 1, value = "marketSkuId")
private String marketSkuId;
@ApiModelProperty(position = 1, value = "总库存")
private Integer stock;
@ApiModelProperty(position = 2, value = "可配置库存")
private Integer skuStock;
@ApiModelProperty(position = 3, value = "原价")
private BigDecimal price;
@ApiModelProperty(position = 4, value = "秒杀价")
private BigDecimal priceMarketing;
@ApiModelProperty(position = 5, value = "库存数量")
private Integer stockMarketing;
@ApiModelProperty(position = 6, value = "限量[0-无限制|X:限购数量]")
private Integer buyLimit;
@ApiModelProperty(position = 7, value = "购买限制[0-全部用户|1-仅会员|2-指定用户]")
private String buyFactor;
@ApiModelProperty(position = 8, value = "购买限制人员名单[购买限制为2-指定用户时必填]")
private String buyRoster;
private static final GoblinSelfZhengzaiSkuVo obj = new GoblinSelfZhengzaiSkuVo();
public static GoblinSelfZhengzaiSkuVo getNew() {
try {
return (GoblinSelfZhengzaiSkuVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new GoblinSelfZhengzaiSkuVo();
}
}
}
package com.liquidnet.service.goblin.service.manage;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.dto.manage.GoblinStorePurchaseCommonParam;
import com.liquidnet.service.goblin.dto.manage.GoblinStoreZhengzaiCommonParam;
import com.liquidnet.service.goblin.dto.vo.GoblinMarketSpuListVo;
import com.liquidnet.service.goblin.dto.vo.GoblinSelfMarketingVo;
import com.liquidnet.service.goblin.dto.vo.GoblinSelfZhengzaiSkuVo;
import com.liquidnet.service.goblin.dto.vo.GoblinStorePurchaseSkuVo;
import java.util.List;
......@@ -10,4 +16,45 @@ public interface IGoblinZhengzaiService {
GoblinSelfMarketingVo zhengzaiCanJoinDetails(String marketId,String storeId);
/**
* 获取活动内spu列表
*
* @param marketId 活动秒杀id
* @param page 页数
* @return
*/
ResponseDto<List<GoblinMarketSpuListVo>> zhengzaiSpuList(String marketId, String storeId, int page);
/**
* 获取活动内sku列表
*
* @param selfMarketId 正在下单id
* @return
*/
ResponseDto<List<GoblinSelfZhengzaiSkuVo>> zhengzaiSkuList(String selfMarketId, String storeId, String spuId);
/**
* 添加活动相关sku
*
* @param params
* @return
*/
ResponseDto<Boolean> zhengzaiSkuInsert(GoblinStoreZhengzaiCommonParam params);
/**
* 编辑活动相关sku
*
* @param params
* @return
*/
ResponseDto<Boolean> zhengzaiSkuUpdate(GoblinStoreZhengzaiCommonParam params);
/**
* 删除活动内sku
*
* @param marketId 活动秒杀id
* @param spuId spuId
* @return
*/
ResponseDto<Boolean> zhengzaiSpuDel(String marketId, String storeId, String spuId);
}
......@@ -202,6 +202,7 @@ public class MQConst {
public enum GoblinQueue {
GOBLIN_STORE_MARKET("goblin:stream:store.market", "group.store.market", "店铺活动"),
GOBLIN_SELF_MARKET("goblin:stream:self.market", "group.self.market", "平台活动"),
;
private final String key;
......
......@@ -63,7 +63,7 @@ public class GoblinMarketingZhengzai implements Serializable,Cloneable {
/**
* 购买限制[0-全部用户|1-仅会员|2-指定用户]
*/
private String buyFactor;
private Integer buyFactor;
/**
* 购买限制人员名单[购买限制为2-指定用户时必填]
......@@ -75,6 +75,11 @@ public class GoblinMarketingZhengzai implements Serializable,Cloneable {
*/
private Integer buyLimit;
/**
* 删除标记[0-未删除|1-删除]
*/
private Integer delFlag;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
......
XADD goblin:stream:store.market * 0 0
XGROUP CREATE goblin:stream:store.market group.store.market 0
XADD goblin:stream:self.market * 0 0
XGROUP CREATE goblin:stream:self.market group.self.market 0
\ No newline at end of file
package com.liquidnet.service.goblin.controller.manage;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.dto.vo.GoblinMarketSpuListVo;
import com.liquidnet.service.goblin.dto.vo.GoblinSelfMarketingVo;
import com.liquidnet.service.goblin.dto.vo.GoblinSelfZhengzaiSkuVo;
import com.liquidnet.service.goblin.dto.vo.GoblinStorePurchaseSkuVo;
import com.liquidnet.service.goblin.service.manage.IGoblinZhengzaiService;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
......@@ -45,42 +48,55 @@ public class GoblinZhengzaiController {
return ResponseDto.success(goblinZhengzaiService.zhengzaiCanJoinDetails(selfMarketId, storeId));
}
@PostMapping("zhengzai/config")
@ApiOperation("活动详情-正在下单-配置商铺sku")
@GetMapping("zhengzai/config/spu")
@ApiOperation("活动详情-正在下单-获取商铺spu")
@ApiResponse(code = 200, message = "接口返回对象参数")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "storeId", value = "商铺id", example = "1"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "selfMarketId", value = "官方活动id", example = "1")
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "selfMarketId", value = "官方活动id", example = "1"),
@ApiImplicitParam(type = "form", required = true, dataType = "Integer", name = "page", value = "页数", example = "1")
})
public ResponseDto<List<GoblinMarketSpuListVo>> zhengzaiStoreConfigSpuList(@RequestParam("storeId") @Valid String storeId,
@RequestParam("selfMarketId") @Valid String selfMarketId,
@RequestParam("page") @Valid int page) {
return goblinZhengzaiService.zhengzaiSpuList(selfMarketId, storeId, page);
}
@GetMapping("zhengzai/config/sku")
@ApiOperation("活动详情-正在下单-获取商铺sku")
@ApiResponse(code = 200, message = "接口返回对象参数")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "storeId", value = "商铺id", example = "1"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "selfMarketId", value = "官方活动id", example = "1"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "spuId", value = "spuId", example = "1")
})
public ResponseDto<Boolean> zhengzaiStoreConfig(@RequestParam("storeId") @Valid String storeId,
public ResponseDto<List<GoblinSelfZhengzaiSkuVo>> zhengzaiStoreConfigSkuList(@RequestParam("storeId") @Valid String storeId,
@RequestParam("spuId") @Valid String spuId,
@RequestParam("selfMarketId") @Valid String selfMarketId) {
//todo
return null;
return goblinZhengzaiService.zhengzaiSkuList(selfMarketId, storeId, spuId);
}
@GetMapping("zhengzai/config/spu")
@ApiOperation("活动详情-正在下单-获取商铺spu")
@PostMapping("zhengzai/config")
@ApiOperation("活动详情-正在下单-配置商铺sku")
@ApiResponse(code = 200, message = "接口返回对象参数")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "storeId", value = "商铺id", example = "1"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "selfMarketId", value = "官方活动id", example = "1")
})
public ResponseDto<Boolean> zhengzaiStoreConfigSpuList(@RequestParam("storeId") @Valid String storeId,
public ResponseDto<Boolean> zhengzaiStoreInsert(@RequestParam("storeId") @Valid String storeId,
@RequestParam("selfMarketId") @Valid String selfMarketId) {
//todo
return null;
}
@GetMapping("zhengzai/config/sku")
@ApiOperation("活动详情-正在下单-获取商铺sku")
@PostMapping("zhengzai/config")
@ApiOperation("活动详情-正在下单-配置商铺sku")
@ApiResponse(code = 200, message = "接口返回对象参数")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "storeId", value = "商铺id", example = "1"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "selfMarketId", value = "官方活动id", example = "1"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "spuId", value = "spuId", example = "1")
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "selfMarketId", value = "官方活动id", example = "1")
})
public ResponseDto<Boolean> zhengzaiStoreConfigSkuList(@RequestParam("storeId") @Valid String storeId,
@RequestParam("spuId") @Valid String spuId,
public ResponseDto<Boolean> zhengzaiStoreUpdate(@RequestParam("storeId") @Valid String storeId,
@RequestParam("selfMarketId") @Valid String selfMarketId) {
//todo
return null;
......
package com.liquidnet.service.goblin.service.impl.manage;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.goblin.dto.vo.GoblinMarketingZhengzaiRelationVo;
import com.liquidnet.service.goblin.dto.vo.GoblinSelfMarketingVo;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.goblin.constant.GoblinStatusConst;
import com.liquidnet.service.goblin.dto.manage.GoblinStoreZhengzaiCommonParam;
import com.liquidnet.service.goblin.dto.manage.GoblinStoreZhengzaiItemParam;
import com.liquidnet.service.goblin.dto.vo.*;
import com.liquidnet.service.goblin.entity.GoblinMarketingZhengzai;
import com.liquidnet.service.goblin.service.manage.IGoblinZhengzaiService;
import com.liquidnet.service.goblin.util.GoblinMongoUtils;
import com.liquidnet.service.goblin.util.GoblinRedisUtils;
import com.liquidnet.service.goblin.util.ObjectUtil;
import com.liquidnet.service.goblin.util.QueueUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class GoblinZhengzaiServiceImpl implements IGoblinZhengzaiService {
@Autowired
GoblinRedisUtils redisUtils;
@Autowired
GoblinMongoUtils mongoUtils;
@Autowired
QueueUtils queueUtils;
@Override
public List<GoblinSelfMarketingVo> zhengzaiCanJoin(String storeId) {
......@@ -39,4 +58,244 @@ public class GoblinZhengzaiServiceImpl implements IGoblinZhengzaiService {
return null;
}
@Override
public ResponseDto<List<GoblinMarketSpuListVo>> zhengzaiSpuList(String marketId, String storeId, int page) {
int size = 20;
List<GoblinStoreMarketIsConfigVo> spuIds = redisUtils.getStoreMarketIsConfig(marketId, storeId);
List<String> marketSpuList = spuIds.stream().map(GoblinStoreMarketIsConfigVo::getMarketSpuId).collect(Collectors.toList());
List<GoblinMarketSpuListVo> voList = ObjectUtil.getGoblinMarketSpuListVoArrayList();
int count = page * size;
int startCount = (page - 1) * size;
if (count >= marketSpuList.size()) {
count = marketSpuList.size();
}
for (int i = startCount; i < count; i++) {
GoblinMarketSpuListVo vo = GoblinMarketSpuListVo.getNew();
String marketSpuId = marketSpuList.get(i);
GoblinGoodsInfoVo spuVo = redisUtils.getGoodsInfoVo(marketSpuId);
vo.setMarketSpuId(marketSpuId.split(GoblinStatusConst.MarketPreStatus.MARKET_PRE_ZHENGZAI.getValue())[0]);
vo.setCoverPic(spuVo.getCoverPic());
vo.setName(spuVo.getName());
vo.setPriceGe(spuVo.getPriceGe());
vo.setPriceLe(spuVo.getPriceLe());
voList.add(vo);
}
return ResponseDto.success(voList);
}
@Override
public ResponseDto<List<GoblinSelfZhengzaiSkuVo>> zhengzaiSkuList(String selfMarketId, String storeId, String spuId) {
GoblinGoodsInfoVo marketSpuVo = redisUtils.getGoodsInfoVo(selfMarketId);
List<String> marketSkuIdList = marketSpuVo.getSkuIdList();
List<GoblinSelfZhengzaiSkuVo> voList = ObjectUtil.getGoblinSelfZhengzaiSkuVoArrayList();
for (String marketSkuId : marketSkuIdList) {
GoblinGoodsSkuInfoVo marketSkuVo = redisUtils.getGoodsSkuInfoVo(marketSkuId);
GoblinGoodsSkuInfoVo skuVo = redisUtils.getGoodsSkuInfoVo(marketSkuId.split(GoblinStatusConst.MarketPreStatus.MARKET_PRE_ZHENGZAI.getValue())[0]);
GoblinSelfZhengzaiSkuVo vo = GoblinSelfZhengzaiSkuVo.getNew();
vo.setMarketSkuId(marketSkuId);
vo.setSkuSpecList(marketSkuVo.getSkuSpecList());
vo.setPrice(skuVo.getPrice());
vo.setStock(skuVo.getStock());
vo.setSkuStock(skuVo.getSkuStock());
vo.setPriceMarketing(marketSkuVo.getPrice());
vo.setStockMarketing(marketSkuVo.getSkuStock());
vo.setBuyFactor(marketSkuVo.getBuyFactor());
vo.setBuyLimit(marketSkuVo.getBuyLimit());
vo.setBuyRoster(marketSkuVo.getBuyRoster());
voList.add(vo);
}
return ResponseDto.success(voList);
}
@Override
public ResponseDto<Boolean> zhengzaiSkuInsert(GoblinStoreZhengzaiCommonParam params) {
LocalDateTime now = LocalDateTime.now();
String marketSpuId = params.getSpuId().concat(GoblinStatusConst.MarketPreStatus.MARKET_PRE_ZHENGZAI.getValue()).concat(IDGenerator.marketGoodId(params.getSelfMarketId()));
GoblinMarketRelationVo relationVo = GoblinMarketRelationVo.getNew();
relationVo.setSpuId(params.getSpuId());
List<String> skuList = CollectionUtil.arrayListString();//skuId数组
List<String> marketSkuList = CollectionUtil.arrayListString();//活动skuId数组
List<String> errorNameList = CollectionUtil.arrayListString();//修改失败的款式名称数组
List<BigDecimal> priceList = CollectionUtil.arrayListBigDecimal();//价格集合
LinkedList<String> sqls = CollectionUtil.linkedListString();
sqls.add(SqlMapping.get("goblin.self.market.insertRelation"));
LinkedList<Object[]> sqlsData = CollectionUtil.linkedListObjectArr();
for (GoblinStoreZhengzaiItemParam item : params.getGoblinStoreZhengzaiItemParams()) {
String zhengzaiId = IDGenerator.nextMilliId2();
GoblinMarketingZhengzai bean = GoblinMarketingZhengzai.getNew();
bean.setStoreId(params.getStoreId());
bean.setSelfMarketId(params.getSelfMarketId());
bean.setSpuId(params.getSpuId());
bean.setZhengzaiId(zhengzaiId);
bean.setSkuId(item.getSkuId());
bean.setPriceMarketing(item.getPriceMarketing());
bean.setStockMarketing(item.getStockMarketing());
bean.setBuyLimit(item.getBuyLimit());
bean.setBuyFactor(item.getBuyFactor());
bean.setBuyRoster(item.getBuyRoster());
bean.setDelFlag(0);
bean.setCreatedAt(now);
//mongo
GoblinGoodsSkuInfoVo skuVo = redisUtils.getGoodsSkuInfoVo(item.getSkuId());
//判断库存相关
int restStock = redisUtils.decrSkuStock(null, item.getSkuId(), item.getStockMarketing());
if (restStock < 0) {
errorNameList.add(skuVo.getName());
redisUtils.incrSkuStock(null, item.getSkuId(), item.getStockMarketing());
continue;
}
redisUtils.setSkuStock(GoblinStatusConst.MarketPreStatus.MARKET_PRE_ZHENGZAI.getValue(), item.getSkuId(), item.getStockMarketing());
skuVo.setSpuId(marketSpuId);
skuVo.setSkuId(item.getSkuId().concat(GoblinStatusConst.MarketPreStatus.MARKET_PRE_ZHENGZAI.getValue()).concat(IDGenerator.marketGoodId(params.getSelfMarketId())));
skuVo.setPrice(bean.getPriceMarketing());
skuVo.setPriceMember(bean.getPriceMarketing());
skuVo.setSkuStock(bean.getStockMarketing());
skuVo.setBuyLimit(bean.getBuyLimit());
skuVo.setBuyRoster(bean.getBuyRoster());
skuVo.setBuyFactor(bean.getBuyFactor().toString());
skuVo.setMarketId(GoblinStatusConst.MarketPreStatus.MARKET_PRE_ZHENGZAI.getValue().concat(params.getSelfMarketId()));
mongoUtils.setGoodsSkuInfoVo(skuVo);
//redis
redisUtils.setGoodsSkuInfoVo(skuVo);
//mysql
sqlsData.add(new Object[]{zhengzaiId, bean.getSelfMarketId(), bean.getSpuId(), bean.getSpuId(), bean.getStoreId(), bean.getPriceMarketing(),
bean.getStockMarketing(), bean.getBuyFactor(), bean.getBuyRoster(), bean.getBuyLimit(), bean.getDelFlag(), bean.getCreatedAt()});
marketSkuList.add(skuVo.getSkuId());
skuList.add(item.getSkuId());
priceList.add(item.getPriceMarketing());
}
if (errorNameList.size() == params.getGoblinStoreZhengzaiItemParams().size()) {
return ResponseDto.failure(JsonUtils.toJson(errorNameList));
}
//mongo
GoblinGoodsInfoVo spuVo = redisUtils.getGoodsInfoVo(params.getSpuId());
spuVo.setSpuId(marketSpuId);
spuVo.setSkuIdList(marketSkuList);
//排序
priceList = priceList.stream().sorted().collect(Collectors.toList());
spuVo.setPriceGe(priceList.get(0));
spuVo.setPriceLe(priceList.get(priceList.size() - 1));
spuVo.setMarketId(GoblinStatusConst.MarketPreStatus.MARKET_PRE_ZHENGZAI.getValue().concat(params.getSelfMarketId()));
mongoUtils.setGoodsInfoVo(spuVo);
//redis
redisUtils.setGoodsInfoVo(spuVo);
relationVo.setSkuList(skuList);
redisUtils.addMarketRelation(GoblinStatusConst.MarketPreStatus.MARKET_PRE_ZHENGZAI.getValue(), params.getSelfMarketId(), relationVo);
redisUtils.addStoreMarketIsConfig(params.getSelfMarketId(), params.getStoreId(), params.getSpuId(), marketSpuId);
// 执行sql
String sqlData = SqlMapping.gets(sqls, sqlsData);
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.GOBLIN_SELF_MARKET.getKey(),
sqlData);
if (errorNameList.size() > 0) {
return ResponseDto.failure(JsonUtils.toJson(errorNameList));
}
return ResponseDto.success();
}
@Override
public ResponseDto<Boolean> zhengzaiSkuUpdate(GoblinStoreZhengzaiCommonParam params) {
LocalDateTime now = LocalDateTime.now();
String marketSpuId = params.getSpuId().concat(GoblinStatusConst.MarketPreStatus.MARKET_PRE_ZHENGZAI.getValue()).concat(IDGenerator.marketGoodId(params.getSelfMarketId()));
List<String> marketSkuList = CollectionUtil.arrayListString();
List<BigDecimal> priceList = CollectionUtil.arrayListBigDecimal();//价格集合
List<String> errorNameList = CollectionUtil.arrayListString();//修改失败的款式名称数组
LinkedList<String> sqls = CollectionUtil.linkedListString();
sqls.add(SqlMapping.get("goblin.self.market.updateRelation"));
LinkedList<Object[]> sqlsData = CollectionUtil.linkedListObjectArr();
for (GoblinStoreZhengzaiItemParam item : params.getGoblinStoreZhengzaiItemParams()) {
GoblinMarketingZhengzai bean = GoblinMarketingZhengzai.getNew();
bean.setPriceMarketing(item.getPriceMarketing());
bean.setStockMarketing(item.getStockMarketing());
bean.setBuyLimit(item.getBuyLimit());
bean.setBuyFactor(item.getBuyFactor());
bean.setBuyRoster(item.getBuyRoster());
bean.setDelFlag(0);
bean.setUpdatedAt(now);
//mongo
GoblinGoodsSkuInfoVo skuVo = redisUtils.getGoodsSkuInfoVo(item.getSkuId().concat(GoblinStatusConst.MarketPreStatus.MARKET_PRE_ZHENGZAI.getValue()).concat(IDGenerator.marketGoodId(params.getSelfMarketId())));
int changeStock = item.getStockMarketing() - skuVo.getSkuStock();
//判断库存相关
int restStock;
if (changeStock > 0) {
restStock = redisUtils.incrSkuStock(GoblinStatusConst.MarketPreStatus.MARKET_PRE_ZHENGZAI.getValue(), item.getSkuId(), changeStock);
redisUtils.decrSkuStock(null, item.getSkuId(), changeStock);
} else {
restStock = redisUtils.decrSkuStock(GoblinStatusConst.MarketPreStatus.MARKET_PRE_ZHENGZAI.getValue(), item.getSkuId(), -changeStock);
redisUtils.incrSkuStock(null, item.getSkuId(), -changeStock);
}
if (restStock < 0) {
errorNameList.add(skuVo.getName());
redisUtils.incrSkuStock(GoblinStatusConst.MarketPreStatus.MARKET_PRE_ZHENGZAI.getValue(), item.getSkuId(), -changeStock);
redisUtils.decrSkuStock(null, item.getSkuId(), -changeStock);
continue;
}
skuVo.setPrice(bean.getPriceMarketing());
skuVo.setPriceMember(bean.getPriceMarketing());
skuVo.setSkuStock(bean.getStockMarketing());
skuVo.setBuyLimit(bean.getBuyLimit());
skuVo.setBuyRoster(bean.getBuyRoster());
skuVo.setBuyFactor(bean.getBuyFactor().toString());
skuVo.setMarketId(GoblinStatusConst.MarketPreStatus.MARKET_PRE_ZHENGZAI.getValue().concat(params.getSelfMarketId()));
mongoUtils.updateGoodsSkuInfoVo(skuVo);
//redis
redisUtils.setGoodsSkuInfoVo(skuVo);
//mysql
sqlsData.add(new Object[]{bean.getPriceMarketing(),
bean.getStockMarketing(), bean.getBuyFactor(), bean.getBuyRoster(), bean.getBuyLimit(), bean.getUpdatedAt(), params.getSelfMarketId(), params.getStoreId()});
marketSkuList.add(skuVo.getSkuId());
priceList.add(bean.getPriceMarketing());
}
if (errorNameList.size() == params.getGoblinStoreZhengzaiItemParams().size()) {
return ResponseDto.failure(JsonUtils.toJson(errorNameList));
}
//mongo
GoblinGoodsInfoVo spuVo = redisUtils.getGoodsInfoVo(params.getSpuId());
spuVo.setSpuId(marketSpuId);
//排序
priceList = priceList.stream().sorted().collect(Collectors.toList());
spuVo.setPriceGe(priceList.get(0));
spuVo.setPriceLe(priceList.get(priceList.size() - 1));
spuVo.setSkuIdList(marketSkuList);
spuVo.setMarketId(GoblinStatusConst.MarketPreStatus.MARKET_PRE_ZHENGZAI.getValue().concat(params.getSelfMarketId()));
mongoUtils.updateGoodsInfoVo(spuVo);
//redis
redisUtils.setGoodsInfoVo(spuVo);
// 执行sql
String sqlData = SqlMapping.gets(sqls, sqlsData);
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.GOBLIN_SELF_MARKET.getKey(),
sqlData);
if (errorNameList.size() > 0) {
return ResponseDto.failure(JsonUtils.toJson(errorNameList));
}
return ResponseDto.success();
}
@Override
public ResponseDto<Boolean> zhengzaiSpuDel(String marketId, String storeId, String spuId) {
//todo 判断 如果有订单待支付 则不能关闭
LocalDateTime now = LocalDateTime.now();
String marketSpuId = spuId.concat(GoblinStatusConst.MarketPreStatus.MARKET_PRE_ZHENGZAI.getValue()).concat(IDGenerator.marketGoodId(marketId));
GoblinMarketingZhengzai bean = GoblinMarketingZhengzai.getNew();
bean.setUpdatedAt(now);
bean.setDelFlag(1);
//mongo
mongoUtils.delGoodsInfoVo(marketSpuId);
//redis
redisUtils.delGoodsInfoVo(marketSpuId);
redisUtils.removeMarketRelation(GoblinStatusConst.MarketPreStatus.MARKET_PRE_ZHENGZAI.getValue(), marketId, spuId);
redisUtils.delStoreMarketIsConfig(marketId, storeId, spuId, marketSpuId);
//库存处理
GoblinGoodsInfoVo marketVo = redisUtils.getGoodsInfoVo(marketSpuId);
for (String marketSkuId : marketVo.getSkuIdList()) {
String skuId = marketSkuId.split(GoblinStatusConst.MarketPreStatus.MARKET_PRE_ZHENGZAI.getValue())[0];
//库存回滚
int restStock = redisUtils.getSkuStock(GoblinStatusConst.MarketPreStatus.MARKET_PRE_ZHENGZAI.getValue(), marketSkuId);
int restStockDe = redisUtils.decrSkuStock(GoblinStatusConst.MarketPreStatus.MARKET_PRE_ZHENGZAI.getValue(), marketSkuId, restStock);
redisUtils.incrSkuStock(null, skuId, restStock + restStockDe);
}
//mysql
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.GOBLIN_SELF_MARKET.getKey(),
SqlMapping.get("goblin.self.market.delSpuRelation", bean.getDelFlag(), bean.getUpdatedAt(), marketId, storeId, spuId));
return ResponseDto.success();
}
}
......@@ -20,6 +20,7 @@ public class ObjectUtil {
private static final ArrayList<GoblinGoodsSpecVo> goblinGoodsSpecVoArrayList = new ArrayList<>();
private static final ArrayList<GoblinMarketSpuListVo> goblinMarketSpuListVoArrayList = new ArrayList<>();
private static final ArrayList<GoblinStorePurchaseSkuVo> goblinStorePurchaseSkuVoArrayList = new ArrayList<>();
private static final ArrayList<GoblinSelfZhengzaiSkuVo> goblinSelfZhengzaiSkuVoArrayList = new ArrayList<>();
private static final BasicDBObject basicDBObject = new BasicDBObject();
......@@ -30,6 +31,7 @@ public class ObjectUtil {
public static ArrayList<GoblinFrontBannerVo> goblinFrontBannerVoArrayList() {
return (ArrayList<GoblinFrontBannerVo>) goblinFrontBannerVoArrayList.clone();
}
public static ArrayList<GoblinFrontBanner> getGoblinFrontBannerArrayList() {
return (ArrayList<GoblinFrontBanner>) goblinFrontBannerArrayList.clone();
}
......@@ -58,6 +60,11 @@ public class ObjectUtil {
return (ArrayList<GoblinStorePurchaseSkuVo>) goblinStorePurchaseSkuVoArrayList.clone();
}
public static ArrayList<GoblinSelfZhengzaiSkuVo> getGoblinSelfZhengzaiSkuVoArrayList() {
return (ArrayList<GoblinSelfZhengzaiSkuVo>) goblinSelfZhengzaiSkuVoArrayList.clone();
}
public static BasicDBObject cloneBasicDBObject() {
return (BasicDBObject) basicDBObject.clone();
}
......
......@@ -4,3 +4,7 @@ goblin.store.market.update=UPDATE goblin_store_marketing SET name=?,type=?,statu
goblin.store.market.insertRelation=INSERT INTO goblin_store_market_purchasing (`purchase_id`,`store_market_id`,`spu_id`,`sku_id`,`store_id`,`price_marketing`,`stock_marketing`,`buy_factor`,`buy_roster`,`buy_limit`,`del_flag`,`created_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)
goblin.store.market.updateRelation=UPDATE goblin_store_market_purchasing SET price_marketing=? ,stock_marketing=? , buy_factor=?,buy_roster=?,buy_limit=?,updated_at=? WHERE store_market_id =? and store_id =?
goblin.store.market.delSpuRelation=UPDATE goblin_store_market_purchasing SET del_flag = ?,updated_at = ? WHERE store_market_id =? and store_id =? and spu_id=?
goblin.self.market.insertRelation=INSERT INTO goblin_marketing_zhengzai (`zhengzai_id`,`self_market_id`,`spu_id`,`sku_id`,`store_id`,`price_marketing`,`stock_marketing`,`buy_factor`,`buy_roster`,`buy_limit`,`del_flag`,`created_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)
goblin.self.market.updateRelation=UPDATE goblin_marketing_zhengzai SET price_marketing=? ,stock_marketing=? , buy_factor=?,buy_roster=?,buy_limit=?,updated_at=? WHERE self_market_id =? and store_id =?
goblin.self.market.delSpuRelation=UPDATE goblin_marketing_zhengzai SET del_flag = ?,updated_at = ? WHERE self_market_id =? and store_id =? and spu_id=?
\ No newline at end of file
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