|
|
@@ -71,7 +71,9 @@ public class GoodsWholesalePayServiceImpl implements GoodsWholesalePayService {
|
|
|
|
|
|
private final OrderRefundService orderRefundService;
|
|
|
|
|
|
- private UserBenefitsService userBenefitsService;
|
|
|
+ private final UserBenefitsService userBenefitsService;
|
|
|
+
|
|
|
+ private final UserMapper userMapper;
|
|
|
|
|
|
@Override
|
|
|
public GoodsWholesaleOrderDon unifiedPay(GoodsWholesaleOrderPayReq payReq) throws Exception {
|
|
|
@@ -102,6 +104,7 @@ public class GoodsWholesalePayServiceImpl implements GoodsWholesalePayService {
|
|
|
if (!sku.getStatus()) {
|
|
|
throw BusinessRuntimeException.getInstance("规格已下架");
|
|
|
}
|
|
|
+ User user = userMapper.selectById(userId);
|
|
|
//是否交过押金
|
|
|
GoodsWholesaleUserDeposit deposit = depositMapper.selectOne(Wrappers.lambdaQuery(GoodsWholesaleUserDeposit.class)
|
|
|
.in(GoodsWholesaleUserDeposit::getUserId, userIdList)
|
|
|
@@ -110,6 +113,7 @@ public class GoodsWholesalePayServiceImpl implements GoodsWholesalePayService {
|
|
|
if (deposit == null || (!deposit.getIsGoal() && deposit.getStatus() == GoodsWholesaleUserDeposit.Status.refund)) {
|
|
|
singlePrice = sku.getPrice();
|
|
|
}
|
|
|
+ BigDecimal balance = payReq.getBalance();
|
|
|
GoodsWholesaleOrderDon orderDon = new GoodsWholesaleOrderDon();
|
|
|
orderDon.setUserId(userId);
|
|
|
orderDon.setGoodsId(goodsWholesale.getGoodsId());
|
|
|
@@ -119,7 +123,20 @@ public class GoodsWholesalePayServiceImpl implements GoodsWholesalePayService {
|
|
|
orderDon.setMoney(BigDecimal.valueOf(payReq.getNum()).multiply(singlePrice));
|
|
|
String orderNo = SEQUENCE.nextId().toString();
|
|
|
orderDon.setOrderNo(orderNo);
|
|
|
+ if (balance != null) {
|
|
|
+ deductBalancePayOrderMoney(orderDon, balance, user);
|
|
|
+ }
|
|
|
+ //余额支付
|
|
|
+ if (orderDon.getMoney().compareTo(BigDecimal.ZERO) == 0) {
|
|
|
+ orderDon.setStatus(GoodsWholesaleOrderDon.Status.hasPayment);
|
|
|
+ orderDon.setPayTime(DateTime.now());
|
|
|
+ }
|
|
|
goodsWholesaleOrderDonMapper.insert(orderDon);
|
|
|
+ //已支付回调
|
|
|
+ if (orderDon.getStatus() == GoodsWholesaleOrderDon.Status.hasPayment) {
|
|
|
+ //处理批发订单回调
|
|
|
+ unifiedHandleGoodsWholesaleOrderDon(orderDon);
|
|
|
+ }
|
|
|
return orderDon;
|
|
|
}
|
|
|
@Override
|
|
|
@@ -172,11 +189,8 @@ public class GoodsWholesalePayServiceImpl implements GoodsWholesalePayService {
|
|
|
orderDon.setType(GoodsWholesaleOrderDon.Type.ALI_PAY);
|
|
|
orderDon.setBuyerId(buyerId);
|
|
|
goodsWholesaleOrderDonMapper.updateById(orderDon);
|
|
|
- List<Long> userIdList = userBindRelationService.getRelationUserIdList(orderDon.getUserId(), null);
|
|
|
- //退还押金
|
|
|
- returnDeposit(orderDon, userIdList);
|
|
|
- //返批发余额差价
|
|
|
- returnWholesaleBalanceDiffer(orderDon, userIdList);
|
|
|
+ //处理批发订单回调
|
|
|
+ unifiedHandleGoodsWholesaleOrderDon(orderDon);
|
|
|
}
|
|
|
|
|
|
private void returnWholesaleBalanceDiffer(GoodsWholesaleOrderDon orderDon, List<Long> userIdList) throws Exception {
|
|
|
@@ -415,4 +429,39 @@ public class GoodsWholesalePayServiceImpl implements GoodsWholesalePayService {
|
|
|
return thisLevel.getSingle();
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 统一处理批发订单回调
|
|
|
+ */
|
|
|
+ public void unifiedHandleGoodsWholesaleOrderDon(GoodsWholesaleOrderDon orderDon) throws Exception {
|
|
|
+ List<Long> userIdList = userBindRelationService.getRelationUserIdList(orderDon.getUserId(), null);
|
|
|
+ //退还押金
|
|
|
+ returnDeposit(orderDon, userIdList);
|
|
|
+ //返批发余额差价
|
|
|
+ returnWholesaleBalanceDiffer(orderDon, userIdList);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 扣除余额
|
|
|
+ */
|
|
|
+ public void deductBalancePayOrderMoney(GoodsWholesaleOrderDon orderDon, BigDecimal balance, User user) {
|
|
|
+ //存在余额
|
|
|
+ if (balance != null && balance.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ BigDecimal money = orderDon.getMoney();
|
|
|
+ //去掉余额 多出的部分
|
|
|
+ BigDecimal subBalance = balance;
|
|
|
+ orderDon.setMoney(money.subtract(subBalance));
|
|
|
+ if (balance.compareTo(money) >= 0) {
|
|
|
+ orderDon.setMoney(BigDecimal.ZERO);
|
|
|
+ orderDon.setBalance(money);
|
|
|
+ subBalance = money;
|
|
|
+ orderDon.setType(GoodsWholesaleOrderDon.Type.BALANCE);
|
|
|
+ }
|
|
|
+ BigDecimal userBalance = user.getBalance();
|
|
|
+ //扣除余额 是否成功
|
|
|
+ Integer success = userMapper.deductBalance(user.getId(), subBalance, userBalance);
|
|
|
+ if (success != 1) throw BusinessRuntimeException.getInstance("您的余额不足!");
|
|
|
+ orderDon.setBalance(subBalance);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|