lianghanqiang 4 жил өмнө
parent
commit
b706fe6761

+ 20 - 0
pom.xml

@@ -382,6 +382,26 @@
                     </compilerArgs>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-dependencies</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <!--target/lib是依赖jar包的输出目录,根据自己喜好配置-->
+                            <outputDirectory>target/lib</outputDirectory>
+                            <excludeTransitive>false</excludeTransitive>
+                            <stripVersion>false</stripVersion>
+                            <includeScope>runtime</includeScope>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
         </plugins>
     </build>
 

+ 7 - 4
src/main/java/org/springblade/payment/callback/trade/UserPayCallback.java

@@ -32,6 +32,7 @@ import org.springblade.webSocket.WebSocketServer;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.context.event.EventListener;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.Assert;
 
@@ -62,7 +63,7 @@ public class UserPayCallback {
 
 
 	@EventListener
-	@Transactional
+	@Transactional(propagation = Propagation.REQUIRES_NEW)
 	public void   PaySuccess(UserPayEvent userPayEvent) {
 		SuccessParams successParams = userPayEvent.getSuccessParams();
 		PaymentVO paymentVO = PaymentVO.builder().isSuccess(Boolean.FALSE).msg("订单付款异常!").build();
@@ -113,7 +114,7 @@ public class UserPayCallback {
 			});
 
 			//修改用户积分余额
-			Assert.isTrue(dataHandle.saveLoginUser(loginUserService,user), () -> {
+			Assert.isTrue(dataHandle.saveOrUpdateEntity(loginUserService,user), () -> {
 				throw new ServiceException(ResCode.USER_PAY_CALLBACK_ERROR);
 			});
 
@@ -170,7 +171,7 @@ public class UserPayCallback {
 	 */
 	private boolean handlePointBills(PointBills pointBills, LoginUser user, Long channelId) {
 		UserChannelPoint channelPoint = userChannelPointService.getById(channelId);
-		channelPoint.setAvailable(channelPoint.getAvailable().subtract(pointBills.getPrice()));
+		channelPoint.setAvailable(channelPoint.getAvailable().subtract(pointBills.getPrice()).subtract(pointBills.getFee()));
 		user.setChannelPoint(user.getChannelPoint().subtract(pointBills.getPrice()).subtract(pointBills.getFee()));
 		pointBills.setPayStatus(AppConstant.BillPayStatus.付款成功.name());
 		return pointBillsService.saveOrUpdate(pointBills) && userChannelPointService.saveOrUpdate(channelPoint);
@@ -210,7 +211,9 @@ public class UserPayCallback {
 		Shop shop = null;
 		if (!Objects.isNull(bills)) {
 			shop =  shopService.getById(bills.getReceiveId());
-			shop.setBalance(shop.getBalance().add(bills.getPrice()).add(bills.getBalanceNum()));
+			shop.setBalance(shop.getBalance().add(
+				Optional.ofNullable(bills.getPrice()).orElse(BigDecimal.ZERO)).add(Optional.ofNullable(bills.getBalanceNum()).orElse(BigDecimal.ZERO))
+			);
 			shop.setCharge(shop.getCharge().add(bills.getPointNum()));
 		}
 		return Objects.isNull(shop) ? true : shopService.saveOrUpdate(shop);

+ 19 - 27
src/main/java/org/springblade/payment/handle/Trade.java

@@ -1,11 +1,13 @@
 package org.springblade.payment.handle;
 
 import cn.hutool.core.convert.Convert;
+import lombok.AllArgsConstructor;
 import org.springblade.common.cache.PaymentCache;
 import org.springblade.common.enums.AppConstant;
 import org.springblade.common.enums.OrderType;
 import org.springblade.common.enums.ResCode;
 import org.springblade.core.log.exception.ServiceException;
+import org.springblade.ldt.bills.entity.BalanceBills;
 import org.springblade.ldt.bills.entity.Bills;
 import org.springblade.ldt.user.service.IUserChannelPointService;
 import org.springblade.payment.handle.entity.HandleData;
@@ -22,6 +24,7 @@ import org.springblade.payment.service.IPaymentService;
 import org.springblade.webSocket.WebSocketServer;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.Assert;
 import java.math.BigDecimal;
@@ -34,27 +37,16 @@ import java.util.List;
  * @since: 8/26/21 -- 5:53 PM
  */
 @Component
+@AllArgsConstructor
 public class Trade {
-	@Autowired
+
 	private IBillsService billsService;
-	@Autowired
-	private IPointBillsService pointBillsService;
-	@Autowired
-	private IBalanceBillsService balanceBillsService;
-	@Autowired
-	private WebSocketServer webSocketServer;
-	@Autowired
 	private IPaymentService paymentService;
-	@Autowired
-	private IShopService shopService;
-	@Autowired
-	private IActivityService activityService;
-	@Autowired
-	private IJoinRecordService joinRecordService;
-	@Autowired
-	private IUserChannelPointService userChannelPointService ;
-	@Autowired
 	private DataHandle dataHandle ;
+	private BalanceHandle balanceHandle;
+	private ChannelPointHandle channelPointHandle;
+	private DiscountHandle discountHandle;
+	private WxPayHandle wxPayHandle;
 
 
 	@Transactional
@@ -67,10 +59,10 @@ public class Trade {
 		 * 	4、剩余金额用户微信支付
 		 * */
 		List<BaseHandle> chain = new ArrayList(){{
-			add(new DiscountHandle(shopService,activityService,joinRecordService));
-			add(new ChannelPointHandle(pointBillsService,userChannelPointService));
-			add(new BalanceHandle(billsService,balanceBillsService,dataHandle));
-			add(new WxPayHandle(webSocketServer));
+			add(discountHandle);
+			add(channelPointHandle);
+			add(balanceHandle);
+			add(wxPayHandle);
 		}} ;
 
 	 	BigDecimal remain = order.getMoney();
@@ -114,9 +106,9 @@ public class Trade {
 		 * 	4、保存订单信息
 		 * */
 		List<BaseHandle> chain = new ArrayList(){{
-			add(new DiscountHandle(shopService,activityService,joinRecordService));
-			add(new ChannelPointHandle(pointBillsService,userChannelPointService));
-			add(new BalanceHandle(billsService,balanceBillsService,dataHandle));
+			add(discountHandle);
+			add(channelPointHandle);
+			add(balanceHandle);
 		}} ;
 
 		BigDecimal remain = order.getMoney();
@@ -142,6 +134,8 @@ public class Trade {
 			successParams = res.getSuccessParams();
 
 			if(remain.compareTo(BigDecimal.ZERO)==0){
+				//新建事务,保存订单信息,
+				Assert.isTrue(dataHandle.saveOrUpdateEntity(billsService,successParams.getBills()),()->{throw new ServiceException(ResCode.TRADE_ERROR);});
 				//处理积分余额数据变更
 				paymentService.success(successParams);
 				break;
@@ -151,9 +145,8 @@ public class Trade {
 			bills.setPrice(remain);
 		}
 		//新建事务,保存订单信息,
-		Assert.isTrue(dataHandle.saveBills(billsService,successParams.getBills()),()->{throw new ServiceException(ResCode.TRADE_ERROR);});
+		Assert.isTrue(dataHandle.saveOrUpdateEntity(billsService,successParams.getBills()),()->{throw new ServiceException(ResCode.TRADE_ERROR);});
 		PaymentCache.putSuccessParams(Convert.toStr(successParams.getBills().getId()),successParams);
-
 		return successParams;
 
 	}
@@ -181,5 +174,4 @@ public class Trade {
 		return bills;
 	}
 
-
 }

+ 10 - 10
src/main/java/org/springblade/payment/handle/handler/BalanceHandle.java

@@ -14,6 +14,9 @@ import org.springblade.ldt.bills.entity.BalanceBills;
 import org.springblade.ldt.bills.service.IBalanceBillsService;
 import org.springblade.ldt.user.entity.LoginUser;
 import org.springblade.payment.entity.SuccessParams;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.Assert;
 
 import java.math.BigDecimal;
@@ -23,9 +26,9 @@ import java.math.BigDecimal;
  * @description: 用户账户余额处理
  * @since: 8/26/21 -- 6:24 PM
  */
+@Component
 @AllArgsConstructor
 public class  BalanceHandle implements BaseHandle {
-	private IBillsService billsService;
 	private IBalanceBillsService balanceBillsService;
 	private DataHandle dataHandle;
 	/**
@@ -48,7 +51,6 @@ public class  BalanceHandle implements BaseHandle {
 
 		//获取最低的积分余额抵扣门槛
 		BigDecimal minValue = BigDecimal.valueOf(PlatformCache.platFormConfig().getMinValue());
-		BigDecimal minPointFee = BigDecimal.valueOf(PlatformCache.platFormConfig().getMinPointFee());
 
 		if(consumeMax.compareTo(minValue)<=0){
 			successParams.getBills().setBalanceNum(BigDecimal.ZERO);
@@ -69,20 +71,20 @@ public class  BalanceHandle implements BaseHandle {
 			pointFee = myBalance.subtract(handlePrice);
 		}
 
-		BalanceBills balanceBills = addBillRecord(order, user, handlePrice,successParams.getBills().getId(),pointFee);
+		BalanceBills balanceBills = buildBills(order, user, handlePrice,successParams.getBills().getId(),pointFee);
+		Assert.isTrue(dataHandle.saveOrUpdateEntity(balanceBillsService,balanceBills),()->{throw new ServiceException(ResCode.TRADE_ERROR);});
 		successParams.setBalanceBillsId(balanceBills.getId());
 		successParams.getBills().setBalanceNum(handlePrice);
 		successParams.getBills().setPrice(remain);
 
-
 		return HandleData.builder().isSuccess(Boolean.TRUE).successParams(successParams).remain(remain).build();
 	}
 
+
 	/**
-	 * 	添加积分抵消记录
-	 *
-	 * @return*/
-	private BalanceBills addBillRecord(Order order, LoginUser user, BigDecimal price, Long tradeNo,BigDecimal pointFee) {
+	 * 商户积分--构建账单
+	 * */
+	private BalanceBills buildBills(Order order, LoginUser user, BigDecimal price, Long tradeNo,BigDecimal pointFee){
 		BalanceBills balanceBills = new BalanceBills();
 		balanceBills.setReceiveId(order.getShopId());
 		balanceBills.setType(OrderType.PAY_CONSUMER.name());
@@ -93,9 +95,7 @@ public class  BalanceHandle implements BaseHandle {
 		balanceBills.setPrice(price);
 		balanceBills.setFee(pointFee);
 		balanceBills.setTotalPrice(price.add(pointFee));
-		Assert.isTrue(balanceBillsService.save(balanceBills),()->{throw new ServiceException(ResCode.TRADE_ERROR);});
 		return balanceBills;
 	}
 
-
 }

+ 0 - 6
src/main/java/org/springblade/payment/handle/handler/BaseHandle.java

@@ -16,10 +16,4 @@ public interface BaseHandle  {
 	HandleData handle(BigDecimal remain, Order order, SuccessParams successParams) throws Exception;
 
 
-	/**
-	 * 	判断用户积分手续费以及余额情况
-	 * */
-	default boolean judgeBalance(){
-		return false;
-	}
 }

+ 11 - 7
src/main/java/org/springblade/payment/handle/handler/ChannelPointHandle.java

@@ -14,6 +14,9 @@ import org.springblade.ldt.bills.entity.PointBills;
 import org.springblade.ldt.bills.service.IPointBillsService;
 import org.springblade.ldt.user.entity.LoginUser;
 import org.springblade.payment.entity.SuccessParams;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.Assert;
 
 import java.math.BigDecimal;
@@ -25,11 +28,13 @@ import java.util.Objects;
  * @description: 积分交易处理
  * @since: 8/26/21 -- 1:51 PM
  */
+@Component
 @AllArgsConstructor
 public class ChannelPointHandle implements BaseHandle  {
 
 	private IPointBillsService pointBillsService;
 	private IUserChannelPointService userChannelPointService;
+	private DataHandle dataHandle;
 
 	/**
 	 * 	抵消用户的渠道积分,积分足够抵消交易金额,剩余支付金额remain为0,交易结束
@@ -64,7 +69,7 @@ public class ChannelPointHandle implements BaseHandle  {
 		remain = consumeMax.subtract(remain);
 		BigDecimal pointFee;
 		if(remain.compareTo(BigDecimal.ZERO)>=0){
-			pointFee = remain.multiply(pointRate);
+			pointFee = handlePrice.multiply(pointRate);
 			remain =BigDecimal.ZERO;
 			successParams.setStatus(AppConstant.BillPayStatus.付款成功.name());
 		}else{
@@ -73,7 +78,8 @@ public class ChannelPointHandle implements BaseHandle  {
 			pointFee = channelPoint.getAvailable().subtract(handlePrice);
 		}
 
-		PointBills pointBills = addBillRecord(order, user, handlePrice,channelPoint,successParams.getBills().getId(),pointFee);
+		PointBills pointBills = buildBillRecord(order, user, handlePrice,channelPoint,successParams.getBills().getId(),pointFee);
+		Assert.isTrue(dataHandle.saveOrUpdateEntity(pointBillsService,pointBills),()->{throw new ServiceException(ResCode.TRADE_ERROR);});
 
 		successParams.setPointBillsId(pointBills.getId());
 		successParams.getBills().setPointNum(handlePrice);
@@ -81,11 +87,12 @@ public class ChannelPointHandle implements BaseHandle  {
 		return HandleData.builder().isSuccess(Boolean.TRUE).successParams(successParams).remain(remain).build();
 	}
 
+
 	/**
-	 * 	添加积分抵消记录
+	 * 	构建渠道积分账单
 	 *
 	 * @return*/
-	private PointBills addBillRecord(Order order, LoginUser user, BigDecimal price,UserChannelPoint userChannelPoint,Long tradeNo,BigDecimal pointFee) {
+	private PointBills buildBillRecord(Order order, LoginUser user, BigDecimal price,UserChannelPoint userChannelPoint,Long tradeNo,BigDecimal pointFee) {
 		PointBills pointBills = new PointBills();
 		pointBills.setType(OrderType.PAY_CONSUMER.name());
 		pointBills.setPayId(user.getId());
@@ -100,10 +107,7 @@ public class ChannelPointHandle implements BaseHandle  {
 		pointBills.setChannelId(userChannelPoint.getId());
 		pointBills.setChannelName(userChannelPoint.getChannelName());
 		pointBills.setChannelLogo(userChannelPoint.getChannelLogo());
-		Assert.isTrue(pointBillsService.save(pointBills),()->{throw new ServiceException(ResCode.TRADE_ERROR);});
 		return pointBills;
 	}
 
-
-
 }

+ 4 - 10
src/main/java/org/springblade/payment/handle/handler/DataHandle.java

@@ -1,5 +1,6 @@
 package org.springblade.payment.handle.handler;
 
+import org.springblade.core.mp.base.BaseService;
 import org.springblade.ldt.bills.entity.Bills;
 import org.springblade.ldt.bills.service.IBillsService;
 import org.springblade.ldt.user.entity.LoginUser;
@@ -10,22 +11,15 @@ import org.springframework.transaction.annotation.Transactional;
 
 /**
  * @author: lianghanqiang
- * @description: 执行事务插入操作
+ * @description: 执行事务插入操作
  * @since: 9/1/21 -- 10:33 AM
  */
 @Component
 public class DataHandle {
 
 	@Transactional(propagation = Propagation.REQUIRES_NEW)
-	public  boolean saveBills(IBillsService billsService, Bills bills) {
-		return billsService.saveOrUpdate(bills);
+	public <T> boolean saveOrUpdateEntity(BaseService<T> service,T t) {
+		return service.saveOrUpdate(t);
 	}
 
-
-	@Transactional(propagation = Propagation.REQUIRES_NEW)
-	public  boolean saveLoginUser(ILoginUserService loginUserService, LoginUser loginUser) {
-		return loginUserService.saveOrUpdate(loginUser);
-	}
-
-
 }

+ 2 - 0
src/main/java/org/springblade/payment/handle/handler/DiscountHandle.java

@@ -14,6 +14,7 @@ import org.springblade.ldt.activity.entity.JoinRecord;
 import org.springblade.ldt.activity.service.IActivityService;
 import org.springblade.ldt.activity.service.IJoinRecordService;
 import org.springblade.payment.entity.SuccessParams;
+import org.springframework.stereotype.Component;
 
 import java.math.BigDecimal;
 import java.util.Objects;
@@ -23,6 +24,7 @@ import java.util.Objects;
  * @description: 处理各种商家折扣
  * @since: 8/27/21 -- 2:43 PM
  */
+@Component
 @AllArgsConstructor
 public class DiscountHandle implements BaseHandle {
 

+ 2 - 0
src/main/java/org/springblade/payment/handle/handler/WxPayHandle.java

@@ -13,6 +13,7 @@ import org.springblade.payment.handle.entity.Order;
 import org.springblade.ldt.bills.entity.Bills;
 import org.springblade.payment.entity.SuccessParams;
 import org.springblade.webSocket.WebSocketServer;
+import org.springframework.stereotype.Component;
 import org.springframework.util.Assert;
 
 
@@ -23,6 +24,7 @@ import java.math.BigDecimal;
  * @description: 用户需要调起微信支付
  * @since: 8/26/21 -- 6:54 PM
  */
+@Component
 @AllArgsConstructor
 public class WxPayHandle implements BaseHandle {