超级会员购买相关
This commit is contained in:
@@ -133,4 +133,6 @@ public class ShopUser implements Serializable {
|
|||||||
private Long memberLevelId;
|
private Long memberLevelId;
|
||||||
|
|
||||||
private Long experience;
|
private Long experience;
|
||||||
|
private LocalDateTime startTime;
|
||||||
|
private LocalDateTime endTime;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ public class MemberConfigDTO {
|
|||||||
private Integer reward;
|
private Integer reward;
|
||||||
@Valid
|
@Valid
|
||||||
private List<ConfigCoupon> couponList;
|
private List<ConfigCoupon> couponList;
|
||||||
@NotBlank(message = "会员周期不为空")
|
@NotNull(message = "会员周期不为空")
|
||||||
@Min(value = 1, message = "会员周期不能小于1")
|
@Min(value = 1, message = "会员周期不能小于1")
|
||||||
private Integer circleTime;
|
private Integer circleTime;
|
||||||
@NotBlank(message = "会员周期单位不为空")
|
@NotBlank(message = "会员周期单位不为空")
|
||||||
|
|||||||
@@ -71,6 +71,10 @@ public class MemberOrder implements Serializable {
|
|||||||
* 会员周期
|
* 会员周期
|
||||||
*/
|
*/
|
||||||
private Integer circleTime;
|
private Integer circleTime;
|
||||||
|
/**
|
||||||
|
* 会员单位
|
||||||
|
*/
|
||||||
|
private String circleUnit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 优惠券信息
|
* 优惠券信息
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
package com.czg.service.market.service.impl;
|
package com.czg.service.market.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.alibaba.fastjson2.JSONObject;
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
|
import com.czg.account.entity.ShopUser;
|
||||||
import com.czg.market.dto.MemberConfigDTO;
|
import com.czg.market.dto.MemberConfigDTO;
|
||||||
import com.czg.account.entity.ShopInfo;
|
import com.czg.account.entity.ShopInfo;
|
||||||
import com.czg.account.entity.UserInfo;
|
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.market.vo.MemberConfigVO;
|
||||||
import com.czg.exception.CzgException;
|
import com.czg.exception.CzgException;
|
||||||
import com.czg.market.dto.MemberOrderDTO;
|
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.enums.OrderStatusEnums;
|
||||||
import com.czg.service.market.mapper.MemberOrderMapper;
|
import com.czg.service.market.mapper.MemberOrderMapper;
|
||||||
import com.czg.utils.AssertUtil;
|
import com.czg.utils.AssertUtil;
|
||||||
|
import com.mybatisflex.core.query.QueryWrapper;
|
||||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||||
import com.czg.market.entity.MemberOrder;
|
import com.czg.market.entity.MemberOrder;
|
||||||
import com.czg.market.service.MemberOrderService;
|
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.apache.dubbo.config.annotation.DubboService;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -40,6 +48,10 @@ public class MemberOrderServiceImpl extends ServiceImpl<MemberOrderMapper, Membe
|
|||||||
private ShopUserService shopUserService;
|
private ShopUserService shopUserService;
|
||||||
@DubboReference
|
@DubboReference
|
||||||
private TbMemberConfigService memberConfigService;
|
private TbMemberConfigService memberConfigService;
|
||||||
|
@DubboReference
|
||||||
|
private OrderInfoService orderInfoService;
|
||||||
|
@DubboReference
|
||||||
|
private OrderPaymentService orderPaymentService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MemberOrder createMemberOrder(MemberOrderDTO orderDTO) {
|
public MemberOrder createMemberOrder(MemberOrderDTO orderDTO) {
|
||||||
@@ -51,6 +63,10 @@ public class MemberOrderServiceImpl extends ServiceImpl<MemberOrderMapper, Membe
|
|||||||
AssertUtil.isNull(userInfo, "生成订单失败,用户信息不存在");
|
AssertUtil.isNull(userInfo, "生成订单失败,用户信息不存在");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ShopUser shopUser = shopUserService.getOne(new QueryWrapper().eq(ShopUser::getShopId, orderDTO.getShopId()).eq(ShopUser::getUserId, orderDTO.getUserId()));
|
||||||
|
AssertUtil.isNull(shopUser, "生成订单失败,用户信息不存在");
|
||||||
|
|
||||||
|
|
||||||
MemberConfigVO memberConfigVO = memberConfigService.detail(shopInfo.getId());
|
MemberConfigVO memberConfigVO = memberConfigService.detail(shopInfo.getId());
|
||||||
if(memberConfigVO.getConfigList() == null || memberConfigVO.getConfigList().isEmpty()) {
|
if(memberConfigVO.getConfigList() == null || memberConfigVO.getConfigList().isEmpty()) {
|
||||||
throw new CzgException("会员开通方案未配置,请联系店铺");
|
throw new CzgException("会员开通方案未配置,请联系店铺");
|
||||||
@@ -61,6 +77,31 @@ public class MemberOrderServiceImpl extends ServiceImpl<MemberOrderMapper, Membe
|
|||||||
.findFirst()
|
.findFirst()
|
||||||
.orElseThrow(() -> new CzgException("会员开通方案未配置,请联系店铺"));
|
.orElseThrow(() -> 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();
|
MemberOrder orderInfo = new MemberOrder();
|
||||||
@@ -75,6 +116,7 @@ public class MemberOrderServiceImpl extends ServiceImpl<MemberOrderMapper, Membe
|
|||||||
orderInfo.setUserId(orderDTO.getUserId());
|
orderInfo.setUserId(orderDTO.getUserId());
|
||||||
orderInfo.setReward(configItem.getReward());
|
orderInfo.setReward(configItem.getReward());
|
||||||
orderInfo.setCircleTime(configItem.getCircleTime());
|
orderInfo.setCircleTime(configItem.getCircleTime());
|
||||||
|
orderInfo.setCircleUnit(configItem.getCircleUnit());
|
||||||
if (configItem.getCouponList() != null && !configItem.getCouponList().isEmpty()) {
|
if (configItem.getCouponList() != null && !configItem.getCouponList().isEmpty()) {
|
||||||
orderInfo.setCouponList(JSONObject.toJSONString(configItem.getCouponList()));
|
orderInfo.setCouponList(JSONObject.toJSONString(configItem.getCouponList()));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.czg.service.market.service.impl;
|
|||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.alibaba.fastjson2.JSONArray;
|
import com.alibaba.fastjson2.JSONArray;
|
||||||
import com.alibaba.fastjson2.JSONObject;
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
@@ -250,14 +251,28 @@ public class TbMemberConfigServiceImpl extends ServiceImpl<TbMemberConfigMapper,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
boolean canOpen = false;
|
boolean canOpen = false;
|
||||||
|
|
||||||
|
if (shopUser.getStartTime() == null || shopUser.getEndTime().isBefore(DateUtil.date().toLocalDateTime())) {
|
||||||
|
|
||||||
|
}
|
||||||
|
// shopUser.
|
||||||
// 购买开通
|
// 购买开通
|
||||||
if (memberOrderId != null) {
|
if (memberOrderId != null) {
|
||||||
MemberOrder memberOrder = memberOrderService.getOne(new QueryWrapper().eq(MemberOrder::getId, memberOrderId).eq(MemberOrder::getShopId, shopId));
|
MemberOrder memberOrder = memberOrderService.getOne(new QueryWrapper().eq(MemberOrder::getId, memberOrderId).eq(MemberOrder::getShopId, shopId));
|
||||||
// MemberOrder memberOrder = memberOrderService.getOne(new QueryWrapper().eq(MemberOrder::getId, payment.getRelatedId()));
|
if (memberOrder == null) {
|
||||||
// if (memberOrder == null) {
|
log.warn("会员购买支付失败,会员订单不存在,会员订单id:{}", memberOrderId);
|
||||||
// log.warn("会员购买支付失败,会员订单不存在,会员订单id:{}", payment.getRelatedId());
|
return false;
|
||||||
// return;
|
}
|
||||||
// }
|
if (!OrderStatusEnums.UNPAID.getCode().equals(memberOrder.getStatus())) {
|
||||||
|
log.warn("会员购买支付失败,会员订单状态不为待支付,会员订单id:{}", memberOrderId);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (memberOrder.getCircleUnit()) {
|
||||||
|
case "天":
|
||||||
|
// shopUser.s
|
||||||
|
}
|
||||||
|
canOpen = true;
|
||||||
// 条件开通
|
// 条件开通
|
||||||
} else if ("CONDITION".equals(memberConfigVO.getOpenType())){
|
} else if ("CONDITION".equals(memberConfigVO.getOpenType())){
|
||||||
for (MemberConfigDTO.condition item : memberConfigVO.getConditionList()) {
|
for (MemberConfigDTO.condition item : memberConfigVO.getConditionList()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user