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

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

增加 店铺使用券列2 接口

增加 订单关闭sql消费
parent 030324e5
package com.liquidnet.service.goblin.param;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
@Api
@Data
public class CouponCanUse2Param implements Serializable, Cloneable {
@ApiModelProperty(dataType = "String", name = "spuId", value = "spuId",example = "1",required = true)
@NotNull @NotBlank
private String spuId;
@ApiModelProperty(dataType = "Number", name = "price", value = "当前spu总价",example = "10",required = true)
@NotNull @NotBlank
private BigDecimal price;
private static final CouponCanUse2Param obj = new CouponCanUse2Param();
public static CouponCanUse2Param getNew() {
try {
return (CouponCanUse2Param) obj.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new CouponCanUse2Param();
}
}
package com.liquidnet.service.goblin.param;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
@Api
@Data
public class CouponCanUseParam implements Serializable, Cloneable {
@ApiModelProperty(name = "param", value = "对象",required = true)
@NotNull @NotBlank
private List<CouponCanUse2Param> param;
@ApiModelProperty(dataType = "String", name = "uid", value = "用户id",example = "10",required = true)
@NotNull @NotBlank
private String uid;
private static final CouponCanUseParam obj = new CouponCanUseParam();
public static CouponCanUseParam getNew() {
try {
return (CouponCanUseParam) obj.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new CouponCanUseParam();
}
}
......@@ -4,6 +4,7 @@ import com.liquidnet.service.goblin.dto.vo.GoblinStoreCouponVo;
import com.liquidnet.service.goblin.dto.vo.GoblinUseResultVo;
import com.liquidnet.service.goblin.dto.vo.GoblinUserCouponVo;
import com.liquidnet.service.goblin.param.BackCouponParam;
import com.liquidnet.service.goblin.param.CouponCanUseParam;
import java.math.BigDecimal;
import java.util.ArrayList;
......@@ -28,6 +29,8 @@ public interface GoblinCouponService {
//可用券列表 [价格] [spuId逗号隔开] [uid]
List<GoblinUserCouponVo> useList(BigDecimal totalPrice, String spuId, String uid);
List<GoblinUserCouponVo> useList2(CouponCanUseParam param);
//使用券 [券id] [消费内容] [价格] [spuId逗号隔开]
GoblinUseResultVo useCoupon(String ucouponId,String content, BigDecimal totalPrice, String spuId, String uid);
......
#eurekaServer配置
eureka:
client:
register-with-eureka: true
fetch-registry: true
serviceUrl:
defaultZone: http://${liquidnet.security.username}:${liquidnet.security.password}@${liquidnet.eureka.host}/eureka-server/eureka
#configServer配置
spring:
cloud:
config:
# uri: http://39.107.71.112:7002/support-config
profile: ${liquidnet.cloudConfig.profile}
name: ${spring.application.name} #默认为spring.application.name
discovery:
enabled: true
service-id: liquidnet-support-config
package com.liquidnet.service.consumer.kylin.config;
import com.liquidnet.common.cache.redis.config.RedisStreamConfig;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.consumer.kylin.receiver.ConsumerGoblinOrderCloseRdsReceiver;
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;
@Configuration
public class ConsumerGoblinOrderCRedisStreamConfig extends RedisStreamConfig {
@Autowired
ConsumerGoblinOrderCloseRdsReceiver consumerGoblinOrderCloseRdsReceiver;
/**
* 缺票登记
*
* @param listenerContainer
* @param t
* @return
*/
private Subscription receiveGoblinOrderCOrder(StreamMessageListenerContainer<String, MapRecord<String, String, String>> listenerContainer, int t) {
return listenerContainer.receiveAutoAck(Consumer.from(MQConst.GoblinQueue.GOBLIN_ORDER_CLOSE.getGroup(), getConsumerName(MQConst.GoblinQueue.GOBLIN_ORDER_CLOSE.name() + t)),
StreamOffset.create(MQConst.GoblinQueue.GOBLIN_ORDER_CLOSE.getKey(), ReadOffset.lastConsumed()), consumerGoblinOrderCloseRdsReceiver);
}
/* —————————————————————————— | —————————————————————————— | —————————————————————————— */
/* -------------------------------------------------------- | 缺票登记 */
@Bean
public Subscription subscriptionGoblinOrderC0(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveGoblinOrderCOrder(listenerContainer, 0);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionGoblinOrderC1(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveGoblinOrderCOrder(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionGoblinOrderC2(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveGoblinOrderCOrder(listenerContainer, 2);
listenerContainer.start();
return subscription;
}
/* -------------------------------------------------------- | */
}
......@@ -7,6 +7,7 @@ import com.liquidnet.service.goblin.dto.vo.GoblinStoreCouponVo;
import com.liquidnet.service.goblin.dto.vo.GoblinUseResultVo;
import com.liquidnet.service.goblin.dto.vo.GoblinUserCouponVo;
import com.liquidnet.service.goblin.param.BackCouponParam;
import com.liquidnet.service.goblin.param.CouponCanUseParam;
import com.liquidnet.service.goblin.service.GoblinCouponService;
import com.liquidnet.service.goblin.util.GoblinRedisUtils;
import com.liquidnet.service.goblin.util.ObjectUtil;
......@@ -203,6 +204,16 @@ public class GoblinCouponController {
return ResponseDto.success(goblinCouponService.useList(totalPrice, spuId, uid));
}
@PostMapping("useList2")
@ApiOperation("可用券列表2")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<List<GoblinUserCouponVo>> useList2(@RequestBody CouponCanUseParam param) {
if (param.getUid() == null) {
param.setUid(CurrentUtil.getCurrentUid());
}
return ResponseDto.success(goblinCouponService.useList2(param));
}
@PostMapping("useCoupon")
@ApiOperation("用券")
@ApiResponse(code = 200, message = "接口返回对象参数")
......
......@@ -7,6 +7,8 @@ import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.goblin.constant.GoblinStatusConst;
import com.liquidnet.service.goblin.dto.vo.*;
import com.liquidnet.service.goblin.param.BackCouponParam;
import com.liquidnet.service.goblin.param.CouponCanUse2Param;
import com.liquidnet.service.goblin.param.CouponCanUseParam;
import com.liquidnet.service.goblin.service.GoblinCouponService;
import com.liquidnet.service.goblin.util.GoblinMongoUtils;
import com.liquidnet.service.goblin.util.GoblinRedisUtils;
......@@ -223,6 +225,44 @@ public class GoblinCouponImpl implements GoblinCouponService {
return returnList;
}
@Override
public List<GoblinUserCouponVo> useList2(CouponCanUseParam param) {
List<GoblinUserCouponVo> voList = goblinRedisUtils.getUserCouponVos(param.getUid());
List<GoblinUserCouponVo> returnList = ObjectUtil.getGoblinUserCouponVo();
BigDecimal totalPrice = BigDecimal.ZERO;
for (CouponCanUse2Param param2 : param.getParam()) {
totalPrice = totalPrice.add(param2.getPrice());
}
LocalDateTime now = LocalDateTime.now();
for (GoblinUserCouponVo vo : voList) {
//判断券状态 和 触发金额
if (vo.getDuedAt().isAfter(now) && vo.getState().equals(1)) {//&& vo.getTriggers().compareTo(totalPrice) <= 0
if (vo.getUseScope().equals("0") && vo.getTriggers().compareTo(totalPrice) <= 0) {
returnList.add(vo);
} else {
List<String> spuIds = goblinRedisUtils.getStoreCouponSpuIds(vo.getStoreCouponId());
if (spuIds == null) {
break;
}
//判断是否在可用商品内
BigDecimal contentPrice = BigDecimal.ZERO;
for (String item : spuIds) {
for (CouponCanUse2Param param2 : param.getParam()) {
if (param2.getSpuId().equals(item)) {
contentPrice = contentPrice.add(param2.getPrice());
}
}
}
if(vo.getTriggers().compareTo(contentPrice) <= 0){
returnList.add(vo);
}
}
}
}
returnList.sort(Comparator.comparing(GoblinUserCouponVo::getState));
return returnList;
}
@Override
public GoblinUseResultVo useCoupon(String ucouponId, String content, BigDecimal totalPrice, String spuId, String uid) {
List<GoblinUserCouponVo> voList = goblinRedisUtils.getUserCouponVos(uid);
......
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