| | |
| | | { |
| | | protected $name = 'vip_area_order'; |
| | | protected $pk = 'id'; |
| | | public $append=['vip_area_type_text']; |
| | | public $append = ['vip_area_type_text']; |
| | | |
| | | /** |
| | | * VIP专区订单类型 |
| | | * @param $value |
| | |
| | | public function getVipAreaTypeTextAttr($value, $data) |
| | | { |
| | | $types = VipAreaTypeEnum::getTypeName(); |
| | | return $types[$data['vip_area_type']]; |
| | | return $types[$data['vip_area_type']]; |
| | | } |
| | | |
| | | /** |
| | |
| | | ->where('order_type', '=', $orderType) |
| | | ->find(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取订单的所有VIP专区订单记录 |
| | | */ |
| | |
| | | if ($order['order_status']['value'] != 30) { |
| | | return false; |
| | | } |
| | | |
| | | |
| | | // 获取该订单的所有VIP专区订单记录 |
| | | $models = self::getAllDetailsByOrderId($order['order_id'], $orderType); |
| | | if ($models->isEmpty()) { |
| | | return false; |
| | | } |
| | | |
| | | |
| | | // 佣金结算天数 |
| | | $settleDays = Setting::getItem('settlement', $order['app_id'])['settle_days']; |
| | | $success = false; |
| | |
| | | if ($model['is_settled'] == 1) { |
| | | continue; |
| | | } |
| | | |
| | | |
| | | // 写入结算时间 |
| | | $deadlineTime = $model['settle_time'] ?: 0; |
| | | if($deadlineTime == 0){ |
| | | $deadlineTime = $order['receipt_time'] + $settleDays * 86400; |
| | | if ($deadlineTime == 0) { |
| | | $deadlineTime = $order['receipt_time'] + $settleDays * 86400; |
| | | $model->save([ |
| | | 'settle_time' => $deadlineTime |
| | | ]); |
| | | } |
| | | |
| | | |
| | | // 未到结算时间,跳过 |
| | | if ($deadlineTime > time()) { |
| | | continue; |
| | |
| | | if ($model['vip_area_user_id'] != 0) { |
| | | User::grantMoney($model['vip_area_user_id'], $model['vip_area_money'], VipAreaTypeEnum::getTypeName()[$model['vip_area_type']]); |
| | | } |
| | | // 发放VIP专区补贴给下级用户(当下级获得推广佣金或复购佣金时) |
| | | // 发放下级收益补贴给下级用户(当下级获得推广佣金或复购佣金时) |
| | | if ($model['vip_area_type'] == 10 || $model['vip_area_type'] == 20) { |
| | | // 获取下级用户的推荐人(即上级用户) |
| | | $superiorUser = UserModel::detail($model['vip_area_user_id']); |
| | | if ($superiorUser && $superiorUser['referee_id']) { |
| | | $vipUser = VipUserModel::detail($superiorUser['vip_area_user_id']); |
| | | if ($vipUser['grade']['operating_subsidy']>0){ |
| | | if ($vipUser['grade']['operating_subsidy'] > 0) { |
| | | // 获取补贴比例设置 |
| | | $subsidyRate = $vipUser['grade']['operating_subsidy']; |
| | | // 计算VIP专区补贴 |
| | | // 计算下级收益补贴 |
| | | $subsidyAmount = bcmul($model['vip_area_money'], bcdiv((string)$subsidyRate, '100', 4), 2); |
| | | User::grantMoney($superiorUser['referee_id'], $subsidyAmount, 'VIP专区补贴'); |
| | | User::grantMoney($superiorUser['referee_id'], $subsidyAmount, '下级收益补贴'); |
| | | // 记录分销订单 |
| | | self::createDistributionOrder($order, $superiorUser['referee_id'], $subsidyAmount, 'vip_subsidy',$model['vip_area_money']); |
| | | self::createDistributionOrder($order, $superiorUser['referee_id'], $subsidyAmount, 'vip_subsidy', $model['vip_area_money']); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | // 发放平台直推佣金(满足直推条件后) |
| | | //self::grantPlatformCommission($order, $model); |
| | | |
| | | |
| | | // 更新VIP订单记录 |
| | | $model->save([ |
| | | 'is_settled' => 1, |
| | | 'settle_time' => time() |
| | | ]); |
| | | |
| | | |
| | | $success = true; |
| | | } |
| | | |
| | | |
| | | return $success; |
| | | } |
| | | |
| | |
| | | // 获取平台直推佣金设置 |
| | | $setting = Setting::getItem('basic', $order['app_id']); |
| | | $requiredReferralCount = $setting['referee_buy_count'] ?? 0; |
| | | |
| | | |
| | | // 如果设置了直推条件且用户有推荐人 |
| | | if ($requiredReferralCount > 0 && $model['vip_area_user_id'] > 0) { |
| | | // 检查推荐人是否满足直推条件(直推用户数量) |
| | | $directReferralsCount = UserModel::where('referee_id', '=', $model['vip_area_user_id'])->count(); |
| | | |
| | | |
| | | if ($directReferralsCount >= $requiredReferralCount) { |
| | | // 计算平台直推佣金 |
| | | $platformCommissionRate = $setting['platform_commission_rate'] ?? 5; |
| | | $platformCommissionAmount = bcmul($model['order_price'], bcdiv((string)$platformCommissionRate, '100', 4), 2); |
| | | |
| | | |
| | | // 发放平台直推佣金 |
| | | User::grantMoney($model['vip_area_user_id'], $platformCommissionAmount, '平台直推佣金'); |
| | | |
| | | |
| | | // 记录分销订单 |
| | | self::createDistributionOrder($order, $model['vip_area_user_id'], $platformCommissionAmount, 'platform_commission',$model['vip_area_money']); |
| | | self::createDistributionOrder($order, $model['vip_area_user_id'], $platformCommissionAmount, 'platform_commission', $model['vip_area_money']); |
| | | } |
| | | } |
| | | } |
| | |
| | | * @param $type |
| | | * @return bool |
| | | */ |
| | | protected static function createDistributionOrder($order, $userId, $amount, $type,$subordinate_money) |
| | | protected static function createDistributionOrder($order, $userId, $amount, $type, $subordinate_money) |
| | | { |
| | | // 创建分销订单记录以跟踪各种类型的佣金 |
| | | $distributionOrder = new self(); |
| | | $vip_area_type = 0; |
| | | switch($type) { |
| | | switch ($type) { |
| | | case 'vip_subsidy': |
| | | $vip_area_type = 30; // VIP专区补贴 |
| | | break; |
| | |
| | | $vip_area_type = 40; // 平台直推佣金 |
| | | break; |
| | | } |
| | | |
| | | |
| | | return $distributionOrder->save([ |
| | | 'user_id' => $userId, |
| | | 'order_id' => $order['order_id'], |
| | |
| | | 'settle_time' => 0, |
| | | 'app_id' => $order['app_id'] |
| | | ]; |
| | | $list=[]; |
| | | $list = []; |
| | | // 计算佣金金额 |
| | | $orderPrice = bcsub(bcsub($order['pay_price'], $order['express_price'], 2), $order['settlement_price'], 2); |
| | | $viewpoint_money=0; |
| | | //$viewpoint_money = 0; |
| | | // 获取当前买家的推荐人信息 |
| | | $userModel = UserModel::detail($order['user_id']); |
| | | if (!empty($userModel) && !empty($userModel['referee_id'])) { |
| | |
| | | $vipGrade = Grade::detail($vipUser['grade_id']); |
| | | if ($vipGrade) { |
| | | $config = Setting::getItem('basic', $order['app_id']); |
| | | if (!empty($config['become__buy_product_ids'])) { |
| | | $purchase_count=(new self())->getPurchaseCount($order['user_id']); |
| | | foreach ($order['product'] as $product){ |
| | | if ($product['is_repurchase']==1){ |
| | | $viewpoint_money=bcadd($viewpoint_money,($product['is_viewpoint_money']?$product['viewpoint_money']:$vipGrade['viewpoint_money']),2); |
| | | } |
| | | if (in_array($product['product_id'], $config['become__buy_product_ids'])||$product['is_vip']) { |
| | | // 获取商品数量 |
| | | $quantity = $product['total_num']; |
| | | // 为每个商品生成分红订单 |
| | | for ($i = 0; $i < $quantity; $i++) { |
| | | if ($purchase_count==1){ |
| | | $list[]=array_merge($data,['vip_area_type'=>10,'vip_area_money'=>$vipGrade['agent_money'],'is_vip'=>1,'purchase_count'=>$purchase_count]); |
| | | $purchase_count = (new self())->getPurchaseCount($order['user_id']); |
| | | $vip_quantity=0; |
| | | $product_price_repurchase=0; |
| | | foreach ($order['product'] as $product) { |
| | | /*if ($product['is_repurchase'] == 1) { |
| | | $viewpoint_money = bcadd($viewpoint_money, ($product['is_viewpoint_money'] ? $product['viewpoint_money'] : $vipGrade['viewpoint_money']), 2); |
| | | }*/ |
| | | if (in_array($product['product_id'], $config['become__buy_product_ids']) || $product['is_vip']) { |
| | | // 获取商品数量 |
| | | $vip_quantity = bcadd($vip_quantity, $product['total_num'], 2); |
| | | // 为每个商品生成分红订单 |
| | | /*for ($i = 0; $i < $quantity; $i++) { |
| | | if ($purchase_count == 1) { |
| | | $list[] = array_merge($data, ['vip_area_type' => 10, 'vip_area_money' => $vipGrade['agent_money'], 'is_vip' => 1, 'purchase_count' => $purchase_count]); |
| | | $purchase_count++; |
| | | } else { |
| | | if ($vipGrade['repurchase_money'] > 0) { |
| | | $list[] = array_merge($data, ['vip_area_type' => 20, 'vip_area_money' => $vipGrade['repurchase_money'], 'is_vip' => 1, 'purchase_count' => $purchase_count]); |
| | | $purchase_count++; |
| | | }else{ |
| | | if ($vipGrade['repurchase_money']>0){ |
| | | $list[]=array_merge($data,['vip_area_type'=>20,'vip_area_money'=>$vipGrade['repurchase_money'],'is_vip'=>1,'purchase_count'=>$purchase_count]); |
| | | $purchase_count++; |
| | | } |
| | | } |
| | | } |
| | | }*/ |
| | | } |
| | | //复购专区利润 |
| | | if($product['is_repurchase']){ |
| | | $product_price_repurchase=bcadd($product_price_repurchase, bcsub($product['total_pay_price'], $product['total_settlement_price'], 2)); |
| | | |
| | | } |
| | | } |
| | | if ($vip_quantity>0){ |
| | | if ($purchase_count == 1) { |
| | | $list[] = array_merge($data, ['vip_area_type' => 10, 'vip_area_money' => bcmul($vipGrade['agent_money'],$vip_quantity,2), 'is_vip' => 1, 'purchase_count' => $purchase_count]); |
| | | } else { |
| | | if ($vipGrade['repurchase_money'] > 0) { |
| | | $list[] = array_merge($data, ['vip_area_type' => 20, 'vip_area_money' => bcmul($vipGrade['repurchase_money'],$vip_quantity,2), 'is_vip' => 1, 'purchase_count' => $purchase_count]); |
| | | } |
| | | } |
| | | } |
| | | if ($product_price_repurchase>0){ |
| | | //复购专区级差奖 |
| | | if ($setting['jcaward']){ |
| | | $refereeJc=User::getAllJcUser($userModel['user_id']); |
| | | foreach ($refereeJc as $v){ |
| | | $list[] = array_merge($data, ['vip_area_type' => 70, 'vip_area_money' =>bcmul($product_price_repurchase, bcdiv($v['bonus_percent'], 100, 4), 2),'vip_area_user_id'=>$v['user_id']]); |
| | | } |
| | | } |
| | | //复购专区平级奖 |
| | | if ($setting['pjaward']){ |
| | | $refereeJc=User::getAllPjUser($userModel['user_id'],$setting['pjaward_level']); |
| | | foreach ($refereeJc as $v){ |
| | | $list[] = array_merge($data, ['vip_area_type' => 80, 'vip_area_money' => bcmul($product_price_repurchase, bcdiv($v['bonus_percent'], 100, 4), 2),'vip_area_user_id'=>$v['user_id']]); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 检查并处理直推佣金 |
| | | $directReferralsCount=0; |
| | | $user=UserModel::detail($order['user_id']); |
| | | $directReferralsCount = 0; |
| | | $user = UserModel::detail($order['user_id']); |
| | | //见点奖 |
| | | if (!empty($user['referee_id'])){ |
| | | /* if (!empty($user['referee_id'])) { |
| | | if ($viewpoint_money > 0 && (new User())->getViewpointMoneyQualification($user['referee_id'], $setting)) { |
| | | $list[] = array_merge($data, ['vip_area_type' => 60, 'vip_area_money' => $viewpoint_money]); |
| | | } |
| | | }*/ |
| | | $requiredReferralCount = $setting['referee_buy_count'] ?? 0; |
| | | if (!empty($user['referee_id'])) { |
| | | // 检查推荐人是否满足直推条件(直推用户数量) |
| | | $directReferralsCount = UserModel::where('referee_id', '=', $user['referee_id'])->count(); |
| | | if ($viewpoint_money>0&&(new User())->getViewpointMoneyQualification($user['referee_id'],$setting)){ |
| | | $list[]=array_merge($data,['vip_area_type'=>60,'vip_area_money'=>$viewpoint_money]); |
| | | } |
| | | } |
| | | $requiredReferralCount = $setting['referee_buy_count'] ?? 0; |
| | | if ($vipGrade['commission']>0 && $directReferralsCount >= $requiredReferralCount&&$orderPrice>0){ |
| | | if ($vipGrade['commission'] > 0 && $directReferralsCount >= $requiredReferralCount && $orderPrice > 0) { |
| | | // 计算平台直推佣金金额 |
| | | $commissionAmount = bcmul($orderPrice, bcdiv($vipGrade['commission'], '100', 4), 2); |
| | | $list[]=array_merge($data,['vip_area_type'=>40,'vip_area_money'=>$commissionAmount]); |
| | | $list[] = array_merge($data, ['vip_area_type' => 40, 'vip_area_money' => $commissionAmount]); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | // 处理供应商推荐人佣金 |
| | | if($order['supplier']['referee_id']!=0){ |
| | | $supplierReferee=VipUserModel::detail($order['supplier']['referee_id']); |
| | | if ($supplierReferee){ |
| | | $vipGradeSupplier=Grade::detail($supplierReferee['grade_id']); |
| | | if ($vipGradeSupplier['supplier_money']>0&&$orderPrice>0){ |
| | | if ($order['supplier']['referee_id'] != 0) { |
| | | $supplierReferee = VipUserModel::detail($order['supplier']['referee_id']); |
| | | if ($supplierReferee) { |
| | | $vipGradeSupplier = Grade::detail($supplierReferee['grade_id']); |
| | | if ($vipGradeSupplier['supplier_money'] > 0 && $orderPrice > 0) { |
| | | // 计算直推店铺交易额佣金金额 |
| | | $supplier_money = bcmul($orderPrice, bcdiv($vipGrade['supplier_money'], '100', 4), 2); |
| | | $list[]=array_merge($data,['vip_area_type'=>50,'vip_area_money'=>$supplier_money,'vip_area_user_id'=>$supplierReferee['user_id'],'referee_id'=>$supplierReferee['referee_id']]); |
| | | $list[] = array_merge($data, ['vip_area_type' => 50, 'vip_area_money' => $supplier_money, 'vip_area_user_id' => $supplierReferee['user_id'], 'referee_id' => $supplierReferee['referee_id']]); |
| | | } |
| | | } |
| | | } |
| | | log_write($list); |
| | | if (empty($list)){ |
| | | if (empty($list)) { |
| | | return true; |
| | | } |
| | | // 保存VIP专区订单记录 |
| | | return $model->saveAll($list); |
| | | }catch (\Exception $e){ |
| | | log_write('创建VIP专区订单失败:'.$e->getMessage()); |
| | | } catch (\Exception $e) { |
| | | log_write('创建VIP专区订单失败:' . $e->getMessage()); |
| | | return false; |
| | | } |
| | | |
| | | } |
| | | |
| | | public function getPurchaseCount($user_id) |
| | | { |
| | | return self::where(['user_id'=>$user_id,'is_vip'=>1])->count()+1; |
| | | return self::where(['user_id' => $user_id, 'is_vip' => 1,'is_invalid'=>0])->count() + 1; |
| | | } |
| | | } |