Bladeren bron

套餐包

zoujiajian 2 jaren geleden
bovenliggende
commit
ba31b96114

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UpgradeOrderDon.java

@@ -45,6 +45,11 @@ public class UpgradeOrderDon extends BaseEntity {
 
     private String transactionId;
 
+        /**
+     * 时间
+     * */
+    private Long time;
+
     private Integer num;
 
     private BigDecimal price;

+ 11 - 1
netflix-dao/src/main/java/com/cyksj/model/entity/UpgradePackage.java

@@ -28,6 +28,16 @@ public class UpgradePackage extends BaseEntity{
      */
     private String skuIds;
 
+    /**
+     * 升级规格
+     */
+    private Long upgradeSkuId;
+
+    /**
+     * gpt类型,0.车票套餐
+     */
+    private Integer gptType;
+
     /**
      * 套餐价格
      */
@@ -37,7 +47,7 @@ public class UpgradePackage extends BaseEntity{
      * 时间限制
      */
     @TableField(updateStrategy = FieldStrategy.IGNORED)
-    private Integer time;
+    private Long time;
 
     /**
      * 数量

+ 3 - 1
netflix-service/src/main/java/com/cyksj/service/chatgpt/impl/ChatGptAccountServiceImpl.java

@@ -819,7 +819,9 @@ public class ChatGptAccountServiceImpl implements ChatGptAccountService {
 
             Integer count = upgradePackageMapper.selectCount(Wrappers.lambdaQuery(UpgradePackage.class).apply("JSON_CONTAINS(sku_ids,'\"" + groupsTrips.getSkuId() + "\"')")
                     .gt(UpgradePackage::getNum, chatgptUser.getLimitNum())
-                    .eq(UpgradePackage::getStatus, Boolean.TRUE));
+                    .eq(UpgradePackage::getStatus, Boolean.TRUE)
+                    .eq(UpgradePackage::getGptType, 0)
+                    .eq(UpgradePackage::getDeleted, Boolean.TRUE));
             Boolean upgrade = count > 0 ? true : false;
             return ChatGptUserView.builder()
                     .skuName(goodsDonSku.getSubTitle())

+ 2 - 0
netflix-service/src/main/java/com/cyksj/service/mange/CmsGoodsDonSkuService.java

@@ -17,4 +17,6 @@ public interface CmsGoodsDonSkuService extends IService<GoodsDonSku> {
 	void updateMirrorCarUserNum(GoodsDonSku sku);
 
 	void setBelowPriceShopSkuDown(Long skuId, BigDecimal newPrice);
+
+	void handleGptPackageSku(GoodsDonSku dbSku, GoodsDonSku sku) throws Exception;
 }

+ 57 - 4
netflix-service/src/main/java/com/cyksj/service/mange/goods/CmsGoodsDonSkuServiceImpl.java

@@ -5,16 +5,15 @@ import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.common.util.Jsons;
 import com.cyksj.mapper.ChatgptUserMapper;
 import com.cyksj.mapper.GoodsDiscountPlusPurchaseRelationMapper;
 import com.cyksj.mapper.GoodsDonSkuMapper;
+import com.cyksj.mapper.UpgradePackageMapper;
 import com.cyksj.mapper.shop.YhShopGoodsRateMapper;
 import com.cyksj.mapper.shop.YhShopGoodsSkuMapper;
 import com.cyksj.mapper.shop.YhShopSkuSysTakeDownRecordMapper;
-import com.cyksj.model.entity.GoodsDiscountPlusPurchaseRelation;
-import com.cyksj.model.entity.GoodsDonSku;
-import com.cyksj.model.entity.YhShopGoodsRate;
-import com.cyksj.model.entity.YhShopGoodsSku;
+import com.cyksj.model.entity.*;
 import com.cyksj.service.mange.CmsGoodsDonSkuService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -47,6 +46,8 @@ public class CmsGoodsDonSkuServiceImpl extends ServiceImpl<GoodsDonSkuMapper,Goo
 
 	private final YhShopSkuSysTakeDownRecordMapper yhShopSkuSysTakeDownRecordMapper;
 
+	private final UpgradePackageMapper upgradePackageMapper;
+
 	@Override
 	public void handleDiscountPurchaseGoods(GoodsDonSku sku, List<GoodsDiscountPlusPurchaseRelation> discountPlusPurchaseGoods) {
 		Long skuId = sku.getId();
@@ -144,6 +145,58 @@ public class CmsGoodsDonSkuServiceImpl extends ServiceImpl<GoodsDonSkuMapper,Goo
 		}
 	}
 
+	@Override
+	public void handleGptPackageSku(GoodsDonSku dbSku, GoodsDonSku sku) throws Exception {
+		Long gptLimitTime = dbSku.getGptLimitTime();
+		Integer gptLimitNum = dbSku.getGptLimitNum();
+		BigDecimal price = dbSku.getPrice();
+		BigDecimal newPrice = sku.getPrice();
+		//GPT镜像套餐包关联
+		if (sku.getGoodsId() == 18 && sku.getIsMirror()) {
+			//同步升级规格的价格
+			if (gptLimitNum != sku.getGptLimitNum() || gptLimitTime != sku.getGptLimitTime() || price.compareTo(newPrice) != 0) {
+				if (price.compareTo(newPrice) != 0) {
+					//本身是需升级的规格 同步套餐价格
+					UpgradePackage upgradePackageSelfBind = upgradePackageMapper.selectOne(Wrappers.lambdaQuery(UpgradePackage.class).apply("JSON_CONTAINS(sku_ids,'\"" + sku.getId() + "\"')")
+							.eq(UpgradePackage::getStatus, Boolean.TRUE)
+							.eq(UpgradePackage::getGptType, 0)
+							.eq(UpgradePackage::getDeleted, Boolean.TRUE)
+							.last("limit 1"));
+					if (upgradePackageSelfBind != null) {
+						Long upgradeSkuId = upgradePackageSelfBind.getUpgradeSkuId();
+						GoodsDonSku upgradeSku = skuMapper.selectById(upgradeSkuId);
+						if (upgradeSku != null && upgradeSku.getPrice().compareTo(sku.getPrice()) > 0) {
+							upgradePackageSelfBind.setPrice(upgradeSku.getPrice().subtract(sku.getPrice()));
+							upgradePackageMapper.updateById(upgradePackageSelfBind);
+						}
+					}
+				}
+
+				//被绑定升级套餐
+				UpgradePackage toUpgradePackage = upgradePackageMapper.selectOne(Wrappers.lambdaQuery(UpgradePackage.class)
+						.eq(UpgradePackage::getUpgradeSkuId, sku.getId())
+						.last("limit 1"));
+				if (toUpgradePackage != null) {
+					if (price.compareTo(sku.getPrice()) != 0) {
+						Long skuId = Jsons.parseList(toUpgradePackage.getSkuIds(), Long.class).get(0);
+						//需升级的规格
+						GoodsDonSku oriSku = skuMapper.selectById(skuId);
+						if (oriSku == null) {
+							return;
+						}
+						BigDecimal differ = sku.getPrice().subtract(oriSku.getPrice());
+						if (differ.compareTo(BigDecimal.ZERO) > 0) {
+							toUpgradePackage.setPrice(differ);
+						}
+					}
+					toUpgradePackage.setTime(sku.getGptLimitTime());
+					toUpgradePackage.setNum(sku.getGptLimitNum());
+					upgradePackageMapper.updateById(toUpgradePackage);
+				}
+			}
+		}
+	}
+
 	public void checkPurchaseParamsAndSaveOrUpdate(Long goodsId, Long skuId, GoodsDiscountPlusPurchaseRelation discountGoods) {
 		Long disSid = discountGoods.getDisSid();
 		if (disSid == null) {

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

@@ -61,6 +61,7 @@ import com.cyksj.service.relation.GroupRelationFrontService;
 import com.cyksj.service.relation.GroupsRelationExpiryRecordService;
 import com.cyksj.service.shop.YhShopDistributeService;
 import com.cyksj.service.user.UserBenefitsService;
+import com.cyksj.service.user.UserBindRelationService;
 import com.cyksj.service.wechat.WeChatService;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.util.MapUtils;
@@ -183,6 +184,10 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
 
     private final MidjourneyUserMapper midjourneyUserMapper;
 
+    private final GroupsRelationMapper groupsRelationMapper;
+
+    private final UserBindRelationService userBindRelationService;
+
     private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
 
     @Override
@@ -408,6 +413,53 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
                 }
             }
         }
+
+        //扣除gpt套餐升级
+        if (upgradePackage.getGoodsId() == 18) {
+            ChatgptUser chatgptUser = chatgptUserMapper.selectOne(Wrappers.lambdaQuery(ChatgptUser.class).eq(ChatgptUser::getRelationId, orderDon.getRelationId()));
+            if (chatgptUser != null) {
+                GroupsRelation relation = groupsRelationMapper.selectById(chatgptUser.getRelationId());
+                GroupsTrips groupsTrips = groupsMapper.selectById(relation.getGroupsId());
+                GoodsDonSku sku = skuMapper.selectById(groupsTrips.getSkuId());
+                Long userId = orderDon.getUserId();
+                List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
+
+                //是否有更高级的套餐
+                UpgradeOrderDon more = upgradeOrderDonMapper.selectOne(Wrappers.lambdaQuery(UpgradeOrderDon.class)
+                        .in(UpgradeOrderDon::getUserId, userIdList)
+                        .eq(UpgradeOrderDon::getRelationId, orderDon.getRelationId())
+                        .gt(UpgradeOrderDon::getNum, orderDon.getNum())
+                        .eq(UpgradeOrderDon::getStatus, UpgradeOrderDon.Status.complete)
+                        .last("limit 1"));
+                if (more != null) {
+                    throw BusinessRuntimeException.getInstance("请先退掉其更高级套餐");
+                }
+
+                //原先sku的套餐
+                Long gptLimitTime = sku.getGptLimitTime();
+                Integer gptLimitNum = sku.getGptLimitNum();
+
+                //次等套餐的规格
+                UpgradeOrderDon secondUpgrade = upgradeOrderDonMapper.selectOne(Wrappers.lambdaQuery(UpgradeOrderDon.class)
+                        .in(UpgradeOrderDon::getUserId, userIdList)
+                        .eq(UpgradeOrderDon::getRelationId, orderDon.getRelationId())
+                        .lt(UpgradeOrderDon::getNum, orderDon.getNum())
+                        .eq(UpgradeOrderDon::getStatus, UpgradeOrderDon.Status.complete)
+                        .last("limit 1"));
+                if (secondUpgrade != null) {
+                    gptLimitTime = secondUpgrade.getTime();
+                    gptLimitNum = secondUpgrade.getNum();
+                }
+
+                int update = chatgptUserMapper.update(null, Wrappers.lambdaUpdate(ChatgptUser.class)
+                        .set(ChatgptUser::getLimitTime, gptLimitTime)
+                        .set(ChatgptUser::getLimitNum, gptLimitNum)
+                        .eq(ChatgptUser::getId, chatgptUser.getId()));
+                if (update == 0) {
+                    log.info("chatgptUser 升级套餐包增值失败 id:{},orderId:{}", chatgptUser.getId(), orderDon.getId());
+                }
+            }
+        }
     }
 
     /**

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

@@ -3242,9 +3242,6 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 				if (chatgptUser == null) {
 					throw BusinessRuntimeException.getInstance("车票未激活gpt账号,请先激活");
 				}
-				if (chatgptUser.getLimitNum() >= upgradePackage.getNum()) {
-					throw BusinessRuntimeException.getInstance("您已升级车票套餐");
-				}
 				Date expiryTime = groupsRelation.getExpiryTime();
 				//剩余多少天
 				DateTime now = DateTime.now();
@@ -3252,11 +3249,22 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 				if (day <= 0) {
 					throw BusinessRuntimeException.getInstance("车票已过期");
 				}
+				Long upgradeSkuId = upgradePackage.getUpgradeSkuId();
+				GoodsDonSku upgradeSku = goodsDonSkuMapper.selectById(upgradeSkuId);
+				Integer upgradeSkuGptLimitNum = upgradeSku.getGptLimitNum();
+				if (upgradeSkuGptLimitNum < chatgptUser.getLimitNum()) {
+					throw BusinessRuntimeException.getInstance("您已升级车票套餐");
+				}
+				//两者之间的差价
+				BigDecimal differPrice = upgradeSku.getPrice().subtract(goodsDonSku.getPrice());
+				if (differPrice.compareTo(BigDecimal.ZERO) < 0) {
+					throw BusinessRuntimeException.getInstance("车票套餐升级错误,请联系客服");
+				}
 
-				BigDecimal upgradePackagePrice = upgradePackage.getPrice();
 				//自然月差价
-				int thisMonthDays = DateUtil.endOfMonth(now).dayOfMonth();
-				BigDecimal singlePrice = upgradePackagePrice.divide(BigDecimal.valueOf(thisMonthDays), 0, RoundingMode.DOWN);
+				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));
 				if (payRequest.getDonMoney().compareTo(payUpgradePackagePrice) < 0) {
@@ -3452,9 +3460,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		//gpt 升级套餐
 		if (upgradePackage.getGoodsId() == 18) {
 			ChatgptUser chatgptUser = chatgptUserMapper.selectOne(Wrappers.lambdaQuery(ChatgptUser.class).eq(ChatgptUser::getRelationId, orderDon.getRelationId()));
-			Long oriTime = chatgptUser.getLimitTime();
 			if (chatgptUser != null) {
-				Integer time = upgradePackage.getTime();
+				Long time = upgradePackage.getTime();
 				Integer num = upgradePackage.getNum();
 
 				int update = chatgptUserMapper.update(null, Wrappers.lambdaUpdate(ChatgptUser.class)
@@ -3464,13 +3471,6 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 				if (update == 0) {
 					log.info("chatgptUser 升级套餐包增值失败 id:{},orderId:{}", chatgptUser.getId(), orderDon.getId());
 				}
-				String key = RedisService.key.CHATGPT_CONVERSATION_LIMIT.getName() + ":" + chatgptUser.getUserToken();
-				Long expire = redisService.getExpire(key);
-				//存在
-				if (expire > 0) {
-					//加上剩余的时间
-					redisService.expire(key, expire + (time - oriTime) * 60 * 60);
-				}
 			}
 		}
 	}

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

@@ -241,7 +241,7 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 				ticket.setPayTime(payTime);
 			}
 			if (ticket.getGoodsId() == 26 && ticket.getIsMirror()){
-				List<UpgradePackage> upgradePackages = upgradePackageMapper.selectList(Wrappers.lambdaQuery(UpgradePackage.class).apply("JSON_CONTAINS(sku_ids,'\""+ticket.getSkuId()+"\"')").eq(UpgradePackage::getStatus, Boolean.TRUE));
+				List<UpgradePackage> upgradePackages = upgradePackageMapper.selectList(Wrappers.lambdaQuery(UpgradePackage.class).apply("JSON_CONTAINS(sku_ids,'\"" + ticket.getSkuId() + "\"')").eq(UpgradePackage::getStatus, Boolean.TRUE).eq(UpgradePackage::getDeleted, Boolean.TRUE));
 				if (CollectionUtil.isNotEmpty(upgradePackages)){
 					upgradePackages.stream().map(e -> e.getPrice().divide(BigDecimal.valueOf(e.getNum()), 2, RoundingMode.HALF_UP)).min(BigDecimal::compareTo).ifPresent(ticket::setMjPackagePrice);
 				}
@@ -269,7 +269,9 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 				ticket.setUse(userInfo.getUse());
 				Integer count = upgradePackageMapper.selectCount(Wrappers.lambdaQuery(UpgradePackage.class).apply("JSON_CONTAINS(sku_ids,'\"" + ticket.getSkuId() + "\"')")
 						.gt(UpgradePackage::getNum, userInfo.getLimitNum())
-						.eq(UpgradePackage::getStatus, Boolean.TRUE));
+						.eq(UpgradePackage::getStatus, Boolean.TRUE)
+						.eq(UpgradePackage::getGptType, 0)
+						.eq(UpgradePackage::getDeleted, Boolean.TRUE));
 				ticket.setUpgrade(count > 0 ? true : false);
 			}
 			List<GroupsRelationUserView> relationUserViews = groupsRelationMapper.getUserRelationUserViews(ticket.getGroupId(), ticket.getRelationId(), ticket.getUserId(), List.of(GroupsRelation.Status.validity, GroupsRelation.Status.outside));

+ 2 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/CmsGoodsDonSkuController.java

@@ -176,6 +176,8 @@ public class CmsGoodsDonSkuController {
             //下架店铺低于这个规格价格的品
             goodsDonSkuService.setBelowPriceShopSkuDown(skuId, newPrice);
         }
+        //套餐包关联规格
+        goodsDonSkuService.handleGptPackageSku(dbSku,sku);
         refreshCacheService.refreshYhHomePageCache();
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }