zoujiajian 2 éve
szülő
commit
b8b6f42e0c

+ 10 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/ChatgptUser.java

@@ -75,4 +75,14 @@ public class ChatgptUser extends BaseEntity {
      * 是否为车队
      */
     private Boolean isCar;
+
+    /**
+     * 目前套餐包id
+     */
+    private Long packageId;
+
+    /**
+     * 清洗套餐包时间
+     */
+    private Date clearPackageTime;
 }

+ 11 - 0
netflix-dao/src/main/java/com/cyksj/model/views/ChatGptUserView.java

@@ -3,6 +3,7 @@ package com.cyksj.model.views;
 import lombok.Builder;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -59,4 +60,14 @@ public class ChatGptUserView {
      * 月份
      */
     private Integer months;
+
+    /**
+     * 目前套餐id
+     */
+    private Long packageId;
+
+    /**
+     * 目前套餐价格
+     */
+    private BigDecimal packagePrice;
 }

+ 9 - 1
netflix-dao/src/main/java/com/cyksj/model/views/RenewalView.java

@@ -237,4 +237,12 @@ public class RenewalView {
      */
     @DbIgnore
     private Boolean upgrade;
-}
+
+    @DbIgnore
+    private Long packageId;
+
+    /**
+     * 目前已升级套餐价格
+     */
+    @DbIgnore
+    private BigDecimal packagePrice;}

+ 7 - 0
netflix-service/src/main/java/com/cyksj/service/chatgpt/impl/ChatGptAccountServiceImpl.java

@@ -836,6 +836,11 @@ public class ChatGptAccountServiceImpl implements ChatGptAccountService {
             if (orderDon != null) {
                 orderId = orderDon.getId();
             }
+            BigDecimal packagePrice = null;
+            if (chatgptUser.getPackageId() != 0) {
+                UpgradePackage upgradePackage = upgradePackageMapper.selectById(chatgptUser.getPackageId());
+                packagePrice = upgradePackage.getPrice();
+            }
             return ChatGptUserView.builder()
                     .skuName(goodsDonSku.getSubTitle())
                     .expireTime(chatgptUser.getExpireTime())
@@ -847,6 +852,8 @@ public class ChatGptAccountServiceImpl implements ChatGptAccountService {
                     .skuId(goodsDonSku.getId())
                     .months(goodsDonSku.getMonths())
                     .use(Math.min(chatgptUser.getLimitNum(), getConversationCount(chatgptUser.getUserToken(), chatgptUser.getLimitTime())))
+                    .packageId(chatgptUser.getPackageId())
+                    .packagePrice(packagePrice)
                     .build();
         } else {
             throw BusinessRuntimeException.getInstance("您还未购买该车票");

+ 14 - 3
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -3258,6 +3258,14 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 				}
 				//两者之间的差价
 				BigDecimal differPrice = upgradeSku.getPrice().subtract(goodsDonSku.getPrice());
+				Long userUpgradePackageId = chatgptUser.getPackageId();
+				//已升级的套餐包
+				if (userUpgradePackageId != 0) {
+					UpgradePackage hasUpgradePackage = upgradePackageMapper.selectById(userUpgradePackageId);
+					BigDecimal thisPackagePrice = hasUpgradePackage.getPrice();
+					differPrice = thisPackagePrice.subtract(upgradePackage.getPrice());
+				}
+
 				if (differPrice.compareTo(BigDecimal.ZERO) < 0) {
 					throw BusinessRuntimeException.getInstance("车票套餐升级错误,请联系客服");
 				}
@@ -3265,9 +3273,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 				//自然月差价
 				DateTime offset = DateUtil.offsetMonth(now, goodsDonSku.getMonths());
 				long totalDays = DateUtil.between(now, offset, DateUnit.DAY) + 1;
-				BigDecimal singlePrice = differPrice.divide(BigDecimal.valueOf(totalDays), 0, RoundingMode.DOWN);
-
-				BigDecimal payUpgradePackagePrice = singlePrice.multiply(BigDecimal.valueOf(day));
+				//待支付价格
+				BigDecimal payUpgradePackagePrice = differPrice.multiply(BigDecimal.valueOf(day)).divide(BigDecimal.valueOf(totalDays), 0, RoundingMode.HALF_UP);
 				if (payRequest.getDonMoney().compareTo(payUpgradePackagePrice) < 0) {
 					payRequest.setDonMoney(payUpgradePackagePrice);
 				}
@@ -3465,10 +3472,14 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			if (chatgptUser != null) {
 				Long time = upgradePackage.getTime();
 				Integer num = upgradePackage.getNum();
+				//下次清洗用户套餐包时间 避免续费时间修改
+				Date clearPackageTime = chatgptUser.getExpireTime();
 
 				int update = chatgptUserMapper.update(null, Wrappers.lambdaUpdate(ChatgptUser.class)
 						.set(ChatgptUser::getLimitTime, time)
 						.set(ChatgptUser::getLimitNum, num)
+						.set(ChatgptUser::getPackageId, orderDon.getPackageId())
+						.set(ChatgptUser::getClearPackageTime, clearPackageTime)
 						.eq(ChatgptUser::getId, chatgptUser.getId()));
 				if (update == 0) {
 					log.info("chatgptUser 升级套餐包增值失败 id:{},orderId:{}", chatgptUser.getId(), orderDon.getId());

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

@@ -273,6 +273,10 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 						.eq(UpgradePackage::getGptType, 0)
 						.eq(UpgradePackage::getDeleted, Boolean.TRUE));
 				ticket.setUpgrade(count > 0 ? true : false);
+				if (userInfo.getPackageId() != 0) {
+					UpgradePackage upgradePackage = upgradePackageMapper.selectById(userInfo.getPackageId());
+					ticket.setPackagePrice(upgradePackage.getPrice());
+				}
 			}
 			List<GroupsRelationUserView> relationUserViews = groupsRelationMapper.getUserRelationUserViews(ticket.getGroupId(), ticket.getRelationId(), ticket.getUserId(), List.of(GroupsRelation.Status.validity, GroupsRelation.Status.outside));
 			ticket.setRelationViews(relationUserViews);