Parcourir la source

超出会员抵扣金额 延长会员时长

zoujiajian il y a 1 an
Parent
commit
5b42237a0e

+ 10 - 0
netflix-dao/src/main/java/com/cyksj/model/dto/VipDeductDto.java

@@ -26,6 +26,16 @@ public class VipDeductDto {
 	 */
 	private BigDecimal deductMoney;
 
+	/**
+	 * 实际可抵扣金额
+	 */
+	private BigDecimal actuallyDeDuctMoney;
+
+	/**
+	 * 超过抵扣金额可换延长会员多少天
+	 */
+	private Integer extendDays;
+
 	/**
 	 * 抵扣车票
 	 */

+ 15 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/VipOrderDon.java

@@ -58,6 +58,21 @@ public class VipOrderDon extends BaseEntity{
 	/** 金额 */
 	private BigDecimal money;
 
+	/**
+	 * 抵扣金额
+	 */
+	private BigDecimal deductMoney;
+
+	/**
+	 * 实际可抵扣金额(超过)
+	 */
+	private BigDecimal actuallyDedcutMoney;
+
+	/**
+	 * 超出抵扣会员可延长多少天
+	 */
+	private Integer extendDays;
+
 	/**
 	 * 海外支付金额
 	 */

+ 8 - 0
netflix-service/src/main/java/com/cyksj/service/order/impl/VipOrderDonServiceImpl.java

@@ -167,6 +167,10 @@ public class VipOrderDonServiceImpl extends ServiceImpl<VipOrderDonMapper, VipOr
 		orderDon.setGoodsId(Constant.VIP_RELATE_GOODS_ID);
 		//购买月数
 		orderDon.setNum(payRequest.getNum());
+		orderDon.setDeductMoney(vipMoneyIfDeduct.getDeductMoney());
+		orderDon.setActuallyDedcutMoney(vipMoneyIfDeduct.getActuallyDeDuctMoney());
+		orderDon.setExtendDays(vipMoneyIfDeduct.getExtendDays());
+
 		this.saveOrUpdate(orderDon);
 
 		Long orderId = orderDon.getId();
@@ -372,6 +376,10 @@ public class VipOrderDonServiceImpl extends ServiceImpl<VipOrderDonMapper, VipOr
 		if (orderDon.getOrderType() == 1) {
 			vipUser.setStartTime(DateTime.now());
 			vipUser.setExpiryTime(DateUtil.offsetMonth(vipUser.getStartTime(), offsetMonths));
+			//延长用户会员时长
+			if (orderDon.getExtendDays() > 0) {
+				vipUser.setExpiryTime(DateUtil.offsetDay(vipUser.getExpiryTime(), orderDon.getExtendDays()));
+			}
 			if (vipUser.getId() == null) {
 				try {
 					vipUserMapper.insert(vipUser);

+ 13 - 5
netflix-service/src/main/java/com/cyksj/service/vip/impl/VipFrontServiceImpl.java

@@ -178,13 +178,21 @@ public class VipFrontServiceImpl implements VipFrontService {
 			deductRelationIds.add(relationId);
 			//可抵扣车票
 			deductRelations.add(relation);
-			//超出可抵扣的金额 直接返回
-			if (deductMoney.compareTo(vipMoney) >= 0) {
-				deductMoney = vipMoney;
-				break;
-			}
 		}
+		//实际可抵扣金额
+		vipDeductDto.setActuallyDeDuctMoney(deductMoney);
 		vipDeductDto.setDeductMoney(deductMoney);
+		//超出可抵扣的金额 直接返回
+		if (deductMoney.compareTo(vipMoney) >= 0) {
+			BigDecimal overMoney = deductMoney.subtract(vipMoney);
+			//超过抵扣金额可换延长会员多少天
+			//每天单价
+			BigDecimal daySingle = vipMoney.divide(BigDecimal.valueOf(30), 0, RoundingMode.DOWN);
+			//超出部分可换取多少天 低于每天单价为0天
+			BigDecimal extendDays = overMoney.divide(daySingle, 0, RoundingMode.UP);
+			vipDeductDto.setExtendDays(extendDays.intValue());
+			vipDeductDto.setDeductMoney(vipMoney);
+		}
 		vipDeductDto.setDeductRelationIds(deductRelationIds);
 		vipDeductDto.setRelationUserViews(deductRelations);
 		return vipDeductDto;