|
|
@@ -0,0 +1,141 @@
|
|
|
+package org.springblade.payment.callback;
|
|
|
+
|
|
|
+
|
|
|
+import lombok.AllArgsConstructor;
|
|
|
+import org.springblade.common.enums.OrderType;
|
|
|
+import org.springblade.common.enums.ResCode;
|
|
|
+import org.springblade.common.enums.SystemConstant;
|
|
|
+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.bills.entity.PointBills;
|
|
|
+import org.springblade.ldt.bills.service.IBalanceBillsService;
|
|
|
+import org.springblade.ldt.bills.service.IBillsService;
|
|
|
+import org.springblade.ldt.bills.service.IPointBillsService;
|
|
|
+import org.springblade.ldt.mall.entity.Mall;
|
|
|
+import org.springblade.ldt.mall.service.IMallService;
|
|
|
+import org.springblade.ldt.shop.entity.Shop;
|
|
|
+import org.springblade.ldt.shop.service.IShopService;
|
|
|
+import org.springblade.ldt.user.entity.LoginUser;
|
|
|
+import org.springblade.ldt.user.service.ILoginUserService;
|
|
|
+import org.springblade.payment.entity.SuccessParams;
|
|
|
+import org.springblade.payment.event.UserPayEvent;
|
|
|
+import org.springframework.context.event.EventListener;
|
|
|
+import org.springframework.scheduling.annotation.Async;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.util.Assert;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.Objects;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author: lianghanqiang
|
|
|
+ * @description: 用户付款回调
|
|
|
+ * @since: 8/5/21 -- 3:01 PM
|
|
|
+ */
|
|
|
+@Component
|
|
|
+@AllArgsConstructor
|
|
|
+public class UserPayCallback {
|
|
|
+
|
|
|
+ private ILoginUserService loginUserService;
|
|
|
+ private IBillsService billsService;
|
|
|
+ private IPointBillsService pointBillsService;
|
|
|
+ private IBalanceBillsService balanceBillsService;
|
|
|
+ private IShopService shopService;
|
|
|
+ private IMallService mallService;
|
|
|
+
|
|
|
+
|
|
|
+ @EventListener
|
|
|
+ @Async
|
|
|
+ @Transactional
|
|
|
+ public void PaySuccess(UserPayEvent userPayEvent){
|
|
|
+ SuccessParams successParams = userPayEvent.getSuccessParams();
|
|
|
+
|
|
|
+ //获取对应交易的积分账单、余额账单、支付账单以及交易用户
|
|
|
+ LoginUser user = loginUserService.getById(successParams.getUserId());
|
|
|
+ Bills bills = Objects.isNull(successParams.getBillId())? null: billsService.getById(successParams.getBillId());
|
|
|
+ PointBills pointBills = Objects.isNull(successParams.getPointBillsId())? null: pointBillsService.getById(successParams.getPointBillsId());
|
|
|
+ BalanceBills balanceBills = Objects.isNull(successParams.getBalanceBillsId())? null: balanceBillsService.getById(successParams.getBalanceBillsId());
|
|
|
+
|
|
|
+ if(!Objects.isNull(pointBills)){
|
|
|
+ Assert.isTrue(handlePointBills(pointBills,user),() ->{throw new ServiceException(ResCode.USER_PAY_CALLBACK_ERROR);});
|
|
|
+ }
|
|
|
+
|
|
|
+ if(!Objects.isNull(balanceBills)){
|
|
|
+ Assert.isTrue(handleBalanceBills(balanceBills,user),() ->{throw new ServiceException(ResCode.USER_PAY_CALLBACK_ERROR);});
|
|
|
+ }
|
|
|
+
|
|
|
+ if(!Objects.isNull(bills)){
|
|
|
+ Assert.isTrue(handleBills(bills,user,pointBills,balanceBills),() ->{throw new ServiceException(ResCode.USER_PAY_CALLBACK_ERROR);});
|
|
|
+ }
|
|
|
+
|
|
|
+ //修改用户积分余额
|
|
|
+ Assert.isTrue(loginUserService.saveOrUpdate(user),() ->{throw new ServiceException(ResCode.USER_PAY_CALLBACK_ERROR);});
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 修改用户积分以及积分账单状态
|
|
|
+ * */
|
|
|
+ private boolean handlePointBills(PointBills pointBills, LoginUser user) {
|
|
|
+ user.setChannelPoint(user.getChannelPoint()-pointBills.getPrice());
|
|
|
+ pointBills.setStatus(SystemConstant.BillPayStatus.付款成功.name());
|
|
|
+ return pointBillsService.saveOrUpdate(pointBills);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 修改用户账户余额以及余额账单状态
|
|
|
+ * */
|
|
|
+ private boolean handleBalanceBills(BalanceBills balanceBills, LoginUser user) {
|
|
|
+ user.setBalance(user.getBalance()-balanceBills.getPrice());
|
|
|
+ balanceBills.setStatus(SystemConstant.BillPayStatus.付款成功.name());
|
|
|
+ return balanceBillsService.saveOrUpdate(balanceBills);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 修改支付账单状态
|
|
|
+ * */
|
|
|
+ private boolean handleBills(Bills bills, LoginUser user, PointBills pointBills, BalanceBills balanceBills) {
|
|
|
+ //补充更新订单信息
|
|
|
+ if(!Objects.isNull(pointBills)){
|
|
|
+ bills.setPointNum(pointBills.getPrice());
|
|
|
+ }
|
|
|
+ if(!Objects.isNull(balanceBills)){
|
|
|
+ bills.setBalanceNum(balanceBills.getPrice());
|
|
|
+ }
|
|
|
+ bills.setPaystatus(SystemConstant.BillPayStatus.付款成功.name());
|
|
|
+ return billsService.saveOrUpdate(bills) && sendPoint(bills,user);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 商场赠送用户积分
|
|
|
+ **/
|
|
|
+ private boolean sendPoint(Bills bills,LoginUser user){
|
|
|
+ //赠送用户积分
|
|
|
+ BigDecimal payNum = bills.getPrice();
|
|
|
+ Shop shop = shopService.getById(bills.getReceiveId());
|
|
|
+ Mall mall = mallService.getById(shop.getMallId());
|
|
|
+
|
|
|
+ PointBills sendBill = new PointBills();
|
|
|
+ sendBill.setType(OrderType.MALL_SEND.name());
|
|
|
+ sendBill.setStatus(SystemConstant.BillPayStatus.待付款.name());
|
|
|
+ sendBill.setTitle("商场赠送积分");
|
|
|
+ sendBill.setReceiveId(user.getId());
|
|
|
+
|
|
|
+ if(!Objects.isNull(mall)){
|
|
|
+ double balance = mall.getBalance();
|
|
|
+ double pointRate = mall.getPointRate();
|
|
|
+ double sendNum = payNum.multiply(BigDecimal.valueOf(pointRate)).doubleValue();
|
|
|
+
|
|
|
+
|
|
|
+ }else{
|
|
|
+ sendBill.setDesc("商场不存在");
|
|
|
+ }
|
|
|
+ return pointBillsService.saveOrUpdate(sendBill);
|
|
|
+ }
|
|
|
+}
|