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

Commit 5120752c authored by zz's avatar zz

Merge remote-tracking branch 'origin/20240123_COUPON_SPU' into 阶梯退票_羊毛券_合并分支

parents a3097619 ae8f43aa
......@@ -118,6 +118,8 @@ public class GoblinRedisConst {
public static final String REDIS_GOBLIN_STORE_MARKET_ISCONFIG = PREFIX.concat("store:is_config:");//商铺活动-该活动配置了款式的商品
public static final String REDIS_GOBLIN_BUY_COUNT = PREFIX.concat("uid:");//用户sku购买数量 key:uid:skuId:$skuId
public static final String REDIS_GOBLIN_BUY_COUNT_IDNO = PREFIX.concat("idno:%s:%s:%s");// 实名sku购买数量 key:$idType:$idNo:$skuId
public static final String REDIS_GOBLIN_SALE_COUNT = PREFIX.concat("sale:skuId:");//用户sku购买数量 key:sale:skuId:$skuId
public static final String REDIS_GOBLIN_SALE_SPU_COUNT = PREFIX.concat("sale:spuId:");//用户sku购买数量 key:sale:skuId:$spuId
public static final String REDIS_GOBLIN_ORDER = PREFIX.concat("order:");//用户sku购买数量 key:$orderId
......
......@@ -141,6 +141,14 @@ public abstract class AbstractOrderCloseReceiver implements StreamListener<Strin
String pre = GoblinStatusConst.MarketPreStatus.getPre(skuVo.getSkuId());
incrSkuStock(pre, skuVo.getSkuId(), skuVo.getNum());
decrSkuCountByUid(orderVo.getUserId(), skuVo.getSkuId(), skuVo.getNum());
if (Objects.equals(skuVo.getSkuType(), 2)) {// 券类商品
if (Objects.equals(skuVo.getIsTrueName(), 1)) {// 需关联实名人
// 这里默认券类商品需要关联实名人且都要求关联实名人限购
decrSkuCountByIdNo(skuVo.getIdType(), skuVo.getIdNo(), skuVo.getSkuId(), skuVo.getNum());
}
}
//mysql
sqlDataSku.add(new Object[]{
skuVo.getStatus(), now, skuVo.getOrderSkuId(), now, now
......@@ -475,6 +483,11 @@ public abstract class AbstractOrderCloseReceiver implements StreamListener<Strin
return (int) redisDataSourceUtil.getRedisKylinUtil().decr(redisKey, number);
}
// 减少 关联实名人sku购买个数
public long decrSkuCountByIdNo(int idType, String idNo, String skuId, int number) {
return redisDataSourceUtil.getRedisKylinUtil().decr(String.format(GoblinRedisConst.REDIS_GOBLIN_BUY_COUNT_IDNO, idType, idNo, skuId), number);
}
// 赋值 订单相关vo
public void setGoblinOrder(String orderId, GoblinStoreOrderVo vo) {
String redisKey = GoblinRedisConst.REDIS_GOBLIN_ORDER.concat(orderId);
......
......@@ -19,6 +19,7 @@ import com.liquidnet.service.dragon.dto.DragonPayBaseReqDto;
import com.liquidnet.service.dragon.dto.DragonPayBaseRespDto;
import com.liquidnet.service.dragon.dto.DragonPayOrderQueryRespDto;
import com.liquidnet.service.dragon.service.IDragonOrdersService;
import com.liquidnet.service.goblin.constant.GoblinRedisConst;
import com.liquidnet.service.goblin.constant.GoblinStatusConst;
import com.liquidnet.service.goblin.dto.manage.AddressVo;
import com.liquidnet.service.goblin.dto.manage.GoblinOrderParam;
......@@ -37,6 +38,7 @@ import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
......@@ -92,6 +94,7 @@ public class GoblinOrderServiceImpl implements IGoblinOrderService {
preParam.setStoreName("");
preParam.setSkuName("");
preParam.setOrderIdList("");
HashMap<String, Integer> couponSkuIdNoBuyLimitMap = CollectionUtil.mapStringInteger();// 记录券类商品关联人限购KEY:NUM
try {
List<GoblinOrderStoreParam> goblinOrderStoreParamList = param.getGoblinOrderStoreParamList();//分订单
boolean isMember;
......@@ -124,6 +127,20 @@ public class GoblinOrderServiceImpl implements IGoblinOrderService {
int limitCount = skuVo.getBuyLimit() == 0 ? Integer.MAX_VALUE : skuVo.getBuyLimit();
//判断限购
if (orderUtils.noZhengzaiOrder(uid)) {
if (Objects.equals(skuVo.getSkuType(), 2)) {// 券类商品
if (skuParam.getNumber() > 1) {// 券类商品单次下单限购1
throw new LiquidnetServiceException("-1", String.format("代金券商品单次下单限购%d张", 1));
}
if (Objects.equals(skuVo.getIsTrueName(), 1)) {// 需关联实名人
int idNoLimitCount = 1;// 这里默认券类商品需要关联实名人且都要求关联实名人限购,限购数量为1
String couponSkuIdNoBuyLimitKey = String.format(GoblinRedisConst.REDIS_GOBLIN_BUY_COUNT_IDNO, skuParam.getIdType(), skuParam.getIdNo(), skuId, skuParam.getNumber());
couponSkuIdNoBuyLimitMap.put(couponSkuIdNoBuyLimitKey, skuParam.getNumber());
if (redisUtils.redisUtil.incr(couponSkuIdNoBuyLimitKey, skuParam.getNumber()) > idNoLimitCount) {
throw new LiquidnetServiceException("-1", String.format("超出限购数量,一份证件限购%d张", idNoLimitCount));
}
}
}
String res1 = orderUtils.judgeOrderLimit(uid, skuParam.getSkuId(), skuParam.getNumber(), limitCount);
if (!res1.equals("")) {
throw new Exception("已超出限购数量");
......@@ -194,6 +211,11 @@ public class GoblinOrderServiceImpl implements IGoblinOrderService {
if (params.size() > 0) {
orderUtils.backStoreCoupon(params);
}
if (!CollectionUtils.isEmpty(couponSkuIdNoBuyLimitMap)) {
couponSkuIdNoBuyLimitMap.forEach((couponSkuIdNoBuyLimitKey, number) -> {
redisUtils.redisUtil.decr(couponSkuIdNoBuyLimitKey, number);
});
}
if (e instanceof LiquidnetServiceException) {
LiquidnetServiceException lsEx = (LiquidnetServiceException) e;
return ResponseDto.failure(lsEx.getCode(), lsEx.getMessage());
......@@ -258,7 +280,7 @@ public class GoblinOrderServiceImpl implements IGoblinOrderService {
throw new Exception("不可购买");
}
if (Objects.equals(skuVo.getSkuType(), 2)) {// 券类商品
if (Objects.equals(skuVo.getIsTrueName(), 1)) {// 需要实名关联
if (Objects.equals(skuVo.getIsTrueName(), 1)) {// 需关联实名人
if (Objects.isNull(skuParam.getIdType()) || Objects.isNull(skuParam.getIdName()) || Objects.isNull(skuParam.getIdNo())) {
throw new LiquidnetServiceException("-1", "关联人信息缺失,请核实");
}
......@@ -1195,6 +1217,12 @@ public class GoblinOrderServiceImpl implements IGoblinOrderService {
if (!"超时支付自动退款".equals(backOrderVo.getDescribes())) {
redisUtils.incrSkuStock(pre, skuId, orderSkuVo.getNum());
redisUtils.decrSkuCountByUid(orderVo.getUserId(), skuId, orderSkuVo.getNum());
if (Objects.equals(orderSkuVo.getSkuType(), 2)) {// 券类商品
if (Objects.equals(orderSkuVo.getIsTrueName(), 1)) {// 需关联实名人
redisUtils.decrSkuCountByIdNo(orderSkuVo.getIdType(), orderSkuVo.getIdNo(), orderSkuVo.getSkuId(), orderSkuVo.getNum());
}
}
}
}
......
......@@ -25,7 +25,7 @@ import java.util.stream.Collectors;
@Component
public class GoblinRedisUtils {
@Autowired
RedisUtil redisUtil;
public RedisUtil redisUtil;
@Autowired
GoblinMongoUtils goblinMongoUtils;
......@@ -361,6 +361,11 @@ public class GoblinRedisUtils {
return (int) redisUtil.decr(redisKey, number);
}
// 减少 关联实名人sku购买个数
public long decrSkuCountByIdNo(int idType, String idNo, String skuId, int number) {
return redisUtil.decr(String.format(GoblinRedisConst.REDIS_GOBLIN_BUY_COUNT_IDNO, idType, idNo, skuId), number);
}
// 增加 sku销量
public int incrSkuSaleCount(String spuId, String skuId, int number) {
String redisKey = GoblinRedisConst.REDIS_GOBLIN_SALE_COUNT.concat(skuId);
......
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