Explorar o código

正常情况下下单冻结用户余额或积分

july %!s(int64=4) %!d(string=hai) anos
pai
achega
684c046513

+ 1 - 2
ldt-core/src/main/java/org/springblade/payment/callback/trade/UserPayCS.java

@@ -138,8 +138,7 @@ public class UserPayCS {
 		} catch (Exception e) {
 			log.error("清算回调异常:{}", e.getMessage());
 			e.printStackTrace();
-			//throw e;
-			throw new TradeException(ResCode.TRADE_ERROR, successParams);
+			throw e;
 		}
 	}
 

+ 57 - 52
ldt-core/src/main/java/org/springblade/payment/handle/Trade.java

@@ -100,65 +100,70 @@ public class Trade {
 //	 	return true;
 //	}
 	@Transactional(rollbackFor = Exception.class)
-	public SuccessParams tradeForScanPay(Order order, long channelId) throws Exception {
-		/**
-		 * 	交易处理链,每个handle处理负责一个业务节点
-		 * 	1、处理各种商家折扣,计算实际交易金额
-		 * 	2、用户渠道积分用以抵消交易金额
-		 * 	3、用户账户余额抵消交易金额
-		 * 	4、保存订单信息
-		 * */
-		List<BaseHandle> chain = new ArrayList() {{
-			add(discountHandle);
-			add(channelPointHandle);
-			add(balanceHandle);
-			add(wxPayHandle);
-		}};
+	public SuccessParams tradeForScanPay(Order order, long channelId) {
+		SuccessParams successParams = SuccessParams.builder().build();
+		try {
+			/**
+			 * 	交易处理链,每个handle处理负责一个业务节点
+			 * 	1、处理各种商家折扣,计算实际交易金额
+			 * 	2、用户渠道积分用以抵消交易金额
+			 * 	3、用户账户余额抵消交易金额
+			 * 	4、保存订单信息
+			 * */
+			List<BaseHandle> chain = new ArrayList() {{
+				add(discountHandle);
+				add(channelPointHandle);
+				add(balanceHandle);
+				add(wxPayHandle);
+			}};
 
-		BigDecimal remain = order.getMoney();
+			BigDecimal remain = order.getMoney();
 
-		//获取tenantId
-		String tenantId = appShopService.getTenantId(order.getShopId());
-		Bills bills = initBill(order, channelId, tenantId);
+			//获取tenantId
+			String tenantId = appShopService.getTenantId(order.getShopId());
+			Bills bills = initBill(order, channelId, tenantId);
 
-		synchronized (order.getLoginUser().getId().toString().intern()) {
-			//支付参数
-			SuccessParams successParams = SuccessParams.builder()
-				.orderType(OrderType.USER_PAY.name())
-				.status(AppConstant.BillPayStatus.待付款.name())
-				.userId(order.getLoginUser().getId())
-				.totalPrice(order.getMoney())
-				.bills(bills)
-				.shopId(order.getShopId())
-				.tenantId(tenantId)
-				.channelId(channelId)
-				.build();
+			synchronized (order.getLoginUser().getId().toString().intern()) {
+				//支付参数
+				successParams = SuccessParams.builder()
+					.orderType(OrderType.USER_PAY.name())
+					.status(AppConstant.BillPayStatus.待付款.name())
+					.userId(order.getLoginUser().getId())
+					.totalPrice(order.getMoney())
+					.bills(bills)
+					.shopId(order.getShopId())
+					.tenantId(tenantId)
+					.channelId(channelId)
+					.build();
 
-			//处理各个节点
-			for (BaseHandle node : chain) {
-				HandleData res = node.handle(remain, order, successParams);
-				Assert.isTrue(res.isSuccess(), () -> {
-					throw new TradeException(ResCode.TRADE_ERROR, res.getSuccessParams());
-				});
-				remain = res.getRemain();
-				successParams = res.getSuccessParams();
+				//处理各个节点
+				for (BaseHandle node : chain) {
+					HandleData res = node.handle(remain, order, successParams);
+					Assert.isTrue(res.isSuccess(), () -> {
+						throw new TradeException(ResCode.TRADE_ERROR, res.getSuccessParams());
+					});
+					remain = res.getRemain();
+					successParams = res.getSuccessParams();
 
-				if (remain.compareTo(BigDecimal.ZERO) == 0) {
-					successParams.setStatus(AppConstant.BillPayStatus.付款成功.name());
-					bills.setPayStatus(AppConstant.BillPayStatus.付款成功.name());
-					dataHandle.saveOrUpdateEntity(billsService, successParams.getBills());
-					applicationEventPublisher.publishEvent(new UserPayCsEvent(successParams));
-					break;
+					if (remain.compareTo(BigDecimal.ZERO) == 0) {
+						successParams.setStatus(AppConstant.BillPayStatus.付款成功.name());
+						bills.setPayStatus(AppConstant.BillPayStatus.付款成功.name());
+						dataHandle.saveOrUpdateEntity(billsService, successParams.getBills());
+						applicationEventPublisher.publishEvent(new UserPayCsEvent(successParams));
+						break;
+					}
 				}
-			}
 
-			//新建事务,保存订单信息,
-			SuccessParams finalSuccessParams = successParams;
-			Assert.isTrue(dataHandle.saveOrUpdateEntity(billsService, successParams.getBills()), () -> {
-				throw new TradeException(ResCode.TRADE_ERROR, finalSuccessParams);
-			});
-			PaymentCache.putSuccessParams(Convert.toStr(successParams.getBills().getId()), successParams);
-			return successParams;
+				//新建事务,保存订单信息,
+				SuccessParams finalSuccessParams = successParams;
+				Assert.isTrue(dataHandle.saveOrUpdateEntity(billsService, successParams.getBills()), () -> {
+					throw new TradeException(ResCode.TRADE_ERROR, finalSuccessParams);
+				});
+				PaymentCache.putSuccessParams(Convert.toStr(successParams.getBills().getId()), successParams);
+				return successParams;
+			}
+		} catch (Exception e) {
+			throw new TradeException(ResCode.TRADE_ERROR, successParams);
 		}
 
 	}

+ 1 - 1
ldt-core/src/main/java/org/springblade/payment/handle/handler/BalanceHandle.java

@@ -46,7 +46,7 @@ public class BalanceHandle implements BaseHandle {
 	}
 
 	@Override
-	public HandleData handle(BigDecimal remain, Order order, SuccessParams successParams) throws ServiceException {
+	public HandleData handle(BigDecimal remain, Order order, SuccessParams successParams) throws TradeException {
 
 		LoginUser user = order.getLoginUser();
 		BigDecimal myBalance = user.getBalance();

+ 1 - 1
ldt-core/src/main/java/org/springblade/payment/handle/handler/ChannelPointHandle.java

@@ -45,7 +45,7 @@ public class ChannelPointHandle implements BaseHandle {
 	 * 不足抵消,remain将会流转到下一个节点处理
 	 */
 	@Override
-	public HandleData handle(BigDecimal remain, Order order, SuccessParams successParams) throws ServiceException {
+	public HandleData handle(BigDecimal remain, Order order, SuccessParams successParams) throws TradeException {
 
 		BigDecimal pointRate = BigDecimal.valueOf(PlatformCache.platFormConfig().getPointFee());
 

+ 2 - 1
ldt-core/src/main/java/org/springblade/payment/handle/handler/DiscountHandle.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.AllArgsConstructor;
 import org.springblade.common.cache.PlatformCache;
 import org.springblade.common.config.entity.PlatformConfig;
+import org.springblade.common.utils.TradeException;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.ldt.shop.entity.Shop;
 import org.springblade.ldt.shop.service.IShopService;
@@ -33,7 +34,7 @@ public class DiscountHandle implements BaseHandle {
 	private IJoinRecordService joinRecordService;
 
 	@Override
-	public HandleData handle(BigDecimal remain, Order order, SuccessParams successParams) throws ServiceException {
+	public HandleData handle(BigDecimal remain, Order order, SuccessParams successParams) throws TradeException {
 		PlatformConfig platformConfig = PlatformCache.platFormConfig();
 
 		//获取相关商家、活动、参与情况