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

Commit 1a6e919f authored by jiangxiulong's avatar jiangxiulong

NFT订单关闭

parent ba0299d8
package com.liquidnet.service.consumer.kylin.Utils;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.service.goblin.constant.GoblinRedisConst;
import com.liquidnet.service.goblin.dto.vo.GoblinNftOrderVo;
import com.mongodb.BasicDBObject;
import com.mongodb.client.result.UpdateResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.convert.MongoConverter;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Component;
@Component
public class GoblinNftUtils {
@Autowired
private RedisUtil redisUtil;
@Autowired
private MongoTemplate mongoTemplate;
@Autowired
private MongoConverter mongoConverter;
private static final BasicDBObject basicDBObject = new BasicDBObject();
// 库存
public int decrSkuStock(String skuId, Integer stock) {
String redisKey = GoblinRedisConst.REAL_STOCK_SKU.concat(skuId);
return (int) redisUtil.decr(redisKey, stock);
}
public int incrSkuStock(String skuId, Integer stock) {
String redisKey = GoblinRedisConst.REAL_STOCK_SKU.concat(skuId);
return (int) redisUtil.incr(redisKey, stock);
}
// 回滚用户sku购买个数和库存
public void backSkuCountAndStock(String uid, String skuId, int number) {
String redisKey = GoblinRedisConst.REDIS_GOBLIN_BUY_COUNT.concat(uid + ":skuId:" + skuId);
long decr = redisUtil.decr(redisKey, number);
String redisKey2 = GoblinRedisConst.REAL_STOCK_SKU.concat(skuId);
long incr = redisUtil.incr(redisKey2, number);
}
// 订单详情vo
public void setNftOrder(GoblinNftOrderVo vo) {
String redisKey = GoblinRedisConst.REDIS_GOBLIN_NFT_ORDER_INFO.concat(vo.getOrderId());
redisUtil.set(redisKey, vo);
}
// 获取 订单详情vo
public GoblinNftOrderVo getNftOrder(String orderId) {
String redisKey = GoblinRedisConst.REDIS_GOBLIN_NFT_ORDER_INFO.concat(orderId);
Object obj = redisUtil.get(redisKey);
if (obj == null) {
return null;
} else {
return (GoblinNftOrderVo) obj;
}
}
// 订单详情vo
public void setGoblinNftOrderVo(GoblinNftOrderVo vo) {
mongoTemplate.insert(vo, GoblinNftOrderVo.class.getSimpleName());
}
public UpdateResult updateGoblinNftOrderVo(GoblinNftOrderVo data) {
BasicDBObject object = cloneBasicDBObject().append("$set", mongoConverter.convertToMongoType(data));
return mongoTemplate.getCollection(GoblinNftOrderVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("orderId").is(data.getOrderId())).getQueryObject(),
object);
}
public static BasicDBObject cloneBasicDBObject() {
return (BasicDBObject) basicDBObject.clone();
}
}
...@@ -4,13 +4,14 @@ import com.alibaba.fastjson.JSON; ...@@ -4,13 +4,14 @@ import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.liquidnet.common.cache.redis.util.RedisUtil; import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.CollectionUtil; import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.commons.lang.util.HttpUtil; import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.JsonUtils; import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.SqlMapping; import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst; import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.consumer.kylin.Utils.GoblinNftUtils;
import com.liquidnet.service.goblin.constant.GoblinRedisConst; import com.liquidnet.service.goblin.constant.GoblinRedisConst;
import com.liquidnet.service.goblin.constant.GoblinStatusConst; import com.liquidnet.service.goblin.constant.GoblinStatusConst;
import com.liquidnet.service.goblin.dto.vo.GoblinNftOrderVo;
import com.liquidnet.service.goblin.dto.vo.GoblinOrderSkuVo; import com.liquidnet.service.goblin.dto.vo.GoblinOrderSkuVo;
import com.liquidnet.service.goblin.dto.vo.GoblinStoreOrderVo; import com.liquidnet.service.goblin.dto.vo.GoblinStoreOrderVo;
import com.liquidnet.service.goblin.dto.vo.GoblinUserCouponVo; import com.liquidnet.service.goblin.dto.vo.GoblinUserCouponVo;
...@@ -42,6 +43,8 @@ public abstract class AbstractOrderCloseReceiver implements StreamListener<Strin ...@@ -42,6 +43,8 @@ public abstract class AbstractOrderCloseReceiver implements StreamListener<Strin
@Autowired @Autowired
private RedisUtil redisUtil; private RedisUtil redisUtil;
@Autowired @Autowired
private GoblinNftUtils goblinNftUtils;
@Autowired
private MongoTemplate mongoTemplate; private MongoTemplate mongoTemplate;
@Autowired @Autowired
private MongoConverter mongoConverter; private MongoConverter mongoConverter;
...@@ -76,7 +79,12 @@ public abstract class AbstractOrderCloseReceiver implements StreamListener<Strin ...@@ -76,7 +79,12 @@ public abstract class AbstractOrderCloseReceiver implements StreamListener<Strin
long durationToMillis = Duration.between(createdAt, closeTime).toMillis(); long durationToMillis = Duration.between(createdAt, closeTime).toMillis();
if (durationToMillis >= 0) { if (durationToMillis >= 0) {
return checkOrderTime(orderCode, type); if (type.equals("GOBLIN")) {
return checkOrderTime(orderCode, type);
}
if (type.equals("NFT")) {
return checkNftOrderTime(orderCode);
}
} else { } else {
try { try {
Thread.sleep(Math.abs(durationToMillis)); Thread.sleep(Math.abs(durationToMillis));
...@@ -155,6 +163,33 @@ public abstract class AbstractOrderCloseReceiver implements StreamListener<Strin ...@@ -155,6 +163,33 @@ public abstract class AbstractOrderCloseReceiver implements StreamListener<Strin
return true; return true;
} }
public boolean checkNftOrderTime(String orderId) {
LocalDateTime now = LocalDateTime.now();
try {
GoblinNftOrderVo nftOrder = goblinNftUtils.getNftOrder(orderId);
if (nftOrder.getStatus().equals(GoblinStatusConst.NftStatus.ORDER_STATUS_1.getValue())) {
// 库存购买数量回滚
goblinNftUtils.backSkuCountAndStock(nftOrder.getUserId(), nftOrder.getSkuId(), nftOrder.getNum());
// 订单状态
nftOrder.setStatus(GoblinStatusConst.NftStatus.ORDER_STATUS_3.getValue());
goblinNftUtils.setNftOrder(nftOrder);
goblinNftUtils.updateGoblinNftOrderVo(nftOrder);
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlDataOrder = CollectionUtil.linkedListObjectArr();
sqls.add(SqlMapping.get("goblin_nft_order.update.close"));
sqlDataOrder.add(new Object[]{
nftOrder.getStatus(), now, now, "超时支付关闭", nftOrder.getOrderId(), now, now
});
sendMsgByRedis(MQConst.GoblinQueue.GOBLIN_ORDER_CLOSE.getKey(),
SqlMapping.gets(sqls, sqlDataOrder));
}
} catch (Exception e) {
log.error("checkNftOrderTime异常 [valueData:{}, e:{}]", orderId, e);
}
return true;
}
private UpdateResult updateGoblinStoreOrderVo(String orderId, GoblinStoreOrderVo data) { private UpdateResult updateGoblinStoreOrderVo(String orderId, GoblinStoreOrderVo data) {
BasicDBObject object = cloneBasicDBObject().append("$set", mongoConverter.convertToMongoType(data)); BasicDBObject object = cloneBasicDBObject().append("$set", mongoConverter.convertToMongoType(data));
return mongoTemplate.getCollection(GoblinStoreOrderVo.class.getSimpleName()).updateOne( return mongoTemplate.getCollection(GoblinStoreOrderVo.class.getSimpleName()).updateOne(
......
...@@ -2,3 +2,5 @@ ...@@ -2,3 +2,5 @@
goblin_order.close.order=UPDATE goblin_store_order SET status = ? ,updated_at = ? , cancel_time = ? , cancel_reason=? WHERE order_id = ? and (updated_at <= ? or created_at = ? or updated_at is null) goblin_order.close.order=UPDATE goblin_store_order SET status = ? ,updated_at = ? , cancel_time = ? , cancel_reason=? WHERE order_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
goblin_order.close.sku=UPDATE goblin_order_sku SET status = ? ,updated_at = ? WHERE order_sku_id = ? and (updated_at <= ? or created_at = ? or updated_at is null) goblin_order.close.sku=UPDATE goblin_order_sku SET status = ? ,updated_at = ? WHERE order_sku_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
goblin_user_coupon.updateState=UPDATE goblin_user_coupon SET state = ? , used_for = ? ,updated_at = ? where ucoupon_id = ? goblin_user_coupon.updateState=UPDATE goblin_user_coupon SET state = ? , used_for = ? ,updated_at = ? where ucoupon_id = ?
#-------- NFT -------
goblin_nft_order.update.close=UPDATE goblin_nft_order SET status = ?, updated_at = ?, cancel_time = ?, cancel_reason = ? WHERE order_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
\ No newline at end of file
...@@ -262,7 +262,7 @@ public class GoblinNftOrderServiceImpl implements IGoblinNftOrderService { ...@@ -262,7 +262,7 @@ public class GoblinNftOrderServiceImpl implements IGoblinNftOrderService {
orderVo.setCreatedAt(nftOrder.getCreatedAt()); orderVo.setCreatedAt(nftOrder.getCreatedAt());
// 待支付发送队列 // 待支付发送队列
queueUtils.sendMsgByRedisGoblinStock(orderVo.getOrderCode(), nftOrder.getCreatedAt(), "NFT"); queueUtils.sendMsgByRedisGoblinStock(orderVo.getOrderId(), nftOrder.getCreatedAt(), "NFT");
// redis 订单详情 // redis 订单详情
nftOrderUtils.setNftOrder(orderVo); nftOrderUtils.setNftOrder(orderVo);
......
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