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

Commit 19dc2a2c authored by 胡佳晨's avatar 胡佳晨

券相关接口提交

parent 67e3ec15
...@@ -8,16 +8,14 @@ drop TABLE if exists `kylin_order_coupons`; ...@@ -8,16 +8,14 @@ drop TABLE if exists `kylin_order_coupons`;
CREATE TABLE `kylin_order_coupons` CREATE TABLE `kylin_order_coupons`
( (
`mid` int NOT NULL AUTO_INCREMENT, `mid` int NOT NULL AUTO_INCREMENT,
`order_voucher_id` varchar(255) NOT NULL DEFAULT '' COMMENT 'order_voucher_id',
`order_id` varchar(255) NOT NULL DEFAULT '' COMMENT '订单id', `order_id` varchar(255) NOT NULL DEFAULT '' COMMENT '订单id',
`coupon_code` varchar(255) NOT NULL DEFAULT '' COMMENT '券code', `coupon_code` varchar(255) NOT NULL DEFAULT '' COMMENT '券code = 券id',
`coupon_type` tinyint NOT NULL DEFAULT '' COMMENT '券类别', `coupon_type` tinyint NOT NULL DEFAULT 0 COMMENT '券类别',
`coupon_price` decimal(8, 2) NOT NULL DEFAULT 0.0 COMMENT '券的优惠金额', `coupon_price` decimal(8, 2) NOT NULL DEFAULT 0.0 COMMENT '券的优惠金额',
`coupon_status` tinyint NOT NULL DEFAULT 0.0 COMMENT '券状态 1可以 2已退 3不可退',
`comment` varchar(200) NOT NULL DEFAULT '' COMMENT '备用', `comment` varchar(200) NOT NULL DEFAULT '' COMMENT '备用',
`created_at` datetime(3) NULL DEFAULT NULL COMMENT '创建时间', `created_at` datetime(3) NULL DEFAULT NULL COMMENT '创建时间',
`updated_at` datetime(3) NULL DEFAULT NULL COMMENT '修改时间', `updated_at` datetime(3) NULL DEFAULT NULL COMMENT '修改时间',
KEY `kylin_order_coupons_order_voucher_id_index` (`order_voucher_id`), KEY `kylin_order_coupons_order_coupon_code_index` (`coupon_code`),
KEY `kylin_order_coupons_order_id_index` (`order_id`), KEY `kylin_order_coupons_order_id_index` (`order_id`),
KEY `kylin_order_coupons_voucher_type_index` (`coupon_type`), KEY `kylin_order_coupons_voucher_type_index` (`coupon_type`),
PRIMARY KEY (`mid`) PRIMARY KEY (`mid`)
......
...@@ -106,6 +106,7 @@ public class MQConst { ...@@ -106,6 +106,7 @@ public class MQConst {
COUPON_USE("candy:stream:rk.coupon.use", "group.coupon.use", "券-使用"), COUPON_USE("candy:stream:rk.coupon.use", "group.coupon.use", "券-使用"),
COUPON_BACK("candy:stream:rk.coupon.back", "group.coupon.back", "券-回退"), COUPON_BACK("candy:stream:rk.coupon.back", "group.coupon.back", "券-回退"),
COUPON_RECEIVE("candy:stream:rk.coupon.receive", "group.coupon.receive", "券-领取"), COUPON_RECEIVE("candy:stream:rk.coupon.receive", "group.coupon.receive", "券-领取"),
COUPON_ORDER_BACK("candy:stream:rk.coupon.order.back", "group.coupon.order.back", "券-订单-回退"),
; ;
private final String key; private final String key;
......
...@@ -19,4 +19,5 @@ public class OrderScriptDto { ...@@ -19,4 +19,5 @@ public class OrderScriptDto {
String ticketId; String ticketId;
String userId; String userId;
Integer number; Integer number;
String couponCode;
} }
...@@ -52,6 +52,7 @@ ...@@ -52,6 +52,7 @@
<result column="ticket_id" property="ticketId"/> <result column="ticket_id" property="ticketId"/>
<result column="number" property="number"/> <result column="number" property="number"/>
<result column="user_id" property="userId"/> <result column="user_id" property="userId"/>
<result column="coupon_code" property="couponCode"/>
</resultMap> </resultMap>
<select id="getPerformanceRefundOrderStatis" resultType="java.util.HashMap"> <select id="getPerformanceRefundOrderStatis" resultType="java.util.HashMap">
...@@ -262,11 +263,14 @@ ...@@ -262,11 +263,14 @@
status, status,
ticket_id, ticket_id,
number, number,
user_id user_id,
oc.coupon_code
FROM kylin_order_tickets AS ot FROM kylin_order_tickets AS ot
inner JOIN kylin_order_ticket_status AS ots ON ots.order_id = ot.order_tickets_id inner JOIN kylin_order_ticket_status AS ots ON ots.order_id = ot.order_tickets_id
inner JOIN kylin_order_ticket_relations AS otr ON otr.order_id = ot.order_tickets_id inner JOIN kylin_order_ticket_relations AS otr ON otr.order_id = ot.order_tickets_id
WHERE status = 0 AND NOW() > DATE_SUB(ot.created_at,INTERVAL -(pay_countdown_minute+1) MINUTE) inner JOIN kylin_order_coupons AS oc ON oc.order_id = ot.order_tickets_id
WHERE status = 0 AND NOW() > DATE_SUB(ot.created_at,INTERVAL -(pay_countdown_minute+1) MINUTE) AND
oc.coupon_type != 101
<if test="userId!=''"> <if test="userId!=''">
AND user_id = #{userId} AND user_id = #{userId}
</if> </if>
......
...@@ -10,3 +10,7 @@ XGROUP CREATE candy:stream:rk.coupon.back group.coupon.back 0 ...@@ -10,3 +10,7 @@ XGROUP CREATE candy:stream:rk.coupon.back group.coupon.back 0
-- 领取 -- -- 领取 --
XADD candy:stream:rk.coupon.receive * 0 0 XADD candy:stream:rk.coupon.receive * 0 0
XGROUP CREATE candy:stream:rk.coupon.receive group.coupon.receive 0 XGROUP CREATE candy:stream:rk.coupon.receive group.coupon.receive 0
-- 票务订单回退 --
XADD candy:stream:rk.coupon.order.back * 0 0
XGROUP CREATE candy:stream:rk.coupon.order.back group.coupon.order.back 0
...@@ -35,6 +35,11 @@ ...@@ -35,6 +35,11 @@
<artifactId>liquidnet-service-kylin-api</artifactId> <artifactId>liquidnet-service-kylin-api</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-service-candy-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency> <dependency>
<groupId>com.liquidnet</groupId> <groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-sms</artifactId> <artifactId>liquidnet-common-sms</artifactId>
......
package com.liquidnet.service.consumer.kylin.config;
import com.liquidnet.service.consumer.kylin.receiver.ConsumerCandyCouponBackRdsReceiver;
import com.liquidnet.service.consumer.kylin.receiver.ConsumerCandyCouponOrderBackRdsReceiver;
import lombok.var;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.stream.Consumer;
import org.springframework.data.redis.connection.stream.MapRecord;
import org.springframework.data.redis.connection.stream.ReadOffset;
import org.springframework.data.redis.connection.stream.StreamOffset;
import org.springframework.data.redis.stream.StreamMessageListenerContainer;
import org.springframework.data.redis.stream.Subscription;
import java.time.Duration;
import static com.liquidnet.service.base.constant.MQConst.CandyQueue.COUPON_BACK;
import static com.liquidnet.service.base.constant.MQConst.CandyQueue.COUPON_ORDER_BACK;
@Configuration
public class ConsumerCandyCouponOrderBackRedisStreamConfig {
@Autowired
ConsumerCandyCouponOrderBackRdsReceiver consumerCandyCouponOrderBackRdsReceiver;
private StreamMessageListenerContainer<String, MapRecord<String, String, String>> buildStreamMessageListenerContainer(RedisConnectionFactory factory) {
var options = StreamMessageListenerContainer
.StreamMessageListenerContainerOptions
.builder()
.pollTimeout(Duration.ofMillis(1))
.build();
return StreamMessageListenerContainer.create(factory, options);
}
/**
* 缺票登记
*
* @param listenerContainer
* @param t
* @return
*/
private Subscription receiveSqlCandyCouponBack(StreamMessageListenerContainer<String, MapRecord<String, String, String>> listenerContainer, int t) {
return listenerContainer.receiveAutoAck(
Consumer.from(COUPON_ORDER_BACK.getGroup(), COUPON_ORDER_BACK.name() + t),
StreamOffset.create(COUPON_ORDER_BACK.getKey(), ReadOffset.lastConsumed()), consumerCandyCouponOrderBackRdsReceiver
);
}
/* —————————————————————————— | —————————————————————————— | —————————————————————————— */
/* -------------------------------------------------------- | 缺票登记 */
@Bean
public Subscription subscriptionSqlCandyCouponOrderBack(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlCandyCouponBack(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionSqlCandyCouponOrderBack2(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlCandyCouponBack(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionSqlCandyCouponOrderBack3(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlCandyCouponBack(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
/* -------------------------------------------------------- | */
}
package com.liquidnet.service.consumer.kylin.receiver;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.OrderCloseMapping;
import com.liquidnet.service.candy.constant.CandyRedisConst;
import com.liquidnet.service.candy.dto.CandyUserCouponBasicDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.stream.MapRecord;
import org.springframework.data.redis.connection.stream.StreamRecords;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.stream.StreamListener;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@Slf4j
public abstract class AbstractCouponOrderBackRedisReceiver implements StreamListener<String, MapRecord<String, String, String>> {
@Autowired
StringRedisTemplate stringRedisTemplate;
@Autowired
private RedisUtil redisUtil;
@Override
public void onMessage(MapRecord<String, String, String> message) {
log.debug("CONSUMER SQL[streamKey:{},messageId:{},stream:{},body:{}]",
this.getRedisStreamKey(), message.getId(), message.getStream(), message.getValue());
boolean result = this.consumerSqlOperationCouponOrderBackHandler(message.getValue().get("message"));
log.info("CONSUMER SQL RESULT:{} ==> MESSAGE_ID:{}", result, message.getId());
try {
stringRedisTemplate.opsForStream().acknowledge(getRedisStreamGroup(), message);
stringRedisTemplate.opsForStream().delete(this.getRedisStreamKey(), message.getId());
} catch (Exception e) {
log.error("#CONSUMER SQL RESULT:{} ==> DEL_REDIS_QUEUE_MSG_EXCEPTION[MESSAGE_ID:{},MSG:{}]", result, message.getId(), JsonUtils.toJson(message), e);
} finally {
try {
stringRedisTemplate.opsForStream().acknowledge(getRedisStreamGroup(), message);
stringRedisTemplate.opsForStream().delete(this.getRedisStreamKey(), message.getId());
} catch (Exception ignored) {
}
}
}
private boolean consumerSqlOperationCouponOrderBackHandler(String msg) {
boolean aBoolean = false;
try {
OrderCloseMapping.orderCloseMessage mqMessage = JsonUtils.fromJson(msg, OrderCloseMapping.orderCloseMessage.class);
//这里是 uCouponId和uid 懒。所以没新写方法
for (int x = 0; x < mqMessage.getOrderTicketIds().size(); x++) {
String t = mqMessage.getOrderTicketIds().get(x);
String uCouponId = t.split(",")[0];
String uid = t.split(",")[1];
ArrayList<String> uCouponIdList = CollectionUtil.arrayListString();
uCouponIdList.add(uCouponId);
List<CandyUserCouponBasicDto> dtoList = backCoupon(getCouponByUid(uid), uCouponIdList);
setCouponByUid(uid, dtoList);
}
aBoolean = true;
} catch (Exception e) {
log.error("CONSUMER SQL FAIL ==> {}", e.getMessage(), e);
} finally {
if (!aBoolean) {
HashMap<String, String> map = CollectionUtil.mapStringString();
map.put("message", msg);
stringRedisTemplate.opsForStream().add(StreamRecords.mapBacked(map).withStreamKey(this.getRedisStreamKey()));
}
}
return aBoolean;
}
private List<CandyUserCouponBasicDto> getCouponByUid(String uid) {
String redisKey = CandyRedisConst.BASIC_USER_COUPON.concat(uid);
Object obj = redisUtil.get(redisKey);
if (obj == null) {
//降级
return new ArrayList();
} else {
return (List<CandyUserCouponBasicDto>) obj;
}
}
// 覆盖 CandyUserCouponBasicDto数组 根据用户id
private void setCouponByUid(String uid, List<CandyUserCouponBasicDto> dtoList) {
String redisKey = CandyRedisConst.BASIC_USER_COUPON.concat(uid);
redisUtil.set(redisKey, dtoList);
}
/**
* 回退券
*
* @param dtoList CouponBaseDtoList
* @param uCouponIdList 券唯一id list
* @return List<CandyUserCouponBasicDto>
*/
private List<CandyUserCouponBasicDto> backCoupon(List<CandyUserCouponBasicDto> dtoList, ArrayList<String> uCouponIdList) {
boolean isHas = false;
for (CandyUserCouponBasicDto dtoItem : dtoList) {
if (uCouponIdList.contains(dtoItem.getUcouponId())) {
if (dtoItem.getState().equals(5)) {
dtoItem.setState(1);
isHas = true;//券存在
} else {
}
}
}
if (!isHas) {
return null;//券不存在
}
return dtoList;
}
protected abstract String getRedisStreamKey();
protected abstract String getRedisStreamGroup();
}
package com.liquidnet.service.consumer.kylin.receiver;
import com.liquidnet.service.base.constant.MQConst;
import org.springframework.stereotype.Component;
@Component
public class ConsumerCandyCouponOrderBackRdsReceiver extends AbstractCouponOrderBackRedisReceiver {
@Override
protected String getRedisStreamKey() {
return MQConst.CandyQueue.COUPON_ORDER_BACK.getKey();
}
@Override
protected String getRedisStreamGroup() {
return MQConst.CandyQueue.COUPON_ORDER_BACK.getGroup();
}
}
...@@ -132,6 +132,11 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ ...@@ -132,6 +132,11 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
return ResponseDto.failure(ErrorMapping.get("20008"));//无权购买 return ResponseDto.failure(ErrorMapping.get("20008"));//无权购买
} }
String time1 = DateUtil.format(DateUtil.Formatter.yyyyMMddHHmmss.parse(ticketData.getUseStart()), DateUtil.Formatter.MM_dd_zh);
String time2 = DateUtil.format(DateUtil.Formatter.yyyyMMddHHmmss.parse(ticketData.getUseEnd()), DateUtil.Formatter.MM_dd_zh);
String useTime = ticketData.getType() == 2 ? time1 + "~" + time2 : time2;
String content = performanceData.getTitle() + "-" + ticketData.getTitle() + "-" + useTime;
Integer isStudent = ticketData.getIsStudent(); Integer isStudent = ticketData.getIsStudent();
//会员时间获取 //会员时间获取
String memberTimeStart = ticketData.getMemberTimeStart(); // 会员开售时间 String memberTimeStart = ticketData.getMemberTimeStart(); // 会员开售时间
...@@ -174,6 +179,15 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ ...@@ -174,6 +179,15 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
} }
//通用判断时间 //通用判断时间
HashMap<String, Object> advanceMap = null;
if (payOrderParam.getAdvanceCode() != null) {
advanceMap = orderUtils.useCoupon(payOrderParam.getAdvanceCode(), "", BigDecimal.ZERO);
Integer typeVoucher = (Integer) advanceMap.get("type");
if (typeVoucher.equals(-1)) {
throw new Exception("券不可用");
}
}
if (isMember) { if (isMember) {
if (DateUtil.compareStrDay(DateUtil.getNowTime(), memberTimeStart) == -1) { if (DateUtil.compareStrDay(DateUtil.getNowTime(), memberTimeStart) == -1) {
return ResponseDto.failure(ErrorMapping.get("20011"));//未开始 return ResponseDto.failure(ErrorMapping.get("20011"));//未开始
...@@ -253,7 +267,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ ...@@ -253,7 +267,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
} }
} }
ResponseDto<PayInnerResultVo> resultData = order(payOrderParam, uid, isMember, isTrueName, performanceData, ticketData, entersVoList, isStudent); ResponseDto<PayInnerResultVo> resultData = order(payOrderParam, uid, isMember, isTrueName, performanceData, ticketData, entersVoList, isStudent, content, useTime, advanceMap);
isDownGeneral = false; isDownGeneral = false;
return resultData; return resultData;
} }
...@@ -275,12 +289,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ ...@@ -275,12 +289,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
} }
} }
private ResponseDto<PayInnerResultVo> order(PayOrderParam payOrderParam, String uid, boolean isMember, int isTrueName, KylinPerformanceVo performanceData, KylinTicketVo ticketData, List<AdamEntersVo> entersVoList, Integer isStudent) throws Exception { private ResponseDto<PayInnerResultVo> order(PayOrderParam payOrderParam, String uid, boolean isMember, int isTrueName, KylinPerformanceVo performanceData, KylinTicketVo ticketData, List<AdamEntersVo> entersVoList, Integer isStudent, String content, String useTime, HashMap<String, Object> advanceMap) throws Exception {
String time1 = DateUtil.format(DateUtil.Formatter.yyyyMMddHHmmss.parse(ticketData.getUseStart()), DateUtil.Formatter.MM_dd_zh);
String time2 = DateUtil.format(DateUtil.Formatter.yyyyMMddHHmmss.parse(ticketData.getUseEnd()), DateUtil.Formatter.MM_dd_zh);
String useTime = ticketData.getType() == 2 ? time1 + "~" + time2 : time2;
String content = performanceData.getTitle() + "-" + ticketData.getTitle() + "-" + useTime;
LinkedList<String> sqls = ObjectUtil.cloneLinkedListStr(); LinkedList<String> sqls = ObjectUtil.cloneLinkedListStr();
String headerCliSource = CurrentUtil.getHeaderCliSource(), headerCliVersion = CurrentUtil.getHeaderCliVersion(); String headerCliSource = CurrentUtil.getHeaderCliSource(), headerCliVersion = CurrentUtil.getHeaderCliVersion();
String source = headerCliSource == null ? "" : headerCliSource; String source = headerCliSource == null ? "" : headerCliSource;
...@@ -317,11 +326,27 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ ...@@ -317,11 +326,27 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
} }
//券的使用逻辑 //券的使用逻辑
BigDecimal priceVoucher = orderUtils.useCoupon(payOrderParam.getVoucherCode(),content,orderTickets.getPriceTotal()); sqls.add(SqlMapping.get("kylin_order_coupon.add"));
if(priceVoucher.compareTo(BigDecimal.valueOf(-1))==0){ LinkedList<Object[]> sqlsDataE = ObjectUtil.cloneLinkedListObj();
throw new Exception("券不可用"); if (advanceMap != null) {
BigDecimal priceVoucher = (BigDecimal) advanceMap.get("voucher");
Integer typeVoucher = (Integer) advanceMap.get("type");
sqlsDataE.add(new Object[]{
orderTicketId, payOrderParam.getVoucherCode(), typeVoucher, priceVoucher, now, now
});
}
if (payOrderParam.getVoucherCode() != null) {
HashMap<String, Object> hashMap = orderUtils.useCoupon(payOrderParam.getVoucherCode(), content, orderTickets.getPriceTotal());
BigDecimal priceVoucher = (BigDecimal) hashMap.get("voucher");
Integer typeVoucher = (Integer) hashMap.get("type");
if (typeVoucher.equals(-1)) {
throw new Exception("券不可用");
}
orderTickets.setPriceVoucher(priceVoucher);
sqlsDataE.add(new Object[]{
orderTicketId, payOrderParam.getVoucherCode(), typeVoucher, priceVoucher, now, now
});
} }
orderTickets.setPriceVoucher(priceVoucher);
orderTickets.setPriceActual(orderTickets.getPriceTotal().subtract(orderTickets.getPriceVoucher())); orderTickets.setPriceActual(orderTickets.getPriceTotal().subtract(orderTickets.getPriceVoucher()));
orderTickets.setPriceExpress(payOrderParam.getIsExpress() == 1 ? ticketData.getPriceExpress() : BigDecimal.valueOf(0)); orderTickets.setPriceExpress(payOrderParam.getIsExpress() == 1 ? ticketData.getPriceExpress() : BigDecimal.valueOf(0));
...@@ -422,8 +447,6 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ ...@@ -422,8 +447,6 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
orderTicketEntitiesVo.setTicketTitle(ticketData.getTitle()); orderTicketEntitiesVo.setTicketTitle(ticketData.getTitle());
orderTicketEntitiesVo.setUseStart(ticketData.getUseStart()); orderTicketEntitiesVo.setUseStart(ticketData.getUseStart());
orderTicketEntitiesVo.setUseEnd(ticketData.getUseEnd()); orderTicketEntitiesVo.setUseEnd(ticketData.getUseEnd());
// orderTicketEntitiesVo.setTicketsmId(ticketData.getMid());
// orderTicketEntitiesVo.setTimemId(ticketTimesData.getMid());
orderTicketEntitiesVo.setCreatedAt(orderTicketEntities.getCreatedAt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); orderTicketEntitiesVo.setCreatedAt(orderTicketEntities.getCreatedAt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
orderTicketEntitiesVo.setUpdatedAt(null); orderTicketEntitiesVo.setUpdatedAt(null);
orderTicketEntitiesVo.setChangeDate(orderTicketEntities.getCreatedAt()); orderTicketEntitiesVo.setChangeDate(orderTicketEntities.getCreatedAt());
...@@ -432,7 +455,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ ...@@ -432,7 +455,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
} }
} else { } else {
for (int i = 0; i < payOrderParam.getNumber(); i++) { for (int i = 0; i < payOrderParam.getNumber(); i++) {
String orderTicketEntitiesId = IDGenerator.nextSnowId().toString(); String orderTicketEntitiesId = IDGenerator.nextSnowId();
orderTicketEntities.setOrderTicketEntitiesId(orderTicketEntitiesId); orderTicketEntities.setOrderTicketEntitiesId(orderTicketEntitiesId);
orderTicketEntities.setOrderId(orderTicketId); orderTicketEntities.setOrderId(orderTicketId);
orderTicketEntities.setTicketId(payOrderParam.getTicketId()); orderTicketEntities.setTicketId(payOrderParam.getTicketId());
...@@ -458,8 +481,6 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ ...@@ -458,8 +481,6 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
orderTicketEntitiesVo.setTicketTitle(ticketData.getTitle()); orderTicketEntitiesVo.setTicketTitle(ticketData.getTitle());
orderTicketEntitiesVo.setUseStart(ticketData.getUseStart()); orderTicketEntitiesVo.setUseStart(ticketData.getUseStart());
orderTicketEntitiesVo.setUseEnd(ticketData.getUseEnd()); orderTicketEntitiesVo.setUseEnd(ticketData.getUseEnd());
// orderTicketEntitiesVo.setTicketsmId(ticketData.getMid());
// orderTicketEntitiesVo.setTimemId(ticketTimesData.getMid());
orderTicketEntitiesVo.setCreatedAt(orderTicketEntities.getCreatedAt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); orderTicketEntitiesVo.setCreatedAt(orderTicketEntities.getCreatedAt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
orderTicketEntitiesVo.setUpdatedAt(null); orderTicketEntitiesVo.setUpdatedAt(null);
orderTicketEntitiesVo.setChangeDate(orderTicketEntities.getCreatedAt()); orderTicketEntitiesVo.setChangeDate(orderTicketEntities.getCreatedAt());
...@@ -534,7 +555,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ ...@@ -534,7 +555,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
orderUtils.resetOrderListVo(uid, 1, orderTicketVo.getOrderTicketsId(), orderTicketVo); orderUtils.resetOrderListVo(uid, 1, orderTicketVo.getOrderTicketsId(), orderTicketVo);
// 执行sql // 执行sql
String sqlData = SqlMapping.gets(sqls, sqlsDataB, sqlsDataC, sqlsDataD, sqlsDataA); String sqlData = SqlMapping.gets(sqls, sqlsDataE, sqlsDataB, sqlsDataC, sqlsDataD, sqlsDataA);
queueUtils.sendMsgByRedis(MQConst.KylinQueue.SQL_ORDER_CREATE.getKey(), queueUtils.sendMsgByRedis(MQConst.KylinQueue.SQL_ORDER_CREATE.getKey(),
sqlData); sqlData);
log.info(UserPathDto.setData("下单(唤起支付)", payOrderParam, payResultVo.getData())); log.info(UserPathDto.setData("下单(唤起支付)", payOrderParam, payResultVo.getData()));
......
...@@ -24,6 +24,7 @@ import org.springframework.util.MultiValueMap; ...@@ -24,6 +24,7 @@ import org.springframework.util.MultiValueMap;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
@Component @Component
...@@ -174,7 +175,7 @@ public class OrderUtils { ...@@ -174,7 +175,7 @@ public class OrderUtils {
* @param totalPrice 订单总价 * @param totalPrice 订单总价
* @return * @return
*/ */
public BigDecimal useCoupon(String uCouponId, String content, BigDecimal totalPrice) { public HashMap<String,Object> useCoupon(String uCouponId, String content, BigDecimal totalPrice) {
MultiValueMap<String, String> params = CollectionUtil.linkedMultiValueMapStringString(); MultiValueMap<String, String> params = CollectionUtil.linkedMultiValueMapStringString();
params.add("uCouponId", uCouponId); params.add("uCouponId", uCouponId);
params.add("content", content); params.add("content", content);
...@@ -205,7 +206,10 @@ public class OrderUtils { ...@@ -205,7 +206,10 @@ public class OrderUtils {
voucher = BigDecimal.ZERO; voucher = BigDecimal.ZERO;
break; break;
} }
return voucher; HashMap<String ,Object> hashMap = CollectionUtil.mapStringObject();
hashMap.put("type",type);
hashMap.put("voucher",voucher);
return hashMap;
} }
/** /**
......
...@@ -9,6 +9,8 @@ kylin_order_ticket_relation.add=INSERT INTO kylin_order_ticket_relations(order_t ...@@ -9,6 +9,8 @@ kylin_order_ticket_relation.add=INSERT INTO kylin_order_ticket_relations(order_t
kylin_order_ticket_status.add=INSERT INTO kylin_order_ticket_status(order_ticket_status_id ,order_id ,express_type ,is_student ,transfer_status ,`status` ,pay_status ,created_at ,updated_at)VALUES(?,?,?,?,?,?,?,?,?) kylin_order_ticket_status.add=INSERT INTO kylin_order_ticket_status(order_ticket_status_id ,order_id ,express_type ,is_student ,transfer_status ,`status` ,pay_status ,created_at ,updated_at)VALUES(?,?,?,?,?,?,?,?,?)
kylin_order_ticket_entities.add=INSERT INTO kylin_order_ticket_entities(order_ticket_entities_id ,order_id ,ticket_id ,user_id ,time_id ,performance_id ,enter_type ,enter_name ,enter_mobile,enter_id_code,`status`,sys_damai,check_client,is_payment,`comment`,created_at,updated_at)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) kylin_order_ticket_entities.add=INSERT INTO kylin_order_ticket_entities(order_ticket_entities_id ,order_id ,ticket_id ,user_id ,time_id ,performance_id ,enter_type ,enter_name ,enter_mobile,enter_id_code,`status`,sys_damai,check_client,is_payment,`comment`,created_at,updated_at)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
kylin_order_coupon.add=INSERT INTO kylin_order_coupons(order_id ,coupon_code ,coupon_type ,coupon_price,created_at,updated_at)VALUES(?,?,?,?,?,?)
# ------------------------再次支付---------------------------- # ------------------------再次支付----------------------------
kylin_order_ticket.payAgain=UPDATE kylin_order_tickets SET updated_at = ? , pay_code = ? WHERE order_tickets_id = ? and (updated_at <= ? or created_at = ? or updated_at is null) kylin_order_ticket.payAgain=UPDATE kylin_order_tickets SET updated_at = ? , pay_code = ? WHERE order_tickets_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
kylin_order_ticket_status.payAgain=UPDATE kylin_order_ticket_status SET updated_at = ? WHERE order_id = ? and (updated_at <= ? or created_at = ? or updated_at is null) kylin_order_ticket_status.payAgain=UPDATE kylin_order_ticket_status SET updated_at = ? WHERE order_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
......
...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; ...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
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.CurrentUtil;
import com.liquidnet.service.base.OrderCloseMapping;
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.candy.dto.CandyUserCouponBasicDto; import com.liquidnet.service.candy.dto.CandyUserCouponBasicDto;
...@@ -38,6 +39,20 @@ public class PlatformCandyUserCouponService extends ServiceImpl<CandyUserCouponM ...@@ -38,6 +39,20 @@ public class PlatformCandyUserCouponService extends ServiceImpl<CandyUserCouponM
userCoupon.setState(1); userCoupon.setState(1);
platformCandyUserCouponService.update(userCoupon, new UpdateWrapper<CandyUserCoupon>().in("ucoupon_id", uCouponIdList)); platformCandyUserCouponService.update(userCoupon, new UpdateWrapper<CandyUserCoupon>().in("ucoupon_id", uCouponIdList));
//sendRedis //sendRedis
int forSize = 500;
int forCount = uCouponUidList.size() % forSize == 0 ? uCouponUidList.size() / forSize : (uCouponUidList.size() / forSize) + 1;
for (int i = 0; i < forCount; i++) {
LinkedList<String> mqList = new LinkedList<>();
for (int y = 0; y < forSize; y++) {
try {
String t = uCouponUidList.get(i * 500 + y);
mqList.add(t);
} catch (Exception e) {
break;
}
}
queueUtils.sendMsgByRedis(MQConst.CandyQueue.COUPON_ORDER_BACK.getKey(), OrderCloseMapping.get(mqList));
}
return true; return true;
} }
} }
...@@ -2,6 +2,7 @@ package com.liquidnet.service.platform.service.impl.kylin; ...@@ -2,6 +2,7 @@ package com.liquidnet.service.platform.service.impl.kylin;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DateUtil; import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.base.OrderCloseMapping; import com.liquidnet.service.base.OrderCloseMapping;
import com.liquidnet.service.base.constant.MQConst; import com.liquidnet.service.base.constant.MQConst;
...@@ -14,6 +15,8 @@ import com.liquidnet.service.kylin.entity.KylinOrderTickets; ...@@ -14,6 +15,8 @@ import com.liquidnet.service.kylin.entity.KylinOrderTickets;
import com.liquidnet.service.kylin.mapper.KylinOrderTicketRelationsMapper; import com.liquidnet.service.kylin.mapper.KylinOrderTicketRelationsMapper;
import com.liquidnet.service.kylin.mapper.KylinOrderTicketStatusMapper; import com.liquidnet.service.kylin.mapper.KylinOrderTicketStatusMapper;
import com.liquidnet.service.kylin.mapper.KylinOrderTicketsMapper; import com.liquidnet.service.kylin.mapper.KylinOrderTicketsMapper;
import com.liquidnet.service.platform.service.impl.candy.PlatformCandyCouponService;
import com.liquidnet.service.platform.service.impl.candy.PlatformCandyUserCouponService;
import com.liquidnet.service.platform.utils.DataUtils; import com.liquidnet.service.platform.utils.DataUtils;
import com.liquidnet.service.platform.utils.QueueUtils; import com.liquidnet.service.platform.utils.QueueUtils;
import com.mongodb.BasicDBObject; import com.mongodb.BasicDBObject;
...@@ -55,15 +58,19 @@ public class DMCheckOrderTimeImpl extends ServiceImpl<KylinOrderTicketsMapper, K ...@@ -55,15 +58,19 @@ public class DMCheckOrderTimeImpl extends ServiceImpl<KylinOrderTicketsMapper, K
private KylinOrderTicketStatusMapper orderTicketStatusMapper; private KylinOrderTicketStatusMapper orderTicketStatusMapper;
@Autowired @Autowired
private KylinOrderTicketRelationsMapper orderTicketRelationsMapper; private KylinOrderTicketRelationsMapper orderTicketRelationsMapper;
@Autowired
private PlatformCandyUserCouponService platformCandyUserCouponService;
public boolean checkOrderTime(String userId) { public boolean checkOrderTime(String userId) {
List<OrderScriptDto> dtoData = orderTicketsMapper.orderScriptDto(userId); List<OrderScriptDto> dtoData = orderTicketsMapper.orderScriptDto(userId);
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
Long currentTime = System.currentTimeMillis(); Long currentTime = System.currentTimeMillis();
HashMap<String, Integer> mapSurplusGeneral = new HashMap<>(); HashMap<String, Integer> mapSurplusGeneral = new HashMap<>();
ArrayList<String> orderDataList = new ArrayList<>(); ArrayList<String> orderDataList = CollectionUtil.arrayListString();
ArrayList<String> orderIdList = new ArrayList<>(); ArrayList<String> orderIdList = CollectionUtil.arrayListString();
HashMap<String, Object> mapMongo = new HashMap<>(); HashMap<String, Object> mapMongo = new HashMap<>();
ArrayList<String> couponDataList = CollectionUtil.arrayListString();
ArrayList<String> couponIdList = CollectionUtil.arrayListString();
for (OrderScriptDto item : dtoData) { for (OrderScriptDto item : dtoData) {
if (item.getStatus().equals(KylinTableStatusConst.ORDER_STATUS0)) { if (item.getStatus().equals(KylinTableStatusConst.ORDER_STATUS0)) {
...@@ -74,6 +81,8 @@ public class DMCheckOrderTimeImpl extends ServiceImpl<KylinOrderTicketsMapper, K ...@@ -74,6 +81,8 @@ public class DMCheckOrderTimeImpl extends ServiceImpl<KylinOrderTicketsMapper, K
mapMongo.put("changeDate", now); mapMongo.put("changeDate", now);
orderDataList.add(item.getOrderTicketsId() + "," + item.getUserId()); orderDataList.add(item.getOrderTicketsId() + "," + item.getUserId());
orderIdList.add(item.getOrderTicketsId()); orderIdList.add(item.getOrderTicketsId());
couponDataList.add(item.getCouponCode() + "," + item.getUserId());
couponIdList.add(item.getCouponCode());
mapSurplusGeneral.put(item.getTicketId(), mapSurplusGeneral.get(item.getTicketId()) == null ? item.getNumber() : mapSurplusGeneral.get(item.getTicketId()) + item.getNumber()); mapSurplusGeneral.put(item.getTicketId(), mapSurplusGeneral.get(item.getTicketId()) == null ? item.getNumber() : mapSurplusGeneral.get(item.getTicketId()) + item.getNumber());
} catch (Exception e) { } catch (Exception e) {
log.debug("CHECK TIME SYNC = " + e.getMessage()); log.debug("CHECK TIME SYNC = " + e.getMessage());
...@@ -138,6 +147,8 @@ public class DMCheckOrderTimeImpl extends ServiceImpl<KylinOrderTicketsMapper, K ...@@ -138,6 +147,8 @@ public class DMCheckOrderTimeImpl extends ServiceImpl<KylinOrderTicketsMapper, K
log.debug("MQLIST SIZE = " + mqList.size()); log.debug("MQLIST SIZE = " + mqList.size());
queueUtils.sendMsgByRedis(MQConst.KylinQueue.SQL_ORDER_CLOSE.getKey(), OrderCloseMapping.get(mqList)); queueUtils.sendMsgByRedis(MQConst.KylinQueue.SQL_ORDER_CLOSE.getKey(), OrderCloseMapping.get(mqList));
} }
platformCandyUserCouponService.useBackCoupon(couponDataList, couponIdList);
} }
return true; return true;
} }
......
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