zoujiajian 2 лет назад
Родитель
Сommit
8f86c38999

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/OrderDonUpgradeRenewRecordMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.OrderDonUpgradeRenewRecord;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: OrderDonUpgradeRenewRecordMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/8/29 15:53
+ */
+public interface OrderDonUpgradeRenewRecordMapper extends BaseMapper<OrderDonUpgradeRenewRecord> {
+}

+ 23 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/OrderDonUpgradeRenewRecord.java

@@ -0,0 +1,23 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: OrderDonUpgradeRenewRecord
+ * 创建者: JavaZou
+ * 创建时间:2024/8/29 15:48
+ * 套餐升级 续费套餐升级规格
+ */
+@Getter
+@Setter
+public class OrderDonUpgradeRenewRecord extends BaseEntity{
+	private Long orderId;
+
+	private Long oriSkuId;
+
+	private Long userId;
+
+	private Long packageId;
+}

+ 3 - 0
netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonSkuRenewView.java

@@ -34,6 +34,9 @@ public class GoodsDonSkuRenewView {
 	@DbField("g.title")
 	private String title;
 
+	@DbField("sku.months")
+	private Integer months;
+
 	/**
 	 * gpt 镜像限制次数
 	 */

+ 45 - 0
netflix-service/src/main/java/com/cyksj/service/mange/impl/CmsOrderDonServiceImpl.java

@@ -199,6 +199,8 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
 
     private final OrderDonRenewRecordMapper orderDonRenewRecordMapper;
 
+    private final OrderDonUpgradeRenewRecordMapper orderDonUpgradeRenewRecordMapper;
+
     private final LumaUserMapper lumaUserMapper;
 
     private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
@@ -1110,6 +1112,10 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
             //是否是分销订单
             //处理下级渠道分销提成
             handleSubRewards(orderDon);
+            //退款续费 镜像订单
+            if (orderDon.getGoodsId() == 18 && orderDon.getOrderType() == 2 && sku.getIsMirror()) {
+                handleGptMirrorRenewOrderRefund(orderDon, sku);
+            }
         });
     }
 
@@ -1405,4 +1411,43 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
         }
     }
 
+    /**
+     * 镜像续费订单退款 清除user额外功能时间
+     */
+    private void handleGptMirrorRenewOrderRefund(OrderDon orderDon, GoodsDonSku sku) {
+        Long id = orderDon.getId();
+        OrderDonRenewRecord orderDonRenewRecord = orderDonRenewRecordMapper.selectOne(Wrappers.lambdaQuery(OrderDonRenewRecord.class)
+                .eq(OrderDonRenewRecord::getOrderId, id)
+                .last("limit 1"));
+        OrderDonUpgradeRenewRecord orderDonUpgradeRenewRecord = null;
+        if (orderDonRenewRecord == null) {
+            orderDonUpgradeRenewRecord = orderDonUpgradeRenewRecordMapper.selectOne(Wrappers.lambdaQuery(OrderDonUpgradeRenewRecord.class)
+                    .eq(OrderDonUpgradeRenewRecord::getOrderId, id)
+                    .last("limit 1"));
+        }
+        if (orderDonRenewRecord == null && orderDonUpgradeRenewRecord == null) {
+            return;
+        }
+        ChatgptUser chatgptUser = chatgptUserMapper.selectOne(Wrappers.lambdaQuery(ChatgptUser.class)
+                .eq(ChatgptUser::getRelationId, orderDon.getRelationId())
+                .last("limit 1"));
+        if (chatgptUser == null) {
+            return;
+        }
+        if (orderDonRenewRecord != null) {
+            Date renewExpiryTime = chatgptUser.getRenewExpiryTime();
+            renewExpiryTime = DateUtil.offsetMonth(renewExpiryTime, -sku.getMonths());
+            log.info("GPT镜像续费订单退款,user清除续费升级过期时间:{} ---> {}", chatgptUser.getRenewExpiryTime(), renewExpiryTime);
+            chatgptUser.setRenewExpiryTime(renewExpiryTime);
+        }
+
+        if (orderDonUpgradeRenewRecord != null) {
+            Date clearPackageTime = chatgptUser.getClearPackageTime();
+            clearPackageTime = DateUtil.offsetMonth(clearPackageTime, -sku.getMonths());
+            log.info("GPT镜像续费订单退款,user清除套餐升级过期时间:{} ---> {}", chatgptUser.getClearPackageTime(), clearPackageTime);
+            chatgptUser.setClearPackageTime(clearPackageTime);
+        }
+        chatgptUserMapper.updateById(chatgptUser);
+    }
+
 }

+ 71 - 2
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -323,6 +323,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	private final OrderDonPosterRelateMapper orderDonPosterRelateMapper;
 
+	private final OrderDonUpgradeRenewRecordMapper orderDonUpgradeRenewRecordMapper;
+
 	private final List<String> noChekGoodsTemp = List.of("Apple One", "Youtube", "Spotify");
 
 	@Transactional(rollbackFor = Throwable.class)
@@ -1076,14 +1078,26 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		//记录订单ip关联
 		recordOrderDonLocationRelate(orderDon.getId(), payRequest.getIp());
 		//GPT续费升级 目前升级套餐续费
-		if (payRequest.getPackageId() != null && payRequest.getPackageId() != 0 && orderDon.getGoodsId() == 18) {
+		if (payRequest.getPackageId() != null && payRequest.getPackageId() != 0 && orderDon.getGoodsId() == 18 && sku.getIsMirror()) {
 			//记录续费升级订单 目前升级规格续费
 			RenewUpgradePackage renewUpgradePackage = renewUpgradePackageMapper.selectById(payRequest.getPackageId());
-			if (renewUpgradePackage != null) {
+			//是续费升级的规格
+			if (renewUpgradePackage != null && renewUpgradePackage.getSkuId().intValue() == orderDon.getSkuId().intValue()) {
 				//无优惠折扣 但订单可使用优惠码
 				renewUpgradePackage.setDiscount(BigDecimal.ONE);
 				recordRenewOrderDon(orderDon, renewUpgradePackage, groupsTrips);
 			}
+			if (renewUpgradePackage == null) {
+				UpgradeOrderDon upgradeOrderDon = upgradeOrderDonMapper.selectOne(Wrappers.lambdaQuery(UpgradeOrderDon.class)
+						.eq(UpgradeOrderDon::getRelationId, orderDon.getRelationId())
+						.eq(UpgradeOrderDon::getPackageId, payRequest.getPackageId())
+						.in(UpgradeOrderDon::getUserId, userIdList)
+						.orderByDesc(UpgradeOrderDon::getId)
+						.last("limit 1"));
+				if (upgradeOrderDon != null) {
+					recordUpgradeRenewOrderDon(orderDon, upgradeOrderDon.getPackageId(), groupsTrips);
+				}
+			}
 		}
 		return orderDon;
 	}
@@ -1543,6 +1557,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 					} catch (Exception e) {
 					}
 				}
+				//gpt镜像续费订单
+				handleGptMirrorRenewOrder(order, sku);
 			}
 		}
 	}
@@ -3845,6 +3861,18 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		orderDonRenewRecordMapper.insert(orderDonRenewRecord);
 	}
 
+	/**
+	 * 记录套餐升级 续费订单
+	 */
+	private void recordUpgradeRenewOrderDon(OrderDon orderDon, Long packageId, GroupsTrips groupsTrips) {
+		OrderDonUpgradeRenewRecord orderDonUpgradeRenewRecord = new OrderDonUpgradeRenewRecord();
+		orderDonUpgradeRenewRecord.setOrderId(orderDon.getId());
+		orderDonUpgradeRenewRecord.setUserId(orderDon.getUserId());
+		orderDonUpgradeRenewRecord.setPackageId(packageId);
+		orderDonUpgradeRenewRecord.setOriSkuId(groupsTrips.getSkuId());
+		orderDonUpgradeRenewRecordMapper.insert(orderDonUpgradeRenewRecord);
+	}
+
 	//镜像续费升级
 	private void handleMirrorRenew(GoodsDonSku sku, OrderDon order, GroupsTrips groupsTrips, Long relationId, Date newDate) {
 		if (sku.getIsMirror() && order.getOrderType() == 2) {
@@ -3884,4 +3912,45 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			orderDonPosterRelateMapper.insert(orderDonPosterRelate);
 		}
 	}
+
+	/**
+	 * gpt镜像续费订单
+	 */
+	private void handleGptMirrorRenewOrder(OrderDon order, GoodsDonSku sku) {
+		//GPT镜像续费 升级后的规格
+		if (order.getGoodsId() == 18 && order.getOrderType() == 2 && sku.getIsMirror()) {
+			OrderDonRenewRecord orderDonRenewRecord = orderDonRenewRecordMapper.selectOne(Wrappers.lambdaQuery(OrderDonRenewRecord.class)
+					.eq(OrderDonRenewRecord::getOrderId, order.getId())
+					.last("limit 1"));
+			OrderDonUpgradeRenewRecord orderDonUpgradeRenewRecord = null;
+			if (orderDonRenewRecord == null) {
+				orderDonUpgradeRenewRecord = orderDonUpgradeRenewRecordMapper.selectOne(Wrappers.lambdaQuery(OrderDonUpgradeRenewRecord.class)
+						.eq(OrderDonUpgradeRenewRecord::getOrderId, order.getId())
+						.last("limit 1"));
+			}
+			if (orderDonRenewRecord == null && orderDonUpgradeRenewRecord == null) {
+				return;
+			}
+			ChatgptUser chatgptUser = chatgptUserMapper.selectOne(Wrappers.lambdaQuery(ChatgptUser.class)
+					.eq(ChatgptUser::getRelationId, order.getRelationId())
+					.last("limit 1"));
+			if (chatgptUser == null) {
+				return;
+			}
+			if (orderDonRenewRecord != null) {
+				Date renewExpiryTime = chatgptUser.getRenewExpiryTime();
+				renewExpiryTime = DateUtil.offsetMonth(renewExpiryTime, sku.getMonths());
+				log.info("GPT镜像续费,user续费升级过期时间:{} ---> {}", chatgptUser.getRenewExpiryTime(), renewExpiryTime);
+				chatgptUser.setRenewExpiryTime(renewExpiryTime);
+			}
+			if (orderDonUpgradeRenewRecord != null) {
+				Date clearPackageTime = chatgptUser.getClearPackageTime();
+				clearPackageTime = DateUtil.offsetMonth(clearPackageTime, sku.getMonths());
+				log.info("GPT镜像套餐升级,user套餐升级过期时间:{} ---> {}", chatgptUser.getRenewExpiryTime(), clearPackageTime);
+				chatgptUser.setClearPackageTime(clearPackageTime);
+			}
+			chatgptUserMapper.updateById(chatgptUser);
+		}
+	}
+
 }

+ 27 - 4
netflix-service/src/main/java/com/cyksj/service/relation/impl/GroupRelationFrontServiceImpl.java

@@ -152,6 +152,8 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 
 	private final OrderDonRenewRecordMapper orderDonRenewRecordMapper;
 
+	private final UpgradeOrderDonMapper upgradeOrderDonMapper;
+
 	@Override
 	public SearchResult<RenewalView> getMyTicket(long userId, Boolean isLoginPopularize, String customId, String account) {
 		User u = userMapper.selectById(userId);
@@ -309,15 +311,33 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 					if (userInfo.getPackageId() != 0) {
 						UpgradePackage upgradePackage = upgradePackageMapper.selectById(userInfo.getPackageId());
 						ticket.setPackagePrice(upgradePackage.getPrice());
+						//套餐升级的规格
+						UpgradeOrderDon upgradeOrderDon = upgradeOrderDonMapper.selectOne(Wrappers.lambdaQuery(UpgradeOrderDon.class)
+								.in(UpgradeOrderDon::getUserId, userIds)
+								.eq(UpgradeOrderDon::getRelationId, ticket.getRelationId())
+								.eq(UpgradeOrderDon::getPackageId, userInfo.getPackageId())
+								.eq(UpgradeOrderDon::getStatus, UpgradeOrderDon.Status.hasPayment)
+								.orderByDesc(UpgradeOrderDon::getId)
+								.last("limit 1"));
+						Long upgradeOrderDonSkuId = upgradeOrderDon.getSkuId();
+						GoodsDonSkuRenewView renewSku = beanSearcher.searchFirst(GoodsDonSkuRenewView.class, MapUtils.builder().field(GoodsDonSkuRenewView::getSkuId, upgradeOrderDonSkuId).build());
+						Optional.ofNullable(orderDonRenewRecordMapper.selectOne(Wrappers.lambdaQuery(OrderDonRenewRecord.class)
+								.eq(OrderDonRenewRecord::getOrderId, userInfo.getRenewOrderId())
+								.last("limit 1"))).ifPresent(e -> renewSku.setPackageId(e.getPackageId()));
+						ticket.setRenewSku(renewSku);
 					}
 					ticket.setIsRenewPackage(userInfo.getIsRenewPackage());
 					Long renewSkuId = userInfo.getRenewSkuId();
 					if (renewSkuId != null) {
+						GoodsDonSkuRenewView upgradeSkuRenewView = ticket.getRenewSku();
 						GoodsDonSkuRenewView renewSku = beanSearcher.searchFirst(GoodsDonSkuRenewView.class, MapUtils.builder().field(GoodsDonSkuRenewView::getSkuId, renewSkuId).build());
-						Optional.ofNullable(orderDonRenewRecordMapper.selectOne(Wrappers.lambdaQuery(OrderDonRenewRecord.class)
-								.eq(OrderDonRenewRecord::getOrderId, userInfo.getRenewOrderId())
-								.last("limit 1"))).ifPresent(e -> renewSku.setPackageId(e.getPackageId()));
-						ticket.setRenewSku(renewSku);
+						//续费升级是更高级规格
+						if (upgradeSkuRenewView == null || (renewSku.getGptUserLimitNum() >= upgradeSkuRenewView.getGptUserLimitNum() && renewSku.getMonths() >= userInfo.getMonths())) {
+							Optional.ofNullable(orderDonRenewRecordMapper.selectOne(Wrappers.lambdaQuery(OrderDonRenewRecord.class)
+									.eq(OrderDonRenewRecord::getOrderId, userInfo.getRenewOrderId())
+									.last("limit 1"))).ifPresent(e -> renewSku.setPackageId(e.getPackageId()));
+							ticket.setRenewSku(renewSku);
+						}
 					}
 				} catch (Exception e) {
 				}
@@ -783,6 +803,9 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 				return false;
 			}
 			Integer skuMonths = ticket.getMonths();
+			if (skuMonths == null) {
+				return false;
+			}
 			Date expiryTime = ticket.getExpiryTime();
 			//年付 提前一个月
 			if (skuMonths >= 12) {