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

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

修改 订单回调

parent 397e1aa9
......@@ -37,7 +37,7 @@ public class IDGenerator {
String number = orderTicketId;
int len = orderTicketId.length();
String time = System.currentTimeMillis() / 1000 + "";
String orderCode = "T" + number.substring(0, len - 4);
String orderCode = number.substring(0, len - 4);
orderCode += time.substring(7, 8);
orderCode += number.substring(len - 2);
orderCode += time.substring(8, 9);
......
......@@ -32,7 +32,7 @@ public class UserPathDto implements Serializable {
}
public static String setData(String interfaceName, Object params, Object result) {
instance.tag = "ANJIABIN";
instance.tag = "MDSKY.NOW.ELK";
instance.uid = CurrentUtil.getCurrentUid() == null ? "UID" : CurrentUtil.getCurrentUid();
instance.token = CurrentUtil.getToken() == null ? "TOKEN" : CurrentUtil.getToken();
instance.time = DateUtil.Formatter.yyyyMMddHHmmssSSSUnTrim.format(LocalDateTime.now());
......@@ -42,6 +42,5 @@ public class UserPathDto implements Serializable {
instance.ip = CurrentUtil.getCliIpAddr();
instance.userAgent = ServletUtils.getRequest().getHeader("User-Agent");
return JsonUtils.toJson(instance);
}
}
package com.liquidnet.service.consumer.service.Utils;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.service.consumer.service.vo.*;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@Component
public class KylinUtils {
@Autowired
private RedisUtil redisUtil;
public static final String USERID_BUY_INFO = "kylin:buy:userId:";
public static final String IDCARD_BUY_INFO = "kylin:buy:idCard:";
public static final String PERFORMANCE_ID = "performanceId";
public static final String TICKET_ID = "ticketId";
public static final String USE_TIME = "useTime";
public static final String PERFORMANCES = "kylin:performances:id:";
/**
* @param userId 用户id
* @param type 1新增 2修改
* @param orderId 订单id [需要新增或者修改的订单id]
*/
public Boolean resetOrderListVo(String userId, Integer type, String orderId, KylinOrderTicketVo dataSingle) {
List<KylinOrderListVo> vo = new ArrayList<>();
List<KylinOrderListVo> redisVo = new ArrayList();
KylinOrderListVo voItem = new KylinOrderListVo();
KylinOrderTicketVo data;
if (dataSingle == null) {
data = (KylinOrderTicketVo)redisUtil.get("kylin:order:id:" + orderId);
} else {
data = dataSingle;
}
BeanUtils.copyProperties(data, voItem);
List<KylinOrderListVo> redisData = (List<KylinOrderListVo>) redisUtil.get("kylin:order:list:userId:" + userId);
if(type == 1) {
redisVo.add(voItem);
if (redisData.size() > 0) {
if (redisData.get(0).getOrderTicketsId().equals(orderId)) {
redisData.remove(0);
}
}
}
redisVo.addAll(redisData);
switch (type) {
case 1:
for (int i = 0; i < redisVo.size(); i++) {
if (i == 40) {
break;
}
if (i == 0) {
vo.add(voItem);
} else {
vo.add(redisVo.get(i));
}
}
if (redisVo.size() == 0) {
vo.add(voItem);
}
redisUtil.set("kylin:order:list:userId:" + userId,vo);
return true;
case 2:
for (int i = 0; i < redisVo.size(); i++) {
if (i == 40) {
break;
}
if (redisVo.get(i).getOrderTicketsId().equals(orderId)) {
vo.add(voItem);
} else {
vo.add(redisVo.get(i));
}
}
redisUtil.set("kylin:order:list:userId:" + userId,vo);
return true;
default:
return false;
}
}
public void changeBuyInfo(String userId, String idCard, String performanceId, String ticketId, int buyCount) {
String redisKey;
KylinPerformanceVo vo = (KylinPerformanceVo) redisUtil.get(PERFORMANCES + performanceId);
int isTrueName = vo.getIsTrueName();
int ticketType = 0;
String useTime = "";
HashMap<String, ArrayList<String>> allTicketId = new HashMap<>();
for (int x = 0; x < vo.getTicketTimeList().size(); x++) {
KylinTicketTimesVo timeItem = vo.getTicketTimeList().get(x);
ArrayList<String> ticketList = new ArrayList<>();
for (int y = 0; y < timeItem.getTicketList().size(); y++) {
KylinTicketVo ticketItem = timeItem.getTicketList().get(y);
if (ticketItem.getType() == 1) {
ticketList.add(ticketItem.getTicketsId());
}
if (ticketItem.getTicketsId().equals(ticketId)) {
useTime = ticketItem.getUseStart();
ticketType = ticketItem.getType();
}
}
allTicketId.put(timeItem.getUseStart(), ticketList);
}
if (0 == isTrueName) {
redisKey = USERID_BUY_INFO + userId;
} else {
redisKey = IDCARD_BUY_INFO + idCard;
}
String performanceIdKey = redisKey + ":" + PERFORMANCE_ID + ":" + performanceId;
String ticketIdKey = redisKey + ":" + TICKET_ID + ":" + ticketId;
String ticketUseTimeKey = ticketIdKey + ":" + USE_TIME;
redisUtil.set(ticketUseTimeKey, useTime);
if (buyCount > 0) {
redisUtil.incr(ticketIdKey, buyCount);
if (1 == ticketType) {
int count = 0;
for (int i = 0; i < allTicketId.get(useTime).size(); i++) {
String item = allTicketId.get(useTime).get(i);
if (allTicketId.get(useTime).size() == 1) {
redisUtil.incr(performanceIdKey, buyCount);
break;
}
if (null == redisUtil.get(redisKey + ":" + TICKET_ID + ":" + item)) {
redisUtil.set(redisKey + ":" + TICKET_ID + ":" + item, 0);
}
if (i == 0) {
count = (int) redisUtil.get(redisKey + ":" + TICKET_ID + ":" + item);
} else {
if (count != (int) redisUtil.get(redisKey + ":" + TICKET_ID + ":" + item)) {
redisUtil.incr(performanceIdKey, buyCount);
break;
}
}
}
} else {
redisUtil.incr(performanceIdKey, buyCount);
}
} else {
redisUtil.decr(ticketIdKey, Math.abs(buyCount));
if (1 == ticketType) {
int count = 0;
for (int i = 0; i < allTicketId.get(useTime).size(); i++) {
String item = allTicketId.get(useTime).get(i);
if (allTicketId.get(useTime).size() == 1) {
redisUtil.decr(performanceIdKey, Math.abs(buyCount));
break;
}
if (null == redisUtil.get(redisKey + ":" + TICKET_ID + ":" + item)) {
redisUtil.set(redisKey + ":" + TICKET_ID + ":" + item, 0);
}
if (i == 0) {
count = (int) redisUtil.get(redisKey + ":" + TICKET_ID + ":" + item);
} else {
if (count != (int) redisUtil.get(redisKey + ":" + TICKET_ID + ":" + item)) {
redisUtil.decr(performanceIdKey, Math.abs(buyCount));
break;
}
}
}
} else {
redisUtil.decr(performanceIdKey, Math.abs(buyCount));
}
}
}
}
......@@ -5,6 +5,9 @@ import com.liquidnet.common.mq.constant.MQConst;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.consumer.service.IBaseDao;
import com.liquidnet.service.consumer.service.Utils.KylinUtils;
import com.liquidnet.service.consumer.service.vo.KylinOrderTicketEntitiesVo;
import com.liquidnet.service.consumer.service.vo.KylinOrderTicketVo;
import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.Exchange;
......@@ -17,7 +20,9 @@ import org.springframework.amqp.core.Message;
import javax.annotation.Resource;
import java.io.IOException;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
/**
......@@ -33,6 +38,8 @@ public class ConsumerProcessor {
IBaseDao baseDao;
@Autowired
private RedisUtil redisUtil;
@Autowired
private KylinUtils kylinUtils;
// @RabbitListener(bindings = @QueueBinding(
// exchange = @Exchange(MQConst.EXCHANGES_LIQUIDNET_SQL), key = MQConst.ROUTING_KEY_SQL,
......@@ -80,19 +87,25 @@ public class ConsumerProcessor {
}
// 处理长sql语句
private void consumerSqlDaoHandlerLongSql(Message msg, Channel channel) {
String redisKey = new String(msg.getBody()).replaceAll("\"","");
log.debug("consumer ==> redisKey:{}", redisKey);
private void consumerOperationOrderClose(Message msg, Channel channel) {
ArrayList<String> mqMessage = JsonUtils.fromJson(new String(msg.getBody()), ArrayList.class);
log.debug("consumer ==> mqMessage:{}", mqMessage);
try {
LinkedList<String> sqlList = (LinkedList<String>) redisUtil.get(redisKey);
Boolean rstBatchSqls = baseDao.batchSqlNoArgs(sqlList);
log.debug("consumer sql result of execution:{}", rstBatchSqls);
if (rstBatchSqls) {
channel.basicAck(msg.getMessageProperties().getDeliveryTag(), false);
} else {
channel.basicReject(msg.getMessageProperties().getDeliveryTag(), true);
}
mqMessage.forEach(t -> {
String orderTicketId = t.split(",")[0];
String uid = t.split(",")[1];
KylinOrderTicketVo vo = (KylinOrderTicketVo) redisUtil.get("kylin:order:id:" + orderTicketId);
vo.setStatus(2);
redisUtil.set("kylin:order:id:" + orderTicketId, vo);
kylinUtils.resetOrderListVo(uid, 2, orderTicketId, vo);
// redis 限购
for (int i = 0; i < vo.getEntitiesVoList().size(); i++) {
KylinOrderTicketEntitiesVo items = vo.getEntitiesVoList().get(i);
kylinUtils.changeBuyInfo(items.getUserId(), items.getEnterIdCode(), items.getPerformanceId(), items.getTicketId(), -1);
}
});
channel.basicAck(msg.getMessageProperties().getDeliveryTag(), false);
} catch (IOException e) {
log.error("error:consumer sql:Channel.msg.tag:{}", msg.getMessageProperties().getDeliveryTag(), e);
}
......@@ -242,7 +255,7 @@ public class ConsumerProcessor {
))
public void consumerOrderClose(Message msg, Channel channel) {
log.info("=== CONSUMER_ORDER_CLOSE ===");
this.consumerSqlDaoHandlerLongSql(msg, channel);
this.consumerOperationOrderClose(msg, channel);
}
@RabbitListener(bindings = @QueueBinding(
......@@ -251,7 +264,7 @@ public class ConsumerProcessor {
))
public void consumerOrderClose1(Message msg, Channel channel) {
log.info("=== CONSUMER_ORDER_CLOSE ===");
this.consumerSqlDaoHandlerLongSql(msg, channel);
this.consumerOperationOrderClose(msg, channel);
}
@RabbitListener(bindings = @QueueBinding(
......@@ -260,7 +273,7 @@ public class ConsumerProcessor {
))
public void consumerOrderClose2(Message msg, Channel channel) {
log.info("=== CONSUMER_ORDER_CLOSE ===");
this.consumerSqlDaoHandlerLongSql(msg, channel);
this.consumerOperationOrderClose(msg, channel);
}
@RabbitListener(bindings = @QueueBinding(
......@@ -269,7 +282,7 @@ public class ConsumerProcessor {
))
public void consumerOrderClose3(Message msg, Channel channel) {
log.info("=== CONSUMER_ORDER_CLOSE ===");
this.consumerSqlDaoHandlerLongSql(msg, channel);
this.consumerOperationOrderClose(msg, channel);
}
@RabbitListener(bindings = @QueueBinding(
......@@ -278,7 +291,7 @@ public class ConsumerProcessor {
))
public void consumerOrderClose4(Message msg, Channel channel) {
log.info("=== CONSUMER_ORDER_CLOSE ===");
this.consumerSqlDaoHandlerLongSql(msg, channel);
this.consumerOperationOrderClose(msg, channel);
}
@RabbitListener(bindings = @QueueBinding(
......@@ -287,7 +300,7 @@ public class ConsumerProcessor {
))
public void consumerOrderClose5(Message msg, Channel channel) {
log.info("=== CONSUMER_ORDER_CLOSE ===");
this.consumerSqlDaoHandlerLongSql(msg, channel);
this.consumerOperationOrderClose(msg, channel);
}
@RabbitListener(bindings = @QueueBinding(
......@@ -296,7 +309,7 @@ public class ConsumerProcessor {
))
public void consumerOrderClose6(Message msg, Channel channel) {
log.info("=== CONSUMER_ORDER_CLOSE ===");
this.consumerSqlDaoHandlerLongSql(msg, channel);
this.consumerOperationOrderClose(msg, channel);
}
@RabbitListener(bindings = @QueueBinding(
......@@ -305,7 +318,7 @@ public class ConsumerProcessor {
))
public void consumerOrderClose7(Message msg, Channel channel) {
log.info("=== CONSUMER_ORDER_CLOSE ===");
this.consumerSqlDaoHandlerLongSql(msg, channel);
this.consumerOperationOrderClose(msg, channel);
}
@RabbitListener(bindings = @QueueBinding(
......@@ -314,7 +327,7 @@ public class ConsumerProcessor {
))
public void consumerOrderClose8(Message msg, Channel channel) {
log.info("=== CONSUMER_ORDER_CLOSE ===");
this.consumerSqlDaoHandlerLongSql(msg, channel);
this.consumerOperationOrderClose(msg, channel);
}
@RabbitListener(bindings = @QueueBinding(
......@@ -323,7 +336,7 @@ public class ConsumerProcessor {
))
public void consumerOrderClose9(Message msg, Channel channel) {
log.info("=== CONSUMER_ORDER_CLOSE ===");
this.consumerSqlDaoHandlerLongSql(msg, channel);
this.consumerOperationOrderClose(msg, channel);
}
......
package com.liquidnet.service.consumer.service.vo;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
public class KylinOrderListVo implements Serializable {
private static final long serialVersionUID = 6554829077875538374L;
private String orderTicketsId;
private String performanceId;
private String ticketId;
private String performanceTitle;
private String performanceImg;
private String orderCode;
private String timeStart;
private String ticketTitle;
private String useStart;
private String overdueAt;
private Long restTime;
private BigDecimal priceActual;
private Integer number;
private Integer status;
private String express_number;
private String express_company;
private Integer kuaidi_status;
private String getTicketType;
private String createdAt;
}
package com.liquidnet.service.consumer.service.vo;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
public class KylinOrderTicketEntitiesVo implements Serializable, Cloneable {
private static final long serialVersionUID = 1207664465164005975L;
private Integer mid;
private String orderTicketEntitiesId;
private String orderId;
private String ticketId;
private String userId;
private String performanceId;
private String timeId;
private Integer enterType;
private String enterName;
private String enterMobile;
private String enterIdCode;
private Integer status;
private Integer sysDamai;
private String checkClient;
private Integer isPayment;
private String performanceTitle;
private String ticketTitle;
private String useStart;
private String useEnd;
private String createdAt;
private String updatedAt;
private Integer ticketsmId;
private Integer timemId;
private BigDecimal refundPrice;
private String checkType;
private String checkedAt;
private String checkUserId;
private LocalDateTime changeDate;
private static final KylinOrderTicketEntitiesVo obj = new KylinOrderTicketEntitiesVo();
public static KylinOrderTicketEntitiesVo getNew() {
try {
return (KylinOrderTicketEntitiesVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new KylinOrderTicketEntitiesVo();
}
}
}
package com.liquidnet.service.consumer.service.vo;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class KylinOrderTicketVo implements Serializable {
private Integer mid;
private static final long serialVersionUID = 5325511589667456213L;
private String orderTicketsId;
private String userId;
private String userName;
private String userMobile;
private String performanceTitle;
private String ticketTitle;
private String timeStart;
private String useStart;
private String performanceImg;
private String orderCode;
private String payCode;
private String qrCode;
private String orderType;
private String orderVersion;
private Integer number;
private BigDecimal price;
private BigDecimal priceMember;
private BigDecimal priceTotal;
private BigDecimal priceVoucher;
private BigDecimal priceActual;
private BigDecimal priceExpress;
private BigDecimal priceRefund;
private Integer refundNumber;
private String payType;
private String paymentType;
private String timePay;
private String expressContacts;
private String expressAddress;
private String expressPhone;
private String couponType;
private String getTicketType;
private String getTicketDescribe;
private Integer payCountdownMinute;
private Integer expressType;
private Integer isStudent;
private Integer transferStatus;
private Integer status;
private Integer payStatus;
private String transferId;
private String liveId;
private String performanceId;
private String timeId;
private String ticketId;
private String agentId;
private Integer isMember;
private String overdueAt;
private String createdAt;
private String updatedAt;
private LocalDateTime changeDate;
private Integer isTrueName;
private String noticeImage;
private String notice;
private Integer ticketType;
private String fieldName;
private List<KylinOrderTicketEntitiesVo> entitiesVoList;
}
package com.liquidnet.service.consumer.service.vo;
import lombok.Data;
import java.util.List;
@Data
public class KylinPerformanceVo {
private Integer mid;
private String performancesId;
private String title;
private String imgPoster;
private Integer payCountdownMinute;
private String approvalUrl;
private int type;
private String timeStart;
private String timeEnd;
private String stopSellTime;
private String price;
private String sellTime;
private String sellMemberTime;
private Integer cityId;
private String cityName;
private String fieldId;
private String fieldName;
private String longitude;
private String latitude;
private String diffDistance;
private String projectId;
private String roadShowId;
private String details;
private String noticeImage;
private Integer isRecommend;
private Integer appStatus;
private Integer statusSell;
private Integer isMember;
private Integer isLackRegister;
private Integer isTrueName;
private Integer limitCount;
private Integer limitCountMember;
private Integer isExclusive;
private Integer isDiscount;
private Integer isAdvance;
private Integer sysDamai;
private String message;
private String notice;
private Integer isShow;
private List<KylinTicketTimesVo> ticketTimeList;
}
package com.liquidnet.service.consumer.service.vo;
import lombok.Data;
import java.util.List;
@Data
public class KylinTicketTimesVo {
private Integer mid;
private String ticketTimesId;
private String title;
private Integer type;
private String performanceId;
private String timeId;
private String useStart;
private String useEnd;
private List<KylinTicketVo> ticketList;
}
package com.liquidnet.service.consumer.service.vo;
import com.liquidnet.commons.lang.util.DateUtil;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class KylinTicketVo {
private Integer mid;
private String ticketsId;
private String timeId;
private String title;
private Integer type;
private BigDecimal price;
private BigDecimal priceExpress;
private BigDecimal memberPrice;
private BigDecimal discountPrice;
private String describes;
private String describeExpress;
private String describeElectronic;
private String timeStart;
private String timeEnd;
private String memberTimeStart;
private String timeEndExpress;
private String useStart;
private String useEnd;
private Integer saleRemindMinute;
private Integer isStudent;
private Integer isElectronic;
private Integer isExpress;
private Integer sysDamai;
private Integer counts;
private Integer status;
private Integer statusExchange;
private Integer isLackRegister;
private Integer expressType;
private Integer isTrueName;
private Integer limitCount;
private Integer limitCountMember;
private Integer isExclusive;
private Integer isMember;
private Integer isMemberStatus;
private Integer isAgent;
private Integer isShowCode;
private String qrCodeShowTime;
private Integer advanceMinuteMember;
}
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