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

Commit e1ce19ad authored by 张国柄's avatar 张国柄

Merge remote-tracking branch 'origin/dev_member_voucher_refund' into dev_member_voucher_refund

parents 22605f86 efc7b6f3
package com.liquidnet.service.kylin.dto.vo.returns;
import lombok.Data;
import java.io.Serializable;
@Data
public class InnerReturnVo<T> implements Serializable,Cloneable {
private static final long serialVersionUID = 1541552316829686035L;
private String code;
private String message;
private T data;
private static final InnerReturnVo obj = new InnerReturnVo();
public static InnerReturnVo getNew() {
try {
return (InnerReturnVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new InnerReturnVo();
}
}
}
......@@ -101,4 +101,33 @@ public class MQConst {
return desc;
}
}
public enum CandyQueue {
COUPON_USE("candy:stream:rk.coupon.use", "group.coupon.use", "券-使用"),
COUPON_BACK("candy:stream:rk.coupon.back", "group.coupon.back", "券-回退"),
COUPON_RECEIVE("candy:stream:rk.coupon.receive", "group.coupon.receive", "券-领取"),
;
private final String key;
private final String group;
private final String desc;
CandyQueue(String key, String group, String desc) {
this.key = key;
this.group = group;
this.desc = desc;
}
public String getKey() {
return key;
}
public String getGroup() {
return group;
}
public String getDesc() {
return desc;
}
}
}
......@@ -59,6 +59,8 @@ liquidnet:
order:
adam:
url: http://devadam.zhengzai.tv/adam
candy:
url: http://devcandy.zhengzai.tv/candy
url-pay:
pay: http://devdragon.zhengzai.tv/dragon/pay/dragonPay
check: http://devdragon.zhengzai.tv/dragon/pay/checkOrder
......
......@@ -59,6 +59,8 @@ liquidnet:
order:
adam:
url: http://testadam.zhengzai.tv/adam
candy:
url: http://testcandy.zhengzai.tv/candy
url-pay:
pay: http://testdragon.zhengzai.tv/dragon/pay/dragonPay
check: http://testdragon.zhengzai.tv/dragon/pay/checkOrder
......
......@@ -26,3 +26,5 @@ liquidnet:
localUrl: ${liquidnet.service.order.url-pay.localUrl}
adam:
url:${liquidnet.service.order.adam.url}
candy:
url:${liquidnet.service.order.candy.url}
......@@ -26,3 +26,5 @@ liquidnet:
localUrl: ${liquidnet.service.order.url-pay.localUrl}
adam:
url:${liquidnet.service.order.adam.url}
candy:
url:${liquidnet.service.order.candy.url}
\ No newline at end of file
-- 使用 --
XADD candy:stream:rk.coupon.use * 0 0
XGROUP CREATE candy:stream:rk.coupon.use group.coupon.use 0
-- 回退 --
XADD candy:stream:rk.coupon.back * 0 0
XGROUP CREATE candy:stream:rk.coupon.back group.coupon.back 0
-- 领取 --
XADD candy:stream:rk.coupon.receive * 0 0
XGROUP CREATE candy:stream:rk.coupon.receive group.coupon.receive 0
......@@ -8,6 +8,7 @@
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<artifactId>liquidnet-service-candy-impl</artifactId>
......@@ -44,4 +45,5 @@
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
......@@ -126,9 +126,10 @@ public class CandyCouponController {
@ApiImplicitParams({
@ApiImplicitParam(type = "form", dataType = "String", name = "uCouponId", value = "券唯一表示id", required = true),
@ApiImplicitParam(type = "form", dataType = "String", name = "content", value = "消费内容", required = true),
@ApiImplicitParam(type = "form", dataType = "String", name = "totalPrice", value = "消费价格", required = true),
})
public ResponseDto<CandyUseResultVo> useCoupon(@RequestParam("uCouponId") String uCouponId,@RequestParam("content") String content) {
CandyUseResultVo result = candyCouponService.useCoupon(uCouponId,content);
public ResponseDto<CandyUseResultVo> useCoupon(@RequestParam("uCouponId") String uCouponId,@RequestParam("content") String content,@RequestParam("totalPrice") String totalPrice) {
CandyUseResultVo result = candyCouponService.useCoupon(uCouponId,content,totalPrice);
if (result == null) {
return ResponseDto.failure();
}
......
......@@ -36,7 +36,7 @@ public interface ICandyCouponService extends IService<CandyCoupon> {
Integer stateCoupon(String uCouponId);
CandyUseResultVo useCoupon(String uCouponId,String content);
CandyUseResultVo useCoupon(String uCouponId,String content,String totalPrice);
Boolean useBackCoupon(String uCouponId);
......
......@@ -184,20 +184,27 @@ public class CandyCouponServiceImpl extends ServiceImpl<CandyCouponMapper, Candy
}
@Override
public CandyUseResultVo useCoupon(String uCouponId, String content) {
public CandyUseResultVo useCoupon(String uCouponId, String content,String totalPrice) {
String uid = CurrentUtil.getCurrentUid();
CandyUseResultVo vo = CandyUseResultVo.getNew();
List<CandyUserCouponBasicDto> dtoList = CouponBaseUtil.useCoupon(redisDataUtils.getCouponByUid(uid), uCouponId,content);
List<CandyUserCouponBasicDto> dtoList = CouponBaseUtil.useCoupon(redisDataUtils.getCouponByUid(uid), uCouponId, content);
if (dtoList == null) {
return null;
vo.setCouType(-1);
vo.setValue(BigDecimal.ZERO);
} else {
CandyUserCouponBasicDto dto = CouponBaseUtil.getSingleDtoByUCouponId(redisDataUtils.getCouponByUid(uid), uCouponId);
vo.setCouType(dto.getCouType());
switch (dto.getCouType()) {//券类型[1-代金券|2-满减券|3-兑换券|4-折扣券]
case 1:
vo.setValue(dto.getValFace());
break;
case 2:
if(dto.getValOver().compareTo(new BigDecimal(totalPrice))>=0) {
vo.setValue(dto.getValMinus());
}else{
vo.setCouType(-1);
vo.setValue(BigDecimal.ZERO);
}
break;
case 3:
vo.setValue(BigDecimal.valueOf(-1));
......@@ -209,15 +216,17 @@ public class CandyCouponServiceImpl extends ServiceImpl<CandyCouponMapper, Candy
vo.setValue(BigDecimal.valueOf(0));
break;
}
vo.setCouType(dto.getCouType());
if(vo.getCouType()!=-1) {
redisDataUtils.setCouponByUid(uid, dtoList);
//入库
queueUtils.sendMsgByRedis(
MQConst.AdamQueue.SQL_UCENTER.getKey(),
SqlMapping.get("candy_coupon.use", 1
MQConst.CandyQueue.COUPON_USE.getKey(),
SqlMapping.get("candy_coupon.use",
uid, uCouponId
)
);
}
}
return vo;
}
......@@ -231,8 +240,9 @@ public class CandyCouponServiceImpl extends ServiceImpl<CandyCouponMapper, Candy
redisDataUtils.setCouponByUid(uid, dtoList);
//入库
queueUtils.sendMsgByRedis(
MQConst.AdamQueue.SQL_UCENTER.getKey(),
SqlMapping.get("candy_coupon.back", 1
MQConst.CandyQueue.COUPON_BACK.getKey(),
SqlMapping.get("candy_coupon.back",
uid,uCouponId
)
);
}
......@@ -254,8 +264,9 @@ public class CandyCouponServiceImpl extends ServiceImpl<CandyCouponMapper, Candy
redisDataUtils.addCouponByUid(uid, baseDto);
//入库
queueUtils.sendMsgByRedis(
MQConst.AdamQueue.SQL_UCENTER.getKey(),
SqlMapping.get("candy_coupon.receive", 1
MQConst.CandyQueue.COUPON_RECEIVE.getKey(),
SqlMapping.get("candy_coupon.receive",
uCouponId, uid, 1, infoDto.getCouponId(), ccode, LocalDateTime.now()
)
);
} else {
......
# -- 使用券 --
candy_coupon.use=INSERT INTO sweet_remind (remind_id,openId,unionId,performancesId) VALUES (?,?,?,?)
candy_coupon.use=UPDATE candy_user_coupon SET state = 3 WHERE uid = ? AND ucoupon_id = ?
# -- 回退券 --
candy_coupon.back=INSERT INTO sweet_remind (remind_id,openId,unionId,performancesId) VALUES (?,?,?,?)
candy_coupon.back=UPDATE candy_user_coupon SET state = 1 WHERE uid = ? AND ucoupon_id = ?
# -- 领取券 --
candy_coupon.receive=INSERT INTO sweet_remind (remind_id,openId,unionId,performancesId) VALUES (?,?,?,?)
\ No newline at end of file
candy_coupon.receive=INSERT INTO candy_user_coupon (ucoupon_id , uid , state , coupon_id , ccdoe , bind_at ) VALUE ( ? , ? , ? , ? , ? , ? )
package com.liquidnet.service.consumer.kylin.config;
import com.liquidnet.service.consumer.kylin.receiver.ConsumerCandyCouponBackRdsReceiver;
import com.liquidnet.service.consumer.kylin.receiver.ConsumerCandyCouponUseRdsReceiver;
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.SweetQueue.SWEET_USER_INSERT_DRAW;
@Configuration
public class ConsumerCandyCouponBackRedisStreamConfig {
@Autowired
ConsumerCandyCouponBackRdsReceiver consumerCandyCouponBackRdsReceiver;
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(SWEET_USER_INSERT_DRAW.getGroup(), SWEET_USER_INSERT_DRAW.name() + t),
StreamOffset.create(SWEET_USER_INSERT_DRAW.getKey(), ReadOffset.lastConsumed()), consumerCandyCouponBackRdsReceiver
);
}
/* —————————————————————————— | —————————————————————————— | —————————————————————————— */
/* -------------------------------------------------------- | 缺票登记 */
@Bean
public Subscription subscriptionSqlCandyCouponBack(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlCandyCouponBack(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionSqlCandyCouponBack2(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlCandyCouponBack(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionSqlCandyCouponBack3(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlCandyCouponBack(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
/* -------------------------------------------------------- | */
}
package com.liquidnet.service.consumer.kylin.config;
import com.liquidnet.service.consumer.kylin.receiver.ConsumerCandyCouponBackRdsReceiver;
import com.liquidnet.service.consumer.kylin.receiver.ConsumerCandyCouponReceiveRdsReceiver;
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.SweetQueue.SWEET_USER_INSERT_DRAW;
@Configuration
public class ConsumerCandyCouponReceiveRedisStreamConfig {
@Autowired
ConsumerCandyCouponReceiveRdsReceiver consumerCandyCouponReceiveRdsReceiver;
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 receiveSqlCandyCouponReceive(StreamMessageListenerContainer<String, MapRecord<String, String, String>> listenerContainer, int t) {
return listenerContainer.receiveAutoAck(
Consumer.from(SWEET_USER_INSERT_DRAW.getGroup(), SWEET_USER_INSERT_DRAW.name() + t),
StreamOffset.create(SWEET_USER_INSERT_DRAW.getKey(), ReadOffset.lastConsumed()), consumerCandyCouponReceiveRdsReceiver
);
}
/* —————————————————————————— | —————————————————————————— | —————————————————————————— */
/* -------------------------------------------------------- | 缺票登记 */
@Bean
public Subscription subscriptionSqlCandyCouponReceive(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlCandyCouponReceive(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionSqlCandyCouponReceive2(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlCandyCouponReceive(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionSqlCandyCouponBack3(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlCandyCouponReceive(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
/* -------------------------------------------------------- | */
}
package com.liquidnet.service.consumer.kylin.config;
import com.liquidnet.service.consumer.kylin.receiver.ConsumerCandyCouponUseRdsReceiver;
import com.liquidnet.service.consumer.kylin.receiver.ConsumerSweetUserRdsReceiver;
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.SweetQueue.SWEET_USER_INSERT_DRAW;
@Configuration
public class ConsumerCandyCouponUseRedisStreamConfig {
@Autowired
ConsumerCandyCouponUseRdsReceiver consumerCandyCouponUseRdsReceiver;
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 receiveSqlCandyCouponUse(StreamMessageListenerContainer<String, MapRecord<String, String, String>> listenerContainer, int t) {
return listenerContainer.receiveAutoAck(
Consumer.from(SWEET_USER_INSERT_DRAW.getGroup(), SWEET_USER_INSERT_DRAW.name() + t),
StreamOffset.create(SWEET_USER_INSERT_DRAW.getKey(), ReadOffset.lastConsumed()), consumerCandyCouponUseRdsReceiver
);
}
/* —————————————————————————— | —————————————————————————— | —————————————————————————— */
/* -------------------------------------------------------- | 缺票登记 */
@Bean
public Subscription subscriptionSqlCandyCouponUse(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlCandyCouponUse(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionSqlCandyCouponUse2(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlCandyCouponUse(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionSqlCandyCouponUse3(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlCandyCouponUse(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
/* -------------------------------------------------------- | */
}
package com.liquidnet.service.consumer.kylin.receiver;
import com.liquidnet.service.base.constant.MQConst;
import org.springframework.stereotype.Component;
@Component
public class ConsumerCandyCouponBackRdsReceiver extends AbstractSqlRedisReceiver {
@Override
protected String getRedisStreamKey() {
return MQConst.CandyQueue.COUPON_BACK.getKey();
}
@Override
protected String getRedisStreamGroup() {
return MQConst.CandyQueue.COUPON_BACK.getGroup();
}
}
package com.liquidnet.service.consumer.kylin.receiver;
import com.liquidnet.service.base.constant.MQConst;
import org.springframework.stereotype.Component;
@Component
public class ConsumerCandyCouponReceiveRdsReceiver extends AbstractSqlRedisReceiver {
@Override
protected String getRedisStreamKey() {
return MQConst.CandyQueue.COUPON_RECEIVE.getKey();
}
@Override
protected String getRedisStreamGroup() {
return MQConst.CandyQueue.COUPON_RECEIVE.getGroup();
}
}
package com.liquidnet.service.consumer.kylin.receiver;
import com.liquidnet.service.base.constant.MQConst;
import org.springframework.stereotype.Component;
@Component
public class ConsumerCandyCouponUseRdsReceiver extends AbstractSqlRedisReceiver {
@Override
protected String getRedisStreamKey() {
return MQConst.CandyQueue.COUPON_USE.getKey();
}
@Override
protected String getRedisStreamGroup() {
return MQConst.CandyQueue.COUPON_USE.getGroup();
}
}
......@@ -36,6 +36,11 @@
<artifactId>liquidnet-service-adam-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-service-candy-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-sms</artifactId>
......
......@@ -275,7 +275,12 @@ 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) {
private ResponseDto<PayInnerResultVo> order(PayOrderParam payOrderParam, String uid, boolean isMember, int isTrueName, KylinPerformanceVo performanceData, KylinTicketVo ticketData, List<AdamEntersVo> entersVoList, Integer isStudent) 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();
String headerCliSource = CurrentUtil.getHeaderCliSource(), headerCliVersion = CurrentUtil.getHeaderCliVersion();
String source = headerCliSource == null ? "" : headerCliSource;
......@@ -298,8 +303,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
orderTickets.setNumber(payOrderParam.getNumber());
orderTickets.setPrice(ticketData.getPrice());
orderTickets.setPriceMember(ticketData.getMemberPrice());
//TODO 券的使用逻辑
orderTickets.setPriceVoucher(BigDecimal.valueOf(0.0));
if (payOrderParam.getVoucherType() != null) {
orderTickets.setCouponType(payOrderParam.getVoucherType().equalsIgnoreCase("exchange") ? "exchange" : "no");
} else {
......@@ -311,6 +315,14 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
} else {
orderTickets.setPriceTotal(ticketData.getPrice().multiply(BigDecimal.valueOf(payOrderParam.getNumber())).add(payOrderParam.getIsExpress() == 1 ? ticketData.getPriceExpress() : BigDecimal.valueOf(0)));
}
//券的使用逻辑
BigDecimal priceVoucher = orderUtils.useCoupon(payOrderParam.getVoucherCode(),content,orderTickets.getPriceTotal());
if(priceVoucher.compareTo(BigDecimal.valueOf(-1))==0){
throw new Exception("券不可用");
}
orderTickets.setPriceVoucher(priceVoucher);
orderTickets.setPriceActual(orderTickets.getPriceTotal().subtract(orderTickets.getPriceVoucher()));
orderTickets.setPriceExpress(payOrderParam.getIsExpress() == 1 ? ticketData.getPriceExpress() : BigDecimal.valueOf(0));
orderTickets.setPriceRefund(BigDecimal.valueOf(0.0));
......@@ -462,14 +474,11 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
if (orderTickets.getPriceActual().compareTo(BigDecimal.valueOf(0)) > 0) {
// 调用支付
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;
LinkedMultiValueMap<String, String> httpData = ObjectUtil.cloneLinkedMultiValueMapStringAndString();
httpData.add("type", "TICKET");
httpData.add("price", orderTickets.getPriceActual().toString());
httpData.add("name", useTime + ticketData.getTitle() + "-" + performanceData.getTitle());
httpData.add("detail", performanceData.getTitle() + "-" + ticketData.getTitle() + "-" + useTime);
httpData.add("detail", content);
httpData.add("orderCode", orderTickets.getOrderCode());
httpData.add("clientIp", CurrentUtil.getCliIpAddr());
httpData.add("notifyUrl", synUrl);
......
......@@ -2,21 +2,27 @@ package com.liquidnet.service.order.utils;
import com.fasterxml.jackson.core.type.TypeReference;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.adam.dto.vo.AdamAddressesVo;
import com.liquidnet.service.adam.dto.vo.AdamEntersVo;
import com.liquidnet.service.adam.dto.vo.AdamUserMemberVo;
import com.liquidnet.service.candy.vo.CandyUseResultVo;
import com.liquidnet.service.kylin.dto.param.SysDamaiParam;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketVo;
import com.liquidnet.service.kylin.dto.vo.returns.InnerReturnVo;
import com.liquidnet.service.kylin.dto.vo.returns.KylinOrderListVo;
import com.liquidnet.service.kylin.dto.vo.returns.PayResultVo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
......@@ -25,8 +31,10 @@ public class OrderUtils {
@Autowired
private DataUtils dataUtils;
// @Value("${liquidnet.adam.url}")
// @Value("${liquidnet.adam.url}")
// private String adamUrl;
@Value("${liquidnet.candy.url}")
private String candyUrl;
@Autowired
private RedisUtil redisUtil;
......@@ -120,11 +128,11 @@ public class OrderUtils {
//判断 操作 普通库存还是兑换库存
public int changeSurplus(boolean isPay ,String ticketId,int number){
public int changeSurplus(boolean isPay, String ticketId, int number) {
int surplusGeneral;
if(isPay) {
if (isPay) {
surplusGeneral = dataUtils.changeSurplusGeneral(ticketId, number);
}else{
} else {
surplusGeneral = dataUtils.changeSurplusExchange(ticketId, number);
}
return surplusGeneral;
......@@ -158,6 +166,48 @@ public class OrderUtils {
return vos.stream().filter(r -> r.getEntersId().equals(entersId)).findAny().orElse(null);
}
/**
* 使用优惠券
*
* @param uCouponId 券id
* @param content 消费内容
* @param totalPrice 订单总价
* @return
*/
public BigDecimal useCoupon(String uCouponId, String content, BigDecimal totalPrice) {
MultiValueMap<String, String> params = CollectionUtil.linkedMultiValueMapStringString();
params.add("uCouponId", uCouponId);
params.add("content", content);
params.add("totalPrice", totalPrice.toString());
String returnData = HttpUtil.post("/candy-coupon/use", params, null);
InnerReturnVo<CandyUseResultVo> innerReturnVo = JsonUtils.fromJson(returnData, InnerReturnVo.class);
CandyUseResultVo candyUseResultVo = innerReturnVo.getData();
Integer type = candyUseResultVo.getCouType();
BigDecimal value = candyUseResultVo.getValue();
BigDecimal voucher = BigDecimal.ZERO;
switch (type) {
case -1:
voucher = BigDecimal.valueOf(-1);
break;
case 1:
voucher = voucher.add(value);
break;
case 2:
voucher = voucher.add(value);
break;
case 3:
voucher = voucher.add(totalPrice);
break;
case 4:
voucher = totalPrice.subtract(totalPrice.multiply(value));
break;
default:
voucher = BigDecimal.ZERO;
break;
}
return voucher;
}
/**
* @param userId 用户id
* @param type 1新增 2修改
......
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