|
@@ -5,6 +5,7 @@ import com.kym.entity.awoara.MessageBody;
|
|
|
import com.kym.entity.awoara.OrderInfoObject;
|
|
import com.kym.entity.awoara.OrderInfoObject;
|
|
|
import com.kym.service.*;
|
|
import com.kym.service.*;
|
|
|
import com.kym.service.cache.KymCache;
|
|
import com.kym.service.cache.KymCache;
|
|
|
|
|
+import com.kym.service.factory.DiscountStrategyFactory;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
@@ -88,8 +89,8 @@ public class OrderCloseEventHandler implements AwoaraEventHandler<OrderInfoObjec
|
|
|
washOrderService.updateById(washOrder);
|
|
washOrderService.updateById(washOrder);
|
|
|
|
|
|
|
|
|
|
|
|
|
- // todo t_account减(上面已完成),t_station_account冻结户减,t_station_account商户加,t_split_record记录
|
|
|
|
|
- // todo 需要判断是否跨网点,分开处理;跨网点结算比例是消费站点分订单额的30%,充值站点分70%
|
|
|
|
|
|
|
+ // t_account减(上面已完成),t_station_account冻结户减,t_station_account商户加,t_split_record记录
|
|
|
|
|
+ // 需要判断是否跨网点,分开处理;跨网点结算比例是消费站点分订单额的30%,充值站点分70%
|
|
|
if (washOrder.getIsCross()) {
|
|
if (washOrder.getIsCross()) {
|
|
|
// 跨网点订单结算比例是消费站点分订单额的30%,消费站点分70%
|
|
// 跨网点订单结算比例是消费站点分订单额的30%,消费站点分70%
|
|
|
doCrossSplit(washOrder, KymCache.INSTANCE.getUserStationId(washOrder.getUserId()));
|
|
doCrossSplit(washOrder, KymCache.INSTANCE.getUserStationId(washOrder.getUserId()));
|
|
@@ -111,6 +112,15 @@ public class OrderCloseEventHandler implements AwoaraEventHandler<OrderInfoObjec
|
|
|
walletDetail.setStatus(WalletDetail.STATUS_已确认);
|
|
walletDetail.setStatus(WalletDetail.STATUS_已确认);
|
|
|
walletDetailService.save(walletDetail);
|
|
walletDetailService.save(walletDetail);
|
|
|
|
|
|
|
|
|
|
+ // 处理充值权益优惠逻辑/优惠券优惠逻辑/账户优惠金额记录处理逻辑(涉及退款扣减优惠,在NoDiscountHandle中处理)
|
|
|
|
|
+ DiscountStrategyFactory.getDiscountStrategy(washOrder.getDiscountType()).computeDiscount(washOrder, account);
|
|
|
|
|
+
|
|
|
|
|
+ // 更新订单优惠金额
|
|
|
|
|
+ washOrderService.updateById(washOrder);
|
|
|
|
|
+
|
|
|
|
|
+ // 扣费等资金操作
|
|
|
|
|
+ deductions(washOrder, account);
|
|
|
|
|
+
|
|
|
|
|
|
|
|
} else {
|
|
} else {
|
|
|
log.error("订单不存在,订单号:{}", orderInfo.getOrder_id());
|
|
log.error("订单不存在,订单号:{}", orderInfo.getOrder_id());
|
|
@@ -118,6 +128,37 @@ public class OrderCloseEventHandler implements AwoaraEventHandler<OrderInfoObjec
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 扣费等资金操作
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param washOrder
|
|
|
|
|
+ * @param account
|
|
|
|
|
+ */
|
|
|
|
|
+ private void deductions(WashOrder washOrder, Account account) {
|
|
|
|
|
+ // 订单成功
|
|
|
|
|
+ washOrder.setOrderStatus(WashOrder.ORDER_STATUS_成功);
|
|
|
|
|
+ // 充电结束
|
|
|
|
|
+ washOrder.setOrderStatus(WashOrder.PAY_STATUS_已支付);
|
|
|
|
|
+ washOrderService.updateById(washOrder);
|
|
|
|
|
+
|
|
|
|
|
+ // 账户扣费
|
|
|
|
|
+ account.setBalance(account.getBalance() - washOrder.getAmountReceived());
|
|
|
|
|
+ accountService.updateById(account);
|
|
|
|
|
+
|
|
|
|
|
+ // 记录资金流水
|
|
|
|
|
+ var walletDetail = new WalletDetail();
|
|
|
|
|
+ walletDetail.setUserId(washOrder.getUserId());
|
|
|
|
|
+ walletDetail.setOrderNo(washOrder.getOrderId());
|
|
|
|
|
+ // 消费
|
|
|
|
|
+ walletDetail.setType(WalletDetail.TYPE_消费);
|
|
|
|
|
+ walletDetail.setAmount(washOrder.getAmountReceivable());
|
|
|
|
|
+ walletDetail.setTransactionTime(LocalDateTime.now());
|
|
|
|
|
+ // 已确认
|
|
|
|
|
+ walletDetail.setStatus(WalletDetail.STATUS_已确认);
|
|
|
|
|
+ walletDetailService.save(walletDetail);
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 执行(本店)分账操作
|
|
* 执行(本店)分账操作
|
|
|
*
|
|
*
|