diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java index 859b864a..6f2d7bf5 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java +++ b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java @@ -619,22 +619,12 @@ public class OrderDetailServiceImpl implements OrderDetailService { } // --------------------- 子财务单分账部分 start --------------------- // 子单的实际金额 - BigDecimal odMoney = financialDetail.getPayMoney().subtract(changeMoney); + BigDecimal odMoney = financialDetail.getPayMoney(); logger.info("子单的实际金额{}", odMoney); - + BigDecimal commissionAmount=BigDecimal.ZERO; if (MoneyUtil.lte0(odMoney)) { - ArrayList divMembers = new ArrayList<>(); - logger.info("子财务单[{}] 应支付金额={} 不需要分账", financialDetail.getId(), odMoney); - divMembers.add(new DivMember("0", MoneyUtil.toS(payMoney), false)); - String orderNo = "OD_" + orderDetailId + "_" + System.currentTimeMillis(); - logger.info("子订单[{}]发起分账: {} 分账人员{}", orderDetailId, JSON.toJSONString(divMembers), orderDetail.getWorkerName()); - JSONObject response = adapayService.paymentConfirm(deptId, orderPayment.getId(), orderNo, MoneyUtil.toS(payMoney), divMembers, null, null); - logger.info("子订单[{}]的分账结果: {}", orderDetailId, response.toString()); - boolean status = AdapayStatusEnum.succeeded.code.equals(response.getString("status")); - // 如果确认支付失败 这里抛出异常 回滚订单状态 - Assert.isTrue(status, response.toString()); - // 分账成功 把罚金状态改为已扣除 + logger.info("子财务单[{}] 应支付金额={} 不需要分账", financialDetail.getId(), odMoney); } else { // 查询师傅的超时扣款记录 List fineRecords = orderFineRecordMapper.selectUnFine(orderDetail.getWorkerId(), orderMaster.getDeptId()); @@ -670,13 +660,21 @@ public class OrderDetailServiceImpl implements OrderDetailService { } } else { // 没有罚金 自己承担手续费 - divMembers.add(new DivMember(memberId, MoneyUtil.toS(odMoney), false)); + divMembers.add(new DivMember(memberId, MoneyUtil.toS(odMoney), false)); // 平台金额部分抽出来部分承担手续费 BigDecimal payCommissionRate = new BigDecimal("0.01"); - BigDecimal commissionAmount = odMoney.multiply(payCommissionRate) + commissionAmount = odMoney.multiply(payCommissionRate) .setScale(2, RoundingMode.UP); // 第一次精度控制 - + if (commissionAmount.compareTo(payMoney) > 0){ + for (FinancialDetail financialDetail1:details){ + payMoney=financialDetail1.getPayMoney(); + if (payMoney.compareTo(commissionAmount)>0){ + fdUpdate.setId(financialDetail1.getId()); + break; + } + } + } payMoney = payMoney.subtract(commissionAmount); fdUpdate.setPayMoney(payMoney); divMembers.add(new DivMember("0", MoneyUtil.toS(commissionAmount), true)); @@ -705,6 +703,9 @@ public class OrderDetailServiceImpl implements OrderDetailService { // 分账成功 把罚金状态改为已扣除 fineIds.forEach(fineRecordId -> orderFineRecordMapper.updateFineStatus(fineRecordId, 1)); logger.info("子单的实际金额{}", odMoney); + if (commissionAmount.compareTo(BigDecimal.ZERO)>0){ + odMoney=odMoney.subtract(commissionAmount); + } if (!haveFine) { String feeAmt = response.getString("fee_amt"); dtx = dtx.add(odMoney).subtract(new BigDecimal(feeAmt)); @@ -828,8 +829,6 @@ public class OrderDetailServiceImpl implements OrderDetailService { } } logger.info("子师傅的费用{}子师傅抽成比例{}", detailFee, BigDecimal.ONE.subtract(teamRete)); - logger.info("大师傅的扣点{},最终的扣完之后的金额{}", masterFee, workerFee); - logger.info("改价单各个金额{},{},{},{}", placeOneMoney, placeTwoMoney, masterFee, workerFee); String orderNo = "FCR_" + fcRecord.getId() + "_" + System.currentTimeMillis(); //调用分账 logger.info("子订单[{}]的[改价单]发起分账", orderDetailId); @@ -1147,8 +1146,10 @@ public class OrderDetailServiceImpl implements OrderDetailService { teamMoney = MoneyUtil.lt0(teamMoney) ? BigDecimal.ZERO : teamMoney; BigDecimal endMoney=financialChangeRecord.getChangeMoney().subtract(saleOneMoney) .subtract(saleTwoMoney).subtract(saleThreeMoney).subtract(deptChangeMoney); - BigDecimal workerMoney=endMoney.multiply(BigDecimal.ONE.subtract(teamRete).setScale(2, RoundingMode.DOWN)); + BigDecimal workerMoney=endMoney.multiply(BigDecimal.ONE.subtract(teamRete)).setScale(2, RoundingMode.DOWN); BigDecimal leaderMoney = endMoney.subtract(workerMoney).add(teamMoney); + logger.info("减去所有返点的金额{}大师傅的金额{}子师傅的金额{}子师傅的费率{}",endMoney,leaderMoney,workerMoney,BigDecimal.ONE.subtract(teamRete)); + financialChangeRecord.setLeaderMoney(leaderMoney); // 截留扣点 暂不需要