|
|
@@ -3,6 +3,7 @@ package com.cyksj.service.order.impl;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.date.DateField;
|
|
|
import cn.hutool.core.date.DateTime;
|
|
|
+import cn.hutool.core.date.DateUnit;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.lang.Assert;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
@@ -303,6 +304,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
|
|
|
private final MidjourneyUserMapper midjourneyUserMapper;
|
|
|
|
|
|
+ private final ChatgptUserMapper chatgptUserMapper;
|
|
|
+
|
|
|
private final DistributeExtraRebateService distributeExtraRebateService;
|
|
|
|
|
|
private final UserTrialTicketJumpPayRecordMapper userTrialTicketJumpPayRecordMapper;
|
|
|
@@ -3205,13 +3208,6 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
public UpgradeOrderDon submitUpgrade(OrderPayRequest payRequest) {
|
|
|
User user = null;
|
|
|
Long userId = payRequest.getUserId();
|
|
|
- if (userId != null) {
|
|
|
- int noPayCount = upgradeOrderDonMapper.selectCount(Wrappers.lambdaQuery(UpgradeOrderDon.class).eq(UpgradeOrderDon::getUserId, userId).eq(UpgradeOrderDon::getPackageId, payRequest.getPackageId())
|
|
|
- .eq(UpgradeOrderDon::getStatus, UpgradeOrderDon.Status.noPayment.toString()));
|
|
|
- if (noPayCount > 0) {
|
|
|
- throw new BusinessRuntimeException("您有未支付订单.");
|
|
|
- }
|
|
|
- }
|
|
|
String orderPhone = payRequest.getPhone();
|
|
|
if (StrUtil.isNotBlank(orderPhone)) {
|
|
|
user = saveOrGetOrderPhoneUser(payRequest);
|
|
|
@@ -3226,6 +3222,14 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
if (user == null) throw BusinessRuntimeException.getGatewayApiCode(GatewayApiCode.CMS_TOKEN_VALID);
|
|
|
if (user.getIsBlack()) throw BusinessRuntimeException.getInstance("系统检测操作异常,请稍后再试");
|
|
|
}
|
|
|
+ List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, user);
|
|
|
+ int noPayCount = upgradeOrderDonMapper.selectCount(Wrappers.lambdaQuery(UpgradeOrderDon.class)
|
|
|
+ .in(UpgradeOrderDon::getUserId, userIdList)
|
|
|
+ .eq(UpgradeOrderDon::getRelationId, payRequest.getRelationId())
|
|
|
+ .eq(UpgradeOrderDon::getStatus, UpgradeOrderDon.Status.noPayment.toString()));
|
|
|
+ if (noPayCount > 0) {
|
|
|
+ throw new BusinessRuntimeException("您有未支付订单.");
|
|
|
+ }
|
|
|
GroupsRelation groupsRelation = getGroupsRelation(payRequest.getUserId(), payRequest.getRelationId());
|
|
|
GroupsTrips groupsTrips = getGroupsTrips(groupsRelation);
|
|
|
GoodsDonSku goodsDonSku = goodsDonSkuMapper.selectById(groupsTrips.getSkuId());
|
|
|
@@ -3238,14 +3242,66 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
if (upgradePackage.getPrice() == null || upgradePackage.getPrice().compareTo(BigDecimal.ZERO) <= 0) {
|
|
|
throw BusinessRuntimeException.getInstance("下单商品价格异常");
|
|
|
}
|
|
|
- if (payRequest.getDonMoney().compareTo(upgradePackage.getPrice()) < 0) {
|
|
|
- log.info("套餐包:{}支付金额:{}异常,调整用户userId:{}支付金额为:{}", upgradePackage.getName(), payRequest.getDonMoney(), user.getId(), upgradePackage.getPrice());
|
|
|
- payRequest.setDonMoney(upgradePackage.getPrice());
|
|
|
+ if (goodsDonSku.getGoodsId() == 18) {
|
|
|
+ ChatgptUser chatgptUser = chatgptUserMapper.selectOne(Wrappers.lambdaQuery(ChatgptUser.class).eq(ChatgptUser::getRelationId, payRequest.getRelationId()));
|
|
|
+ if (chatgptUser == null) {
|
|
|
+ throw BusinessRuntimeException.getInstance("车票未激活gpt账号,请先激活");
|
|
|
+ }
|
|
|
+ Date expiryTime = groupsRelation.getExpiryTime();
|
|
|
+ //剩余多少天
|
|
|
+ DateTime now = DateTime.now();
|
|
|
+ long remainDay = DateUtil.between(now, expiryTime, DateUnit.DAY) + 1;
|
|
|
+ if (remainDay <= 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());
|
|
|
+ Long userUpgradePackageId = chatgptUser.getPackageId();
|
|
|
+ //已升级的套餐包
|
|
|
+ if (userUpgradePackageId != 0) {
|
|
|
+ UpgradePackage hasUpgradePackage = upgradePackageMapper.selectById(userUpgradePackageId);
|
|
|
+ BigDecimal thisPackagePrice = hasUpgradePackage.getPrice();
|
|
|
+ differPrice = upgradePackage.getPrice().subtract(thisPackagePrice);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (differPrice.compareTo(BigDecimal.ZERO) < 0) {
|
|
|
+ throw BusinessRuntimeException.getInstance("车票套餐升级错误,请联系客服");
|
|
|
+ }
|
|
|
+
|
|
|
+ //自然月差价
|
|
|
+ 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.HALF_UP);
|
|
|
+
|
|
|
+ BigDecimal payUpgradePackagePrice = singlePrice.multiply(BigDecimal.valueOf(remainDay));
|
|
|
+ //车票当日买 当天升级 用套餐包原价
|
|
|
+ if (totalDays == remainDay) {
|
|
|
+ payUpgradePackagePrice = differPrice;
|
|
|
+ }
|
|
|
+ if (payRequest.getDonMoney().compareTo(payUpgradePackagePrice) < 0) {
|
|
|
+ payRequest.setDonMoney(payUpgradePackagePrice);
|
|
|
+ }
|
|
|
}
|
|
|
- MidjourneyUser midjourneyUser = midjourneyUserMapper.selectOne(Wrappers.lambdaQuery(MidjourneyUser.class).eq(MidjourneyUser::getRelationId, payRequest.getRelationId()));
|
|
|
- if (midjourneyUser == null){
|
|
|
- throw BusinessRuntimeException.getInstance("车票未激活Midjourney账号,请先激活");
|
|
|
+
|
|
|
+ if (goodsDonSku.getGoodsId() == 26) {
|
|
|
+ if (payRequest.getDonMoney().compareTo(upgradePackage.getPrice()) < 0) {
|
|
|
+ log.info("套餐包:{}支付金额:{}异常,调整用户userId:{}支付金额为:{}", upgradePackage.getName(), payRequest.getDonMoney(), user.getId(), upgradePackage.getPrice());
|
|
|
+ payRequest.setDonMoney(upgradePackage.getPrice());
|
|
|
+ }
|
|
|
+ MidjourneyUser midjourneyUser = midjourneyUserMapper.selectOne(Wrappers.lambdaQuery(MidjourneyUser.class).eq(MidjourneyUser::getRelationId, payRequest.getRelationId()));
|
|
|
+ if (midjourneyUser == null){
|
|
|
+ throw BusinessRuntimeException.getInstance("车票未激活Midjourney账号,请先激活");
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
String donNo = SEQUENCE.nextId().toString();
|
|
|
UpgradeOrderDon upgradeOrderDon = new UpgradeOrderDon();
|
|
|
upgradeOrderDon.setOrderNo(donNo);
|
|
|
@@ -3255,6 +3311,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
upgradeOrderDon.setPackageId(payRequest.getPackageId());
|
|
|
upgradeOrderDon.setPrice(upgradePackage.getPrice());
|
|
|
upgradeOrderDon.setNum(upgradePackage.getNum());
|
|
|
+ upgradeOrderDon.setTime(upgradePackage.getTime());
|
|
|
upgradeOrderDon.setGoodsId(goodsDonSku.getGoodsId());
|
|
|
upgradeOrderDon.setSkuId(goodsDonSku.getId());
|
|
|
upgradeOrderDon.setMoney(payRequest.getDonMoney());
|
|
|
@@ -3419,6 +3476,27 @@ 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()));
|
|
|
+ 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());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|