diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/odc/entity/OrderDiscountConfig.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/odc/entity/OrderDiscountConfig.java new file mode 100644 index 0000000..c0c5382 --- /dev/null +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/odc/entity/OrderDiscountConfig.java @@ -0,0 +1,36 @@ +package com.qniao.dam.domain.aggregate.odc.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.qniao.domain.Entity; +import java.math.BigDecimal; + +/** + * 订单优惠配置 + * + * @date 2024/12/07 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("da_order_discount_config") +public class OrderDiscountConfig extends Entity { + + + @ApiModelProperty("手机号码") + private String phone; + + @ApiModelProperty("产品次分类") + private ProductSubCategoryEnum subCategory; + + @ApiModelProperty("折扣金额") + private BigDecimal discountAmount; + + @ApiModelProperty("启用") + private Boolean enable; + + @ApiModelProperty("备注") + private String remark; +} diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/order/entity/Order.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/order/entity/Order.java index 6b9714a..83906a2 100644 --- a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/order/entity/Order.java +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/order/entity/Order.java @@ -1,5 +1,6 @@ package com.qniao.dam.domain.aggregate.order.entity; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.annotation.TableName; import com.qniao.dam.domian.aggregate.order.constant.OrderBelongingEnum; import com.qniao.dam.domian.aggregate.order.constant.OrderStatusEnum; @@ -13,6 +14,7 @@ import lombok.EqualsAndHashCode; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; +import java.util.Objects; @Data @EqualsAndHashCode(callSuper = true) @@ -38,7 +40,10 @@ public class Order extends Entity { private String orderCode; @ApiModelProperty("原始金额") - private BigDecimal originalAmount ; + private BigDecimal originalAmount; + + @ApiModelProperty("平台折扣金额") + private BigDecimal platformDiscountAmount; @ApiModelProperty("折扣金额") private BigDecimal discountAmount; @@ -79,4 +84,13 @@ public class Order extends Entity { order.setOrderType(orderType); return order; } + + public void calculate() { + if (CollUtil.isNotEmpty(orderItemList)) { + originalAmount = orderItemList.stream().map(OrderItem::getOriginalAmount).reduce(BigDecimal.ZERO, BigDecimal::add); + platformDiscountAmount = orderItemList.stream().map(OrderItem::getPlatformDiscountAmount).reduce(BigDecimal.ZERO, BigDecimal::add); + discountAmount = orderItemList.stream().map(OrderItem::getDiscountAmount).reduce(BigDecimal.ZERO, BigDecimal::add); + settlementAmount = orderItemList.stream().map(OrderItem::getSettlementAmount).reduce(BigDecimal.ZERO, BigDecimal::add); + } + } } diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/order/entity/OrderItem.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/order/entity/OrderItem.java index 8e702ce..890c4df 100644 --- a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/order/entity/OrderItem.java +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/order/entity/OrderItem.java @@ -10,6 +10,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import java.math.BigDecimal; +import java.util.Objects; @Data @EqualsAndHashCode(callSuper = true) @@ -52,6 +53,9 @@ public class OrderItem extends Entity { @ApiModelProperty("原始金额") private BigDecimal originalAmount; + @ApiModelProperty("平台折扣金额") + private BigDecimal platformDiscountAmount; + @ApiModelProperty("折扣金额") private BigDecimal discountAmount; @@ -79,4 +83,17 @@ public class OrderItem extends Entity { orderItem.setQuantity(quantity); return orderItem; } + + public void calculate() { + if (Objects.isNull(originalAmount)) { + originalAmount = BigDecimal.ZERO; + } + if (Objects.isNull(platformDiscountAmount)) { + platformDiscountAmount = BigDecimal.ZERO; + } + if (Objects.isNull(discountAmount)) { + discountAmount = BigDecimal.ZERO; + } + settlementAmount = originalAmount.subtract(platformDiscountAmount).subtract(discountAmount); + } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/odc/user/OrderDiscountConfigUserCommandController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/odc/user/OrderDiscountConfigUserCommandController.java new file mode 100644 index 0000000..1a87369 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/odc/user/OrderDiscountConfigUserCommandController.java @@ -0,0 +1,43 @@ +package com.qniao.dam.api.command.odc.user; + +import com.qniao.dam.api.command.odc.user.request.*; +import com.qniao.dam.application.service.odc.OrderDiscountConfigApplicationService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; + +@Api(tags = "订单优惠配置") +@RestController +@RequestMapping("user") +public class OrderDiscountConfigUserCommandController { + + @Resource + private OrderDiscountConfigApplicationService orderDiscountConfigApplicationService; + + @ApiOperation("用户创建订单优惠配置") + @PostMapping("create/order-discount-config") + public void userCreateOrderDiscountConfig(@RequestBody @Valid UserCreateOrderDiscountConfigDto dto) { + orderDiscountConfigApplicationService.create(dto.trans2Domain()); + } + + @ApiOperation("用户编辑订单优惠配置") + @PostMapping("edit/order-discount-config") + public void userEditOrderDiscountConfig(@RequestBody @Valid UserEditOrderDiscountConfigDto dto) { + orderDiscountConfigApplicationService.edit(dto.trans2Domain()); + } + + @ApiOperation("用户删除订单优惠配置") + @PostMapping("delete/order-discount-config") + public void userDeleteOrderDiscountConfig(@RequestBody @Valid UserDeleteOrderDiscountConfigDto dto) { + orderDiscountConfigApplicationService.delete(dto.getId()); + } + + @ApiOperation("用户启停订单优惠配置") + @PostMapping("enable/order-discount-config") + public void userEnableOrderDiscountConfig(@RequestBody @Valid UserEnableOrderDiscountConfigDto dto) { + orderDiscountConfigApplicationService.enable(dto.getId()); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/odc/user/request/UserCreateOrderDiscountConfigDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/odc/user/request/UserCreateOrderDiscountConfigDto.java new file mode 100644 index 0000000..f4413cd --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/odc/user/request/UserCreateOrderDiscountConfigDto.java @@ -0,0 +1,33 @@ +package com.qniao.dam.api.command.odc.user.request; + +import com.qniao.dam.domain.aggregate.odc.entity.OrderDiscountConfig; +import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; +import com.qniao.domain.Trans2DomainAssembler; +import io.swagger.annotations.ApiModelProperty; +import com.qniao.framework.utils.TypeConvertUtils; +import java.math.BigDecimal; +import lombok.Data; + +@Data +public class UserCreateOrderDiscountConfigDto implements Trans2DomainAssembler { + + @ApiModelProperty("手机号码") + private String phone; + + @ApiModelProperty("产品次分类") + private ProductSubCategoryEnum subCategory; + + @ApiModelProperty("折扣金额") + private BigDecimal discountAmount; + + @ApiModelProperty("启用") + private Boolean enable; + + @ApiModelProperty("备注") + private String remark; + + @Override + public OrderDiscountConfig trans2Domain() { + return TypeConvertUtils.convert(this, OrderDiscountConfig.class); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/odc/user/request/UserDeleteOrderDiscountConfigDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/odc/user/request/UserDeleteOrderDiscountConfigDto.java new file mode 100644 index 0000000..21d0b5d --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/odc/user/request/UserDeleteOrderDiscountConfigDto.java @@ -0,0 +1,12 @@ +package com.qniao.dam.api.command.odc.user.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class UserDeleteOrderDiscountConfigDto { + + @ApiModelProperty("唯一标识") + private Long id; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/odc/user/request/UserEditOrderDiscountConfigDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/odc/user/request/UserEditOrderDiscountConfigDto.java new file mode 100644 index 0000000..d6e01d3 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/odc/user/request/UserEditOrderDiscountConfigDto.java @@ -0,0 +1,39 @@ +package com.qniao.dam.api.command.odc.user.request; + +import com.qniao.dam.domain.aggregate.odc.entity.OrderDiscountConfig; +import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; +import com.qniao.domain.Trans2DomainAssembler; +import io.swagger.annotations.ApiModelProperty; +import com.qniao.framework.utils.TypeConvertUtils; + +import java.math.BigDecimal; + +import lombok.Data; + +import javax.validation.constraints.NotNull; + +@Data +public class UserEditOrderDiscountConfigDto implements Trans2DomainAssembler { + + + @ApiModelProperty("唯一标识") + @NotNull(message = "唯一标识不能为空") + private Long id; + + @ApiModelProperty("手机号码") + private String phone; + + @ApiModelProperty("产品次分类") + private ProductSubCategoryEnum subCategory; + + @ApiModelProperty("折扣金额") + private BigDecimal discountAmount; + + @ApiModelProperty("备注") + private String remark; + + @Override + public OrderDiscountConfig trans2Domain() { + return TypeConvertUtils.convert(this, OrderDiscountConfig.class); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/odc/user/request/UserEnableOrderDiscountConfigDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/odc/user/request/UserEnableOrderDiscountConfigDto.java new file mode 100644 index 0000000..8933935 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/odc/user/request/UserEnableOrderDiscountConfigDto.java @@ -0,0 +1,12 @@ +package com.qniao.dam.api.command.odc.user.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class UserEnableOrderDiscountConfigDto { + + @ApiModelProperty("唯一标识") + private Long id; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/odc/user/OrderDiscountConfigUserQueryController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/odc/user/OrderDiscountConfigUserQueryController.java new file mode 100644 index 0000000..b70e760 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/odc/user/OrderDiscountConfigUserQueryController.java @@ -0,0 +1,31 @@ +package com.qniao.dam.api.query.odc.user; + +import com.qniao.dam.api.query.odc.user.request.UserPageOrderDiscountConfigQueryParams; +import com.qniao.dam.api.query.odc.user.response.UserPageOrderDiscountConfigVo; +import com.qniao.dam.query.odc.OrderDiscountConfigQueryService; +import com.qniao.domain.QnPage; +import com.qniao.framework.utils.PageUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +@Api(tags = "订单优惠配置") +@RestController +@RequestMapping("user") +public class OrderDiscountConfigUserQueryController { + + @Resource + private OrderDiscountConfigQueryService orderDiscountConfigQueryService; + + @GetMapping("page/order-discount-config") + @ApiOperation("用户查询订单优惠配置分页") + public QnPage userPageOrderDiscountConfig(PageUtil pageUtil, + UserPageOrderDiscountConfigQueryParams queryParams) { + return PageUtil.convert(orderDiscountConfigQueryService.pageOrderDiscountConfig(queryParams, pageUtil), UserPageOrderDiscountConfigVo.class); + } + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/odc/user/request/UserPageOrderDiscountConfigQueryParams.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/odc/user/request/UserPageOrderDiscountConfigQueryParams.java new file mode 100644 index 0000000..26abb06 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/odc/user/request/UserPageOrderDiscountConfigQueryParams.java @@ -0,0 +1,19 @@ +package com.qniao.dam.api.query.odc.user.request; + +import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class UserPageOrderDiscountConfigQueryParams { + + @ApiModelProperty("手机号码") + private String phone; + + @ApiModelProperty("产品次分类") + private ProductSubCategoryEnum subCategory; + + @ApiModelProperty("启用") + private Boolean enable; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/odc/user/response/UserPageOrderDiscountConfigVo.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/odc/user/response/UserPageOrderDiscountConfigVo.java new file mode 100644 index 0000000..5f30b5d --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/odc/user/response/UserPageOrderDiscountConfigVo.java @@ -0,0 +1,38 @@ +package com.qniao.dam.api.query.odc.user.response; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +public class UserPageOrderDiscountConfigVo { + + @ApiModelProperty("唯一标识") + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + @ApiModelProperty("手机号码") + private String phone; + + @ApiModelProperty("产品次分类") + private ProductSubCategoryEnum subCategory; + + @ApiModelProperty("折扣金额") + private BigDecimal discountAmount; + + @ApiModelProperty("启用") + private Boolean enable; + + @ApiModelProperty("备注") + private String remark; + + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/odc/OrderDiscountConfigApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/odc/OrderDiscountConfigApplicationService.java new file mode 100644 index 0000000..0539e0c --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/odc/OrderDiscountConfigApplicationService.java @@ -0,0 +1,39 @@ +package com.qniao.dam.application.service.odc; + +import com.qniao.dam.domain.aggregate.odc.OrderDiscountConfigAggregate; +import com.qniao.dam.domain.aggregate.odc.entity.OrderDiscountConfig; +import com.qniao.dam.domain.aggregate.odc.repository.OrderDiscountConfigRepository; +import com.qniao.dam.infrastructure.persistent.dao.odc.OrderDiscountConfigDao; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Objects; + +@Service +public class OrderDiscountConfigApplicationService { + + @Resource + private OrderDiscountConfigAggregate orderDiscountConfigAggregate; + @Resource + private OrderDiscountConfigRepository orderDiscountConfigRepository; + + public void create(OrderDiscountConfig orderDiscountConfig) { + orderDiscountConfigAggregate.create(orderDiscountConfig); + } + + public void edit(OrderDiscountConfig orderDiscountConfig) { + orderDiscountConfigAggregate.edit(orderDiscountConfig); + } + + public void delete(Long id) { + orderDiscountConfigAggregate.delete(id); + } + + public void enable(Long id) { + OrderDiscountConfig orderDiscountConfig = orderDiscountConfigRepository.load(id); + if (Objects.nonNull(orderDiscountConfig)) { + orderDiscountConfig.setEnable(!orderDiscountConfig.getEnable()); + orderDiscountConfigRepository.save(orderDiscountConfig); + } + } +} \ No newline at end of file diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java index 627b189..4f0e959 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java @@ -41,6 +41,7 @@ import com.qniao.dam.infrastructure.utils.SnowFlakeUtil; import com.qniao.dam.query.marriagebounty.MarriageBountyOrderQueryService; import com.qniao.dam.query.matchmaker.MatchmakerQueryService; import com.qniao.dam.query.matchmakermarriage.MatchmakerMarriageInformationQueryService; +import com.qniao.dam.query.odc.OrderDiscountConfigQueryService; import com.qniao.dam.query.order.OrderQueryService; import com.qniao.dam.query.product.ProductQueryService; import com.qniao.dam.query.rewardconfig.RewardConfigQueryService; @@ -111,6 +112,8 @@ public class OrderApplicationService extends BaseApplicationService { private OrderDao orderDao; @Resource private OrderAggregate orderAggregate; + @Resource + private OrderDiscountConfigQueryService orderDiscountConfigQueryService; @Value("${default_marriage_bounty_matchmaker_id}") private Long defaultMarriageBountyMatchmakerId; @@ -424,13 +427,13 @@ public class OrderApplicationService extends BaseApplicationService { // fillOrderInfo(order); // } else { //是否vip - boolean vip = rightQueryService.checkUserVipRight(userId, dto.getMiId()).getVip(); + //boolean vip = rightQueryService.checkUserVipRight(userId, dto.getMiId()).getVip(); //报名参加活动 order = Order.build(userId, dto.getMiId(), OrderBelongingEnum.CUSTOMER, marriageInformation.getNickName(), OrderTypeEnum.NORMAL); ProductSpec productSpec = product.getProductSpecList().get(0); //todo feign 获取活动应付金额 CalculateSiteActivityFeeDto calculateDto = new CalculateSiteActivityFeeDto(dto.getSiteActivityId(), userId, - dto.getMiId(), vip ? VIPEnum.YES.getValue() : VIPEnum.NO.getValue()); + dto.getMiId()); CalculateSiteActivityFeeVo calculateVo = datingAgencyServiceApplicationService.calculateSiteActivityFeeBySdk(calculateDto); if (!calculateVo.getEnable()) { throw new BizException("下单异常"); @@ -452,9 +455,9 @@ public class OrderApplicationService extends BaseApplicationService { public UserCalculateOrderFeeVo calculateSiteActivityOrderFee(UserCalculateSiteActivityOrderDto dto, Long userId) { //是否vip - boolean vip = rightQueryService.checkUserVipRight(userId, dto.getMiId()).getVip(); + //boolean vip = rightQueryService.checkUserVipRight(userId, dto.getMiId()).getVip(); CalculateSiteActivityFeeDto calculateDto = new CalculateSiteActivityFeeDto(dto.getSiteActivityId(), userId, - dto.getMiId(), vip ? VIPEnum.YES.getValue() : VIPEnum.NO.getValue()); + dto.getMiId()); CalculateSiteActivityFeeVo calculateVo = datingAgencyServiceApplicationService.calculateSiteActivityFeeBySdk(calculateDto); if (!calculateVo.getEnable()) { throw new BizException("下单异常"); @@ -502,24 +505,21 @@ public class OrderApplicationService extends BaseApplicationService { private void countMatchMakerOrderAmount(Order order, MatchmakerOrderTypeEnum matchmakerOrderType) { if (CollUtil.isNotEmpty(order.getOrderItemList())) { - BigDecimal totalOriginalAmount = BigDecimal.ZERO; - BigDecimal totalDiscountAmount = BigDecimal.ZERO; - BigDecimal totalSettlementAmount = BigDecimal.ZERO; for (OrderItem orderItem : order.getOrderItemList()) { + //查询订单折扣配置 + orderItem.setPlatformDiscountAmount(orderDiscountConfigQueryService.queryBy(order.getUserId(), orderItem.getSubCategory())); if (MatchmakerOrderTypeEnum.JOIN.equals(matchmakerOrderType)) { - orderItem.setOriginalAmount(orderItem.getUnitOriginalPrice().multiply(BigDecimal.valueOf(orderItem.getQuantity()))); + orderItem.setOriginalAmount(orderItem.getUnitOriginalPrice()); orderItem.setDiscountAmount(BigDecimal.ZERO); - orderItem.setSettlementAmount(orderItem.getOriginalAmount()); - totalOriginalAmount = totalOriginalAmount.add(orderItem.getOriginalAmount()); - totalSettlementAmount = totalSettlementAmount.add(orderItem.getSettlementAmount()); - totalDiscountAmount = totalDiscountAmount.add(orderItem.getDiscountAmount()); + orderItem.calculate(); + orderItem.setUnitOriginalPrice(orderItem.getSettlementAmount()); } else if (MatchmakerOrderTypeEnum.UPGRADE.equals(matchmakerOrderType)) { //红娘升级 Matchmaker matchmaker = matchmakerQueryService.queryByUserId(order.getUserId()); if (Objects.isNull(matchmaker)) { throw new BizException("没有查询到红娘信息"); } else { - orderItem.setOriginalAmount(orderItem.getUnitOriginalPrice().multiply(BigDecimal.valueOf(orderItem.getQuantity()))); + orderItem.setOriginalAmount(orderItem.getUnitOriginalPrice()); BigDecimal discountAmount = BigDecimal.ZERO; //红娘升级补差价周期 RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_UPGRADE_PROTECTION_PERIOD); @@ -530,16 +530,12 @@ public class OrderApplicationService extends BaseApplicationService { } } orderItem.setDiscountAmount(discountAmount); - orderItem.setSettlementAmount(orderItem.getOriginalAmount().subtract(discountAmount)); - totalOriginalAmount = totalOriginalAmount.add(orderItem.getOriginalAmount()); - totalSettlementAmount = totalSettlementAmount.add(orderItem.getSettlementAmount()); - totalDiscountAmount = totalDiscountAmount.add(orderItem.getDiscountAmount()); + orderItem.calculate(); + orderItem.setUnitOriginalPrice(orderItem.getSettlementAmount()); } } } - order.setOriginalAmount(totalOriginalAmount); - order.setDiscountAmount(totalDiscountAmount); - order.setSettlementAmount(totalSettlementAmount); + order.calculate(); if (order.getSettlementAmount().compareTo(BigDecimal.ZERO) <= 0) { throw new BizException("订单金额应该大于0"); } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/odc/OrderDiscountConfigAggregate.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/odc/OrderDiscountConfigAggregate.java new file mode 100644 index 0000000..55cce3b --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/odc/OrderDiscountConfigAggregate.java @@ -0,0 +1,31 @@ +package com.qniao.dam.domain.aggregate.odc; + +import com.qniao.dam.domain.aggregate.odc.entity.OrderDiscountConfig; +import com.qniao.dam.domain.aggregate.odc.repository.OrderDiscountConfigRepository; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +/** + * 订单优惠配置 + * + * @date 2024/12/07 + */ +@Service +public class OrderDiscountConfigAggregate { + + @Resource + private OrderDiscountConfigRepository repository; + + public void create(OrderDiscountConfig entity) { + repository.save(entity); + } + + public void edit(OrderDiscountConfig entity) { + repository.save(entity); + } + + public void delete(Long id) { + repository.delete(id); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/odc/repository/OrderDiscountConfigRepository.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/odc/repository/OrderDiscountConfigRepository.java new file mode 100644 index 0000000..5fd71e5 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/odc/repository/OrderDiscountConfigRepository.java @@ -0,0 +1,12 @@ +package com.qniao.dam.domain.aggregate.odc.repository; + +import com.qniao.dam.domain.aggregate.odc.entity.OrderDiscountConfig; +import com.qniao.domain.Repository; + +/** + * 订单优惠配置 + * + * @date 2024/12/07 + */ +public interface OrderDiscountConfigRepository extends Repository { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/odc/OrderDiscountConfigDao.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/odc/OrderDiscountConfigDao.java new file mode 100644 index 0000000..03a2327 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/odc/OrderDiscountConfigDao.java @@ -0,0 +1,21 @@ +package com.qniao.dam.infrastructure.persistent.dao.odc; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.qniao.dam.api.query.odc.user.request.UserPageOrderDiscountConfigQueryParams; +import com.qniao.dam.api.query.odc.user.response.UserPageOrderDiscountConfigVo; +import com.qniao.dam.domain.aggregate.odc.entity.OrderDiscountConfig; +import org.apache.ibatis.annotations.Param; + +/** + * 订单优惠配置 + * + * @date 2024/12/07 + */ +public interface OrderDiscountConfigDao extends BaseMapper { + + IPage page(Page pageWithoutOrders, + @Param("queryParams") UserPageOrderDiscountConfigQueryParams queryParams); + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/OrderDiscountConfigRepositoryImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/OrderDiscountConfigRepositoryImpl.java new file mode 100644 index 0000000..5606fdd --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/OrderDiscountConfigRepositoryImpl.java @@ -0,0 +1,41 @@ +package com.qniao.dam.infrastructure.persistent.repository.impl; + +import com.qniao.dam.domain.aggregate.odc.entity.OrderDiscountConfig; +import com.qniao.dam.domain.aggregate.odc.repository.OrderDiscountConfigRepository; +import com.qniao.dam.infrastructure.persistent.dao.odc.OrderDiscountConfigDao; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Objects; + +/** + * 订单优惠配置 + * + * @date 2024/12/07 + */ +@Service +public class OrderDiscountConfigRepositoryImpl implements OrderDiscountConfigRepository { + + @Resource + private OrderDiscountConfigDao dao; + + @Override + public OrderDiscountConfig load(Long id) { + return dao.selectById(id); + } + + @Override + public Long save(OrderDiscountConfig entity) { + if (Objects.isNull(entity) || Objects.isNull(dao.selectById(entity.getId()))) { + dao.insert(entity); + } else { + dao.updateById(entity); + } + return entity.getId(); + } + + @Override + public void delete(Long id) { + dao.deleteById(id); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/odc/OrderDiscountConfigQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/odc/OrderDiscountConfigQueryService.java new file mode 100644 index 0000000..62afb7b --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/odc/OrderDiscountConfigQueryService.java @@ -0,0 +1,16 @@ +package com.qniao.dam.query.odc; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.qniao.dam.api.query.odc.user.request.UserPageOrderDiscountConfigQueryParams; +import com.qniao.dam.api.query.odc.user.response.UserPageOrderDiscountConfigVo; +import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; +import com.qniao.framework.utils.PageUtil; + +import java.math.BigDecimal; + +public interface OrderDiscountConfigQueryService { + + IPage pageOrderDiscountConfig(UserPageOrderDiscountConfigQueryParams queryParams, PageUtil pageUtil); + + BigDecimal queryBy(Long userId, ProductSubCategoryEnum subCategory); +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/odc/impl/OrderDiscountConfigQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/odc/impl/OrderDiscountConfigQueryServiceImpl.java new file mode 100644 index 0000000..74ee72f --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/odc/impl/OrderDiscountConfigQueryServiceImpl.java @@ -0,0 +1,52 @@ +package com.qniao.dam.query.odc.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.qniao.dam.api.query.odc.user.request.UserPageOrderDiscountConfigQueryParams; +import com.qniao.dam.api.query.odc.user.response.UserPageOrderDiscountConfigVo; +import com.qniao.dam.domain.aggregate.odc.entity.OrderDiscountConfig; +import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; +import com.qniao.dam.infrastructure.persistent.dao.odc.OrderDiscountConfigDao; +import com.qniao.dam.query.account.AccountQueryService; +import com.qniao.dam.query.odc.OrderDiscountConfigQueryService; +import com.qniao.dau.domain.aggregate.account.entity.Account; +import com.qniao.dau.domian.aggregate.account.constant.AccountTypeEnum; +import com.qniao.framework.utils.PageUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.Objects; + +@Service +public class OrderDiscountConfigQueryServiceImpl implements OrderDiscountConfigQueryService { + + @Resource + private OrderDiscountConfigDao orderDiscountConfigDao; + @Resource + private AccountQueryService accountQueryService; + + @Override + public IPage pageOrderDiscountConfig(UserPageOrderDiscountConfigQueryParams queryParams, + PageUtil pageUtil) { + return orderDiscountConfigDao.page(pageUtil.toPageWithoutOrders(), queryParams); + } + + @Override + public BigDecimal queryBy(Long userId, ProductSubCategoryEnum subCategory) { + BigDecimal discountAmount = BigDecimal.ZERO; + Account phoneAccount = accountQueryService.queryByUserIdAndType(userId, AccountTypeEnum.MOBILE); + if (Objects.nonNull(phoneAccount)) { + OrderDiscountConfig orderDiscountConfig = orderDiscountConfigDao.selectOne(new LambdaQueryWrapper() + .eq(OrderDiscountConfig::getPhone, phoneAccount.getTid()) + .eq(OrderDiscountConfig::getSubCategory, subCategory) + .eq(OrderDiscountConfig::getEnable, true) + .orderByDesc(OrderDiscountConfig::getCreateTime) + .last("limit 1")); + if (Objects.nonNull(orderDiscountConfig)) { + discountAmount = orderDiscountConfig.getDiscountAmount(); + } + } + return discountAmount; + } +} \ No newline at end of file diff --git a/dating-agency-mall-server/src/main/resources/mapper/odc/OrderDiscountConfigMapper.xml b/dating-agency-mall-server/src/main/resources/mapper/odc/OrderDiscountConfigMapper.xml new file mode 100644 index 0000000..97c7d78 --- /dev/null +++ b/dating-agency-mall-server/src/main/resources/mapper/odc/OrderDiscountConfigMapper.xml @@ -0,0 +1,28 @@ + + + + + + + \ No newline at end of file