<?php namespace App\Models; use App\Command\Log; use Dcat\Admin\Traits\HasDateTimeFormatter; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\Model; class OrderDivideRecord extends Model { use HasDateTimeFormatter; use SoftDeletes; protected $table = 'order_divide_record'; public const COMMISSION_TYPE = [ 1 => '直推佣金', 2 => '间推佣金', 3 => '用户取货佣金', ]; //收益分配 public static function divide($order_id) { $div_members = []; //汇付 分账对象 $orderObj = OrderInfo::find($order_id); $merchant_id = $orderObj->merchant_id; //绑定的商户 $user_id = $orderObj->user_id; //下单用户ID $userObj = User::find($user_id); $spuid = $userObj->spuid; //直推分享人 $second_spuid = $userObj->second_spuid; //间推分享人 $total_amount = 0; //订单商品总价 $commissionPreData = [ 'first_member_id' => '', 'first_amount' => 0, 'second_member_id' => '', 'second_amount' => 0, 'merchant_member_id' => '', 'merchant_amount' => 0, ]; $ogList = OrderGoods::where("order_id", $order_id)->get(); //订单商品 foreach ($ogList as $kk => $item) { $goods_amount = $item->goods_price * $item->goods_number; $total_amount += $goods_amount; //商品信息 $goodObj = Good::find($item->goods_id); $merchant_commission = $goodObj->merchant_commission; $first_commission = $goodObj->first_commission; $second_commission = $goodObj->second_commission; //直推佣金 if ($spuid && $first_commission >= 1 && $first_commission < 100) { $divide_price = number_format($goods_amount * ($first_commission / 100), 2); $spObj = User::find($spuid); //汇付参数 if ($spObj->member_id) { $spObj->total_revenue += $divide_price; //总余额记录 //$spObj->balance += $divide_price; //自动分账打款 字段未使用 $spObj->save(); self::addRecord($item->id, $order_id, $goods_amount, $divide_price, $first_commission, $spuid, $user_id, 1); $commissionPreData['first_member_id'] = $spObj->member_id; $commissionPreData['first_amount'] += $divide_price; } } //间推佣金 if ($second_spuid && $second_commission >= 1 && $second_commission < 100) { $divide_price = number_format($goods_amount * ($second_commission / 100), 2); $spObj = User::find($second_spuid); //汇付参数 if ($spObj->member_id) { $spObj->total_revenue += $divide_price; //$spObj->balance += $divide_price; $spObj->save(); self::addRecord($item->id, $order_id, $goods_amount, $divide_price, $second_commission, $second_spuid, $user_id, 2); $commissionPreData['second_member_id'] = $spObj->member_id; $commissionPreData['second_amount'] += $divide_price; } } //商户分佣记录 if ($merchant_id && $merchant_commission >= 1 && $merchant_commission < 100) { $divide_price = number_format($goods_amount * ($merchant_commission / 100), 2); //收益直接到商户账户 $merObj = Merchant::find($merchant_id); //汇付参数 $member_id = HfCompanyMember::where('merchant_id', $merchant_id)->value('member_id'); if ($member_id) { $merObj->total_revenue += $divide_price; //$merObj->balance += $divide_price; $merObj->save(); //记录 self::addRecord($item->id, $order_id, $goods_amount, $divide_price, $merchant_commission, $merchant_id, $user_id, 3); $commissionPreData['merchant_member_id'] = $member_id; $commissionPreData['merchant_amount'] += $divide_price; } } } //组合分账参数 if ($commissionPreData['first_member_id']) { array_push($div_members, ['member_id' => $commissionPreData['first_member_id'], 'amount' => sprintf("%.2f", $commissionPreData['first_amount']), 'fee_flag' => 'Y']); } if ($commissionPreData['second_member_id']) { array_push($div_members, ['member_id' => $commissionPreData['second_member_id'], 'amount' => sprintf("%.2f", $commissionPreData['second_amount']), 'fee_flag' => 'Y']); } if ($commissionPreData['merchant_member_id']) { array_push($div_members, ['member_id' => $commissionPreData['merchant_member_id'], 'amount' => sprintf("%.2f", $commissionPreData['merchant_amount']), 'fee_flag' => 'Y']); } //商户本身 $aimeiyuePrice = $total_amount - $commissionPreData['first_amount'] - $commissionPreData['second_amount'] - $commissionPreData['merchant_amount']; array_push($div_members, ['member_id' => 0, 'amount' => sprintf("%.2f", $aimeiyuePrice), 'fee_flag' => 'Y']); return $div_members; } public static function addRecord($og_id, $order_id, $goods_amount, $divide_price, $commission, $um_id, $user_id, $sh_type) { $recordObj = new self(); $recordObj->order_id = $order_id; $recordObj->user_id = $user_id; //下单userId $recordObj->og_id = $og_id; $recordObj->order_price = $goods_amount; $recordObj->divide_price = $divide_price; $recordObj->proportion = $commission; $recordObj->um_id = $um_id; $recordObj->sh_type = $sh_type; $recordObj->save(); Log::add('订单分佣记录', $recordObj->toArray()); } }