会员支付修改
This commit is contained in:
parent
080554f620
commit
11916b677c
|
|
@ -38,6 +38,7 @@ public interface TbMemberConfigService extends IService<TbMemberConfig> {
|
||||||
* @return 是否加入成功
|
* @return 是否加入成功
|
||||||
*/
|
*/
|
||||||
boolean joinMember(Long shopId, Long userId, Long memberOrderId);
|
boolean joinMember(Long shopId, Long userId, Long memberOrderId);
|
||||||
|
boolean joinMemberByCOndition(Long shopId, Long userId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发放会员奖励
|
* 发放会员奖励
|
||||||
|
|
|
||||||
|
|
@ -137,7 +137,7 @@ public class TbMemberConfigServiceImpl extends ServiceImpl<TbMemberConfigMapper,
|
||||||
.limit(1));
|
.limit(1));
|
||||||
|
|
||||||
configVO.setMemberLevel(configServiceOne == null ? null : levelConfigService.detail(configServiceOne.getId()));
|
configVO.setMemberLevel(configServiceOne == null ? null : levelConfigService.detail(configServiceOne.getId()));
|
||||||
}else {
|
} else {
|
||||||
configVO.setMemberLevel(levelConfigService.detail(shopUserInfo.getMemberLevelId()));
|
configVO.setMemberLevel(levelConfigService.detail(shopUserInfo.getMemberLevelId()));
|
||||||
}
|
}
|
||||||
return configVO;
|
return configVO;
|
||||||
|
|
@ -351,6 +351,52 @@ public class TbMemberConfigServiceImpl extends ServiceImpl<TbMemberConfigMapper,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public boolean joinMemberByCOndition(Long shopId, Long userId) {
|
||||||
|
MemberConfigVO memberConfigVO = detail(shopId);
|
||||||
|
ShopUser shopUser = shopUserService.getOne(new QueryWrapper().eq(ShopUser::getSourceShopId, shopId).eq(ShopUser::getUserId, userId));
|
||||||
|
if (shopUser == null) {
|
||||||
|
log.warn("用户不存在, 店铺id: {}, 用户id: {}", shopId, userId);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
MemberLevelConfig levelConfig = levelConfigService.getOne(new QueryWrapper().eq(MemberLevelConfig::getShopId, shopId).orderBy(MemberLevelConfig::getExperienceValue, true).limit(1));
|
||||||
|
AssertUtil.isTrue(!"CONDITION".equals(memberConfigVO.getOpenType()), "开通方式未开启");
|
||||||
|
|
||||||
|
for (MemberConfigDTO.condition item : memberConfigVO.getConditionList()) {
|
||||||
|
boolean canOpen = switch (item.getCode()) {
|
||||||
|
case "BIND_PHONE" -> StrUtil.isNotBlank(shopUser.getPhone());
|
||||||
|
case "ORDER" ->
|
||||||
|
orderInfoService.count(new QueryWrapper().eq(OrderInfo::getShopId, shopUser.getSourceShopId()).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.getSourceShopId()).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" ->
|
||||||
|
paymentService.list(new QueryWrapper().eq(OrderPayment::getShopId, shopUser.getSourceShopId())
|
||||||
|
.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) {
|
||||||
|
log.info("用户id: {}, 会员开通条件不满足", userId);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (shopUser.getStartTime() != null && shopUser.getEndTime() != null && DateUtil.isIn(DateUtil.date(), DateUtil.date(shopUser.getStartTime()), DateUtil.date(shopUser.getEndTime()))) {
|
||||||
|
log.info("用户id: {}, 您已经是会员", userId);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
shopUser.setMemberLevelId(levelConfig.getId());
|
||||||
|
shopUser.setStartTime(DateUtil.date().toLocalDateTime());
|
||||||
|
|
||||||
|
shopUser.setEndTime(shopUser.getStartTime().plusDays(20000));
|
||||||
|
shopUser.setIsVip(1);
|
||||||
|
return shopUserService.updateById(shopUser);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public boolean joinMember(Long shopId, Long userId, Long memberOrderId) {
|
public boolean joinMember(Long shopId, Long userId, Long memberOrderId) {
|
||||||
|
|
@ -363,100 +409,66 @@ public class TbMemberConfigServiceImpl extends ServiceImpl<TbMemberConfigMapper,
|
||||||
MemberLevelConfig levelConfig = levelConfigService.getOne(new QueryWrapper().eq(MemberLevelConfig::getShopId, shopId).orderBy(MemberLevelConfig::getExperienceValue, true).limit(1));
|
MemberLevelConfig levelConfig = levelConfigService.getOne(new QueryWrapper().eq(MemberLevelConfig::getShopId, shopId).orderBy(MemberLevelConfig::getExperienceValue, true).limit(1));
|
||||||
|
|
||||||
// 条件开通
|
// 条件开通
|
||||||
if (memberOrderId == null) {
|
if (memberConfigVO.getConfigList() == null || memberConfigVO.getConfigList().isEmpty()) {
|
||||||
AssertUtil.isTrue(!"CONDITION".equals(memberConfigVO.getOpenType()), "开通方式未开启");
|
throw new CzgException("会员开通方案未配置,请联系店铺");
|
||||||
|
}
|
||||||
|
|
||||||
for (MemberConfigDTO.condition item : memberConfigVO.getConditionList()) {
|
if (shopUser.getStartTime() == null || shopUser.getEndTime().isBefore(DateUtil.date().toLocalDateTime())) {
|
||||||
boolean canOpen = switch (item.getCode()) {
|
|
||||||
case "BIND_PHONE" -> StrUtil.isNotBlank(shopUser.getPhone());
|
|
||||||
case "ORDER" ->
|
|
||||||
orderInfoService.count(new QueryWrapper().eq(OrderInfo::getShopId, shopUser.getSourceShopId()).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.getSourceShopId()).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" ->
|
|
||||||
paymentService.list(new QueryWrapper().eq(OrderPayment::getShopId, shopUser.getSourceShopId())
|
|
||||||
.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("会员开通条件不满足");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (shopUser.getStartTime() != null && shopUser.getEndTime() != null && DateUtil.isIn(DateUtil.date(), DateUtil.date(shopUser.getStartTime()), DateUtil.date(shopUser.getEndTime()))) {
|
|
||||||
throw new ApiNotPrintException("您已经是会员");
|
|
||||||
}
|
|
||||||
shopUser.setMemberLevelId(levelConfig.getId());
|
|
||||||
shopUser.setStartTime(DateUtil.date().toLocalDateTime());
|
shopUser.setStartTime(DateUtil.date().toLocalDateTime());
|
||||||
|
}
|
||||||
|
if (shopUser.getEndTime() == null || shopUser.getEndTime().isBefore(DateUtil.date().toLocalDateTime())) {
|
||||||
|
shopUser.setEndTime(DateUtil.date().toLocalDateTime());
|
||||||
|
}
|
||||||
|
|
||||||
shopUser.setEndTime(shopUser.getStartTime().plusDays(20000));
|
MemberOrder memberOrder = memberOrderService.getOne(new QueryWrapper().eq(MemberOrder::getId, memberOrderId).eq(MemberOrder::getShopId, shopId));
|
||||||
// 购买开通
|
if (memberOrder == null) {
|
||||||
} else {
|
log.warn("会员购买支付失败,会员订单不存在,会员订单id:{}", memberOrderId);
|
||||||
if (memberConfigVO.getConfigList() == null || memberConfigVO.getConfigList().isEmpty()) {
|
return false;
|
||||||
throw new CzgException("会员开通方案未配置,请联系店铺");
|
}
|
||||||
}
|
if (!OrderStatusEnums.UNPAID.getCode().equals(memberOrder.getStatus())) {
|
||||||
|
log.warn("会员购买支付失败,会员订单状态不为待支付,会员订单id:{}", memberOrderId);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (shopUser.getStartTime() == null || shopUser.getEndTime().isBefore(DateUtil.date().toLocalDateTime())) {
|
switch (memberOrder.getCircleUnit()) {
|
||||||
shopUser.setStartTime(DateUtil.date().toLocalDateTime());
|
case "天":
|
||||||
}
|
shopUser.setEndTime(shopUser.getEndTime().plusDays(memberOrder.getCircleTime()));
|
||||||
if (shopUser.getEndTime() == null || shopUser.getEndTime().isBefore(DateUtil.date().toLocalDateTime())) {
|
break;
|
||||||
shopUser.setEndTime(DateUtil.date().toLocalDateTime());
|
case "周":
|
||||||
}
|
shopUser.setEndTime(shopUser.getEndTime().plusWeeks(memberOrder.getCircleTime()));
|
||||||
|
break;
|
||||||
|
case "月":
|
||||||
|
shopUser.setEndTime(shopUser.getEndTime().plusMonths(memberOrder.getCircleTime()));
|
||||||
|
break;
|
||||||
|
case "季":
|
||||||
|
shopUser.setEndTime(shopUser.getEndTime().plusMonths(memberOrder.getCircleTime() * 3L));
|
||||||
|
break;
|
||||||
|
case "年":
|
||||||
|
shopUser.setEndTime(shopUser.getEndTime().plusYears(memberOrder.getCircleTime()));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new ApiNotPrintException("周期单位错误");
|
||||||
|
}
|
||||||
|
|
||||||
MemberOrder memberOrder = memberOrderService.getOne(new QueryWrapper().eq(MemberOrder::getId, memberOrderId).eq(MemberOrder::getShopId, shopId));
|
if (memberOrder.getReward() != null) {
|
||||||
if (memberOrder == null) {
|
deliver(shopId, userId, TableValueConstant.MemberExpFlow.Type.PAY, memberOrder.getPayAmount(), memberOrder.getReward(), memberOrderId);
|
||||||
log.warn("会员购买支付失败,会员订单不存在,会员订单id:{}", memberOrderId);
|
}
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (!OrderStatusEnums.UNPAID.getCode().equals(memberOrder.getStatus())) {
|
|
||||||
log.warn("会员购买支付失败,会员订单状态不为待支付,会员订单id:{}", memberOrderId);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (memberOrder.getCircleUnit()) {
|
// 发券流程
|
||||||
case "天":
|
if (StrUtil.isNotBlank(memberOrder.getCouponList())) {
|
||||||
shopUser.setEndTime(shopUser.getEndTime().plusDays(memberOrder.getCircleTime()));
|
JSONArray.parseArray(memberOrder.getCouponList()).toJavaList(MemberConfigDTO.ConfigCoupon.class).forEach(item -> {
|
||||||
break;
|
shopCouponRecordService.grant(shopId, new MkRewardCouponDTO().setCouponId(item.getCoupon().getId())
|
||||||
case "周":
|
.setNum(item.getNum())
|
||||||
shopUser.setEndTime(shopUser.getEndTime().plusWeeks(memberOrder.getCircleTime()));
|
.setUserId(shopUser.getUserId())
|
||||||
break;
|
.setShopId(shopId));
|
||||||
case "月":
|
|
||||||
shopUser.setEndTime(shopUser.getEndTime().plusMonths(memberOrder.getCircleTime()));
|
|
||||||
break;
|
|
||||||
case "季":
|
|
||||||
shopUser.setEndTime(shopUser.getEndTime().plusMonths(memberOrder.getCircleTime() * 3L));
|
|
||||||
break;
|
|
||||||
case "年":
|
|
||||||
shopUser.setEndTime(shopUser.getEndTime().plusYears(memberOrder.getCircleTime()));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new ApiNotPrintException("周期单位错误");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (memberOrder.getReward() != null) {
|
});
|
||||||
deliver(shopId, userId, TableValueConstant.MemberExpFlow.Type.PAY, memberOrder.getPayAmount(), memberOrder.getReward(), memberOrderId);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// 发券流程
|
memberOrder.setStatus(OrderStatusEnums.DONE.getCode());
|
||||||
if (StrUtil.isNotBlank(memberOrder.getCouponList())) {
|
memberOrderService.updateById(memberOrder);
|
||||||
JSONArray.parseArray(memberOrder.getCouponList()).toJavaList(MemberConfigDTO.ConfigCoupon.class).forEach(item -> {
|
if (shopUser.getMemberLevelId() == null) {
|
||||||
shopCouponRecordService.grant(shopId, new MkRewardCouponDTO().setCouponId(item.getCoupon().getId())
|
shopUser.setMemberLevelId(levelConfig.getId());
|
||||||
.setNum(item.getNum())
|
|
||||||
.setUserId(shopUser.getUserId())
|
|
||||||
.setShopId(shopId));
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
memberOrder.setStatus(OrderStatusEnums.DONE.getCode());
|
|
||||||
memberOrderService.updateById(memberOrder);
|
|
||||||
if (shopUser.getMemberLevelId() == null) {
|
|
||||||
shopUser.setMemberLevelId(levelConfig.getId());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
shopUser.setIsVip(1);
|
shopUser.setIsVip(1);
|
||||||
return shopUserService.updateById(shopUser);
|
return shopUserService.updateById(shopUser);
|
||||||
|
|
@ -474,7 +486,7 @@ public class TbMemberConfigServiceImpl extends ServiceImpl<TbMemberConfigMapper,
|
||||||
memberListVOS.add(new MemberListVO().setShopName(shopInfo.getShopName())
|
memberListVOS.add(new MemberListVO().setShopName(shopInfo.getShopName())
|
||||||
.setShopId(shopInfo.getId())
|
.setShopId(shopInfo.getId())
|
||||||
.setLogo(shopInfo.getLogo()));
|
.setLogo(shopInfo.getLogo()));
|
||||||
}else {
|
} else {
|
||||||
shopUser.setIsVip(0);
|
shopUser.setIsVip(0);
|
||||||
shopUserService.updateById(shopUser);
|
shopUserService.updateById(shopUser);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -399,11 +399,13 @@ public class PayServiceImpl implements PayService {
|
||||||
public CzgResult<Map<String, Object>> ltPayMember(String clientIP, VipMemberPayParamDTO payParam) {
|
public CzgResult<Map<String, Object>> ltPayMember(String clientIP, VipMemberPayParamDTO payParam) {
|
||||||
ShopUser shopUser = shopUserService.getOne(new QueryWrapper().eq(ShopUser::getSourceShopId, payParam.getShopId()).eq(ShopUser::getId, payParam.getShopUserId()));
|
ShopUser shopUser = shopUserService.getOne(new QueryWrapper().eq(ShopUser::getSourceShopId, payParam.getShopId()).eq(ShopUser::getId, payParam.getShopUserId()));
|
||||||
AssertUtil.isNull(shopUser, "充值失败 该店铺用户不存在");
|
AssertUtil.isNull(shopUser, "充值失败 该店铺用户不存在");
|
||||||
|
UserInfo userInfo = userInfoService.getById(shopUser.getUserId());
|
||||||
MemberOrder memberOrder = memberOrderService.createMemberOrder(new MemberOrderDTO().setName(payParam.getName())
|
MemberOrder memberOrder = memberOrderService.createMemberOrder(new MemberOrderDTO().setName(payParam.getName())
|
||||||
.setNum(1).setNickName(payParam.getNickName())
|
.setNum(1).setNickName(payParam.getNickName())
|
||||||
.setOrderType(payParam.getOrderType())
|
.setOrderType(payParam.getOrderType())
|
||||||
.setPlatformType(payParam.getPlatformType()).setSex(payParam.getSex()).setUserId(shopUser.getUserId()).setShopId(payParam.getShopId()).setBirthDay(payParam.getBirthDay()));
|
.setPlatformType(payParam.getPlatformType()).setSex(payParam.getSex()).setUserId(shopUser.getUserId()).setShopId(payParam.getShopId()).setBirthDay(payParam.getBirthDay()));
|
||||||
|
|
||||||
|
payParam.setOpenId("WX".equals(payParam.getPlatformType()) ? userInfo.getWechatOpenId() : userInfo.getAlipayOpenId());
|
||||||
AssertUtil.isBlank(payParam.getOpenId(), "用户小程序ID不能为空");
|
AssertUtil.isBlank(payParam.getOpenId(), "用户小程序ID不能为空");
|
||||||
AssertUtil.isBlank(payParam.getPayType(), "支付方式不能为空");
|
AssertUtil.isBlank(payParam.getPayType(), "支付方式不能为空");
|
||||||
String payOrderNo = payParam.getPlatformType() + IdUtil.getSnowflakeNextId();
|
String payOrderNo = payParam.getPlatformType() + IdUtil.getSnowflakeNextId();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue