BillPayMerchant.php 4.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. namespace App\Modules\Finance\Models;
  3. use App\Consts\BillConst;
  4. use Illuminate\Database\Eloquent\Model;
  5. use DB;
  6. /**
  7. * Class Bill 账单
  8. * @package App\Modules\Finance\Models
  9. */
  10. class BillPayMerchant extends Model
  11. {
  12. protected $table = 'bills_by_pay_merchants';
  13. //recharge_amount:充值金额
  14. protected $fillable = ['distribution_channel_id', 'distribution_channel_name', 'date', 'recharge_amount', 'tallage', 'settlement_price', 'rate', 'pay_company_id'];
  15. public static function getOne($channelId, $date)
  16. {
  17. return self::where('distribution_channel_id', $channelId)
  18. ->where('date', $date)
  19. ->first();
  20. }
  21. public static function addPayMerchantsBills($recharge_infos)
  22. {
  23. DB::beginTransaction();
  24. try {
  25. foreach ($recharge_infos as $recharge_info) {
  26. $rate = Bill::getRate($recharge_info['distribution_channel_id']);
  27. // 服务费
  28. $serviceAmount = 0;
  29. $channelId = (int)$recharge_info['distribution_channel_id'];
  30. if (time() >= strtotime(BillConst::SERVICE_START)) {
  31. $serviceAmount = (float)$recharge_info['amount'] * BillConst::SERVICE_RATE;
  32. // 保留2位截断小数
  33. $serviceAmount = getFloorNum($serviceAmount,2);
  34. }
  35. // 需要减去服务费
  36. $recharge_info['amount'] = (float)$recharge_info['amount'] - $serviceAmount;
  37. $dataBill['distribution_channel_id'] = $recharge_info['distribution_channel_id'];
  38. $dataBill['date'] = date("Y-m-d", strtotime(date("Y-m-d") . " -1 day"));
  39. $dataBill['recharge_amount'] = (float)$recharge_info['amount'];
  40. $dataBill['settlement_price'] = (float)$recharge_info['amount'] * $rate;
  41. // 保留2位截断小数
  42. $dataBill['settlement_price'] = getFloorNum($dataBill['settlement_price'],2);
  43. $dataBill['rate'] = $rate;
  44. $dataBill['pay_company_id'] = $recharge_info['pay_company_id'];
  45. //TODO 扣税金额为 0
  46. $dataBill['tallage'] = 0;
  47. BillPayMerchant::create($dataBill);
  48. //更新创建提现信息
  49. $dataFinancialStatDB = FinancialPayMerchantBalance::where('distribution_channel_id', $recharge_info['distribution_channel_id'])
  50. ->where('pay_merchant_company_id', $recharge_info['pay_company_id'])
  51. ->first();
  52. if (empty($dataFinancialStatDB)) {
  53. $dataFinancialStat['distribution_channel_id'] = $recharge_info['distribution_channel_id'];
  54. $dataFinancialStat['pay_merchant_company_id'] = $recharge_info['pay_company_id'];
  55. $dataFinancialStat['accumulative_withdrawal_amount'] = 0;
  56. $dataFinancialStat['enable_withdrawal_amount'] = $dataBill['settlement_price'];
  57. $dataFinancialStat['latest_withdrawal_amount'] = 0;
  58. $dataFinancialStat['withdraw_pending_amount'] = 0;
  59. $dataFinancialStat['commission_rate'] = $rate;
  60. FinancialPayMerchantBalance::create($dataFinancialStat);
  61. //FinancialStat::create($dataFinancialStat);
  62. } else {
  63. \Log::info('addPayMerchantsBills:'.$recharge_info['distribution_channel_id'].' enable_withdrawal_amount:'.$dataFinancialStatDB['enable_withdrawal_amount'].' settlement_price:'.$dataBill['settlement_price']);
  64. $dataFinancialStatDB['enable_withdrawal_amount'] = (float)$dataFinancialStatDB['enable_withdrawal_amount'] + (float)$dataBill['settlement_price'];
  65. $dataFinancialStatDB['commission_rate'] = $rate;
  66. $dataFinancialStatDB->save();
  67. }
  68. }
  69. DB::commit();
  70. } catch (\Exception $e) {
  71. \Log::error('add to financial_pay_merchant_balance_failed:' . $e->getMessage());
  72. DB::rollBack();
  73. }
  74. }
  75. }