主订单分账时扣除罚金
This commit is contained in:
parent
6436dffee0
commit
e7cdfe188d
|
|
@ -408,6 +408,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
|
|||
if (orderDetail == null) {
|
||||
throw new BaseException("找不到对应的子订单");
|
||||
}
|
||||
OrderMaster orderMaster = orderMasterService.selectById(orderDetail.getOrderMasterId());
|
||||
String odCode = orderDetail.getCode();
|
||||
Assert.isTrue(!orderDetail.getOrderStatus().equals(OrderStatus.FINISH.code()), "订单已经是完成状态");
|
||||
FinancialMaster financialMaster = financialMasterService.selectByOrderMasterId(orderDetail.getOrderMasterId());
|
||||
|
|
@ -463,7 +464,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
|
|||
addPrice = fcRecord.getChangeMoney();
|
||||
BigDecimal fineMoney = BigDecimal.ZERO;
|
||||
// 查询师傅的超时扣款记录
|
||||
List<OrderTimeoutRecord> fineRecords = orderFineRecordMapper.selectUnFine(orderDetail.getWorkerId(), orderDetail.getDeptId());
|
||||
List<OrderTimeoutRecord> fineRecords = orderFineRecordMapper.selectUnFine(orderDetail.getWorkerId(), orderMaster.getDeptId());
|
||||
ArrayList<Long> fineIds = new ArrayList<>();
|
||||
for (OrderTimeoutRecord fineRecord : fineRecords) {
|
||||
// 抵扣超时罚金 这里的罚金是按创建时间升序排列的 优先抵扣最早的罚金
|
||||
|
|
@ -567,7 +568,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
|
|||
logger.info("子财务单[{}] 应支付金额={} 不需要分账", financialDetail.getId(), payMoney);
|
||||
} else {
|
||||
// 查询师傅的超时扣款记录
|
||||
List<OrderTimeoutRecord> fineRecords = orderFineRecordMapper.selectUnFine(orderDetail.getWorkerId(), orderDetail.getDeptId());
|
||||
List<OrderTimeoutRecord> fineRecords = orderFineRecordMapper.selectUnFine(orderDetail.getWorkerId(), orderMaster.getDeptId());
|
||||
// 超时罚金
|
||||
BigDecimal fineMoney = BigDecimal.ZERO;
|
||||
ArrayList<Long> fineIds = new ArrayList<>();
|
||||
|
|
|
|||
|
|
@ -23,6 +23,8 @@ import com.ghy.order.service.OrderMasterService;
|
|||
import com.ghy.payment.domain.FinancialChangeRecord;
|
||||
import com.ghy.payment.domain.FinancialDetail;
|
||||
import com.ghy.payment.domain.FinancialMaster;
|
||||
import com.ghy.payment.domain.OrderTimeoutRecord;
|
||||
import com.ghy.payment.mapper.OrderFineRecordMapper;
|
||||
import com.ghy.payment.service.AdapayService;
|
||||
import com.ghy.payment.service.FinancialChangeRecordService;
|
||||
import com.ghy.payment.service.FinancialDetailService;
|
||||
|
|
@ -69,6 +71,8 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
|||
private FinancialDetailService financialDetailService;
|
||||
@Resource
|
||||
private FinancialChangeRecordService financialChangeRecordService;
|
||||
@Resource
|
||||
private OrderFineRecordMapper orderFineRecordMapper;
|
||||
|
||||
private static final AtomicLong INDEX = new AtomicLong(1L);
|
||||
|
||||
|
|
@ -230,7 +234,29 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
|||
}
|
||||
}
|
||||
|
||||
memberMap.put(AdapayUtils.getWorkerMemberId(orderMaster.getWorkerId(), orderMaster.getDeptId()), bigWorkerAmt);
|
||||
// 超时罚金
|
||||
BigDecimal fineMoney = BigDecimal.ZERO;
|
||||
// 查询师傅的超时扣款记录
|
||||
List<OrderTimeoutRecord> fineRecords = orderFineRecordMapper.selectUnFine(orderMaster.getWorkerId(), orderMaster.getDeptId());
|
||||
ArrayList<Long> fineIds = new ArrayList<>();
|
||||
for (OrderTimeoutRecord fineRecord : fineRecords) {
|
||||
// 抵扣超时罚金 这里的罚金是按创建时间升序排列的 优先抵扣最早的罚金
|
||||
if (fineMoney.add(fineRecord.getPayMoney()).compareTo(bigWorkerAmt) > 0) {
|
||||
// 加价单金额不足以抵扣罚金
|
||||
logger.info("主订单[{}]的服务金额[{}]不足以抵扣罚金{}元", orderMasterId, bigWorkerAmt, fineRecord.getPayMoney());
|
||||
break;
|
||||
} else {
|
||||
// 抵扣罚金
|
||||
logger.info("主订单[{}]的服务金额抵扣罚金{}元", orderMasterId, fineRecord.getPayMoney());
|
||||
fineMoney = fineMoney.add(fineRecord.getPayMoney());
|
||||
// 被抵扣的罚金记录ID先存下来,分账成功后修改状态
|
||||
fineIds.add(fineRecord.getId());
|
||||
}
|
||||
}
|
||||
|
||||
// 罚金分给平台账户
|
||||
memberMap.merge("0", fineMoney, BigDecimal::add);
|
||||
memberMap.put(AdapayUtils.getWorkerMemberId(orderMaster.getWorkerId(), orderMaster.getDeptId()), bigWorkerAmt.subtract(fineMoney));
|
||||
confirmAmt = confirmAmt.add(bigWorkerAmt);
|
||||
|
||||
// 分账账户
|
||||
|
|
@ -264,6 +290,8 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
|||
throw new BaseAdaPayException(response.getString("code"), response.getString("message"));
|
||||
}
|
||||
}
|
||||
// 分账成功 把罚金状态改为已扣除
|
||||
fineIds.forEach(fineRecordId -> orderFineRecordMapper.updateFineStatus(fineRecordId, 1));
|
||||
|
||||
// 走到这里确认支付和分账都成功了 异步进入自动提现流程
|
||||
logger.info("订单[code={}]开始自动提现", orderMaster.getCode());
|
||||
|
|
|
|||
Loading…
Reference in New Issue