供应链保证金退款

This commit is contained in:
luofei 2024-02-05 17:17:15 +08:00
parent 959a01a1d1
commit a64abab901
2 changed files with 46 additions and 10 deletions

View File

@ -836,16 +836,23 @@ class StoreOrderOtherDao extends BaseDao
$financeDao->order->order_id = $model->refund_order_id;
$financeDao->platformIn($refundTotal, 'supply_chain_refund', $model->mer_id);
// TODO 暂时不退保证金
// if ($refundOrder->order->status == -1){
// $margin = FinancialRecord::where('order_id', $refundOrder['order_id'])
// ->where('mer_id', $model->mer_id)
// ->where('financial_type', 'auto_margin')
// ->value('number');
// if ($margin) {
// $financeDao->platformOut($margin, 'auto_margin_refund', $model->mer_id);
// }
// }
$marginRecord = FinancialRecord::where('order_id', $refundOrder['order_id'])
->where('mer_id', $model->mer_id)
->where('financial_type', 'auto_margin')
->value('number');
$marginRefunded = FinancialRecord::where('order_id', $refundOrder['order_id'])
->where('mer_id', $model->mer_id)
->where('financial_type', 'auto_margin_refund')
->sum('number');
if ($marginRecord > $marginRefunded) {
/** @var MerchantRepository $merchantRepo */
$merchantRepo = app()->make(MerchantRepository::class);
$merchantRepo->forceMargin = false;
$merchantRepo->merId = $model->mer_id;
[$margin, $financeDao] = $merchantRepo->refundDeposit($refundTotal, $financeDao);
$merchantRepo->addLockMoney($model->mer_id, 'order', $refundOrder['order_id'], $margin);
}
$financeDao->save();
app()->make(MerchantRepository::class)->subLockMoney($model->mer_id, 'order', $refundOrder['order_id'], $refundTotal);

View File

@ -813,4 +813,33 @@ class MerchantRepository extends BaseRepository
return [bcsub($income,$margin,2), $financeDao];
}
/**
* 自动扣除押金
* @param $income
* @param FinancialDao $financeDao
* @return array
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
*/
public function refundDeposit($income, FinancialDao $financeDao)
{
$merchant = Merchant::find($this->merId);
$rate = $this->forceMargin ? 100 : $merchant['auto_margin_rate'];
$margin = bcmul($income, bcdiv($rate, 100,2), 2);
$merchant->paid_margin = bcsub($merchant->paid_margin, $margin, 2);
if ($merchant->paid_margin <= 0) {
return [bcsub($income,$margin,2), $financeDao];
}
if ($merchant->paid_margin < $merchant['margin'] && $merchant->is_margin == 10) {
$merchant->is_margin = 1;
}
$merchant->ot_margin = $merchant->paid_margin;
if ($merchant->save() === false) {
throw new \Exception('merchant 保存出错', 500);
}
$financeDao->platformOut($margin, 'auto_margin_refund', $this->merId);
return [$margin, $financeDao];
}
}