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

Commit 352cbb8c authored by 胡佳晨's avatar 胡佳晨

提交 票务用券逻辑

parent a872e8bb
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();
}
}
}
......@@ -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
......@@ -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);
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,16 +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.CandyQueue.COUPON_USE.getKey(),
SqlMapping.get("candy_coupon.use",
uid,uCouponId
uid, uCouponId
)
);
}
}
return vo;
}
......
......@@ -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