zoujiajian 1 год назад
Родитель
Сommit
7610d92138

+ 2 - 0
netflix-service/src/main/java/com/cyksj/service/order/VipOrderDonService.java

@@ -22,4 +22,6 @@ public interface VipOrderDonService extends IService<VipOrderDon> {
 	void aliPayNotify(Map<String, String> params) throws Exception;
 
 	void orderNotify(VipOrderDon orderDon);
+
+	VipOrderDon renew(VipOrderDonPayReq payRequest);
 }

+ 59 - 9
netflix-service/src/main/java/com/cyksj/service/order/impl/VipOrderDonServiceImpl.java

@@ -87,7 +87,7 @@ public class VipOrderDonServiceImpl extends ServiceImpl<VipOrderDonMapper, VipOr
 		orderDon.setOrderNo(donNo);
 		orderDon.setOpenId(user.getOpenId());
 		//获取会员价格
-		payRequest.setDonMoney(getVipMoney(user, payRequest.getIsDeduct()));
+		payRequest.setDonMoney(getVipMoneyIfDeduct(user, payRequest.getIsDeduct()));
 		orderDon.setMoney(payRequest.getDonMoney());
 		//渠道链接id
 		if (payRequest.getPopularizeId() != null) {
@@ -171,6 +171,51 @@ public class VipOrderDonServiceImpl extends ServiceImpl<VipOrderDonMapper, VipOr
 		unifiedHandlerOrderNotify(orderDon);
 	}
 
+	@Override
+	public VipOrderDon renew(VipOrderDonPayReq payRequest) {
+		Long userId = payRequest.getUserId();
+		User user = userMapper.selectById(userId);
+		List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, user);
+		Integer selectCount = vipUserMapper.selectCount(Wrappers.lambdaQuery(VipUser.class)
+				.in(VipUser::getUserId, userIdList)
+				.gt(VipUser::getExpiryTime, DateTime.now()));
+		if (selectCount == 0) {
+			throw BusinessRuntimeException.getInstance("您会员已过期,无法续费");
+		}
+		/* 生成订单 */
+		String donNo = SEQUENCE.nextId().toString();
+		VipOrderDon orderDon = new VipOrderDon();
+		orderDon.setOrderNo(donNo);
+		orderDon.setOpenId(user.getOpenId());
+		//获取续费会员价格
+		payRequest.setDonMoney(getVipMoney());
+		//续费订单
+		orderDon.setOrderType(2);
+		orderDon.setMoney(payRequest.getDonMoney());
+		//渠道链接id
+		if (payRequest.getPopularizeId() != null) {
+			orderDon.setPopularizeId(payRequest.getPopularizeId());
+		}
+		orderDon.setStatus(VipOrderDon.Status.noPayment);
+		orderDon.setUserId(user.getId());
+		orderDon.setType(VipOrderDon.Type.getType(payRequest.getType()));
+		orderDon.setIsWebPay(payRequest.getIsWebPay());
+		//扣除使用优惠券、余额的订单金额
+		deductOrderMoney(orderDon, user, payRequest);
+		//设置订单支付商品信息
+		orderDon.setPayTitle(Constant.VIP_TITLE);
+
+		this.saveOrUpdate(orderDon);
+
+		Long orderId = orderDon.getId();
+		//余额支付订单
+		if (orderDon.getMoney().compareTo(BigDecimal.ZERO) == 0) {
+			orderDon = getById(orderId);
+			unifiedHandlerOrderNotify(orderDon);
+		}
+		return orderDon;
+	}
+
 	private void unifiedHandlerOrderNotify(VipOrderDon orderDon) {
 		orderDon.setStatus(VipOrderDon.Status.complete);
 		this.updateById(orderDon);
@@ -218,16 +263,10 @@ public class VipOrderDonServiceImpl extends ServiceImpl<VipOrderDonMapper, VipOr
 		deductBalancePayOrderMoney(orderDon, balance, user);
 	}
 
-	private BigDecimal getVipMoney(User user, Boolean isDeduct) {
+	private BigDecimal getVipMoneyIfDeduct(User user, Boolean isDeduct) {
 		List<VipGoodsSku> skus = vipGoodsSkuMapper.selectList(null);
 		List<Long> userIdList = userBindRelationService.getRelationUserIdList(user.getId(), user);
-		SysConfig sysConfig = sysConfigMapper.selectOne(Wrappers.lambdaQuery(SysConfig.class)
-				.eq(SysConfig::getSysKey, Constant.VIP_FEE_KEY)
-				.last("limit 1"));
-		if (sysConfig == null || StrUtil.isEmpty(sysConfig.getSysValue())) {
-			throw BusinessRuntimeException.getInstance("系统异常");
-		}
-		BigDecimal vipFee = BigDecimal.valueOf(Long.valueOf(sysConfig.getSysValue()));
+		BigDecimal vipFee = getVipMoney();
 		//是否使用抵扣
 		if (isDeduct) {
 			for (VipGoodsSku vipGoodsSku : skus) {
@@ -269,4 +308,15 @@ public class VipOrderDonServiceImpl extends ServiceImpl<VipOrderDonMapper, VipOr
 				.eq(GroupsRelation::getStatus, GroupsRelation.Status.validity)
 				.eq(GroupsRelation::getIsVip, Boolean.TRUE));
 	}
+
+	private BigDecimal getVipMoney() {
+		SysConfig sysConfig = sysConfigMapper.selectOne(Wrappers.lambdaQuery(SysConfig.class)
+				.eq(SysConfig::getSysKey, Constant.VIP_FEE_KEY)
+				.last("limit 1"));
+		if (sysConfig == null || StrUtil.isEmpty(sysConfig.getSysValue())) {
+			throw BusinessRuntimeException.getInstance("系统异常");
+		}
+		BigDecimal vipFee = BigDecimal.valueOf(Long.valueOf(sysConfig.getSysValue()));
+		return vipFee;
+	}
 }

+ 13 - 0
netflix-web/src/main/java/com/cyksj/web/controller/vip/VipUserOrderController.java

@@ -73,6 +73,19 @@ public class VipUserOrderController {
 		return GatewayResponse.SUCCESS.newBuilder().toResult(orderDon);
 	}
 
+	/**
+	 * 续费会员预下单
+	 */
+	@PostMapping("/post/renew")
+	public Result<VipOrderDon> renew(@Validated @RequestBody VipOrderDonPayReq payRequest) throws Exception {
+		final String methodName = "吊起会员续费预支付";
+		Long userId = StpUserUtil.getUserIdAfterLogin();
+		log.info("{}[start] params:{}", methodName, payRequest);
+		payRequest.setUserId(userId);
+		VipOrderDon orderDon = vipOrderDonService.renew(payRequest);
+		return GatewayResponse.SUCCESS.newBuilder().toResult(orderDon);
+	}
+
 
 	/**
 	 * 支付宝支付