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

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

Merge branch 'pre' into 'master'

Pre

See merge request !360
parents 39752a6a 69de7d89
...@@ -119,7 +119,7 @@ public class GoblinRedisConst { ...@@ -119,7 +119,7 @@ public class GoblinRedisConst {
public static final String REDIS_GOBLIN_BUY_COUNT = PREFIX.concat("uid:");//用户sku购买数量 key:uid:skuId:$skuId 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_BUY_COUNT_IDNO = PREFIX.concat("idcard:%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_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_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 public static final String REDIS_GOBLIN_ORDER = PREFIX.concat("order:");//用户sku购买数量 key:$orderId
......
...@@ -184,9 +184,10 @@ public class GoblinOrderServiceImpl implements IGoblinOrderService { ...@@ -184,9 +184,10 @@ public class GoblinOrderServiceImpl implements IGoblinOrderService {
} }
if (Objects.equals(skuVo.getIsTrueName(), 1)) {// 需关联实名人 if (Objects.equals(skuVo.getIsTrueName(), 1)) {// 需关联实名人
int idNoLimitCount = 1;// 这里默认券类商品需要关联实名人且都要求关联实名人限购,限购数量为1 int idNoLimitCount = 1;// 这里默认券类商品需要关联实名人且都要求关联实名人限购,限购数量为1
String couponSkuIdNoBuyLimitKey = String.format(GoblinRedisConst.REDIS_GOBLIN_BUY_COUNT_IDNO, skuParam.getIdType(), skuParam.getIdNo(), skuId, skuParam.getNumber()); String couponSkuIdNoBuyLimitKey = String.format(GoblinRedisConst.REDIS_GOBLIN_BUY_COUNT_IDNO, skuParam.getIdType(), skuParam.getIdNo(), skuId);
long incrRstNum = redisUtils.redisUtil.incr(couponSkuIdNoBuyLimitKey, skuParam.getNumber());
couponSkuIdNoBuyLimitMap.put(couponSkuIdNoBuyLimitKey, skuParam.getNumber()); couponSkuIdNoBuyLimitMap.put(couponSkuIdNoBuyLimitKey, skuParam.getNumber());
if (redisUtils.redisUtil.incr(couponSkuIdNoBuyLimitKey, skuParam.getNumber()) > idNoLimitCount) { if (incrRstNum > idNoLimitCount) {
throw new LiquidnetServiceException("-1", String.format("超过限购数量,一个证件信息限购%d张", idNoLimitCount)); throw new LiquidnetServiceException("-1", String.format("超过限购数量,一个证件信息限购%d张", idNoLimitCount));
} }
} }
...@@ -194,7 +195,7 @@ public class GoblinOrderServiceImpl implements IGoblinOrderService { ...@@ -194,7 +195,7 @@ public class GoblinOrderServiceImpl implements IGoblinOrderService {
} }
//库存回滚 //库存回滚
if (surplusGeneral < 0) { if (surplusGeneral < 0) {
return orderUtils.orderException(skuAndPreListAndNumber, platformCodeList, storeCodeList, uid, "库存不足"); return orderUtils.orderException(skuAndPreListAndNumber, platformCodeList, storeCodeList, uid, "库存不足", couponSkuIdNoBuyLimitMap);
// throw new Exception("库存不足"); // throw new Exception("库存不足");
} }
}//GoblinOrderSkuParam }//GoblinOrderSkuParam
...@@ -216,7 +217,7 @@ public class GoblinOrderServiceImpl implements IGoblinOrderService { ...@@ -216,7 +217,7 @@ public class GoblinOrderServiceImpl implements IGoblinOrderService {
orderSqlParams.add(sqlParam); orderSqlParams.add(sqlParam);
}//GoblinOrderStoreParam }//GoblinOrderStoreParam
if (preParam.getOrderIdList().equals("")) { if (preParam.getOrderIdList().equals("")) {
return orderUtils.orderException(skuAndPreListAndNumber, platformCodeList, storeCodeList, uid, "参数异常"); return orderUtils.orderException(skuAndPreListAndNumber, platformCodeList, storeCodeList, uid, "参数异常", couponSkuIdNoBuyLimitMap);
// throw new Exception("参数异常"); // throw new Exception("参数异常");
} }
ResponseDto<GoblinPayInnerResultVo> data = payOrder(preParam, orderSqlParams, uid); ResponseDto<GoblinPayInnerResultVo> data = payOrder(preParam, orderSqlParams, uid);
...@@ -254,9 +255,9 @@ public class GoblinOrderServiceImpl implements IGoblinOrderService { ...@@ -254,9 +255,9 @@ public class GoblinOrderServiceImpl implements IGoblinOrderService {
if (params.size() > 0) { if (params.size() > 0) {
orderUtils.backStoreCoupon(params); orderUtils.backStoreCoupon(params);
} }
if (!CollectionUtils.isEmpty(couponSkuIdNoBuyLimitMap)) { if (!CollectionUtils.isEmpty(couponSkuIdNoBuyLimitMap)) {// 券类商品实名限购回滚
couponSkuIdNoBuyLimitMap.forEach((couponSkuIdNoBuyLimitKey, number) -> { couponSkuIdNoBuyLimitMap.forEach((couponSkuIdNoBuyLimitKey, numb) -> {
redisUtils.redisUtil.decr(couponSkuIdNoBuyLimitKey, number); redisUtils.redisUtil.decr(couponSkuIdNoBuyLimitKey, numb);
}); });
} }
if (e instanceof LiquidnetServiceException) { if (e instanceof LiquidnetServiceException) {
......
...@@ -23,6 +23,7 @@ import lombok.extern.slf4j.Slf4j; ...@@ -23,6 +23,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.util.MultiValueMap; import org.springframework.util.MultiValueMap;
import java.math.BigDecimal; import java.math.BigDecimal;
...@@ -526,7 +527,9 @@ public class GoblinOrderUtils { ...@@ -526,7 +527,9 @@ public class GoblinOrderUtils {
} }
//订单异常处理 //订单异常处理
public ResponseDto<GoblinPayInnerResultVo> orderException(List<String> skuAndPreListAndNumber, List<String> platformCodeList, List<String> storeCodeList, String uid, String message) { public ResponseDto<GoblinPayInnerResultVo> orderException(List<String> skuAndPreListAndNumber, List<String> platformCodeList,
List<String> storeCodeList, String uid, String message,
HashMap<String, Integer> couponSkuIdNoBuyLimitMap) {
long time3 = System.currentTimeMillis(); long time3 = System.currentTimeMillis();
//回顾限购 回滚库存 //回顾限购 回滚库存
for (String item : skuAndPreListAndNumber) { for (String item : skuAndPreListAndNumber) {
...@@ -554,6 +557,12 @@ public class GoblinOrderUtils { ...@@ -554,6 +557,12 @@ public class GoblinOrderUtils {
if (params.size() > 0) { if (params.size() > 0) {
backStoreCoupon(params); backStoreCoupon(params);
} }
// 这里加的'券类商品实名限购回滚'是因为这里'库存不足'没按异常处理
if (!CollectionUtils.isEmpty(couponSkuIdNoBuyLimitMap)) {// 券类商品实名限购回滚
couponSkuIdNoBuyLimitMap.forEach((couponSkuIdNoBuyLimitKey, numb) -> {
redisUtils.redisUtil.decr(couponSkuIdNoBuyLimitKey, numb);
});
}
log.info("回滚逻辑 " + (System.currentTimeMillis() - time3) + "ms"); log.info("回滚逻辑 " + (System.currentTimeMillis() - time3) + "ms");
if (message == null && !message.equals("")) { if (message == null && !message.equals("")) {
return ResponseDto.failure(ErrorMapping.get("20018"));//乱七八糟异常 return ResponseDto.failure(ErrorMapping.get("20018"));//乱七八糟异常
......
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