记得上下班打卡 | 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;
}
package com.liquidnet.service.kylin.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.pagehelper.PageInfo;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.common.cache.redisson.util.RedisLockUtil;
......@@ -26,6 +27,8 @@ import com.liquidnet.service.kylin.dto.vo.returns.KylinOrderListVo;
import com.liquidnet.service.kylin.dto.vo.returns.OrderDetailsVo;
import com.liquidnet.service.kylin.dto.vo.returns.PayResultVo;
import com.liquidnet.service.kylin.entity.*;
import com.liquidnet.service.kylin.mapper.KylinOrderTicketRelationsMapper;
import com.liquidnet.service.kylin.mapper.KylinOrderTicketStatusMapper;
import com.liquidnet.service.kylin.mapper.KylinOrderTicketsMapper;
import com.liquidnet.service.kylin.service.IKylinOrderTicketsService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
......@@ -102,8 +105,13 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
@Autowired
private KylinOrderTicketsMapper orderTicketsMapper;
@Autowired
private KylinOrderTicketStatusMapper orderTicketStatusMapper;
@Autowired
private KylinOrderTicketRelationsMapper orderTicketRelationsMapper;
@Autowired
private OrderRefundsCallbackServiceImpl orderRefundsCallbackService;
ArrayList<Integer> canBuyStatus = new ArrayList() {{
add(6);
add(8);
......@@ -621,7 +629,7 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
sqlData);
currentTime = System.currentTimeMillis() - currentTime;
log.debug("MQ 发送 -> time:" + (currentTime) + "毫秒");
log.info(UserPathDto.setData("下单(唤起支付)",payOrderParam,payResultVo));
log.info(UserPathDto.setData("下单(唤起支付)", payOrderParam, payResultVo));
return ResponseDto.success(payResultVo);
}
......@@ -629,7 +637,7 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
public ResponseDto<PayResultVo> payAgain(PayAgainParam payAgainParam) {
try {
String uid = CurrentUtil.getCurrentUid();
checkOrderTime(uid);
// checkOrderTime(uid);
//检查订单时间 是否关闭
KylinOrderTicketVo orderTicketData = dataUtils.getOrderTicketVo(payAgainParam.getOrderId());
if (!orderTicketData.getUserId().equals(uid)) {
......@@ -723,7 +731,7 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
String sqlData = SqlMapping.gets(sqls, sqlsDataA, sqlsDataB, sqlsDataC);
rabbitTemplate.convertAndSend(MQConst.EXCHANGES_LIQUIDNET_SQL_ORDER_AGAIN, MQConst.ROUTING_KEY_SQL_ORDER_AGAIN, sqlData);
log.info(UserPathDto.setData("再次支付",payAgainParam,payResultVo));
log.info(UserPathDto.setData("再次支付", payAgainParam, payResultVo));
return ResponseDto.success(payResultVo);
}
return ResponseDto.failure("未选择支付方式");
......@@ -879,7 +887,7 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
sycDamaiOrder(orderTickets.getOrderTicketsId());
}
redisLockUtil.unlock(lock);
log.info(UserPathDto.setData("订单支付成功回调",syncOrderParam,""));
log.info(UserPathDto.setData("订单支付成功回调", syncOrderParam, ""));
return "success";
}
......@@ -888,7 +896,7 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
//TODO 缺快递
PageInfo<List<KylinOrderListVo>> mPageInfo = null;
String uid = CurrentUtil.getCurrentUid();
checkOrderTime(uid);
// checkOrderTime(uid);
try {
List<KylinOrderListVo> voList = dataUtils.getOrderList(uid);
for (int i = 0; i < voList.size(); i++) {
......@@ -921,7 +929,7 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
mPageInfo = new PageInfo(voList);
mPageInfo.setTotal(voList.size());
log.info(UserPathDto.setData("订单列表","",voList));
log.info(UserPathDto.setData("订单列表", "", voList));
return mPageInfo;
} catch (Exception e) {
e.printStackTrace();
......@@ -934,11 +942,11 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
OrderDetailsVo vo = new OrderDetailsVo();
try {
String uid = CurrentUtil.getCurrentUid();
checkOrderTime(uid);
// checkOrderTime(uid);
KylinOrderTicketVo orderTicketVo = dataUtils.getOrderTicketVo(orderId);
if (!orderTicketVo.getUserId().equals(uid)) {
log.error("ORDER_TICKET_USER_ID : {}",orderTicketVo.getUserId());
log.error("TOKEN UID : {}",uid);
log.error("ORDER_TICKET_USER_ID : {}", orderTicketVo.getUserId());
log.error("TOKEN UID : {}", uid);
return null;
}
if (null != orderTicketVo) {
......@@ -970,7 +978,7 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
Date date = DateUtil.parse(ticketVo.getQrCodeShowTime(), DateUtil.Formatter.yyyyMMddHHmm.toString());
if (DateUtil.compareDay(date, DateUtil.now()) <= 0) {
orderTicketVo.setQrCode("");
}else{
} else {
orderTicketVo.setQrCode(orderTicketVo.getQrCode());
}
} else {
......@@ -1009,7 +1017,7 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
vo.setOrderTicketVo(orderTicketVo);
vo.setEnterDescribe(dataUtils.getEnterInfo("1"));
}
log.info(UserPathDto.setData("订单列表",orderId,vo));
log.info(UserPathDto.setData("订单列表", orderId, vo));
return vo;
} catch (Exception e) {
return vo;
......@@ -1020,62 +1028,74 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
public boolean checkOrderTime(String userId) {
String lock = "order_lock:checkOrderTime:" + userId;
if (redisLockUtil.tryLock(lock, 1, 3600)) {
try {
List<OrderScriptDto> dtoData = orderTicketsMapper.orderScriptDto(userId);
LocalDateTime now = LocalDateTime.now();
Long currentTime = System.currentTimeMillis();
HashMap<String, Integer> mapSurplusGeneral = new HashMap<>();
ArrayList<String> orderDataList = new ArrayList<>();
ArrayList<String> orderIdList = new ArrayList<>();
HashMap<String, Object> mapMongo = new HashMap<>();
for (OrderScriptDto item : dtoData) {
if (item.getStatus().equals(KylinTableStatusConst.ORDER_STATUS0)) {
try {
//vo
mapMongo.put("status", KylinTableStatusConst.ORDER_STATUS2);
mapMongo.put("updatedAt", DateUtil.Formatter.yyyyMMddHHmmssSSS.format(now));
mapMongo.put("changeDate", now);
orderDataList.add(item.getOrderTicketsId() + "," + item.getUserId());
orderIdList.add(item.getOrderTicketsId());
mapSurplusGeneral.put(item.getTicketId(), mapSurplusGeneral.get(item.getTicketId()) == null ? item.getNumber() : mapSurplusGeneral.get(item.getTicketId()) + item.getNumber());
} catch (Exception e) {
log.debug("CHECK TIME SYNC = " + e.getMessage());
e.printStackTrace();
return false;
}
} else {
List<OrderScriptDto> dtoData = orderTicketsMapper.orderScriptDto(userId);
LocalDateTime now = LocalDateTime.now();
Long currentTime = System.currentTimeMillis();
HashMap<String, Integer> mapSurplusGeneral = new HashMap<>();
ArrayList<String> orderDataList = new ArrayList<>();
ArrayList<String> orderIdList = new ArrayList<>();
HashMap<String, Object> mapMongo = new HashMap<>();
for (OrderScriptDto item : dtoData) {
if (item.getStatus().equals(KylinTableStatusConst.ORDER_STATUS0)) {
try {
//vo
mapMongo.put("status", KylinTableStatusConst.ORDER_STATUS2);
mapMongo.put("updatedAt", DateUtil.Formatter.yyyyMMddHHmmssSSS.format(now));
mapMongo.put("changeDate", now);
orderDataList.add(item.getOrderTicketsId() + "," + item.getUserId());
orderIdList.add(item.getOrderTicketsId());
mapSurplusGeneral.put(item.getTicketId(), mapSurplusGeneral.get(item.getTicketId()) == null ? item.getNumber() : mapSurplusGeneral.get(item.getTicketId()) + item.getNumber());
} catch (Exception e) {
log.debug("CHECK TIME SYNC = " + e.getMessage());
e.printStackTrace();
return false;
}
} else {
}
currentTime = System.currentTimeMillis() - currentTime;
log.debug("FOR 循环 -> time:" + (currentTime) + "毫秒");
if (orderDataList.size() > 0) {
//库存
for (Map.Entry<String, Integer> entry : mapSurplusGeneral.entrySet()) {
dataUtils.changeSurplusGeneral(entry.getKey(), entry.getValue());
}
currentTime = System.currentTimeMillis() - currentTime;
log.debug("redis 库存 -> time:" + (currentTime) + "毫秒");
//mysql
String orderStr = "";
for (int i = 0; i < orderIdList.size(); i++) {
String orderTicketId = orderIdList.get(i);
orderStr += "'" + orderTicketId + "',";
}
}
currentTime = System.currentTimeMillis() - currentTime;
log.debug("FOR 循环 -> time:" + (currentTime) + "毫秒");
if (orderDataList.size() > 0) {
//mysql
String orderStr = "";
for (int i = 0; i < orderIdList.size(); i++) {
String orderTicketId = orderIdList.get(i);
orderStr += "'" + orderTicketId + "',";
}
orderStr = orderStr.substring(0, orderStr.length() - 1);
orderStr = orderStr.substring(0, orderStr.length() - 1);
LinkedList<String> sqls = new LinkedList();
sqls.add("UPDATE kylin_order_tickets SET updated_at = '" + now + "' WHERE order_tickets_id in (" + orderStr + ") ");
sqls.add("UPDATE kylin_order_ticket_status SET `status` = 2,updated_at = '" + now + "' WHERE order_id in (" + orderStr + ") ");
sqls.add("UPDATE kylin_order_ticket_relations SET updated_at = '" + now + "' WHERE order_id in (" + orderStr + ")");
String redisKey = "kylin:ORDER_CLOSE:" + IDGenerator.nextMilliId();
redisUtil.set(redisKey, sqls);
rabbitTemplate.convertAndSend(MQConst.EXCHANGES_LIQUIDNET_SQL_ORDER_CLOSE, MQConst.ROUTING_KEY_SQL_ORDER_CLOSE, redisKey);
KylinOrderTickets orderTickets = new KylinOrderTickets();
orderTickets.setUpdatedAt(now);
orderTicketsMapper.update(orderTickets, new UpdateWrapper<KylinOrderTickets>().in("order_tickets_id", orderStr));
KylinOrderTicketStatus orderTicketStatus = new KylinOrderTicketStatus();
orderTicketStatus.setStatus(2);
orderTicketStatus.setUpdatedAt(now);
orderTicketStatusMapper.update(orderTicketStatus, new UpdateWrapper<KylinOrderTicketStatus>().in("order_id", orderStr));
;
KylinOrderTicketRelations orderTicketRelations = new KylinOrderTicketRelations();
orderTicketRelations.setUpdatedAt(now);
orderTicketRelationsMapper.update(orderTicketRelations, new UpdateWrapper<KylinOrderTicketRelations>().in("order_id", orderStr));
;
// LinkedList<String> sqls = new LinkedList();
// sqls.add("UPDATE kylin_order_tickets SET updated_at = '" + now + "' WHERE order_tickets_id in (" + orderStr + ") ");
// sqls.add("UPDATE kylin_order_ticket_status SET `status` = 2,updated_at = '" + now + "' WHERE order_id in (" + orderStr + ") ");
// sqls.add("UPDATE kylin_order_ticket_relations SET updated_at = '" + now + "' WHERE order_id in (" + orderStr + ")");
// String redisKey = "kylin:ORDER_CLOSE:" + IDGenerator.nextMilliId();
// redisUtil.set(redisKey, sqls);
// rabbitTemplate.convertAndSend(MQConst.EXCHANGES_LIQUIDNET_SQL_ORDER_CLOSE, MQConst.ROUTING_KEY_SQL_ORDER_CLOSE, redisKey);
currentTime = System.currentTimeMillis() - currentTime;
log.debug("mysql -> time:" + (currentTime) + "毫秒");
currentTime = System.currentTimeMillis() - currentTime;
log.debug("mysql -> time:" + (currentTime) + "毫秒");
//库存
for (Map.Entry<String, Integer> entry : mapSurplusGeneral.entrySet()) {
dataUtils.changeSurplusGeneral(entry.getKey(), entry.getValue());
}
currentTime = System.currentTimeMillis() - currentTime;
log.debug("redis 库存 -> time:" + (currentTime) + "毫秒");
try {
//mongo
mongoTemplate.getCollection(KylinOrderTicketVo.class.getSimpleName()).updateMany(
Query.query(Criteria.where("orderTicketsId").in(orderIdList)).getQueryObject(),
......@@ -1083,9 +1103,28 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
);
currentTime = System.currentTimeMillis() - currentTime;
log.debug("mongo -> time:" + (currentTime) + "毫秒");
} catch (Exception e) {
}
Thread thread = new Thread(() -> {
//redis 列表
int forSize = 500;
int forCount = orderDataList.size() % forSize == 0 ? orderDataList.size() % forSize : (orderDataList.size() % forSize) + 1;
for (int i = 0; i < forCount; i++) {
ArrayList<String> mqList = new ArrayList<>();
for (int y = 0; y < forSize; y++) {
try {
String t = orderDataList.get(i * 500 + y);
mqList.add(t);
} catch (Exception e) {
break;
}
}
rabbitTemplate.convertAndSend(MQConst.EXCHANGES_LIQUIDNET_SQL_ORDER_CLOSE, MQConst.ROUTING_KEY_SQL_ORDER_CLOSE, JsonUtils.toJson(mqList));
}
// 线程循环更改限购
// kylinThreadService.checkOrderTimeThread(orderDataList);
// Thread thread = new Thread(() -> {
// //redis 列表
orderDataList.forEach(t -> {
String orderTicketId = t.split(",")[0];
String uid = t.split(",")[1];
......@@ -1099,13 +1138,10 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
dataUtils.changeBuyInfo(items.getUserId(), items.getEnterIdCode(), items.getPerformanceId(), items.getTicketId(), -1);
}
});
});
thread.start();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// });
// thread.start();
}
redisLockUtil.unlock(lock);
} else {
log.debug("WARNING LOCKING");
......
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