diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopUser.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopUser.java index 4324657b4..69fcbf931 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopUser.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopUser.java @@ -133,4 +133,6 @@ public class ShopUser implements Serializable { private Long memberLevelId; private Long experience; + private LocalDateTime startTime; + private LocalDateTime endTime; } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/market/dto/MemberConfigDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/market/dto/MemberConfigDTO.java index de1ddf61a..d2a9ceae5 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/market/dto/MemberConfigDTO.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/market/dto/MemberConfigDTO.java @@ -34,7 +34,7 @@ public class MemberConfigDTO { private Integer reward; @Valid private List couponList; - @NotBlank(message = "会员周期不为空") + @NotNull(message = "会员周期不为空") @Min(value = 1, message = "会员周期不能小于1") private Integer circleTime; @NotBlank(message = "会员周期单位不为空") diff --git a/cash-common/cash-common-service/src/main/java/com/czg/market/entity/MemberOrder.java b/cash-common/cash-common-service/src/main/java/com/czg/market/entity/MemberOrder.java index cbf56269b..c89d4ee2b 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/market/entity/MemberOrder.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/market/entity/MemberOrder.java @@ -71,6 +71,10 @@ public class MemberOrder implements Serializable { * 会员周期 */ private Integer circleTime; + /** + * 会员单位 + */ + private String circleUnit; /** * 优惠券信息 diff --git a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MemberOrderServiceImpl.java b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MemberOrderServiceImpl.java index 9fc70c0b6..f26b39b4b 100644 --- a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MemberOrderServiceImpl.java +++ b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MemberOrderServiceImpl.java @@ -1,7 +1,9 @@ package com.czg.service.market.service.impl; import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson2.JSONObject; +import com.czg.account.entity.ShopUser; import com.czg.market.dto.MemberConfigDTO; import com.czg.account.entity.ShopInfo; import com.czg.account.entity.UserInfo; @@ -12,9 +14,14 @@ import com.czg.account.service.UserInfoService; import com.czg.market.vo.MemberConfigVO; import com.czg.exception.CzgException; import com.czg.market.dto.MemberOrderDTO; +import com.czg.order.entity.OrderInfo; +import com.czg.order.entity.OrderPayment; +import com.czg.order.service.OrderInfoService; +import com.czg.order.service.OrderPaymentService; import com.czg.service.market.enums.OrderStatusEnums; import com.czg.service.market.mapper.MemberOrderMapper; import com.czg.utils.AssertUtil; +import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.spring.service.impl.ServiceImpl; import com.czg.market.entity.MemberOrder; import com.czg.market.service.MemberOrderService; @@ -22,6 +29,7 @@ import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboService; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.math.BigDecimal; /** @@ -40,6 +48,10 @@ public class MemberOrderServiceImpl extends ServiceImpl new CzgException("会员开通方案未配置,请联系店铺")); + boolean canOpen = false; + if ("CONDITION".equals(memberConfigVO.getOpenType())){ + for (MemberConfigDTO.condition item : memberConfigVO.getConditionList()) { + canOpen = switch (item.getCode()) { + case "BIND_PHONE" -> StrUtil.isNotBlank(shopUser.getPhone()); + case "ORDER" -> + orderInfoService.count(new QueryWrapper().eq(OrderInfo::getShopId, shopUser.getShopId()).eq(OrderInfo::getUserId, shopUser.getUserId()) + .notIn(OrderInfo::getStatus, OrderStatusEnums.UNPAID.getCode(), OrderStatusEnums.CANCELLED.getCode())) > Integer.parseInt(item.getValue()); + case "COST_AMOUNT" -> + orderInfoService.list(new QueryWrapper().eq(OrderInfo::getShopId, shopUser.getShopId()).eq(OrderInfo::getUserId, shopUser.getUserId()) + .notIn(OrderInfo::getStatus, OrderStatusEnums.UNPAID.getCode(), OrderStatusEnums.CANCELLED.getCode())) + .stream().map(OrderInfo::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add).compareTo(new BigDecimal(item.getValue())) > 0; + case "RECHARGE_AMOUNT" -> + orderPaymentService.list(new QueryWrapper().eq(OrderPayment::getShopId, shopUser.getShopId()) + .eq(OrderPayment::getSourceId, shopUser.getId()).isNotNull(OrderPayment::getTradeNumber)) + .stream().map(OrderPayment::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add).compareTo(new BigDecimal(item.getValue())) > 0; + default -> throw new CzgException("会员开通条件类型错误"); + }; + + } + } + + if (!canOpen) { + throw new CzgException("会员开通条件不满足"); + } //生成订单 MemberOrder orderInfo = new MemberOrder(); @@ -75,6 +116,7 @@ public class MemberOrderServiceImpl extends ServiceImpl