1.完善砍价商品加入购物车。
2.完善砍价帮砍 3.完善砍价价格计算。
This commit is contained in:
parent
4718ce292d
commit
0f8a5aba05
@ -241,6 +241,7 @@ public enum ResultCode {
|
||||
PROMOTION_UPDATE_ERROR(40008,"当前活动已开始/结束,无法编辑!"),
|
||||
PROMOTION_ACTIVITY_GOODS_ERROR(40009,"当前活动已经开始无法添加商品"),
|
||||
PROMOTION_ACTIVITY_ERROR(40009,"当前促销活动不存在"),
|
||||
PROMOTION_LOG_EXIST(40010,"活动已参加,已发重复参加"),
|
||||
|
||||
/**
|
||||
* 优惠券
|
||||
@ -339,6 +340,8 @@ public enum ResultCode {
|
||||
KANJIA_ACTIVITY_NOT_FOUND_ERROR(48008, "砍价记录不存在"),
|
||||
KANJIA_ACTIVITY_LOG_MEMBER_ERROR(48009, "当前会员已经帮砍"),
|
||||
KANJIA_ACTIVITY_MEMBER_ERROR(48010, "当前会员已经发起此砍价商品活动"),
|
||||
KANJIA_ACTIVITY_NOT_PASS_ERROR(48011, "当前砍价未满足条件,不能进行购买"),
|
||||
KANJIA_NUM_BUY_ERROR(48012, "砍价商品购买数量不正确"),
|
||||
/**
|
||||
* 店铺
|
||||
*/
|
||||
|
@ -27,6 +27,10 @@ public enum CartTypeEnum {
|
||||
/**
|
||||
* 虚拟商品
|
||||
*/
|
||||
VIRTUAL;
|
||||
VIRTUAL,
|
||||
/**
|
||||
* 砍价商品
|
||||
*/
|
||||
KANJIA;
|
||||
|
||||
}
|
||||
|
@ -10,6 +10,7 @@ import cn.lili.modules.goods.entity.enums.GoodsAuthEnum;
|
||||
import cn.lili.modules.goods.entity.enums.GoodsStatusEnum;
|
||||
import cn.lili.modules.goods.service.GoodsSkuService;
|
||||
import cn.lili.modules.order.cart.entity.dto.TradeDTO;
|
||||
import cn.lili.modules.order.cart.entity.enums.CartTypeEnum;
|
||||
import cn.lili.modules.order.cart.entity.enums.DeliveryMethodEnum;
|
||||
import cn.lili.modules.order.cart.entity.vo.CartSkuVO;
|
||||
import cn.lili.modules.order.cart.entity.vo.CartVO;
|
||||
@ -42,13 +43,15 @@ public class CheckDataRender implements CartRenderStep {
|
||||
|
||||
@Override
|
||||
public void render(TradeDTO tradeDTO) {
|
||||
//校验商品有效性
|
||||
checkData(tradeDTO);
|
||||
//店铺分组数据初始化
|
||||
groupStore(tradeDTO);
|
||||
//预校验
|
||||
preCalibration(tradeDTO);
|
||||
|
||||
//校验商品有效性
|
||||
checkData(tradeDTO);
|
||||
|
||||
//店铺分组数据初始化
|
||||
groupStore(tradeDTO);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -125,15 +128,22 @@ public class CheckDataRender implements CartRenderStep {
|
||||
* @param tradeDTO
|
||||
*/
|
||||
private void preCalibration(TradeDTO tradeDTO) {
|
||||
//拼团判定,不能参与自己创建的拼团
|
||||
if (tradeDTO.getParentOrderSn() != null) {
|
||||
//订单接受
|
||||
cn.lili.modules.order.order.entity.dos.Order parentOrder = orderService.getBySn(tradeDTO.getParentOrderSn());
|
||||
//参与活动判定
|
||||
if (parentOrder.getMemberId().equals(UserContext.getCurrentUser().getId())) {
|
||||
throw new ServiceException(ResultCode.PINTUAN_JOIN_ERROR);
|
||||
|
||||
//拼团订单预校验
|
||||
if(tradeDTO.getCartTypeEnum().equals(CartTypeEnum.PINTUAN)){
|
||||
//拼团判定,不能参与自己创建的拼团
|
||||
if (tradeDTO.getParentOrderSn() != null) {
|
||||
//订单接受
|
||||
cn.lili.modules.order.order.entity.dos.Order parentOrder = orderService.getBySn(tradeDTO.getParentOrderSn());
|
||||
//参与活动判定
|
||||
if (parentOrder.getMemberId().equals(UserContext.getCurrentUser().getId())) {
|
||||
throw new ServiceException(ResultCode.PINTUAN_JOIN_ERROR);
|
||||
}
|
||||
}
|
||||
}else if(tradeDTO.getCartTypeEnum().equals(CartTypeEnum.KANJIA)){
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -70,7 +70,7 @@ public class SkuPromotionRender implements CartRenderStep {
|
||||
|
||||
|
||||
/**
|
||||
* 渲染单品优惠 积分/拼团/秒杀
|
||||
* 渲染单品优惠 积分/拼团/秒杀/砍价
|
||||
*
|
||||
* @param tradeDTO 购物车视图
|
||||
*/
|
||||
|
@ -23,16 +23,16 @@ import cn.lili.modules.order.cart.entity.vo.TradeParams;
|
||||
import cn.lili.modules.order.cart.render.TradeBuilder;
|
||||
import cn.lili.modules.order.order.entity.dos.Trade;
|
||||
import cn.lili.modules.order.order.entity.vo.ReceiptVO;
|
||||
import cn.lili.modules.promotion.entity.dos.KanjiaActivity;
|
||||
import cn.lili.modules.promotion.entity.dos.MemberCoupon;
|
||||
import cn.lili.modules.promotion.entity.dos.Pintuan;
|
||||
import cn.lili.modules.promotion.entity.dos.PromotionGoods;
|
||||
import cn.lili.modules.promotion.entity.enums.CouponScopeTypeEnum;
|
||||
import cn.lili.modules.promotion.entity.enums.KanJiaStatusEnum;
|
||||
import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum;
|
||||
import cn.lili.modules.promotion.entity.enums.PromotionTypeEnum;
|
||||
import cn.lili.modules.promotion.service.MemberAddressService;
|
||||
import cn.lili.modules.promotion.service.MemberCouponService;
|
||||
import cn.lili.modules.promotion.service.PintuanService;
|
||||
import cn.lili.modules.promotion.service.PromotionGoodsService;
|
||||
import cn.lili.modules.promotion.entity.vos.KanjiaActivitySearchParams;
|
||||
import cn.lili.modules.promotion.service.*;
|
||||
import cn.lili.modules.search.entity.dos.EsGoodsIndex;
|
||||
import cn.lili.modules.search.service.EsGoodsSearchService;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
@ -93,6 +93,11 @@ public class CartServiceImpl implements CartService {
|
||||
*/
|
||||
@Autowired
|
||||
private PintuanService pintuanService;
|
||||
/**
|
||||
* 砍价
|
||||
*/
|
||||
@Autowired
|
||||
private KanjiaActivityService kanjiaActivityService;
|
||||
/**
|
||||
* 交易
|
||||
*/
|
||||
@ -147,32 +152,26 @@ public class CartServiceImpl implements CartService {
|
||||
CartSkuVO cartSkuVO = new CartSkuVO(dataSku);
|
||||
cartSkuVO.setCartType(cartTypeEnum);
|
||||
promotionGoodsService.updatePromotion(cartSkuVO);
|
||||
//再设置加入购物车的数量
|
||||
this.checkSetGoodsQuantity(cartSkuVO, skuId, num);
|
||||
|
||||
//拼团判定
|
||||
checkPintuan(cartTypeEnum, cartSkuVO);
|
||||
|
||||
//检测购物车数据
|
||||
checkCart(cartTypeEnum, cartSkuVO, skuId, num);
|
||||
//计算购物车小计
|
||||
cartSkuVO.setSubTotal(CurrencyUtil.mul(cartSkuVO.getPurchasePrice(), cartSkuVO.getNum()));
|
||||
cartSkuVOS.add(cartSkuVO);
|
||||
}
|
||||
|
||||
|
||||
tradeDTO.setCartTypeEnum(cartTypeEnum);
|
||||
//如购物车发生更改,则重置优惠券
|
||||
tradeDTO.setStoreCoupons(null);
|
||||
tradeDTO.setPlatformCoupon(null);
|
||||
this.resetTradeDTO(tradeDTO);
|
||||
} catch (ServiceException se) {
|
||||
throw se;
|
||||
} catch (ServiceException serviceException) {
|
||||
throw serviceException;
|
||||
} catch (Exception e) {
|
||||
log.error("购物车渲染异常", e);
|
||||
throw new ServiceException(errorMessage);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void updateNum(String skuId, int num) {
|
||||
try {
|
||||
@ -637,32 +636,80 @@ public class CartServiceImpl implements CartService {
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验拼团信息
|
||||
* 检测购物车
|
||||
*
|
||||
* @param cartTypeEnum 购物车枚举
|
||||
* @param cartSkuVO 购物车信息
|
||||
* @param cartSkuVO SKUVO
|
||||
* @param skuId SkuId
|
||||
* @param num 数量
|
||||
*/
|
||||
private void checkPintuan(CartTypeEnum cartTypeEnum, CartSkuVO cartSkuVO) {
|
||||
|
||||
//拼团活动的话,需要对限购数量进行判定
|
||||
private void checkCart(CartTypeEnum cartTypeEnum, CartSkuVO cartSkuVO, String skuId, Integer num) {
|
||||
//拼团判定
|
||||
if (cartTypeEnum.equals(CartTypeEnum.PINTUAN)) {
|
||||
//获取拼团信息
|
||||
List<PromotionGoods> currentPromotion = cartSkuVO.getPromotions().stream().filter(
|
||||
promotionGoods -> (promotionGoods.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name())))
|
||||
.collect(Collectors.toList());
|
||||
//拼团活动判定
|
||||
if (!currentPromotion.isEmpty()) {
|
||||
//写入拼团信息
|
||||
cartSkuVO.setPintuanId(currentPromotion.get(0).getPromotionId());
|
||||
} else {
|
||||
throw new ServiceException(ResultCode.CART_PINTUAN_NOT_EXIST_ERROR);
|
||||
}
|
||||
checkPintuan(cartSkuVO);
|
||||
//砍价判定
|
||||
} else if (cartTypeEnum.equals(CartTypeEnum.KANJIA)) {
|
||||
checkKanjia(cartSkuVO);
|
||||
//检测购物车的数量
|
||||
} else {
|
||||
this.checkSetGoodsQuantity(cartSkuVO, skuId, num);
|
||||
}
|
||||
|
||||
Pintuan pintuan = pintuanService.getPintuanById(cartSkuVO.getPintuanId());
|
||||
Integer limitNum = pintuan.getLimitNum();
|
||||
if (limitNum != 0 && cartSkuVO.getNum() > limitNum) {
|
||||
throw new ServiceException(ResultCode.CART_PINTUAN_LIMIT_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验拼团信息
|
||||
*
|
||||
* @param cartSkuVO 购物车信息
|
||||
*/
|
||||
private void checkPintuan(CartSkuVO cartSkuVO) {
|
||||
|
||||
//拼团活动,需要对限购数量进行判定
|
||||
//获取拼团信息
|
||||
List<PromotionGoods> currentPromotion = cartSkuVO.getPromotions().stream().filter(
|
||||
promotionGoods -> (promotionGoods.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name())))
|
||||
.collect(Collectors.toList());
|
||||
//拼团活动判定
|
||||
if (!currentPromotion.isEmpty()) {
|
||||
//写入拼团信息
|
||||
cartSkuVO.setPintuanId(currentPromotion.get(0).getPromotionId());
|
||||
} else {
|
||||
throw new ServiceException(ResultCode.CART_PINTUAN_NOT_EXIST_ERROR);
|
||||
}
|
||||
//检测拼团限购数量
|
||||
Pintuan pintuan = pintuanService.getPintuanById(cartSkuVO.getPintuanId());
|
||||
Integer limitNum = pintuan.getLimitNum();
|
||||
if (limitNum != 0 && cartSkuVO.getNum() > limitNum) {
|
||||
throw new ServiceException(ResultCode.CART_PINTUAN_LIMIT_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验砍价信息
|
||||
*
|
||||
* @param cartSkuVO 购物车信息
|
||||
*/
|
||||
private void checkKanjia(CartSkuVO cartSkuVO) {
|
||||
|
||||
List<PromotionGoods> currentPromotion = cartSkuVO.getPromotions().stream().filter(
|
||||
promotionGoods -> (promotionGoods.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name())))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
//校验砍价活动是否满足条件
|
||||
KanjiaActivitySearchParams kanjiaActivitySearchParams = new KanjiaActivitySearchParams();
|
||||
kanjiaActivitySearchParams.setKanjiaActivityGoodsId(currentPromotion.get(0).getSkuId());
|
||||
kanjiaActivitySearchParams.setMemberId(UserContext.getCurrentUser().getId());
|
||||
KanjiaActivity kanjiaActivity = kanjiaActivityService.getKanjiaActivity(kanjiaActivitySearchParams);
|
||||
|
||||
//判断发起砍价活动
|
||||
if (kanjiaActivity == null) {
|
||||
throw new ServiceException(ResultCode.KANJIA_ACTIVITY_NOT_FOUND_ERROR);
|
||||
//判断砍价活动是否已满足条件
|
||||
} else if (!KanJiaStatusEnum.PASS.name().equals(kanjiaActivity.getStatus())) {
|
||||
throw new ServiceException(ResultCode.KANJIA_ACTIVITY_NOT_PASS_ERROR);
|
||||
//判断砍价商品数量
|
||||
} else if (cartSkuVO.getNum() > 1) {
|
||||
throw new ServiceException(ResultCode.KANJIA_NUM_BUY_ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package cn.lili.modules.promotion.entity.dos;
|
||||
|
||||
import cn.lili.base.BaseEntity;
|
||||
import cn.lili.modules.promotion.entity.enums.KanJiaStatusEnum;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
@ -46,6 +47,9 @@ public class KanjiaActivity extends BaseEntity {
|
||||
@ApiModelProperty(value = "缩略图")
|
||||
private String thumbnail;
|
||||
|
||||
/**
|
||||
* @see KanJiaStatusEnum
|
||||
*/
|
||||
@ApiModelProperty(value = "我的砍价状态")
|
||||
private String status;
|
||||
|
||||
|
@ -30,10 +30,10 @@ public class KanJiaActivityLogQuery {
|
||||
QueryWrapper<T> queryWrapper = new QueryWrapper<>();
|
||||
|
||||
if (CharSequenceUtil.isNotEmpty(kanJiaActivityId)) {
|
||||
queryWrapper.like("kan_jia_activity_id", kanJiaActivityId);
|
||||
queryWrapper.like("kanjia_activity_id", kanJiaActivityId);
|
||||
}
|
||||
if (memberId != null) {
|
||||
queryWrapper.eq("kan_jia_member_id", memberId);
|
||||
queryWrapper.eq("kanjia_member_id", memberId);
|
||||
}
|
||||
queryWrapper.eq("delete_flag", false);
|
||||
queryWrapper.orderByDesc("create_time");
|
||||
|
@ -8,7 +8,22 @@ package cn.lili.modules.promotion.entity.enums;
|
||||
*/
|
||||
public enum KanJiaStatusEnum {
|
||||
|
||||
START("开始"), FAIL("失败"), SUCCESS("成功");
|
||||
/**
|
||||
* 已开始
|
||||
*/
|
||||
START("开始"),
|
||||
/**
|
||||
* 砍价失败
|
||||
*/
|
||||
FAIL("失败"),
|
||||
/**
|
||||
* 砍价成功
|
||||
*/
|
||||
SUCCESS("成功"),
|
||||
/**
|
||||
* 砍价活动结束
|
||||
*/
|
||||
END("已结束");
|
||||
|
||||
private final String description;
|
||||
|
||||
|
@ -12,8 +12,8 @@ import lombok.Data;
|
||||
@Data
|
||||
public class KanjiaActivityGoodsListVO {
|
||||
|
||||
@ApiModelProperty(value = "货品id")
|
||||
private String skuId;
|
||||
@ApiModelProperty(value = "砍价活动商品id")
|
||||
private String id;
|
||||
|
||||
@ApiModelProperty(value = "货品名称")
|
||||
private String goodsName;
|
||||
|
@ -34,9 +34,9 @@ public class KanjiaActivitySearchParams {
|
||||
QueryWrapper<T> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq(StrUtil.isNotEmpty(id), "id", id);
|
||||
queryWrapper.eq(StrUtil.isNotEmpty(kanjiaActivityId), "id", kanjiaActivityId);
|
||||
queryWrapper.eq(StrUtil.isNotEmpty(kanjiaActivityGoodsId), "kanJia_activity_goods_id", kanjiaActivityGoodsId);
|
||||
queryWrapper.eq(StrUtil.isNotEmpty(kanjiaActivityGoodsId), "kanjia_activity_goods_id", kanjiaActivityGoodsId);
|
||||
queryWrapper.eq(StrUtil.isNotEmpty(memberId), "member_id", memberId);
|
||||
queryWrapper.eq(StrUtil.isNotEmpty(status), "status", status);
|
||||
return wrapper();
|
||||
return queryWrapper;
|
||||
}
|
||||
}
|
||||
|
@ -51,8 +51,8 @@ public class KanjiaActivityLogServiceImpl extends ServiceImpl<KanJiaActivityLogM
|
||||
public KanjiaActivityLog addKanJiaActivityLog(KanjiaActivityDTO kanjiaActivityDTO) {
|
||||
//校验当前会员是否已经参与过此次砍价
|
||||
QueryWrapper<KanjiaActivityLog> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq(kanjiaActivityDTO.getKanjiaMemberId() != null, "kan_jia_member_id", kanjiaActivityDTO.getKanjiaMemberId());
|
||||
queryWrapper.eq(kanjiaActivityDTO.getKanjiaActivityId() != null, "kan_jia_activity_id", kanjiaActivityDTO.getKanjiaActivityId());
|
||||
queryWrapper.eq(kanjiaActivityDTO.getKanjiaMemberId() != null, "kanjia_member_id", kanjiaActivityDTO.getKanjiaMemberId());
|
||||
queryWrapper.eq(kanjiaActivityDTO.getKanjiaActivityId() != null, "kanjia_activity_id", kanjiaActivityDTO.getKanjiaActivityId());
|
||||
Integer count = this.baseMapper.selectCount(queryWrapper);
|
||||
if (count > 0) {
|
||||
throw new ServiceException(ResultCode.KANJIA_ACTIVITY_LOG_MEMBER_ERROR);
|
||||
|
@ -1,6 +1,8 @@
|
||||
package cn.lili.modules.promotion.serviceimpl;
|
||||
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import cn.lili.common.enums.ResultCode;
|
||||
import cn.lili.common.exception.ServiceException;
|
||||
import cn.lili.common.security.context.UserContext;
|
||||
@ -23,6 +25,7 @@ import cn.lili.modules.promotion.mapper.KanJiaActivityMapper;
|
||||
import cn.lili.modules.promotion.service.KanjiaActivityGoodsService;
|
||||
import cn.lili.modules.promotion.service.KanjiaActivityLogService;
|
||||
import cn.lili.modules.promotion.service.KanjiaActivityService;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
@ -30,6 +33,8 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
|
||||
/**
|
||||
* 砍价活动参与记录业务层实现
|
||||
@ -65,7 +70,7 @@ public class KanjiaActivityServiceImpl extends ServiceImpl<KanJiaActivityMapper,
|
||||
Member member = memberService.getById(UserContext.getCurrentUser().getId());
|
||||
//校验此活动是否已经发起过
|
||||
QueryWrapper<KanjiaActivity> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("kan_jia_activity_goods_id", kanJiaActivityGoods.getId());
|
||||
queryWrapper.eq("kanjia_activity_goods_id", kanJiaActivityGoods.getId());
|
||||
queryWrapper.eq("member_id", member.getId());
|
||||
if (this.count(queryWrapper) > 0) {
|
||||
throw new ServiceException(ResultCode.KANJIA_ACTIVITY_MEMBER_ERROR);
|
||||
@ -81,27 +86,14 @@ public class KanjiaActivityServiceImpl extends ServiceImpl<KanJiaActivityMapper,
|
||||
kanJiaActivity.setMemberId(UserContext.getCurrentUser().getId());
|
||||
kanJiaActivity.setMemberName(member.getUsername());
|
||||
kanJiaActivity.setStatus(KanJiaStatusEnum.START.name());
|
||||
//剩余砍价金额 开始 是商品金额-最低购买金额
|
||||
Double surplusPrice = CurrencyUtil.sub(goodsSku.getPrice(), kanJiaActivityGoods.getPurchasePrice());
|
||||
//获取砍价金额,因为自己要给自己砍一刀 所以需要在可砍金额范围内 砍一刀
|
||||
Double price = this.getKanjiaPrice(kanJiaActivityGoods, surplusPrice);
|
||||
//剩余可砍金额就是 砍一刀后的金额
|
||||
kanJiaActivity.setSurplusPrice(CurrencyUtil.sub(surplusPrice, price));
|
||||
//剩余砍价金额 开始 是商品金额;
|
||||
kanJiaActivity.setSurplusPrice(goodsSku.getPrice());
|
||||
//保存我的砍价活动
|
||||
boolean result = this.save(kanJiaActivity);
|
||||
//因为发起砍价就是自己给自己砍一刀,所以要添加砍价记录信息
|
||||
if (result) {
|
||||
KanjiaActivityDTO kanjiaActivityDTO = new KanjiaActivityDTO();
|
||||
kanjiaActivityDTO.setKanjiaActivityGoodsId(kanJiaActivityGoods.getId());
|
||||
kanjiaActivityDTO.setKanjiaActivityId(kanJiaActivity.getId());
|
||||
kanjiaActivityDTO.setKanjiaPrice(price);
|
||||
kanjiaActivityDTO.setSurplusPrice(kanJiaActivity.getSurplusPrice());
|
||||
kanjiaActivityDTO.setKanjiaMemberId(kanJiaActivity.getMemberId());
|
||||
kanjiaActivityDTO.setKanjiaMemberName(kanJiaActivity.getMemberName());
|
||||
kanjiaActivityDTO.setKanjiaMemberFace(member.getFace());
|
||||
return kanjiaActivityLogService.addKanJiaActivityLog(kanjiaActivityDTO);
|
||||
this.helpKanJia(kanJiaActivity.getId());
|
||||
}
|
||||
|
||||
}
|
||||
throw new ServiceException(ResultCode.GOODS_NOT_EXIST);
|
||||
}
|
||||
@ -115,36 +107,49 @@ public class KanjiaActivityServiceImpl extends ServiceImpl<KanJiaActivityMapper,
|
||||
Member member = memberService.getById(UserContext.getCurrentUser().getId());
|
||||
//根据砍价发起活动id查询砍价活动信息
|
||||
KanjiaActivity kanjiaActivity = this.getById(kanjiaActivityId);
|
||||
if (kanjiaActivity != null && kanjiaActivity.getStatus().equals(PromotionStatusEnum.START.name())) {
|
||||
if (member == null) {
|
||||
throw new ServiceException(ResultCode.USER_NOT_EXIST);
|
||||
}
|
||||
//根据skuId查询当前sku是否参与活动并且是在活动进行中
|
||||
KanjiaActivityGoods kanJiaActivityGoods = kanjiaActivityGoodsService.getById(kanjiaActivity.getKanjiaActivityGoodsId());
|
||||
if (kanJiaActivityGoods == null) {
|
||||
throw new ServiceException(ResultCode.PROMOTION_STATUS_END);
|
||||
}
|
||||
KanjiaActivityDTO kanjiaActivityDTO = new KanjiaActivityDTO();
|
||||
kanjiaActivityDTO.setKanjiaActivityGoodsId(kanjiaActivity.getKanjiaActivityGoodsId());
|
||||
kanjiaActivityDTO.setKanjiaActivityId(kanjiaActivityId);
|
||||
//获取砍价金额
|
||||
Double price = this.getKanjiaPrice(kanJiaActivityGoods, kanjiaActivity.getSurplusPrice());
|
||||
kanjiaActivityDTO.setKanjiaPrice(price);
|
||||
//获取可砍金额
|
||||
kanjiaActivityDTO.setSurplusPrice(CurrencyUtil.sub(kanjiaActivity.getSurplusPrice(), price));
|
||||
//如果可砍金额为0的话说明活动成功了
|
||||
if (Double.doubleToLongBits(kanjiaActivityDTO.getSurplusPrice()) == Double.doubleToLongBits(0D)) {
|
||||
kanjiaActivity.setStatus(KanJiaStatusEnum.SUCCESS.name());
|
||||
this.updateById(kanjiaActivity);
|
||||
}
|
||||
kanjiaActivityDTO.setKanjiaMemberId(member.getId());
|
||||
kanjiaActivityDTO.setKanjiaMemberName(member.getUsername());
|
||||
kanjiaActivityDTO.setKanjiaMemberFace(member.getFace());
|
||||
return kanjiaActivityLogService.addKanJiaActivityLog(kanjiaActivityDTO);
|
||||
//判断活动非空或非正在进行中的活动
|
||||
if (kanjiaActivity == null || !kanjiaActivity.getStatus().equals(PromotionStatusEnum.START.name())) {
|
||||
throw new ServiceException(ResultCode.PROMOTION_STATUS_END);
|
||||
} else if (member == null) {
|
||||
throw new ServiceException(ResultCode.USER_NOT_EXIST);
|
||||
}
|
||||
throw new ServiceException(ResultCode.PROMOTION_STATUS_END);
|
||||
//根据skuId查询当前sku是否参与活动并且是在活动进行中
|
||||
KanjiaActivityGoods kanJiaActivityGoods = kanjiaActivityGoodsService.getById(kanjiaActivity.getKanjiaActivityGoodsId());
|
||||
if (kanJiaActivityGoods == null) {
|
||||
throw new ServiceException(ResultCode.PROMOTION_STATUS_END);
|
||||
}
|
||||
//判断是否已参与
|
||||
LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<KanjiaActivityLog>()
|
||||
.eq(KanjiaActivityLog::getKanjiaActivityId, kanjiaActivityId)
|
||||
.eq(KanjiaActivityLog::getKanjiaMemberId, member.getId());
|
||||
if (kanjiaActivityLogService.count(lambdaQueryWrapper) > 0) {
|
||||
throw new ServiceException(ResultCode.PROMOTION_LOG_EXIST);
|
||||
}
|
||||
|
||||
//添加砍价记录
|
||||
KanjiaActivityDTO kanjiaActivityDTO = new KanjiaActivityDTO();
|
||||
kanjiaActivityDTO.setKanjiaActivityGoodsId(kanjiaActivity.getKanjiaActivityGoodsId());
|
||||
kanjiaActivityDTO.setKanjiaActivityId(kanjiaActivityId);
|
||||
//获取砍价金额
|
||||
Double price = this.getKanjiaPrice(kanJiaActivityGoods, kanjiaActivity.getSurplusPrice());
|
||||
kanjiaActivityDTO.setKanjiaPrice(price);
|
||||
//计算剩余金额
|
||||
kanjiaActivityDTO.setSurplusPrice(CurrencyUtil.sub(kanjiaActivity.getSurplusPrice(), price));
|
||||
kanjiaActivityDTO.setKanjiaMemberId(member.getId());
|
||||
kanjiaActivityDTO.setKanjiaMemberName(member.getUsername());
|
||||
kanjiaActivityDTO.setKanjiaMemberFace(member.getFace());
|
||||
KanjiaActivityLog kanjiaActivityLog = kanjiaActivityLogService.addKanJiaActivityLog(kanjiaActivityDTO);
|
||||
|
||||
//如果可砍金额为0的话说明活动成功了
|
||||
if (Double.doubleToLongBits(kanjiaActivityDTO.getSurplusPrice()) == Double.doubleToLongBits(0D)) {
|
||||
kanjiaActivity.setStatus(KanJiaStatusEnum.SUCCESS.name());
|
||||
}
|
||||
kanjiaActivity.setSurplusPrice(kanjiaActivityLog.getSurplusPrice());
|
||||
this.updateById(kanjiaActivity);
|
||||
return kanjiaActivityLog;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 随机获取砍一刀价格
|
||||
*
|
||||
@ -153,24 +158,16 @@ public class KanjiaActivityServiceImpl extends ServiceImpl<KanJiaActivityMapper,
|
||||
* @return
|
||||
*/
|
||||
private Double getKanjiaPrice(KanjiaActivityGoods kanjiaActivityGoods, Double surplusPrice) {
|
||||
double result = kanjiaActivityGoods.getHighestPrice() - kanjiaActivityGoods.getLowestPrice();
|
||||
double num = (Math.random() * result);
|
||||
//如果剩余金额小于最低可砍价金额则直接返回最小金额 砍价成功
|
||||
|
||||
//如果剩余砍价金额小于最低砍价金额则返回0
|
||||
if (kanjiaActivityGoods.getLowestPrice() > surplusPrice) {
|
||||
return surplusPrice;
|
||||
}
|
||||
Double price = 0D;
|
||||
while (true) {
|
||||
price = CurrencyUtil.round(num + kanjiaActivityGoods.getLowestPrice(), 2);
|
||||
//从最大金额和最小金额之间获取随机砍价金额
|
||||
if (price < surplusPrice) {
|
||||
break;
|
||||
} else {
|
||||
price = surplusPrice;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return price;
|
||||
|
||||
//获取随机砍价金额
|
||||
BigDecimal bigDecimal = RandomUtil.randomBigDecimal(Convert.toBigDecimal(kanjiaActivityGoods.getHighestPrice()),
|
||||
Convert.toBigDecimal(kanjiaActivityGoods.getLowestPrice()));
|
||||
return Convert.toDouble(bigDecimal, 0.0);
|
||||
|
||||
}
|
||||
|
||||
|
@ -17,7 +17,6 @@ import cn.lili.modules.goods.entity.enums.GoodsStatusEnum;
|
||||
import cn.lili.modules.goods.service.GoodsSkuService;
|
||||
import cn.lili.modules.order.cart.entity.vo.CartSkuVO;
|
||||
import cn.lili.modules.order.cart.entity.vo.FullDiscountVO;
|
||||
import cn.lili.modules.promotion.entity.dos.PointsGoods;
|
||||
import cn.lili.modules.promotion.entity.dos.PromotionGoods;
|
||||
import cn.lili.modules.promotion.entity.dos.SeckillApply;
|
||||
import cn.lili.modules.promotion.entity.dto.BasePromotion;
|
||||
@ -123,10 +122,14 @@ public class PromotionGoodsServiceImpl extends ServiceImpl<PromotionGoodsMapper,
|
||||
//下一次更新时间
|
||||
cartSkuVO.setUpdatePromotionTime(date);
|
||||
}
|
||||
PointsGoods pointsGoods = pointsGoodsService.getPointsGoodsDetailBySkuId(cartSkuVO.getGoodsSku().getId());
|
||||
if (pointsGoods != null) {
|
||||
cartSkuVO.setPoint(pointsGoods.getPoints().intValue());
|
||||
}
|
||||
//TODO 积分商品逻辑实现
|
||||
// PointsGoods pointsGoods = pointsGoodsService.getPointsGoodsDetailBySkuId(cartSkuVO.getGoodsSku().getId());
|
||||
// if (pointsGoods != null) {
|
||||
// cartSkuVO.setPoint(pointsGoods.getPoints().intValue());
|
||||
// }
|
||||
|
||||
|
||||
//分销商品
|
||||
DistributionGoods distributionGoods = distributionGoodsService.distributionGoodsVOBySkuId(cartSkuVO.getGoodsSku().getId());
|
||||
if (distributionGoods != null) {
|
||||
cartSkuVO.setDistributionGoods(distributionGoods);
|
||||
|
Loading…
x
Reference in New Issue
Block a user