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

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

goblin 帮助前端用店铺券

parent 0675b168
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 CouponHelpUseParam 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 = false)
private String uid;
@ApiModelProperty(dataType = "String", name = "ucouponId", value = "券id", required = true)
private String ucouponId;
private static final CouponHelpUseParam obj = new CouponHelpUseParam();
public static CouponHelpUseParam getNew() {
try {
return (CouponHelpUseParam) obj.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new CouponHelpUseParam();
}
}
package com.liquidnet.service.goblin.param;
import com.liquidnet.service.goblin.dto.vo.GoblinUserCouponVo;
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 CouponHelpUseVo implements Serializable, Cloneable {
@ApiModelProperty(name = "param", value = "对象")
private List<CouponCanUse2Param> param;
@ApiModelProperty(name = "couponVo", value = "券vo")
private GoblinUserCouponVo couponVo;
@ApiModelProperty(dataType = "String", name = "ucouponId", value = "券id", required = true)
private String ucouponId;
private static final CouponHelpUseVo obj = new CouponHelpUseVo();
public static CouponHelpUseVo getNew() {
try {
return (CouponHelpUseVo) obj.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new CouponHelpUseVo();
}
}
...@@ -3,9 +3,7 @@ package com.liquidnet.service.goblin.service; ...@@ -3,9 +3,7 @@ package com.liquidnet.service.goblin.service;
import com.liquidnet.service.goblin.dto.vo.GoblinStoreCouponVo; import com.liquidnet.service.goblin.dto.vo.GoblinStoreCouponVo;
import com.liquidnet.service.goblin.dto.vo.GoblinUseResultVo; import com.liquidnet.service.goblin.dto.vo.GoblinUseResultVo;
import com.liquidnet.service.goblin.dto.vo.GoblinUserCouponVo; import com.liquidnet.service.goblin.dto.vo.GoblinUserCouponVo;
import com.liquidnet.service.goblin.param.BackCouponParam; import com.liquidnet.service.goblin.param.*;
import com.liquidnet.service.goblin.param.CouponCanUseAllParam;
import com.liquidnet.service.goblin.param.CouponCanUseParam;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -40,4 +38,11 @@ public interface GoblinCouponService { ...@@ -40,4 +38,11 @@ public interface GoblinCouponService {
//回退券 [list<Data>] [券id , 用户id] //回退券 [list<Data>] [券id , 用户id]
Boolean backCoupon(List<BackCouponParam> params); Boolean backCoupon(List<BackCouponParam> params);
/**
* 帮前端写选择券逻辑
* @param params
* @return
*/
CouponHelpUseVo helpUseCoupon(CouponHelpUseParam params);
} }
...@@ -6,9 +6,7 @@ import com.liquidnet.service.base.ResponseDto; ...@@ -6,9 +6,7 @@ import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.dto.vo.GoblinStoreCouponVo; import com.liquidnet.service.goblin.dto.vo.GoblinStoreCouponVo;
import com.liquidnet.service.goblin.dto.vo.GoblinUseResultVo; import com.liquidnet.service.goblin.dto.vo.GoblinUseResultVo;
import com.liquidnet.service.goblin.dto.vo.GoblinUserCouponVo; import com.liquidnet.service.goblin.dto.vo.GoblinUserCouponVo;
import com.liquidnet.service.goblin.param.BackCouponParam; import com.liquidnet.service.goblin.param.*;
import com.liquidnet.service.goblin.param.CouponCanUseAllParam;
import com.liquidnet.service.goblin.param.CouponCanUseParam;
import com.liquidnet.service.goblin.service.GoblinCouponService; import com.liquidnet.service.goblin.service.GoblinCouponService;
import com.liquidnet.service.goblin.util.GoblinRedisUtils; import com.liquidnet.service.goblin.util.GoblinRedisUtils;
import com.liquidnet.service.goblin.util.ObjectUtil; import com.liquidnet.service.goblin.util.ObjectUtil;
...@@ -183,7 +181,7 @@ public class GoblinCouponController { ...@@ -183,7 +181,7 @@ public class GoblinCouponController {
if (uid == null) { if (uid == null) {
uid = CurrentUtil.getCurrentUid(); uid = CurrentUtil.getCurrentUid();
} }
return ResponseDto.success(goblinCouponService.canUse(totalPrice, spuId, uid,storeId)); return ResponseDto.success(goblinCouponService.canUse(totalPrice, spuId, uid, storeId));
} }
@PostMapping("useList") @PostMapping("useList")
...@@ -223,23 +221,23 @@ public class GoblinCouponController { ...@@ -223,23 +221,23 @@ public class GoblinCouponController {
return ResponseDto.success(goblinCouponService.useList3(param)); return ResponseDto.success(goblinCouponService.useList3(param));
} }
@PostMapping("useCoupon") // @PostMapping("useCoupon")
@ApiOperation("用券") // @ApiOperation("用券")
@ApiResponse(code = 200, message = "接口返回对象参数") // @ApiResponse(code = 200, message = "接口返回对象参数")
@ApiImplicitParams({ // @ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "ucouponId", value = "券id"), // @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "ucouponId", value = "券id"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "content", value = "消费内容"), // @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "content", value = "消费内容"),
@ApiImplicitParam(type = "form", required = true, dataType = "Number", name = "totalPrice", value = "总价格"), // @ApiImplicitParam(type = "form", required = true, dataType = "Number", name = "totalPrice", value = "总价格"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "spuId", value = "spuId逗号隔开"), // @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "spuId", value = "spuId逗号隔开"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "uid", value = "uid"), // @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "uid", value = "uid"),
}) // })
public ResponseDto<GoblinUseResultVo> checkOrderResult(@RequestParam("ucouponId") @Valid String ucouponId, // public ResponseDto<GoblinUseResultVo> checkOrderResult(@RequestParam("ucouponId") @Valid String ucouponId,
@RequestParam("content") @Valid String content, // @RequestParam("content") @Valid String content,
@RequestParam("totalPrice") @Valid BigDecimal totalPrice, // @RequestParam("totalPrice") @Valid BigDecimal totalPrice,
@RequestParam("spuId") @Valid String spuId, // @RequestParam("spuId") @Valid String spuId,
@RequestParam("uid") @Valid String uid) { // @RequestParam("uid") @Valid String uid) {
return ResponseDto.success(goblinCouponService.useCoupon(ucouponId, content, totalPrice, spuId, uid)); // return ResponseDto.success(goblinCouponService.useCoupon(ucouponId, content, totalPrice, spuId, uid));
} // }
@PostMapping("backCoupon") @PostMapping("backCoupon")
@ApiOperation("退券") @ApiOperation("退券")
...@@ -250,4 +248,14 @@ public class GoblinCouponController { ...@@ -250,4 +248,14 @@ public class GoblinCouponController {
} }
return ResponseDto.success(goblinCouponService.backCoupon(backCouponParam)); return ResponseDto.success(goblinCouponService.backCoupon(backCouponParam));
} }
@PostMapping("helpUseCoupon")
@ApiOperation("帮助用券")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<CouponHelpUseVo> helpUseCoupon(@RequestBody CouponHelpUseParam param) {
if (param.getUid() == null || param.getUid().equals("")) {
param.setUid(CurrentUtil.getCurrentUid());
}
return ResponseDto.success(goblinCouponService.helpUseCoupon(param));
}
} }
...@@ -6,10 +6,8 @@ import com.liquidnet.service.base.SqlMapping; ...@@ -6,10 +6,8 @@ import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst; import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.goblin.constant.GoblinStatusConst; import com.liquidnet.service.goblin.constant.GoblinStatusConst;
import com.liquidnet.service.goblin.dto.vo.*; import com.liquidnet.service.goblin.dto.vo.*;
import com.liquidnet.service.goblin.param.BackCouponParam; import com.liquidnet.service.goblin.entity.GoblinOrderSku;
import com.liquidnet.service.goblin.param.CouponCanUse2Param; import com.liquidnet.service.goblin.param.*;
import com.liquidnet.service.goblin.param.CouponCanUseAllParam;
import com.liquidnet.service.goblin.param.CouponCanUseParam;
import com.liquidnet.service.goblin.service.GoblinCouponService; import com.liquidnet.service.goblin.service.GoblinCouponService;
import com.liquidnet.service.goblin.util.GoblinMongoUtils; import com.liquidnet.service.goblin.util.GoblinMongoUtils;
import com.liquidnet.service.goblin.util.GoblinRedisUtils; import com.liquidnet.service.goblin.util.GoblinRedisUtils;
...@@ -409,4 +407,111 @@ public class GoblinCouponImpl implements GoblinCouponService { ...@@ -409,4 +407,111 @@ public class GoblinCouponImpl implements GoblinCouponService {
return false; return false;
} }
} }
@Override
public CouponHelpUseVo helpUseCoupon(CouponHelpUseParam params) {
LocalDateTime now = LocalDateTime.now();
CouponHelpUseVo vo = CouponHelpUseVo.getNew();
List<GoblinUserCouponVo> voList = goblinRedisUtils.getUserCouponVos(params.getUid());
GoblinUseResultVo returnVo = GoblinUseResultVo.getNew();
String ucouponId = params.getUcouponId();
for (GoblinUserCouponVo itemVo : voList) {
if (itemVo.getUcouponId().equals(ucouponId)) {
if (itemVo.getUcouponId().equals(ucouponId) && itemVo.getDuedAt().isAfter(now) && itemVo.getState().equals(1)) {
BigDecimal contentPrice = BigDecimal.ZERO;
if (itemVo.getUseScope().equals("0")) {//全部
for (CouponCanUse2Param item : params.getParam()) {
contentPrice = contentPrice.add(item.getPrice());
}
returnVo = mathCouponPrice(itemVo, contentPrice);
} else {//部分
List<String> spuIds = goblinRedisUtils.getStoreCouponSpuIds(itemVo.getStoreCouponId());
if (spuIds == null || spuIds.size() == 0) {
break;
}
//判断是否在可用商品内
for (String spuItem : spuIds) {
for (CouponCanUse2Param item : params.getParam()) {
String spuId = item.getSpuId();
String pre = GoblinStatusConst.MarketPreStatus.getPre(spuId);
if (pre != null) {
spuId = spuId.split(pre)[0];
}
if (spuId.equals(spuItem)) {
contentPrice = contentPrice.add(item.getPrice());
}
}
}
returnVo = mathCouponPrice(itemVo, contentPrice);
returnVo.setSpuIds(spuIds);
}
List<String> spuIdList = returnVo.getSpuIds();
BigDecimal voucherPrice = returnVo.getValue();
if (spuIdList.size() > 0) {
for (String spuId : spuIdList) {
for (CouponCanUse2Param paramItem : params.getParam()) {
if (paramItem.getSpuId().contains(spuId)) {
if (voucherPrice.compareTo(BigDecimal.ZERO) >= 0) {
voucherPrice = voucherPrice.subtract(paramItem.getPrice());
if (voucherPrice.compareTo(BigDecimal.ZERO) >= 0) {
paramItem.setPrice(paramItem.getPrice());
} else {
paramItem.setPrice(voucherPrice.add(paramItem.getPrice()));
}
}
}
}
}
} else {
for (CouponCanUse2Param paramItem : params.getParam()) {
if (voucherPrice.compareTo(BigDecimal.ZERO) >= 0) {
voucherPrice = voucherPrice.subtract(paramItem.getPrice());
if (voucherPrice.compareTo(BigDecimal.ZERO) >= 0) {
paramItem.setPrice(paramItem.getPrice());
} else {
paramItem.setPrice(voucherPrice.add(paramItem.getPrice()));
}
}
}
}
vo.setParam(params.getParam());
vo.setCouponVo(itemVo);
break;
}
}
}
vo.setUcouponId(ucouponId);
return vo;
}
//用券计算金额 返回优惠金额和类型
private GoblinUseResultVo mathCouponPrice(GoblinUserCouponVo vo, BigDecimal contentPrice) {
GoblinUseResultVo returnVo = GoblinUseResultVo.getNew();
if (vo.getTriggers().compareTo(contentPrice) <= 0) {
if (vo.getType().equals("1")) {//代金券
if (vo.getValFace().compareTo(contentPrice) > 0) {
returnVo.setValue(contentPrice);
} else {
returnVo.setValue(vo.getValFace());
}
returnVo.setCouType(vo.getType());
} else if (vo.getType().equals("2")) {//折扣
BigDecimal tempPrice = contentPrice.multiply(vo.getDiscount()).setScale(2, BigDecimal.ROUND_HALF_UP);
if (tempPrice.compareTo(vo.getDeduction()) > 0) {
tempPrice = vo.getDeduction();
}
returnVo.setValue(contentPrice.subtract(tempPrice));
returnVo.setCouType(vo.getType());
} else if (vo.getType().equals("3")) {//满减
if (vo.getValMinus().compareTo(contentPrice) > 0) {
returnVo.setValue(contentPrice);
} else {
returnVo.setValue(vo.getValMinus());
}
returnVo.setCouType(vo.getType());
}
}
return returnVo;
}
} }
...@@ -198,7 +198,6 @@ public class GoblinOrderServiceImpl implements IGoblinOrderService { ...@@ -198,7 +198,6 @@ public class GoblinOrderServiceImpl implements IGoblinOrderService {
String source = headerCliSource == null ? "" : headerCliSource; String source = headerCliSource == null ? "" : headerCliSource;
String version = headerCliVersion == null ? "" : headerCliVersion; String version = headerCliVersion == null ? "" : headerCliVersion;
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
log.debug("当前系统时间=" + now);
String skuName = ""; String skuName = "";
BigDecimal price;//sku应付价格 BigDecimal price;//sku应付价格
BigDecimal priceBase;//sku原价 BigDecimal priceBase;//sku原价
......
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