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

Commit 5422f5b1 authored by 胡佳晨's avatar 胡佳晨

修改消费 退券逻辑

parent c8bf5823
package com.liquidnet.service.consumer.kylin.receiver; package com.liquidnet.service.consumer.kylin.receiver;
import com.alibaba.fastjson.JSON;
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.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.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.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.param.BackCouponParam;
import com.mongodb.BasicDBObject; import com.mongodb.BasicDBObject;
import com.mongodb.client.result.UpdateResult; import com.mongodb.client.result.UpdateResult;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.convert.MongoConverter; import org.springframework.data.mongodb.core.convert.MongoConverter;
import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Criteria;
...@@ -21,12 +29,11 @@ import org.springframework.data.redis.connection.stream.MapRecord; ...@@ -21,12 +29,11 @@ import org.springframework.data.redis.connection.stream.MapRecord;
import org.springframework.data.redis.connection.stream.StreamRecords; import org.springframework.data.redis.connection.stream.StreamRecords;
import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.stream.StreamListener; import org.springframework.data.redis.stream.StreamListener;
import org.springframework.util.MultiValueMap;
import java.time.Duration; import java.time.Duration;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.HashMap; import java.util.*;
import java.util.LinkedList;
import java.util.Map;
@Slf4j @Slf4j
public abstract class AbstractOrderCloseReceiver implements StreamListener<String, MapRecord<String, String, String>> { public abstract class AbstractOrderCloseReceiver implements StreamListener<String, MapRecord<String, String, String>> {
...@@ -38,6 +45,8 @@ public abstract class AbstractOrderCloseReceiver implements StreamListener<Strin ...@@ -38,6 +45,8 @@ public abstract class AbstractOrderCloseReceiver implements StreamListener<Strin
private MongoTemplate mongoTemplate; private MongoTemplate mongoTemplate;
@Autowired @Autowired
private MongoConverter mongoConverter; private MongoConverter mongoConverter;
@Value("${liquidnet.service.candy.url}")
private String candyUrl;
@Override @Override
public void onMessage(MapRecord<String, String, String> message) { public void onMessage(MapRecord<String, String, String> message) {
...@@ -119,6 +128,13 @@ public abstract class AbstractOrderCloseReceiver implements StreamListener<Strin ...@@ -119,6 +128,13 @@ public abstract class AbstractOrderCloseReceiver implements StreamListener<Strin
orderVo.setStatus(GoblinStatusConst.Status.ORDER_STATUS_5.getValue()); orderVo.setStatus(GoblinStatusConst.Status.ORDER_STATUS_5.getValue());
updateGoblinStoreOrderVo(orderVo.getOrderId(), orderVo); updateGoblinStoreOrderVo(orderVo.getOrderId(), orderVo);
setGoblinOrder(orderVo.getOrderId(), orderVo); setGoblinOrder(orderVo.getOrderId(), orderVo);
//店铺券退券
BackCouponParam backCouponParam = BackCouponParam.getNew();
backCouponParam.setuCouponIds(orderVo.getStoreCouponId());
backCouponParam.setUid(orderVo.getUserId());
backStoreCoupon(backCouponParam);
//平台券
backCoupon(orderVo.getUcouponId(), orderVo.getUserId());
//mysql //mysql
sqlDataOrder.add(new Object[]{ sqlDataOrder.add(new Object[]{
orderVo.getStatus(), now, now, "超时关闭", orderVo.getOrderId(), now, now orderVo.getStatus(), now, now, "超时关闭", orderVo.getOrderId(), now, now
...@@ -129,8 +145,8 @@ public abstract class AbstractOrderCloseReceiver implements StreamListener<Strin ...@@ -129,8 +145,8 @@ public abstract class AbstractOrderCloseReceiver implements StreamListener<Strin
} }
} }
} }
}catch (Exception e){ } catch (Exception e) {
log.error("库存回滚异常valueData={}",valueData, e); log.error("库存回滚异常valueData={}", valueData, e);
} }
return true; return true;
} }
...@@ -214,11 +230,81 @@ public abstract class AbstractOrderCloseReceiver implements StreamListener<Strin ...@@ -214,11 +230,81 @@ public abstract class AbstractOrderCloseReceiver implements StreamListener<Strin
stringRedisTemplate.opsForStream().add(StreamRecords.mapBacked(map).withStreamKey(streamKey)); stringRedisTemplate.opsForStream().add(StreamRecords.mapBacked(map).withStreamKey(streamKey));
} }
public Boolean backStoreCoupon(BackCouponParam params) {
try {
List<GoblinUserCouponVo> voList = getUserCouponVos(params.getUid());
for (GoblinUserCouponVo vo : voList) {
if (vo.getUcouponId().equals(params.getuCouponIds())) {
if (LocalDateTime.now().isBefore(vo.getDuedAt())) {
vo.setState(1);
vo.setUsedFor("");
setUserCouponVos(params.getUid(), voList);
changeCouponVos(vo.getUcouponId(), vo);
sendMsgByRedis(MQConst.GoblinQueue.SQL_COUPON.getKey(),
SqlMapping.get("goblin_user_coupon.updateState", vo.getState(), vo.getUsedFor(), LocalDateTime.now(), vo.getUcouponId()));
}
break;
}
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
public void backCoupon(String uCouponId, String uid) {
try {
com.liquidnet.service.candy.param.BackCouponParam param = com.liquidnet.service.candy.param.BackCouponParam.getNew();
param.setuCouponIds(uCouponId);
param.setUid(uid);
MultiValueMap<String, String> header = CollectionUtil.linkedMultiValueMapStringString();
header.add("Authorization", "Bearer " + CurrentUtil.getToken());
header.add("Accept", "application/json;charset=UTF-8");
ArrayList<com.liquidnet.service.candy.param.BackCouponParam> params = new ArrayList();
params.add(param);
String jsonString = JSON.toJSONString(params);
String returnData = HttpUtil.postRaw(candyUrl + "/candy-coupon/useBack", jsonString, header);
} catch (Exception e) {
log.error("回退券ERROR:{}", e);
}
}
public List<GoblinUserCouponVo> getUserCouponVos(String uid) {
String rk = GoblinRedisConst.USER_COUPON.concat(uid);
String valStr = (String) redisUtil.get(rk);
List<GoblinUserCouponVo> vos;
if (org.springframework.util.StringUtils.isEmpty(valStr)) {
return getGoblinUserCouponVo();
} else {
vos = JsonUtils.fromJson(valStr, new TypeReference<List<GoblinUserCouponVo>>() {
});
}
return vos;
}
public Boolean changeCouponVos(String ucouponId, GoblinUserCouponVo vo) {
return mongoTemplate.getCollection(GoblinUserCouponVo.class.getSimpleName())
.updateOne(Query.query(Criteria.where("ucouponId").is(ucouponId)).getQueryObject(),
cloneBasicDBObject().append("$set", mongoConverter.convertToMongoType(vo))
).getModifiedCount() > 0;
}
public boolean setUserCouponVos(String uid, List<GoblinUserCouponVo> vos) {
return redisUtil.set(GoblinRedisConst.USER_COUPON.concat(uid), JsonUtils.toJson(vos));
}
private static final BasicDBObject basicDBObject = new BasicDBObject(); private static final BasicDBObject basicDBObject = new BasicDBObject();
private static final ArrayList<GoblinUserCouponVo> goblinUserCouponVo = new ArrayList<>();
public static BasicDBObject cloneBasicDBObject() { public static BasicDBObject cloneBasicDBObject() {
return (BasicDBObject) basicDBObject.clone(); return (BasicDBObject) basicDBObject.clone();
} }
public static ArrayList<GoblinUserCouponVo> getGoblinUserCouponVo() {
return (ArrayList<GoblinUserCouponVo>) goblinUserCouponVo.clone();
}
} }
\ 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