mirror of
https://gitee.com/huangge1199_admin/vue-pro.git
synced 2024-11-23 07:41:53 +08:00
commit
f3dd628aba
@ -95,8 +95,10 @@ public class RewardActivityMatchRespDTO {
|
|||||||
*
|
*
|
||||||
* key: 优惠劵模版编号
|
* key: 优惠劵模版编号
|
||||||
* value:对应的优惠券数量
|
* value:对应的优惠券数量
|
||||||
|
*
|
||||||
|
* 目的:用于订单支付后赠送优惠券
|
||||||
*/
|
*/
|
||||||
private Map<Long, Integer> giveCoupons;
|
private Map<Long, Integer> giveCouponTemplateCounts;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,23 +2,22 @@ package cn.iocoder.yudao.module.promotion.controller.admin.reward;
|
|||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityCreateReqVO;
|
import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityCreateReqVO;
|
||||||
import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityPageReqVO;
|
import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityPageReqVO;
|
||||||
import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityRespVO;
|
import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityRespVO;
|
||||||
import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityUpdateReqVO;
|
import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityUpdateReqVO;
|
||||||
import cn.iocoder.yudao.module.promotion.convert.reward.RewardActivityConvert;
|
|
||||||
import cn.iocoder.yudao.module.promotion.dal.dataobject.reward.RewardActivityDO;
|
import cn.iocoder.yudao.module.promotion.dal.dataobject.reward.RewardActivityDO;
|
||||||
import cn.iocoder.yudao.module.promotion.service.reward.RewardActivityService;
|
import cn.iocoder.yudao.module.promotion.service.reward.RewardActivityService;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import jakarta.validation.Valid;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import jakarta.annotation.Resource;
|
|
||||||
import jakarta.validation.Valid;
|
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
|
|
||||||
@Tag(name = "管理后台 - 满减送活动")
|
@Tag(name = "管理后台 - 满减送活动")
|
||||||
@ -69,7 +68,7 @@ public class RewardActivityController {
|
|||||||
@PreAuthorize("@ss.hasPermission('promotion:reward-activity:query')")
|
@PreAuthorize("@ss.hasPermission('promotion:reward-activity:query')")
|
||||||
public CommonResult<RewardActivityRespVO> getRewardActivity(@RequestParam("id") Long id) {
|
public CommonResult<RewardActivityRespVO> getRewardActivity(@RequestParam("id") Long id) {
|
||||||
RewardActivityDO rewardActivity = rewardActivityService.getRewardActivity(id);
|
RewardActivityDO rewardActivity = rewardActivityService.getRewardActivity(id);
|
||||||
return success(RewardActivityConvert.INSTANCE.convert(rewardActivity));
|
return success(BeanUtils.toBean(rewardActivity, RewardActivityRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/page")
|
@GetMapping("/page")
|
||||||
@ -77,7 +76,7 @@ public class RewardActivityController {
|
|||||||
@PreAuthorize("@ss.hasPermission('promotion:reward-activity:query')")
|
@PreAuthorize("@ss.hasPermission('promotion:reward-activity:query')")
|
||||||
public CommonResult<PageResult<RewardActivityRespVO>> getRewardActivityPage(@Valid RewardActivityPageReqVO pageVO) {
|
public CommonResult<PageResult<RewardActivityRespVO>> getRewardActivityPage(@Valid RewardActivityPageReqVO pageVO) {
|
||||||
PageResult<RewardActivityDO> pageResult = rewardActivityService.getRewardActivityPage(pageVO);
|
PageResult<RewardActivityDO> pageResult = rewardActivityService.getRewardActivityPage(pageVO);
|
||||||
return success(RewardActivityConvert.INSTANCE.convertPage(pageResult));
|
return success(BeanUtils.toBean(pageResult, RewardActivityRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -79,13 +79,13 @@ public class RewardActivityBaseVO {
|
|||||||
@Schema(description = "赠送的积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
|
@Schema(description = "赠送的积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
|
||||||
private Integer point;
|
private Integer point;
|
||||||
|
|
||||||
@Schema(description = "赠送的优惠劵编号的数组", example = "1,2,3")
|
@Schema(description = "赠送的优惠劵编号的数组")
|
||||||
private Map<Long, Integer> giveCouponsMap;
|
private Map<Long, Integer> giveCouponTemplateCounts;
|
||||||
|
|
||||||
@AssertTrue(message = "赠送的积分不能小于 1")
|
@AssertTrue(message = "赠送的积分不能小于 0")
|
||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
public boolean isPointValid() {
|
public boolean isPointValid() {
|
||||||
return point == null || point >= 1;
|
return point == null || point >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,5 @@
|
|||||||
package cn.iocoder.yudao.module.promotion.convert.reward;
|
package cn.iocoder.yudao.module.promotion.convert.reward;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
||||||
import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityCreateReqVO;
|
|
||||||
import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityRespVO;
|
|
||||||
import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityUpdateReqVO;
|
|
||||||
import cn.iocoder.yudao.module.promotion.dal.dataobject.reward.RewardActivityDO;
|
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -18,12 +13,4 @@ public interface RewardActivityConvert {
|
|||||||
|
|
||||||
RewardActivityConvert INSTANCE = Mappers.getMapper(RewardActivityConvert.class);
|
RewardActivityConvert INSTANCE = Mappers.getMapper(RewardActivityConvert.class);
|
||||||
|
|
||||||
RewardActivityDO convert(RewardActivityCreateReqVO bean);
|
|
||||||
|
|
||||||
RewardActivityDO convert(RewardActivityUpdateReqVO bean);
|
|
||||||
|
|
||||||
RewardActivityRespVO convert(RewardActivityDO bean);
|
|
||||||
|
|
||||||
PageResult<RewardActivityRespVO> convertPage(PageResult<RewardActivityDO> page);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -107,9 +107,12 @@ public class RewardActivityDO extends BaseDO {
|
|||||||
/**
|
/**
|
||||||
* 赠送的优惠劵
|
* 赠送的优惠劵
|
||||||
*
|
*
|
||||||
* key: 优惠劵编号,value:对应的优惠券数量
|
* key: 优惠劵模版编号
|
||||||
|
* value:对应的优惠券数量
|
||||||
|
*
|
||||||
|
* 目的:用于订单支付后赠送优惠券
|
||||||
*/
|
*/
|
||||||
private Map<Long, Integer> giveCouponsMap;
|
private Map<Long, Integer> giveCouponTemplateCounts;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,7 +10,6 @@ import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivi
|
|||||||
import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityCreateReqVO;
|
import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityCreateReqVO;
|
||||||
import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityPageReqVO;
|
import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityPageReqVO;
|
||||||
import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityUpdateReqVO;
|
import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityUpdateReqVO;
|
||||||
import cn.iocoder.yudao.module.promotion.convert.reward.RewardActivityConvert;
|
|
||||||
import cn.iocoder.yudao.module.promotion.dal.dataobject.reward.RewardActivityDO;
|
import cn.iocoder.yudao.module.promotion.dal.dataobject.reward.RewardActivityDO;
|
||||||
import cn.iocoder.yudao.module.promotion.dal.mysql.reward.RewardActivityMapper;
|
import cn.iocoder.yudao.module.promotion.dal.mysql.reward.RewardActivityMapper;
|
||||||
import cn.iocoder.yudao.module.promotion.enums.common.PromotionProductScopeEnum;
|
import cn.iocoder.yudao.module.promotion.enums.common.PromotionProductScopeEnum;
|
||||||
@ -54,7 +53,7 @@ public class RewardActivityServiceImpl implements RewardActivityService {
|
|||||||
validateRewardActivitySpuConflicts(null, createReqVO);
|
validateRewardActivitySpuConflicts(null, createReqVO);
|
||||||
|
|
||||||
// 2. 插入
|
// 2. 插入
|
||||||
RewardActivityDO rewardActivity = RewardActivityConvert.INSTANCE.convert(createReqVO)
|
RewardActivityDO rewardActivity = BeanUtils.toBean(createReqVO, RewardActivityDO.class)
|
||||||
.setStatus(PromotionUtils.calculateActivityStatus(createReqVO.getEndTime()));
|
.setStatus(PromotionUtils.calculateActivityStatus(createReqVO.getEndTime()));
|
||||||
rewardActivityMapper.insert(rewardActivity);
|
rewardActivityMapper.insert(rewardActivity);
|
||||||
// 返回
|
// 返回
|
||||||
@ -74,7 +73,7 @@ public class RewardActivityServiceImpl implements RewardActivityService {
|
|||||||
validateRewardActivitySpuConflicts(updateReqVO.getId(), updateReqVO);
|
validateRewardActivitySpuConflicts(updateReqVO.getId(), updateReqVO);
|
||||||
|
|
||||||
// 2. 更新
|
// 2. 更新
|
||||||
RewardActivityDO updateObj = RewardActivityConvert.INSTANCE.convert(updateReqVO)
|
RewardActivityDO updateObj = BeanUtils.toBean(updateReqVO, RewardActivityDO.class)
|
||||||
.setStatus(PromotionUtils.calculateActivityStatus(updateReqVO.getEndTime()));
|
.setStatus(PromotionUtils.calculateActivityStatus(updateReqVO.getEndTime()));
|
||||||
rewardActivityMapper.updateById(updateObj);
|
rewardActivityMapper.updateById(updateObj);
|
||||||
}
|
}
|
||||||
|
@ -296,7 +296,6 @@ public class TradeOrderDO extends BaseDO {
|
|||||||
*/
|
*/
|
||||||
private Integer vipPrice;
|
private Integer vipPrice;
|
||||||
|
|
||||||
// TODO @puhui999:我们要不要把相关的字段,定义的更明确一点?例如说,giveCouponTemplateCounts 赠送的优惠劵模版数量,或者 giveCouponCounts 赠送的优惠劵数量。感受上,Coupons 和 Map 有点点重叠哈。
|
|
||||||
/**
|
/**
|
||||||
* 赠送的优惠劵
|
* 赠送的优惠劵
|
||||||
*
|
*
|
||||||
@ -306,7 +305,7 @@ public class TradeOrderDO extends BaseDO {
|
|||||||
* 目的:用于订单支付后赠送优惠券
|
* 目的:用于订单支付后赠送优惠券
|
||||||
*/
|
*/
|
||||||
@TableField(typeHandler = JacksonTypeHandler.class)
|
@TableField(typeHandler = JacksonTypeHandler.class)
|
||||||
private Map<Long, Integer> giveCouponsMap;
|
private Map<Long, Integer> giveCouponTemplateCounts;
|
||||||
/**
|
/**
|
||||||
* 赠送的优惠劵编号
|
* 赠送的优惠劵编号
|
||||||
*
|
*
|
||||||
|
@ -202,7 +202,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|||||||
order.setProductCount(getSumValue(calculateRespBO.getItems(), TradePriceCalculateRespBO.OrderItem::getCount, Integer::sum));
|
order.setProductCount(getSumValue(calculateRespBO.getItems(), TradePriceCalculateRespBO.OrderItem::getCount, Integer::sum));
|
||||||
order.setUserIp(getClientIP()).setTerminal(getTerminal());
|
order.setUserIp(getClientIP()).setTerminal(getTerminal());
|
||||||
// 使用 + 赠送优惠券
|
// 使用 + 赠送优惠券
|
||||||
order.setGiveCouponsMap(calculateRespBO.getGiveCoupons());
|
order.setGiveCouponTemplateCounts(calculateRespBO.getGiveCouponTemplateCounts());
|
||||||
// 支付 + 退款信息
|
// 支付 + 退款信息
|
||||||
order.setAdjustPrice(0).setPayStatus(false);
|
order.setAdjustPrice(0).setPayStatus(false);
|
||||||
order.setRefundStatus(TradeOrderRefundStatusEnum.NONE.getStatus()).setRefundPrice(0);
|
order.setRefundStatus(TradeOrderRefundStatusEnum.NONE.getStatus()).setRefundPrice(0);
|
||||||
|
@ -42,11 +42,11 @@ public class TradeCouponOrderHandler implements TradeOrderHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void afterPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
|
public void afterPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
|
||||||
if (CollUtil.isEmpty(order.getGiveCouponsMap())) {
|
if (CollUtil.isEmpty(order.getGiveCouponTemplateCounts())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 赠送优惠券
|
// 赠送优惠券
|
||||||
List<Long> couponIds = couponApi.takeCouponsByAdmin(order.getGiveCouponsMap(), order.getUserId());
|
List<Long> couponIds = couponApi.takeCouponsByAdmin(order.getGiveCouponTemplateCounts(), order.getUserId());
|
||||||
if (CollUtil.isEmpty(couponIds)) {
|
if (CollUtil.isEmpty(couponIds)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -76,10 +76,12 @@ public class TradePriceCalculateRespBO {
|
|||||||
/**
|
/**
|
||||||
* 赠送的优惠劵
|
* 赠送的优惠劵
|
||||||
*
|
*
|
||||||
* key: 优惠劵编号,value:对应的优惠券数量
|
* key: 优惠劵模版编号
|
||||||
* 目的:用于后续取消或者售后订单时,需要扣减赠送
|
* value:对应的优惠券数量
|
||||||
|
*
|
||||||
|
* 目的:用于订单支付后赠送优惠券
|
||||||
*/
|
*/
|
||||||
private Map<Long, Integer> giveCoupons;
|
private Map<Long, Integer> giveCouponTemplateCounts;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 订单价格
|
* 订单价格
|
||||||
|
@ -32,7 +32,7 @@ public class TradePriceCalculatorHelper {
|
|||||||
List<ProductSpuRespDTO> spuList, List<ProductSkuRespDTO> skuList) {
|
List<ProductSpuRespDTO> spuList, List<ProductSkuRespDTO> skuList) {
|
||||||
// 创建 PriceCalculateRespDTO 对象
|
// 创建 PriceCalculateRespDTO 对象
|
||||||
TradePriceCalculateRespBO result = new TradePriceCalculateRespBO();
|
TradePriceCalculateRespBO result = new TradePriceCalculateRespBO();
|
||||||
result.setType(getOrderType(param)).setPromotions(new ArrayList<>()).setGiveCoupons(new LinkedHashMap<>());
|
result.setType(getOrderType(param)).setPromotions(new ArrayList<>()).setGiveCouponTemplateCounts(new LinkedHashMap<>());
|
||||||
|
|
||||||
// 创建它的 OrderItem 属性
|
// 创建它的 OrderItem 属性
|
||||||
result.setItems(new ArrayList<>(param.getItems().size()));
|
result.setItems(new ArrayList<>(param.getItems().size()));
|
||||||
|
@ -107,13 +107,13 @@ public class TradeRewardActivityPriceCalculator implements TradePriceCalculator
|
|||||||
result.setFreeDelivery(true);
|
result.setFreeDelivery(true);
|
||||||
}
|
}
|
||||||
// 4.3 记录赠送的优惠券
|
// 4.3 记录赠送的优惠券
|
||||||
if (CollUtil.isNotEmpty(rule.getGiveCoupons())) {
|
if (CollUtil.isNotEmpty(rule.getGiveCouponTemplateCounts())) {
|
||||||
for (Map.Entry<Long, Integer> entry : rule.getGiveCoupons().entrySet()) {
|
for (Map.Entry<Long, Integer> entry : rule.getGiveCouponTemplateCounts().entrySet()) {
|
||||||
Map<Long, Integer> giveCoupons = result.getGiveCoupons();
|
Map<Long, Integer> giveCouponTemplateCounts = result.getGiveCouponTemplateCounts();
|
||||||
if (giveCoupons.get(entry.getKey()) == null) { // 情况一:还没有赠送的优惠券
|
if (giveCouponTemplateCounts.get(entry.getKey()) == null) { // 情况一:还没有赠送的优惠券
|
||||||
result.setGiveCoupons(rule.getGiveCoupons());
|
result.setGiveCouponTemplateCounts(rule.getGiveCouponTemplateCounts());
|
||||||
} else { // 情况二:别的满减活动送过同类优惠券,则直接增加数量
|
} else { // 情况二:别的满减活动送过同类优惠券,则直接增加数量
|
||||||
giveCoupons.put(entry.getKey(), giveCoupons.get(entry.getKey()) + entry.getValue());
|
giveCouponTemplateCounts.put(entry.getKey(), giveCouponTemplateCounts.get(entry.getKey()) + entry.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,7 @@ public class TradeRewardActivityPriceCalculatorTest extends BaseMockitoUnitTest
|
|||||||
TradePriceCalculateRespBO result = new TradePriceCalculateRespBO()
|
TradePriceCalculateRespBO result = new TradePriceCalculateRespBO()
|
||||||
.setType(TradeOrderTypeEnum.NORMAL.getType())
|
.setType(TradeOrderTypeEnum.NORMAL.getType())
|
||||||
.setPrice(new TradePriceCalculateRespBO.Price())
|
.setPrice(new TradePriceCalculateRespBO.Price())
|
||||||
.setPromotions(new ArrayList<>()).setGiveCoupons(new LinkedHashMap<>())
|
.setPromotions(new ArrayList<>()).setGiveCouponTemplateCounts(new LinkedHashMap<>())
|
||||||
.setItems(asList(
|
.setItems(asList(
|
||||||
new TradePriceCalculateRespBO.OrderItem().setSkuId(10L).setCount(2).setSelected(true)
|
new TradePriceCalculateRespBO.OrderItem().setSkuId(10L).setCount(2).setSelected(true)
|
||||||
.setPrice(100).setSpuId(1L),
|
.setPrice(100).setSpuId(1L),
|
||||||
|
Loading…
Reference in New Issue
Block a user