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

Commit 37b1b734 authored by 胡佳晨's avatar 胡佳晨

提交 配置 优先购

parent c3d61cd8
......@@ -123,10 +123,6 @@ public class GoblinRedisConst {
public static final String REDIS_GOBLIN_TEMP_COUPON_MARKET = PREFIX.concat("temp:coupon:marketId:");//id 列表 $key:$marketId
public static final String REDIS_GOBLIN_TEMP_COUPON = PREFIX.concat("temp:coupon:");//详情 $key:$ucouponId
public static final String REDIS_BLACK = PREFIX.concat("black:");//黑名单 key:$skuId:$mobile
public static final String REDIS_WHITE = PREFIX.concat("white:");//白名单 key:$skuId:$mobile
/* --------------------------------NFT--------------------------------- */
/*public static final String REDIS_GOBLIN_NFT_ORDER_INFO = PREFIX.concat("nftOrder:");// nft订单详情 orderId
public static final String REDIS_GOBLIN_NFT_ORDER_ID_OF_CODE = PREFIX.concat("nftOrder:orderCode:");// nft订单ID获取 orderCode
......@@ -160,7 +156,7 @@ public class GoblinRedisConst {
*/
public static final String STORE_COUPON = PREFIX.concat("s_coupon:");
/**
* 商铺活动:优惠券适用商品ID集合
* 商铺活动:优惠券适用商品ID集合item
* {goblin:s_coupon_r:${store_coupon_id}, JsonUtils.toJson(List<String:spu_id>)}
*/
public static final String STORE_COUPON_RULE = PREFIX.concat("s_coupon_r:");
......@@ -248,6 +244,9 @@ public class GoblinRedisConst {
public static final String NFT_PAY_TYPE = PREFIX.concat("nft:payType");
public static final String LIST_DETAILS = PREFIX.concat("list:");//名单列表详情 $key:$listId
public static final String REDIS_BLACK = PREFIX.concat("black:");//黑名单 key:$skuId:$mobile
public static final String REDIS_WHITE = PREFIX.concat("white:");//白名单 key:$skuId:$mobile
public static final String LIST_COLLECT = PREFIX.concat("list:collect");//名单列表详情 $key:$skuId
/* ----------------------------------------------------------------- */
/* ----------------------------------------------------------------- */
......
package com.liquidnet.service.goblin.dto.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
public class GoblinListCollectVo implements Serializable, Cloneable{
@ApiModelProperty(value = "spuId")
private String spuId;
@ApiModelProperty(value = "skuId")
private String skuId;
@ApiModelProperty(value = "标签[0-提前购买|1-分段购买]")
private Integer tagType;
@ApiModelProperty(value = "android价格")
private BigDecimal price;
@ApiModelProperty(value = "苹果价格")
private BigDecimal priceV;
@ApiModelProperty(value = "苹果价格id")
private String productId;
@ApiModelProperty(value = "开始时间")
private LocalDateTime timeStart;
@ApiModelProperty(value = "结束时间")
private LocalDateTime timeEnd;
private static final GoblinListCollectVo obj = new GoblinListCollectVo();
public static GoblinListCollectVo getNew() {
try {
return (GoblinListCollectVo) obj.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new GoblinListCollectVo();
}
}
......@@ -3,7 +3,9 @@ package com.liquidnet.service.goblin.dto.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
public class GoblinListDetailsItemVo implements Serializable, Cloneable{
......@@ -13,11 +15,18 @@ public class GoblinListDetailsItemVo implements Serializable, Cloneable{
private String skuId;
@ApiModelProperty(value = "sku名称")
private String skuName;
@ApiModelProperty(value = "线上库存")
private Integer stock;
@ApiModelProperty(value = "剩余库存")
private Integer surplusStock;
@ApiModelProperty(value = "android价格")
private BigDecimal price;
@ApiModelProperty(value = "库存")
private Integer skuStock;
@ApiModelProperty(value = "苹果价格")
private BigDecimal priceV;
@ApiModelProperty(value = "苹果价格id")
private String productId;
private static final GoblinListDetailsItemVo obj = new GoblinListDetailsItemVo();
public static GoblinListDetailsItemVo getNew() {
......
......@@ -18,8 +18,14 @@ public class GoblinListDetailsVo implements Serializable, Cloneable {
private Integer whiteType;
@ApiModelProperty(value = "优先购文件地址")
private String whiteUrl;
@ApiModelProperty(value = "优先购提前时间")
private Integer advanceMin;
@ApiModelProperty(value = "标签[0-提前购买|1-分段购买]")
private Integer tagType;
@ApiModelProperty(value = "开始时间")
private String timeStart;
@ApiModelProperty(value = "结束时间")
private String timeEnd;
@ApiModelProperty(value = "黑名单文件地址")
private String blackUrl;
@ApiModelProperty(value = "商品数据")
......
......@@ -12,8 +12,10 @@ public class GoblinListVo implements Serializable, Cloneable {
private String listId;
@ApiModelProperty(value = "优先购名称")
private String name;
@ApiModelProperty(value = "优先购提前时间")
private Integer advanceMin;
@ApiModelProperty(value = "开始时间")
private String timeStart;
@ApiModelProperty(value = "结束时间")
private String timeEnd;
@ApiModelProperty(value = "是否有黑名单[1-有|2-无]")
private Integer hasBlack;
@ApiModelProperty(value = "商品数量")
......
......@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
@Data
public class GoblinListCreateItemParam {
......@@ -13,4 +14,17 @@ public class GoblinListCreateItemParam {
@ApiModelProperty(value = "skuId")
@NotNull(message = "skuId不能为空")
private String skuId;
@ApiModelProperty(value = "android价格")
@NotNull(message = "price不能为空")
private BigDecimal price;
@ApiModelProperty(value = "库存")
@NotNull(message = "库存不能为空")
private Integer skuStock;
@ApiModelProperty(value = "苹果价格")
@NotNull(message = "苹果价格不能为空")
private BigDecimal priceV;
@ApiModelProperty(value = "苹果价格id")
@NotNull(message = "苹果价格id不能为空")
private String productId;
}
......@@ -14,11 +14,16 @@ public class GoblinListCreateParam {
@ApiModelProperty(value = "优先购类型[0-会员|1-指定用户]")
@NotNull(message = "优先购类型不能为空")
private Integer whiteType;
@ApiModelProperty(value = "标签[0-提前购买|1-分段购买]")
@NotNull(message = "标签类型不能为空")
private Integer tagType;
@ApiModelProperty(value = "优先购文件地址")
private String whiteUrl;
@ApiModelProperty(value = "优先购提前时间")
@NotNull(message = "优先购提前时间不能为空")
private Integer advanceMin;
@ApiModelProperty(value = "开始时间")
@NotNull(message = "开始时间不能为空")
private String timeStart;
@ApiModelProperty(value = "结束时间")
private String timeEnd;
@ApiModelProperty(value = "黑名单文件地址")
private String blackUrl;
@ApiModelProperty(value = "商品数据")
......
......@@ -44,15 +44,25 @@ public class GoblinList implements Serializable {
*/
private Integer whiteType;
/**
* 标签[0-提前购买|1-分段购买]
*/
private Integer tagType;
/**
* 白名单xls地址
*/
private String whiteUrl;
/**
* 提前购买时间
* 开始时间
*/
private LocalDateTime timeStart;
/**
* 结束时间
*/
private Integer advanceMin;
private LocalDateTime timeEnd;
/**
* 黑名单类型[0-会员|1-指定用户]
......
......@@ -8,10 +8,7 @@ import com.liquidnet.service.base.PagedResult;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsSkuInfoVo;
import com.liquidnet.service.goblin.dto.vo.GoblinListDetailsItemVo;
import com.liquidnet.service.goblin.dto.vo.GoblinListDetailsVo;
import com.liquidnet.service.goblin.dto.vo.GoblinListVo;
import com.liquidnet.service.goblin.dto.vo.*;
import com.liquidnet.service.goblin.param.GoblinListCreateItemParam;
import com.liquidnet.service.goblin.param.GoblinListCreateParam;
import com.liquidnet.service.goblin.param.GoblinListUpdateParam;
......@@ -24,10 +21,13 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import static com.liquidnet.commons.lang.util.DateUtil.DTF_YMD_HMS;
/**
* <p>
* 商城-名单表 服务实现类
......@@ -56,7 +56,8 @@ public class GoblinListServiceImpl implements IGoblinListService {
GoblinListVo vo = GoblinListVo.getNew();
vo.setListId(item.getListId());
vo.setName(item.getName());
vo.setAdvanceMin(item.getAdvanceMin());
vo.setTimeStart(item.getTimeStart());
vo.setTimeEnd(item.getTimeEnd());
vo.setSkuCount(item.getItemVo().size());
vo.setHasBlack(item.getBlackUrl().equals("") ? 0 : 1);
}
......@@ -74,25 +75,26 @@ public class GoblinListServiceImpl implements IGoblinListService {
for (GoblinListDetailsItemVo item : vo.getItemVo()) {
GoblinGoodsSkuInfoVo skuVo = redisUtils.getGoodsSkuInfoVo(item.getSkuId());
item.setSkuName(skuVo.getName());
if (skuVo.getUnbox().equals("0")) {
item.setSurplusStock(redisUtils.getSkuStock(null, item.getSkuId()));
item.setStock(skuVo.getSkuStock());
} else {
List<String> skuIdList = redisUtils.getGoodsInfoVo(item.getSpuId()).getSkuIdList();
int surplusStock = 0;
int stock = 0;
for (String skuIdItem : skuIdList) {// 盲盒计算所有sku库存总数
if (skuIdItem.equals(item.getSkuId())) {// 过滤自己
stock += skuVo.getSkuStock();
continue;
}
GoblinGoodsSkuInfoVo itemVo = redisUtils.getGoodsSkuInfoVo(skuIdItem);
surplusStock += redisUtils.getSkuAllStatusStock(itemVo);
stock += itemVo.getSkuStock();
}
item.setSurplusStock(surplusStock);
item.setStock(stock);
}
item.setSurplusStock(redisUtils.getSkuStock(listId, skuVo.getSkuId()));
// if (skuVo.getUnbox().equals("0")) {
// item.setSurplusStock(redisUtils.getSkuStock(null, item.getSkuId()));
// item.setStock(skuVo.getSkuStock());
// } else {
// List<String> skuIdList = redisUtils.getGoodsInfoVo(item.getSpuId()).getSkuIdList();
// int surplusStock = 0;
// int stock = 0;
// for (String skuIdItem : skuIdList) {// 盲盒计算所有sku库存总数
// if (skuIdItem.equals(item.getSkuId())) {// 过滤自己
// stock += skuVo.getSkuStock();
// continue;
// }
// GoblinGoodsSkuInfoVo itemVo = redisUtils.getGoodsSkuInfoVo(skuIdItem);
// surplusStock += redisUtils.getSkuAllStatusStock(itemVo);
// stock += itemVo.getSkuStock();
// }
// item.setSurplusStock(surplusStock);
// item.setStock(stock);
// }
}
return ResponseDto.success(vo);
}
......@@ -106,12 +108,50 @@ public class GoblinListServiceImpl implements IGoblinListService {
LinkedList<Object[]> goblinListDetails = CollectionUtil.linkedListObjectArr();
LocalDateTime now = LocalDateTime.now();
//时间
if (param.getItemParams().size() > 1) {
return ResponseDto.failure("只能配置一个sku");
}
String skuId = param.getItemParams().get(0).getSkuId();
GoblinGoodsSkuInfoVo skuInfoVo = redisUtils.getGoodsSkuInfoVo(skuId);
LocalDateTime st = LocalDateTime.parse(param.getTimeStart(), DTF_YMD_HMS);
LocalDateTime et = null;
List<GoblinListCollectVo> collectVos;
if (param.getTimeEnd() != null) {//传结束时间
et = LocalDateTime.parse(param.getTimeEnd(), DTF_YMD_HMS);
if (st.isAfter(et)) {
return ResponseDto.failure("开始时间不能晚于结束时间");
}
if (et.isAfter(skuInfoVo.getSaleStartTime())) {
return ResponseDto.failure("结束时间不能晚于商品开售时间");
}
collectVos = redisUtils.getGoblinListCollect(skuId);
for (GoblinListCollectVo collectItem : collectVos) {
if (st.isAfter(collectItem.getTimeStart()) || st.isBefore(collectItem.getTimeEnd()) ||
et.isAfter(collectItem.getTimeStart()) || et.isBefore(collectItem.getTimeEnd())) {
return ResponseDto.failure("sku时间不能重合");
}
}
} else {//未结束时间
if (st.isAfter(skuInfoVo.getSaleStartTime())) {
return ResponseDto.failure("结束时间不能晚于商品开售时间");
}
collectVos = redisUtils.getGoblinListCollect(skuId);
for (GoblinListCollectVo collectItem : collectVos) {
if (st.isAfter(collectItem.getTimeStart()) || st.isBefore(collectItem.getTimeEnd())) {
return ResponseDto.failure("sku时间不能重合");
}
}
}
GoblinListDetailsVo vo = GoblinListDetailsVo.getNew();
List<GoblinListDetailsItemVo> voItemList = ObjectUtil.goblinListDetailsItemVoArrayList();
vo.setListId(IDGenerator.nextTimeId2());
vo.setUid(CurrentUtil.getCurrentUid());
vo.setName(param.getName());
vo.setAdvanceMin(param.getAdvanceMin());
vo.setTagType(param.getTagType());
vo.setTimeStart(param.getTimeStart());
vo.setTimeEnd(param.getTimeEnd());
vo.setWhiteType(param.getWhiteType());
//判断 白名单类型
if (param.getWhiteType().equals(1)) {//需要xls文件
......@@ -127,19 +167,43 @@ public class GoblinListServiceImpl implements IGoblinListService {
GoblinListDetailsItemVo itemVo = GoblinListDetailsItemVo.getNew();
itemVo.setSkuId(item.getSkuId());
itemVo.setSpuId(item.getSpuId());
itemVo.setPrice(item.getPrice());
itemVo.setPriceV(item.getPriceV());
itemVo.setSkuStock(item.getSkuStock());
itemVo.setProductId(item.getProductId());
//库存
int skuStock = redisUtils.decrSkuStock(null, itemVo.getSkuId(), itemVo.getSkuStock());
if (skuStock < 0) {
redisUtils.incrSkuStock(null, itemVo.getSkuId(), itemVo.getSkuStock());
return ResponseDto.failure("库存不足");
} else {
redisUtils.setSkuStock(vo.getListId(), itemVo.getSkuId(), itemVo.getSkuStock());
}
//集合
GoblinListCollectVo collectVo = GoblinListCollectVo.getNew();
collectVo.setSpuId(itemVo.getSpuId());
collectVo.setSkuId(itemVo.getSkuId());
collectVo.setPrice(itemVo.getPrice());
collectVo.setPriceV(itemVo.getPriceV());
collectVo.setProductId(itemVo.getProductId());
collectVo.setTimeStart(st);
collectVo.setTimeEnd(et);
collectVo.setTagType(vo.getTagType());
collectVos.add(collectVo);
redisUtils.setGoblinListCollect(itemVo.getSkuId(), collectVos);
// 白名单
queueUtils.sendMsgByRedisXls(param.getWhiteUrl(), "", "3", item.getSkuId());
// 黑名单
queueUtils.sendMsgByRedisXls(param.getBlackUrl(), "", "4", item.getSkuId());
goblinListDetails.add(new Object[]{
vo.getListId(), itemVo.getSpuId(), itemVo.getSkuId(), now
vo.getListId(), itemVo.getSpuId(), itemVo.getSkuId(), now, itemVo.getSkuStock(), itemVo.getPriceV(), itemVo.getProductId(), itemVo.getPrice()
});
}
vo.setItemVo(voItemList);
redisUtils.setGoblinListDetailsVo(vo);
mongoUtils.insertGoblinListDetailsVo(vo);
goblinList.add(new Object[]{
vo.getListId(), vo.getUid(), vo.getName(), vo.getWhiteType(), vo.getWhiteUrl(), vo.getAdvanceMin(), vo.getBlackUrl(), now
vo.getListId(), vo.getUid(), vo.getName(), vo.getWhiteType(), vo.getWhiteUrl(), vo.getTimeStart(), vo.getTimeEnd(), vo.getTagType(), vo.getBlackUrl(), now
});
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.GOBLIN_STORE_MARKET.getKey(), SqlMapping.gets(sqls, goblinList, goblinListDetails));
return ResponseDto.success();
......@@ -175,7 +239,7 @@ public class GoblinListServiceImpl implements IGoblinListService {
}
redisUtils.setGoblinListDetailsVo(vo);
mongoUtils.changeGoblinListDetailsVo(param.getListId(), vo);
//todo sql入库
//sql入库
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.GOBLIN_STORE_MARKET.getKey(),
SqlMapping.get("goblin_list_update", param.getWhiteUrl(), param.getWhiteType(), param.getBlackUrl(), now, param.getListId()));
return ResponseDto.success();
......
......@@ -1736,6 +1736,22 @@ public class GoblinRedisUtils {
}
}
/**
* 设置 分批购数据
*/
public void setGoblinListCollect(String skuId,List<GoblinListCollectVo> vo) {
redisUtil.set(GoblinRedisConst.LIST_COLLECT.concat(skuId), vo);
}
public List<GoblinListCollectVo> getGoblinListCollect(String skuId) {
Object obj = redisUtil.get(GoblinRedisConst.LIST_COLLECT.concat(skuId));
if(obj==null){
return ObjectUtil.getGoblinStoreCouponVoArrayList()
}else{
return (List<GoblinListCollectVo>) obj;
}
}
/* ---------------------------------------- ---------------------------------------- */
/* ---------------------------------------- ---------------------------------------- */
}
......@@ -20,6 +20,7 @@ import com.mongodb.client.model.WriteModel;
import org.bson.Document;
import java.util.ArrayList;
import java.util.List;
public class ObjectUtil {
private static final PagedResult<GoblinStoreMgtGoodsListVo> goblinStoreMgtGoodsVoPagedResult = new PagedResult<>();
......@@ -91,13 +92,17 @@ public class ObjectUtil {
private static final ArrayList<GoblinStoreMgtGoodsSkuListVo> goblinStoreMgtGoodsSkuListVoArrayList = new ArrayList<>();
private static final ArrayList<GoblinNftGoodsSkuListJobVo> goblinNftGoodsSkuListJobVoArrayList = new ArrayList<>();
private static final ArrayList<GoblinListDetailsItemVo> goblinListDetailsItemVoArrayList = new ArrayList<>();
private static final ArrayList<GoblinListCollectVo> goblinListCollectVo = new ArrayList<>();
private static final BasicDBObject basicDBObject = new BasicDBObject();
private static final ArrayList<WriteModel<Document>> writeModelDocumentArrayList = new ArrayList<>();
public static ArrayList<GoblinListVo> getGoblinListVo() {
return (ArrayList<GoblinListVo>) goblinListVo.clone();
}
public static ArrayList<GoblinListCollectVo> getGoblinListCollectVo() {
return (ArrayList<GoblinListCollectVo>) goblinListCollectVo.clone();
}
public static PagedResult<GoblinStoreMgtGoodsListVo> getGoblinStoreMgtGoodsVoPagedResult() {
return goblinStoreMgtGoodsVoPagedResult.clone();
......@@ -166,6 +171,7 @@ public class ObjectUtil {
public static ArrayList<GoblinGoodsInfoListVo> getGoblinGoodsInfoListVo() {
return (ArrayList<GoblinGoodsInfoListVo>) goblinGoodsInfoListVo.clone();
}
public static ArrayList<GoblinUserCouponVo> getGoblinUserCouponVo() {
return (ArrayList<GoblinUserCouponVo>) goblinUserCouponVo.clone();
}
......
......@@ -150,6 +150,6 @@ adam_user_busi_acct.add=INSERT INTO adam_user_busi_acct (`uid`, busi, uuid, `wor
#---- \u9ED1\u767D\u540D\u5355 ----
goblin_list_insert = "INSERT INTO goblin_list (`list_id`,`uid`,`name`,`white_type`,`white_url`,`advance_min``,`black_url`,`created_at`) VALUES (?,?,?,?,?,?,?,?)"
goblin_list_detail_insert = "INSERT INTO goblin_list_details (`list_id`,`spu_id`,`sku_id`,`created_at`) VALUES (?,?,?,?)"
goblin_list_insert = "INSERT INTO goblin_list (`list_id`,`uid`,`name`,`white_type`,`white_url`,`time_start`,`time_end`,`tag_type`,`black_url`,`created_at`) VALUES (?,?,?,?,?,?,?,?,?,?)"
goblin_list_detail_insert = "INSERT INTO goblin_list_details (`list_id`,`spu_id`,`sku_id`,`created_at`,`sku_stock`,`price_v`,`product_id`,`price`) VALUES (?,?,?,?,?,?,?,?)"
goblin_list_update = "UPDATE goblin_list SET white_url = ? ,white_type = ? , black_url = ? , updated_at = ? WHERE list_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