getConfig(); if($adminSet['switch'] != 1) throw new Exception('总平台未开启平台抽成'); // 当前订单是否已经处理 $isHas = (int)model('commission_record')->getValue([ ['order_id', '=', $orderId] ],'id'); if($isHas > 0) throw new Exception('当前订单已经处理'); // 获取订单商品信息 $field = 'order_goods_id,order_id,site_id,member_id,goods_id,store_id,num,(real_goods_money + legumes_integral_use) as use_money'; $orderGoodsList = model('order_goods')->getList(['order_id'=>$orderId],$field); // 循环处理 $insertData = []; foreach($orderGoodsList as $orderGoodsInfo){ $useMoney = $orderGoodsInfo['use_money'] ?? 0; if($useMoney <= 0) continue;// 当前订单商品有效金额为0 // 设置获取 $set = (new Setting())->getFinalSet((int)$orderGoodsInfo['site_id'],(int)$orderGoodsInfo['goods_id']); if($set['switch'] != 1) continue;// 当前商品不参与平台抽成 $integralRate = (float)$set['integral_rate'] ?? 0; $operationsRate = (float)$set['operations_rate'] ?? 0; $partnerRate = (float)$set['partner_rate'] ?? 0; $merchantsRate = (float)$set['merchants_rate'] ?? 0; $promoterRate = (float)$set['promoter_rate'] ?? 0; // 根据抽成计算类型生成记录信息 $commissionType = $set['commission_type'] ?? 0;// 抽成计算类型 $operationsMoney = (float)sprintf("%.3f",$useMoney * $operationsRate / 100);// 运营抽成总金额 $operationsTechnologyMoney = (float)sprintf("%.3f",$operationsMoney * 0.2);// 运营抽成 - 技术公司所得(20%) $operationsPlatformMoney = (float)sprintf("%.3f",$operationsMoney - $operationsTechnologyMoney);// 运营抽成 - 平台所得(80%) $insertData[] = [ 'member_id' => $orderGoodsInfo['member_id'], 'site_id' => $orderGoodsInfo['site_id'], 'store_id' => $orderGoodsInfo['store_id'], 'order_id' => $orderGoodsInfo['order_id'], 'order_goods_id' => $orderGoodsInfo['order_goods_id'], 'goods_id' => $orderGoodsInfo['goods_id'], 'real_goods_money' => $useMoney, // 根据计算类型获取值 抽成类型:0=比例,1=固定金额 'integral_rate' => $commissionType == 1 ? -1 : $integralRate, 'integral_money' => $commissionType == 1 ? sprintf("%.3f",$orderGoodsInfo['num'] * $integralRate) : sprintf("%.3f",$useMoney * $integralRate / 100), 'operations_rate' => $operationsRate, 'operations_money' => $operationsMoney, 'partner_rate' => $commissionType == 1 ? -1 : $partnerRate, 'partner_money' => $commissionType == 1 ? sprintf("%.3f",$orderGoodsInfo['num'] * $partnerRate) : sprintf("%.3f",$useMoney * $partnerRate / 100), 'merchants_rate' => $commissionType == 1 ? -1 : $merchantsRate, 'merchants_money' => $commissionType == 1 ? sprintf("%.3f",$orderGoodsInfo['num'] * $merchantsRate) : sprintf("%.3f",$useMoney * $merchantsRate / 100), 'promoter_rate' => $commissionType == 1 ? -1 : $promoterRate, 'promoter_money' => $commissionType == 1 ? sprintf("%.3f",$orderGoodsInfo['num'] * $promoterRate) : sprintf("%.3f",$useMoney * $promoterRate / 100), 'operations_technology_money' => (float)$operationsTechnologyMoney, 'operations_platform_money' => (float)$operationsPlatformMoney, ]; } if(count($insertData) > 0){ model('commission_record')->addList($insertData); // 支付成功 - 抽成记录生成后 - 招商员佣金结算 Queue::push(MerchantsSettlementJob::class,[ 'order_id' => (int)$orderId ]); // 支付成功 - 抽成记录生成后 - 推广员佣金结算 Queue::push(PromoterSettlementJob::class,[ 'order_id' => (int)$orderId, ]); } } catch(\Exception $e){ $data['error_msg'] = $e->getMessage(); trace($data, '平台抽成 - 支付成功生成抽成记录 - 失败'); } $job->delete(); } public function failed($data){ trace($data, '平台抽成 - 支付成功生成抽成记录 - 失败(failed)'); } }