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

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

提交 缺兑换券接口

parent 14796110
......@@ -28,7 +28,7 @@ public class CandyCouponRule implements Serializable {
private String couponId;
/**
* 适用范围[100-全场|90-演出|91-场次|92-票|80-商品]
* 适用范围[100-全场|90-演出|91-场次|92-票|80-商品|81-款式]
*/
private Integer useScope;
......
......@@ -10,6 +10,7 @@ import com.liquidnet.service.candy.util.ObjectUtil;
import com.liquidnet.service.candy.util.RedisDataUtils;
import com.liquidnet.service.candy.vo.CandyCouponVo;
import com.liquidnet.service.candy.vo.CandyMyCouponListVo;
import com.liquidnet.service.candy.vo.CandyUseResultVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
......@@ -55,7 +56,7 @@ public class CandyCouponController {
for (CandyUserCouponBasicDto dtoItem : dtoList) {
CandyCouponVo baseVo = CouponBaseUtil.getBaseCouponUserVo(dtoItem);
if (dtoItem.getBusiType().equals(4)) { //会员券
if (dtoItem.getExclusive().equals(1)) { //会员券
memberCoupon.add(baseVo);
} else {//非会员券
myCoupon.add(baseVo);
......@@ -78,10 +79,7 @@ public class CandyCouponController {
@ApiImplicitParam(type = "form", dataType = "String", name = "timeId", value = "场次id", required = true),
@ApiImplicitParam(type = "form", dataType = "String", name = "ticketId", value = "票id", required = true),
})
public ResponseDto<CandyMyCouponListVo> preUseCoupon(@RequestParam("priceTotal") BigDecimal priceTotal,
@RequestParam("performanceId") String performanceId,
@RequestParam("timeId") String timeId,
@RequestParam("ticketId") String ticketId) {
public ResponseDto<CandyMyCouponListVo> preUsePerformanceCoupon(@RequestParam("priceTotal") BigDecimal priceTotal, @RequestParam("performanceId") String performanceId, @RequestParam("timeId") String timeId, @RequestParam("ticketId") String ticketId) {
String uid = CurrentUtil.getCurrentUid();
List<CandyUserCouponBasicDto> dtoList = redisDataUtils.getCouponByUid(uid);
CandyMyCouponListVo vo = CandyMyCouponListVo.getNew();
......@@ -89,8 +87,8 @@ public class CandyCouponController {
List<CandyCouponVo> myCoupon = ObjectUtil.getCandyCouponVoArrayList();
for (CandyUserCouponBasicDto dtoItem : dtoList) {
CandyCouponVo baseVo = CouponBaseUtil.getPerformanceCouponUserVo(dtoItem, priceTotal,performanceId, timeId, ticketId);
if (dtoItem.getBusiType().equals(4)) { //会员券
CandyCouponVo baseVo = CouponBaseUtil.getPerformanceCouponUserVo(dtoItem, priceTotal, performanceId, timeId, ticketId);
if (dtoItem.getExclusive().equals(1)) { //会员券
memberCoupon.add(baseVo);
} else {//非会员券
myCoupon.add(baseVo);
......@@ -105,9 +103,113 @@ public class CandyCouponController {
return ResponseDto.success(vo);
}
//要使用券列表 - 演出
// 是否可用券演出
@GetMapping("preCanUse/performance")
@ApiOperation("是否可用券 - 演出")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", dataType = "BigDecimal", name = "priceTotal", value = "待支付总金额", required = true),
@ApiImplicitParam(type = "form", dataType = "String", name = "performanceId", value = "演出id", required = true),
@ApiImplicitParam(type = "form", dataType = "String", name = "timeId", value = "场次id", required = true),
@ApiImplicitParam(type = "form", dataType = "String", name = "ticketId", value = "票id", required = true),
})
public ResponseDto<HashMap<String, Integer>> preCanUsePerformanceCoupon(@RequestParam("priceTotal") BigDecimal priceTotal, @RequestParam("performanceId") String performanceId, @RequestParam("timeId") String timeId, @RequestParam("ticketId") String ticketId) {
String uid = CurrentUtil.getCurrentUid();
List<CandyUserCouponBasicDto> dtoList = redisDataUtils.getCouponByUid(uid);
HashMap<String, Integer> hashMap = CollectionUtil.mapStringInteger();
hashMap.put("canUse", 0);
for (CandyUserCouponBasicDto dtoItem : dtoList) {
CandyCouponVo baseVo = CouponBaseUtil.getPerformanceCouponUserVo(dtoItem, priceTotal, performanceId, timeId, ticketId);
if (baseVo.getState().equals(1)) { //可用
hashMap.put("canUse", 1);
break;
} else {//不可用
continue;
}
}
return ResponseDto.success(hashMap);
}
//要使用券列表 - 商品
@GetMapping("preUse/goods")
@ApiOperation("要使用券列表 - 商品")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", dataType = "BigDecimal", name = "priceTotal", value = "待支付总金额", required = true),
@ApiImplicitParam(type = "form", dataType = "String", name = "goodId", value = "演出id", required = true),
@ApiImplicitParam(type = "form", dataType = "String", name = "produceId", value = "场次id", required = true),
})
public ResponseDto<CandyMyCouponListVo> preUseGoodCoupon(@RequestParam("priceTotal") BigDecimal priceTotal, @RequestParam("goodId") String goodId, @RequestParam("produceId") String produceId) {
String uid = CurrentUtil.getCurrentUid();
List<CandyUserCouponBasicDto> dtoList = redisDataUtils.getCouponByUid(uid);
CandyMyCouponListVo vo = CandyMyCouponListVo.getNew();
List<CandyCouponVo> memberCoupon = ObjectUtil.getCandyCouponVoArrayList();
List<CandyCouponVo> myCoupon = ObjectUtil.getCandyCouponVoArrayList();
for (CandyUserCouponBasicDto dtoItem : dtoList) {
CandyCouponVo baseVo = CouponBaseUtil.getGoodCouponUserVo(dtoItem, priceTotal, goodId, produceId);
if (dtoItem.getExclusive().equals(1)) { //会员券
memberCoupon.add(baseVo);
} else {//非会员券
myCoupon.add(baseVo);
}
}
//排序
memberCoupon.sort(Comparator.comparing(CandyCouponVo::getState));
myCoupon.sort(Comparator.comparing(CandyCouponVo::getState));
vo.setMemberCoupon(memberCoupon);
vo.setMyCoupon(myCoupon);
return ResponseDto.success(vo);
}
//是否可用券 - 商品
@GetMapping("preCanUse/goods")
@ApiOperation("是否可用券 - 商品")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", dataType = "BigDecimal", name = "priceTotal", value = "待支付总金额", required = true),
@ApiImplicitParam(type = "form", dataType = "String", name = "goodId", value = "演出id", required = true),
@ApiImplicitParam(type = "form", dataType = "String", name = "produceId", value = "场次id", required = true),
})
public ResponseDto<HashMap<String, Integer>> preCanUseGoodCoupon(@RequestParam("priceTotal") BigDecimal priceTotal, @RequestParam("goodId") String goodId, @RequestParam("produceId") String produceId) {
String uid = CurrentUtil.getCurrentUid();
List<CandyUserCouponBasicDto> dtoList = redisDataUtils.getCouponByUid(uid);
HashMap<String, Integer> hashMap = CollectionUtil.mapStringInteger();
hashMap.put("canUse", 0);
for (CandyUserCouponBasicDto dtoItem : dtoList) {
CandyCouponVo baseVo = CouponBaseUtil.getGoodCouponUserVo(dtoItem, priceTotal, goodId, produceId);
if (baseVo.getState().equals(1)) { //可用
hashMap.put("canUse", 1);
break;
} else {//不可用
continue;
}
}
return ResponseDto.success(hashMap);
}
//要使用券列表 - 演出提前
@GetMapping("my/advance")
@ApiOperation("提前券列表")
public ResponseDto<List<CandyCouponVo>> myAdvanceCoupon() {
String uid = CurrentUtil.getCurrentUid();
List<CandyUserCouponBasicDto> dtoList = redisDataUtils.getCouponByUid(uid);
List<CandyCouponVo> advanceCoupon = ObjectUtil.getCandyCouponVoArrayList();
for (CandyUserCouponBasicDto dtoItem : dtoList) {
if (dtoItem.getBusiType().equals(3)) {
CandyCouponVo baseVo = CouponBaseUtil.getBaseCouponUserVo(dtoItem);
if (baseVo.getState().equals(1)) {
advanceCoupon.add(baseVo);
} else {
continue;
}
} else {
continue;
}
}
//排序
return ResponseDto.success(advanceCoupon);
}
//判断券是否可用
@GetMapping("state")
......@@ -133,15 +235,35 @@ public class CandyCouponController {
@ApiImplicitParams({
@ApiImplicitParam(type = "form", dataType = "String", name = "uCouponId", value = "券唯一表示id", required = true),
})
public ResponseDto<Boolean> useCoupon(@RequestParam("uCouponId") String uCouponId) {
public ResponseDto<CandyUseResultVo> useCoupon(@RequestParam("uCouponId") String uCouponId) {
String uid = CurrentUtil.getCurrentUid();
CandyUseResultVo vo = CandyUseResultVo.getNew();
List<CandyUserCouponBasicDto> dtoList = CouponBaseUtil.useCoupon(redisDataUtils.getCouponByUid(uid), uCouponId);
if (dtoList == null) {
return ResponseDto.failure();
} else {
redisDataUtils.setCouponByUid(uid, dtoList);
}
return ResponseDto.success();
CandyUserCouponBasicDto dto = CouponBaseUtil.getSingleDtoByUCouponId(redisDataUtils.getCouponByUid(uid), uCouponId);
switch (dto.getCouType()){//券类型[1-代金券|2-满减券|3-兑换券|4-折扣券]
case 1:
vo.setValue(dto.getValFace());
break;
case 2:
vo.setValue(dto.getValMinus());
break;
case 3:
vo.setValue(BigDecimal.valueOf(-1));
break;
case 4:
vo.setValue(dto.getDiscount());
break;
default:
vo.setValue(BigDecimal.valueOf(0));
break;
}
vo.setCouType(dto.getCouType());
return ResponseDto.success(vo);
}
//回退券
......@@ -162,5 +284,20 @@ public class CandyCouponController {
}
//兑换券
@GetMapping("receive")
@ApiOperation("领取券")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", dataType = "String", name = "ccode", value = "兑换码", required = true),
})
public ResponseDto<Boolean> receiveCoupon(@RequestParam("ccode") String ccode) {
String uid = CurrentUtil.getCurrentUid();
Boolean result = CouponBaseUtil.receiveCoupon(uid, ccode);
if (result) {
} else {
return ResponseDto.failure();
}
return ResponseDto.success();
}
}
......@@ -55,7 +55,7 @@ public class CouponBaseUtil {
}
/**
* 获取 基础券vo
* 获取 演出维度 券列表
*
* @param dtoItem CandyUserCouponBasicDto
* @return
......@@ -89,13 +89,73 @@ public class CouponBaseUtil {
rulesVoList.add(voRules);
switch (ruleItem.getUseScope()) {
case 90://演出
isTarget = isTargetCoupon(ruleItem.getBusiId(), performanceId, priceTotal, dtoItem.getValOver(), dtoItem.getValMinus());
isTarget = isTargetCoupon(ruleItem.getBusiId(), dtoItem.getCouType(), performanceId, priceTotal, dtoItem.getValOver());
break;
case 91://场次
isTarget = isTargetCoupon(ruleItem.getBusiId(), timeId, priceTotal, dtoItem.getValOver(), dtoItem.getValMinus());
isTarget = isTargetCoupon(ruleItem.getBusiId(), dtoItem.getCouType(), timeId, priceTotal, dtoItem.getValOver());
break;
case 92://票
isTarget = isTargetCoupon(ruleItem.getBusiId(), ticketId, priceTotal, dtoItem.getValOver(), dtoItem.getValMinus());
isTarget = isTargetCoupon(ruleItem.getBusiId(), dtoItem.getCouType(), ticketId, priceTotal, dtoItem.getValOver());
break;
default:
isTarget = false;
break;
}
}
//券类别
if (dtoItem.getBusiType().equals(3)) {
vo.setCouType(101);
} else {
vo.setCouType(dtoItem.getCouType());
}
int state = getCouponState(now, dtoItem.getExpireAt(), dtoItem.getState());
if (isTarget) {
vo.setState(state);
} else {
vo.setState(state == 1 ? 21 : state);//不在目标范围 如果可用改为不可用21
}
vo.setUseRules(rulesVoList);
return vo;
}
/**
* 获取 商品维度 券列表
*
* @param dtoItem CandyUserCouponBasicDto
* @return
*/
public static CandyCouponVo getGoodCouponUserVo(CandyUserCouponBasicDto dtoItem,
BigDecimal priceTotal,
String goodId,
String produceId) {
boolean isTarget = false;
LocalDateTime now = LocalDateTime.now();
CandyCouponVo vo = CandyCouponVo.getNew();
List<CandyCouponRulesVo> rulesVoList = ObjectUtil.getCandyCouponRulesVos();
vo.setTitle(dtoItem.getTitle());
vo.setExpireAt(DateUtil.format(dtoItem.getExpireAt(), DateUtil.Formatter.yyyy_MM_dd));
vo.setValFace(dtoItem.getValFace());
vo.setValOver(dtoItem.getValOver());
vo.setValMinus(dtoItem.getValMinus());
vo.setBindType(dtoItem.getBindType());
vo.setLabel(dtoItem.getLabel());
vo.setNotice(dtoItem.getNotice());
vo.setUcouponId(dtoItem.getUcouponId());
vo.setUsedAt(DateUtil.format(dtoItem.getUsedAt(), DateUtil.Formatter.yyyy_MM_dd));
vo.setUsedFor(dtoItem.getUsedFor());
//适用范围 规则
for (CandyCouponRuleDto ruleItem : dtoItem.getUseRules()) {
CandyCouponRulesVo voRules = CandyCouponRulesVo.getNew();
voRules.setUseScope(ruleItem.getUseScope());
voRules.setBusiId(ruleItem.getBusiId());
voRules.setBusiName(ruleItem.getBusiName());
rulesVoList.add(voRules);
switch (ruleItem.getUseScope()) {
case 80://商品
isTarget = isTargetCoupon(ruleItem.getBusiId(), dtoItem.getCouType(), goodId, priceTotal, dtoItem.getValOver());
break;
case 81://款式
isTarget = isTargetCoupon(ruleItem.getBusiId(), dtoItem.getCouType(), produceId, priceTotal, dtoItem.getValOver());
break;
default:
isTarget = false;
......@@ -123,20 +183,23 @@ public class CouponBaseUtil {
* @param targetId 目标id(例如 演出id,场次id,票种id)
* @param priceTotal 待支付总金额
* @param valOver 满减~满
* @param valMinus 满减~减
* @return
*/
public static Boolean isTargetCoupon(String busiId,
Integer couType,
String targetId,
BigDecimal priceTotal,
BigDecimal valOver,
BigDecimal valMinus) {
BigDecimal valOver) {
boolean isTarget = false;
if (busiId.equals(targetId)) {//判断id 对应
if (couType.equals(2)) {
if (priceTotal.compareTo(valOver) >= 0) {
isTarget = true;
}
} else {
isTarget = true;
}
}
return isTarget;
}
......@@ -230,4 +293,15 @@ public class CouponBaseUtil {
}
return dtoList;
}
/**
* 领取券/兑换券
* @param uid 用户id
* @param ccode 领取/兑换码
* @return
*/
public static boolean receiveCoupon(String uid, String ccode) {
boolean result = false;
return result;
}
}
......@@ -30,4 +30,15 @@ public class RedisDataUtils {
String redisKey = CandyRedisConst.BASIC_USER_COUPON.concat(uid);
redisUtil.set(redisKey,dtoList);
}
public List<CandyUserCouponBasicDto> getCouponByCode(String ccode){
String redisKey = CandyRedisConst.BASIC_COUPON_CODE.concat(ccode);
Object obj = redisUtil.get(redisKey);
if(obj==null){
//降级
return new ArrayList();
}else{
return (List<CandyUserCouponBasicDto>)obj;
}
}
}
package com.liquidnet.service.candy.vo;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
@Data
public class CandyUseResultVo implements Serializable, Cloneable {
private static final long serialVersionUID = 4073256621782131607L;
private BigDecimal value;
private Integer couType;
private static final CandyUseResultVo obj = new CandyUseResultVo();
public static CandyUseResultVo getNew() {
try {
return (CandyUseResultVo) obj.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new CandyUseResultVo();
}
}
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