Kaynağa Gözat

Merge remote-tracking branch 'origin/master'

zoujiajian 1 yıl önce
ebeveyn
işleme
67da2a489e

+ 1 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UserBalanceSourceRecord.java

@@ -34,6 +34,7 @@ public class UserBalanceSourceRecord extends BaseEntity {
 		payment("购买"),
 		refund("退款"),
 		order_close("订单关闭"),
+		upgrade_close("增值订单关闭"),
 		clear_valid("未到期车票清除"),
 		ds_transport("分销实物发货"),
 		follow_task("关注引导"),

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

@@ -383,6 +383,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	private final GptUserRechargeRecordService gptUserRechargeRecordService;
 
+	private final UserBalanceSourceRecordMapper userBalanceSourceRecordMapper;
+
 	private final List<String> noChekGoodsTemp = List.of("Apple One", "Youtube", "Spotify");
 
 	@Transactional(rollbackFor = Throwable.class)
@@ -3138,6 +3140,9 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		if (orderDon.getGoodsId() == Constant.GPT_PLUS_GID && sku.getNum() == 1) {
 			incrGroupsRelationRechargeRemainIfRecharge(orderDon.getRelationId(), sku.getMonths(), orderDon.getOrderType());
 		}
+
+		//查看该订单是否有关闭的余额
+		deductIfCloseOrderReturnBalance(orderDon.getId(), UserBalanceSourceRecord.Source.order_close);
 	}
 
 	private void handleUserMirrorSHopOrderDon(OrderDon orderDon) throws Exception {
@@ -4264,6 +4269,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 		//银河币返回
 		returnUpgradeGalaxyCoin(orderDon);
+		//查看该订单是否有关闭的余额
+		deductIfCloseOrderReturnBalance(orderDon.getId(), UserBalanceSourceRecord.Source.upgrade_close);
 	}
 
 	private void returnUpgradeGalaxyCoin(UpgradeOrderDon orderDon) {
@@ -4320,7 +4327,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 				upgradeOrderDonMapper.updateById(orderDon);
 				//返还余额
 				if (orderDon.getBalance().compareTo(BigDecimal.ZERO) > 0) {
-					userBenefitsService.addUserBalance(orderDon.getUserId(), orderDon.getBalance(), null, null, null, null, false);
+					userBenefitsService.addUserBalance(orderDon.getUserId(), orderDon.getBalance(), UserBalanceSourceRecord.Source.upgrade_close, null, orderId, UserBalanceSourceRecord.Source.upgrade_close.getDesc(), true);
 				}
 				//返回银河币
 				UserGalaxyCoinRecord userGalaxyCoinRecord = userGalaxyCoinRecordMapper.selectOne(Wrappers.lambdaQuery(UserGalaxyCoinRecord.class)
@@ -5219,4 +5226,17 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			}
 		}
 	}
+
+	/**
+	 * 存在关闭订单退款余额的记录
+	 */
+	private void deductIfCloseOrderReturnBalance(Long orderId, UserBalanceSourceRecord.Source source) {
+		UserBalanceSourceRecord userBalanceSourceRecord = userBalanceSourceRecordMapper.selectOne(Wrappers.lambdaQuery(UserBalanceSourceRecord.class).eq(UserBalanceSourceRecord::getOrderId, orderId).eq(UserBalanceSourceRecord::getSource, source).last("limit 1"));
+		if (userBalanceSourceRecord != null) {
+			BigDecimal balance = userBalanceSourceRecord.getBalance();
+			//扣除余额并删除记录
+			userBenefitsService.deductUserBalance(userBalanceSourceRecord.getUserId(), balance);
+			userBalanceSourceRecordMapper.deleteById(userBalanceSourceRecord.getId());
+		}
+	}
 }

+ 17 - 0
netflix-service/src/main/java/com/cyksj/service/order/impl/VipOrderDonServiceImpl.java

@@ -150,6 +150,8 @@ public class VipOrderDonServiceImpl extends ServiceImpl<VipOrderDonMapper, VipOr
 
 	private final JobManager jobManager;
 
+	private final UserBalanceSourceRecordMapper userBalanceSourceRecordMapper;
+
 	private static final Long EXPIRY_TIME = 1000 * 60 * 5L;
 
 	@Override
@@ -460,6 +462,8 @@ public class VipOrderDonServiceImpl extends ServiceImpl<VipOrderDonMapper, VipOr
 
 		//银河币返回
 		returnGalaxyCoin(orderDon);
+		//查看该订单是否有关闭的余额
+		deductIfCloseOrderReturnBalance(orderDon.getId(), UserBalanceSourceRecord.Source.vip_order_close);
 	}
 
 	private void sendVipTicketToUser(Long userId, Date vipStartTime, Date vipExpiryTime, List<Long> userIds, Long orderId) {
@@ -937,4 +941,17 @@ public class VipOrderDonServiceImpl extends ServiceImpl<VipOrderDonMapper, VipOr
 			}
 		}
 	}
+
+	/**
+	 * 存在关闭订单退款余额的记录
+	 */
+	private void deductIfCloseOrderReturnBalance(Long orderId, UserBalanceSourceRecord.Source source) {
+		UserBalanceSourceRecord userBalanceSourceRecord = userBalanceSourceRecordMapper.selectOne(Wrappers.lambdaQuery(UserBalanceSourceRecord.class).eq(UserBalanceSourceRecord::getOrderId, orderId).eq(UserBalanceSourceRecord::getSource, source).last("limit 1"));
+		if (userBalanceSourceRecord != null) {
+			BigDecimal balance = userBalanceSourceRecord.getBalance();
+			//扣除余额并删除记录
+			userBenefitsService.deductUserBalance(userBalanceSourceRecord.getUserId(), balance);
+			userBalanceSourceRecordMapper.deleteById(userBalanceSourceRecord.getId());
+		}
+	}
 }

+ 11 - 0
netflix-web/src/main/java/com/cyksj/web/controller/payment/OrderController.java

@@ -2,6 +2,7 @@ package com.cyksj.web.controller.payment;
 
 import cn.hutool.core.codec.Base64;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.qrcode.QrCodeUtil;
 import cn.hutool.extra.qrcode.QrConfig;
@@ -70,6 +71,8 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.nio.charset.StandardCharsets;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -146,6 +149,9 @@ public class OrderController {
     @Autowired
     private BackInfoTranslationsFrontService backInfoTranslationsFrontService;
 
+    @Autowired
+    private UpgradePackageMapper upgradePackageMapper;
+
     /**
      * 支付
      * @author chan
@@ -867,6 +873,11 @@ public class OrderController {
             MidjourneyUser midjourneyUser = midjourneyAccountService.getMidjourneyUserToken(userId, relationId);
             search = new MidjourneyUserView();
             BeanUtils.copyProperties(midjourneyUser, search);
+        } else {
+            List<UpgradePackage> upgradePackages = upgradePackageMapper.selectList(Wrappers.lambdaQuery(UpgradePackage.class).apply("JSON_CONTAINS(sku_ids,'\"" + search.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(search::setMjPackagePrice);
+            }
         }
         return GatewayResponse.SUCCESS.newBuilder().toResult(search);
     }