|
|
@@ -1,5 +1,6 @@
|
|
|
package com.cyksj.service.vip.impl;
|
|
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.date.DateTime;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
@@ -64,6 +65,14 @@ public class VipFrontServiceImpl implements VipFrontService {
|
|
|
|
|
|
private final ClaudeService claudeService;
|
|
|
|
|
|
+ private final LumaUserMapper lumaUserMapper;
|
|
|
+
|
|
|
+ private final UpgradeOrderDonMapper upgradeOrderDonMapper;
|
|
|
+
|
|
|
+ private final NanoUserQuotaMapper nanoUserQuotaMapper;
|
|
|
+
|
|
|
+ private final MidjourneyUserMapper midjourneyUserMapper;
|
|
|
+
|
|
|
@Override
|
|
|
public void fillVipInfo(Long userId, VipUserPageResp vipUserPageResp) {
|
|
|
SysConfig sysConfig = sysConfigMapper.selectOne(Wrappers.lambdaQuery(SysConfig.class).eq(SysConfig::getSysKey, Constant.VIP_FEE_KEY).last("limit 1"));
|
|
|
@@ -190,6 +199,12 @@ public class VipFrontServiceImpl implements VipFrontService {
|
|
|
//获取抵扣金额
|
|
|
deductMoney = deductMoney.add(getFinalDeductMoney(relationId, relation.getSkuId(), claudeUser.getRenewSkuId(), claudeUser.getRenewOrderId(), claudeUser.getRenewExpiryTime(), relation.getStartTime(), relationExpiryTime, now, userIdList));
|
|
|
}
|
|
|
+ } else if (goodsId == Constant.LUMA_GOODS_ID || goodsId == Constant.NANO_GOODS_ID) {
|
|
|
+ //luma、nano
|
|
|
+ deductMoney = deductMoney.add(getGeneralRemainNumDeductMoney(relationId, goodsId, skuId, userIdList));
|
|
|
+ } else if (goodsId == Constant.MIDJOURNEY_GOODS_ID) {
|
|
|
+ //mj
|
|
|
+ deductMoney = deductMoney.add(getMjRemainNumDeductMoney(relationId, skuId, userIdList));
|
|
|
} else {
|
|
|
//该车票抵扣金额
|
|
|
deductMoney = deductMoney.add(getDeductMoneyFromTicket(relationId, userIdList, skuId, now, relation.getStartTime(), relationExpiryTime));
|
|
|
@@ -388,4 +403,108 @@ public class VipFrontServiceImpl implements VipFrontService {
|
|
|
}
|
|
|
return single;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取普通剩余次数可抵扣金额
|
|
|
+ */
|
|
|
+ private BigDecimal getGeneralRemainNumDeductMoney(Long relationId,Long goodsId,Long skuId,List<Long> userIdList) {
|
|
|
+ BigDecimal deductMoney = BigDecimal.ZERO;
|
|
|
+ BigDecimal orderTotalMoney = BigDecimal.ZERO;
|
|
|
+ //总次数
|
|
|
+ Integer totalNum = 0;
|
|
|
+
|
|
|
+ List<OrderDon> orderDonList = orderDonMapper.selectList(Wrappers.lambdaQuery(OrderDon.class).eq(OrderDon::getRelationId, relationId).in(OrderDon::getUserId, userIdList).notIn(OrderDon::getStatus, Constant.noOrderAllStatus));
|
|
|
+ for (OrderDon orderDon : orderDonList) {
|
|
|
+ GoodsDonSku sku = skuMapper.selectById(skuId);
|
|
|
+ if (orderDon.getMoney().compareTo(BigDecimal.ZERO) >= 0) {
|
|
|
+ orderTotalMoney = orderTotalMoney.add(orderDon.getMoney());
|
|
|
+ } else {
|
|
|
+ //兑换码订单使用规格价格
|
|
|
+ orderTotalMoney = orderTotalMoney.add(sku.getPrice());
|
|
|
+ }
|
|
|
+ if (goodsId == Constant.LUMA_GOODS_ID) {
|
|
|
+ totalNum += sku.getLumaNum();
|
|
|
+ } else {
|
|
|
+ totalNum += sku.getNanoQuota();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //加量包订单
|
|
|
+ List<UpgradeOrderDon> upgradeOrderDons = upgradeOrderDonMapper.selectList(Wrappers.lambdaQuery(UpgradeOrderDon.class).eq(UpgradeOrderDon::getRelationId, relationId).in(UpgradeOrderDon::getUserId, userIdList).notIn(UpgradeOrderDon::getStatus, Constant.noOrderAllStatus));
|
|
|
+ for (UpgradeOrderDon upgradeOrderDon : upgradeOrderDons) {
|
|
|
+ orderTotalMoney = orderTotalMoney.add(upgradeOrderDon.getMoney());
|
|
|
+ totalNum = totalNum + upgradeOrderDon.getNum();
|
|
|
+ }
|
|
|
+ Integer remainNum = null;
|
|
|
+ if (goodsId == Constant.LUMA_GOODS_ID) {
|
|
|
+ LumaUser lumaUser = lumaUserMapper.selectOne(Wrappers.lambdaQuery(LumaUser.class).eq(LumaUser::getRelationId, relationId).last("limit 1"));
|
|
|
+ if (lumaUser != null) {
|
|
|
+ remainNum = lumaUser.getNum();
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ NanoUserQuota nanoUserQuota = nanoUserQuotaMapper.selectOne(Wrappers.lambdaQuery(NanoUserQuota.class).eq(NanoUserQuota::getRelationId, relationId).last("limit 1"));
|
|
|
+ if (nanoUserQuota != null) {
|
|
|
+ remainNum = nanoUserQuota.getRemainingQuota();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //若未使用
|
|
|
+ if (remainNum == null) {
|
|
|
+ deductMoney = deductMoney.add(orderTotalMoney);
|
|
|
+ } else {
|
|
|
+ BigDecimal remainMoney = BigDecimal.valueOf(remainNum).divide(BigDecimal.valueOf(totalNum), 2, RoundingMode.UP).multiply(orderTotalMoney);
|
|
|
+ deductMoney = deductMoney.add(remainMoney);
|
|
|
+ }
|
|
|
+ return deductMoney;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取mj剩余次数可抵扣金额
|
|
|
+ */
|
|
|
+ private BigDecimal getMjRemainNumDeductMoney(Long relationId, Long skuId, List<Long> userIdList) {
|
|
|
+ BigDecimal deductMoney = BigDecimal.ZERO;
|
|
|
+ BigDecimal orderTotalMoney = BigDecimal.ZERO;
|
|
|
+ //总次数
|
|
|
+ Integer fastTotalNum = 0;
|
|
|
+ Integer relaxTotalNum = 0;
|
|
|
+
|
|
|
+ List<OrderDon> orderDonList = orderDonMapper.selectList(Wrappers.lambdaQuery(OrderDon.class).eq(OrderDon::getRelationId, relationId).in(OrderDon::getUserId, userIdList).notIn(OrderDon::getStatus, Constant.noOrderAllStatus));
|
|
|
+ for (OrderDon orderDon : orderDonList) {
|
|
|
+ GoodsDonSku sku = skuMapper.selectById(skuId);
|
|
|
+ if (orderDon.getMoney().compareTo(BigDecimal.ZERO) >= 0) {
|
|
|
+ orderTotalMoney = orderTotalMoney.add(orderDon.getMoney());
|
|
|
+ } else {
|
|
|
+ //兑换码订单使用规格价格
|
|
|
+ orderTotalMoney = orderTotalMoney.add(sku.getPrice());
|
|
|
+ }
|
|
|
+ fastTotalNum += sku.getMjFastNum();
|
|
|
+ relaxTotalNum += sku.getMjRelaxNum();
|
|
|
+ }
|
|
|
+ Integer upgradeNum = 0;
|
|
|
+ BigDecimal upgradeOrderMoney = BigDecimal.ZERO;
|
|
|
+ //加量包订单
|
|
|
+ List<UpgradeOrderDon> upgradeOrderDons = upgradeOrderDonMapper.selectList(Wrappers.lambdaQuery(UpgradeOrderDon.class).eq(UpgradeOrderDon::getRelationId, relationId).in(UpgradeOrderDon::getUserId, userIdList).notIn(UpgradeOrderDon::getStatus, Constant.noOrderAllStatus));
|
|
|
+ for (UpgradeOrderDon upgradeOrderDon : upgradeOrderDons) {
|
|
|
+ upgradeNum += upgradeOrderDon.getNum();
|
|
|
+ upgradeOrderMoney = upgradeOrderMoney.add(upgradeOrderDon.getMoney());
|
|
|
+ }
|
|
|
+ MidjourneyUser midjourneyUser = midjourneyUserMapper.selectOne(Wrappers.lambdaQuery(MidjourneyUser.class).eq(MidjourneyUser::getRelationId, relationId).last("limit 1"));
|
|
|
+ if (midjourneyUser == null) {
|
|
|
+ deductMoney = deductMoney.add(orderTotalMoney).add(upgradeOrderMoney);
|
|
|
+ } else {
|
|
|
+ Integer remainFastNum = midjourneyUser.getMjFastNum();
|
|
|
+ Integer remainRelaxNum = midjourneyUser.getMjRelaxNum();
|
|
|
+ if (CollUtil.isNotEmpty(orderDonList)) {
|
|
|
+ BigDecimal fastMoney = BigDecimal.valueOf(remainFastNum).divide(BigDecimal.valueOf(fastTotalNum), 2, RoundingMode.UP).multiply(orderTotalMoney);
|
|
|
+ BigDecimal relaxMoney = BigDecimal.valueOf(remainRelaxNum).divide(BigDecimal.valueOf(relaxTotalNum), 2, RoundingMode.UP).multiply(orderTotalMoney);
|
|
|
+ deductMoney = deductMoney.add(fastMoney).add(relaxMoney);
|
|
|
+ }
|
|
|
+
|
|
|
+ //加量包
|
|
|
+ Integer remainUpgradeNum = midjourneyUser.getMjUpgradeNum();
|
|
|
+ if (CollUtil.isNotEmpty(upgradeOrderDons)) {
|
|
|
+ BigDecimal upgradeMoney = BigDecimal.valueOf(remainUpgradeNum).divide(BigDecimal.valueOf(upgradeNum), 2, RoundingMode.UP).multiply(upgradeOrderMoney);
|
|
|
+ deductMoney = deductMoney.add(upgradeMoney);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return deductMoney;
|
|
|
+ }
|
|
|
}
|