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

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

Merge branch 'master' into dev_performance_paytxt

parents 27e95af6 98db76cf
...@@ -3,6 +3,7 @@ package com.liquidnet.service.goblin.dto.vo; ...@@ -3,6 +3,7 @@ package com.liquidnet.service.goblin.dto.vo;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.commons.lang.util.DateUtil; import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.goblin.constant.GoblinStatusConst;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -115,6 +116,8 @@ public class GoblinGoodsInfoVo implements Serializable, Cloneable { ...@@ -115,6 +116,8 @@ public class GoblinGoodsInfoVo implements Serializable, Cloneable {
@ApiModelProperty(position = 60, value = "活动Id") @ApiModelProperty(position = 60, value = "活动Id")
private String marketId; private String marketId;
@ApiModelProperty(position = 64, value = "活动类型")
private String marketType;
@ApiModelProperty(position = 63, value = "演出id") @ApiModelProperty(position = 63, value = "演出id")
private String performanceId; private String performanceId;
@ApiModelProperty(position = 61, value = "销量") @ApiModelProperty(position = 61, value = "销量")
...@@ -124,6 +127,15 @@ public class GoblinGoodsInfoVo implements Serializable, Cloneable { ...@@ -124,6 +127,15 @@ public class GoblinGoodsInfoVo implements Serializable, Cloneable {
@ApiModelProperty(position = 63, value = "skuList") @ApiModelProperty(position = 63, value = "skuList")
private List<GoblinGoodsSkuInfoVo> goblinOrderSkuVos; private List<GoblinGoodsSkuInfoVo> goblinOrderSkuVos;
public String getMarketType() {
if (marketId == null) {
return "";
} else if (marketId.contains("ZZ")) {
return GoblinStatusConst.MarketPreStatus.getPre(marketId);
}
return "";
}
private static final GoblinGoodsInfoVo obj = new GoblinGoodsInfoVo(); private static final GoblinGoodsInfoVo obj = new GoblinGoodsInfoVo();
public static GoblinGoodsInfoVo getNew() { public static GoblinGoodsInfoVo getNew() {
......
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,17 @@ public abstract class AbstractOrderCloseReceiver implements StreamListener<Strin ...@@ -119,6 +128,17 @@ 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);
//店铺券退券
if (!(orderVo.getStoreCouponId().equals("") || orderVo.getStoreCouponId() == null)) {
BackCouponParam backCouponParam = BackCouponParam.getNew();
backCouponParam.setuCouponIds(orderVo.getStoreCouponId());
backCouponParam.setUid(orderVo.getUserId());
backStoreCoupon(backCouponParam);
}
//平台券
if (!(orderVo.getUcouponId().equals("") || orderVo.getUcouponId() == null)) {
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 +149,8 @@ public abstract class AbstractOrderCloseReceiver implements StreamListener<Strin ...@@ -129,8 +149,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 +234,81 @@ public abstract class AbstractOrderCloseReceiver implements StreamListener<Strin ...@@ -214,11 +234,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
#---- 订单关闭 #---- 订单关闭
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 = ?
...@@ -4,6 +4,7 @@ import com.alibaba.excel.EasyExcel; ...@@ -4,6 +4,7 @@ import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.read.listener.PageReadListener; import com.alibaba.excel.read.listener.PageReadListener;
import com.liquidnet.commons.lang.util.IDGenerator; import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.base.ResponseDto; import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.constant.GoblinStatusConst;
import com.liquidnet.service.goblin.dto.TempCouponDto; import com.liquidnet.service.goblin.dto.TempCouponDto;
import com.liquidnet.service.goblin.dto.vo.*; import com.liquidnet.service.goblin.dto.vo.*;
import com.liquidnet.service.goblin.service.GoblinFrontService; import com.liquidnet.service.goblin.service.GoblinFrontService;
...@@ -72,6 +73,8 @@ public class GoblinInnerServiceImpl implements IGoblinInnerService { ...@@ -72,6 +73,8 @@ public class GoblinInnerServiceImpl implements IGoblinInnerService {
List<GoblinGoodsSkuInfoVo> skuVoList = ObjectUtil.getGoblinGoodsSkuInfoVoArrayList(); List<GoblinGoodsSkuInfoVo> skuVoList = ObjectUtil.getGoblinGoodsSkuInfoVoArrayList();
for (String skuId : spuVo.getSkuIdList()) { for (String skuId : spuVo.getSkuIdList()) {
GoblinGoodsSkuInfoVo skuVo = redisUtils.getGoodsSkuInfoVo(skuId); GoblinGoodsSkuInfoVo skuVo = redisUtils.getGoodsSkuInfoVo(skuId);
String pre = GoblinStatusConst.MarketPreStatus.getPre(skuId);
skuVo.setSurplusStock(redisUtils.getSkuStock(pre, skuId));
skuVoList.add(skuVo); skuVoList.add(skuVo);
} }
spuVo.setGoblinOrderSkuVos(skuVoList); spuVo.setGoblinOrderSkuVos(skuVoList);
......
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