255], ]; } /** * {@inheritdoc} */ public function attributeLabels() { return [ 'id' => 'ID', 'status' => 'Status', 'created_at' => 'Created At', 'updated_at' => 'Updated At', 'mall_id' => 'Mall ID', 'user_id' => 'User ID', 'head_id' => 'Head ID', 'commission' => 'Commission', 'order_id' => 'Order ID', 'intro' => 'Intro', 'buyer_user_id' => 'Buyer User ID', ]; } /** * @return \yii\db\ActiveQuery */ public function getHead(): \yii\db\ActiveQuery { return $this->hasOne(CommunityHead::class, ['id' => 'head_id']); } /** * @return \yii\db\ActiveQuery */ public function getUser(): \yii\db\ActiveQuery { return $this->hasOne(User::class, ['id' => 'user_id']); } /** * @return \yii\db\ActiveQuery */ public function getOrder(): \yii\db\ActiveQuery { return $this->hasOne(Order::class, ['id' => 'order_id']); } /** * 记录分佣 * @param int $mall_id * @param CommunityHeadOrder $headOrder * @param Order $order * @param int $order_status * @return void * @throws \Exception */ public static function create(int $mall_id, CommunityHeadOrder $headOrder, Order $order, int $order_status) { $config = Yii::$app->services->setting->addons->get($mall_id, CommunityEnum::ADDONS_NAME, 'basic'); if ($order_status != $config['settlement_type']) return; // switch ($config['settlement_type']) { // case OrderStatusEnum::PAY: // 订单支付 // break; // case OrderStatusEnum::TAKE_FINISH: // 订单收货 // break; // } $reward = 0; switch ($config['head_commission_type']) { case ConfigEnum::HEAD_COMMISSION_TYPE_FIXED: // 固定金额 $reward = $config['commission']; break; case ConfigEnum::HEAD_COMMISSION_TYPE_RATE: // 百分比 $base_amount = 0; switch ($config['calculate_type']) { case ConfigEnum::CALCULATE_TYPE_PAY_AMOUNT: // 实际支付金额 $base_amount = $order->pay_money; break; case ConfigEnum::CALCULATE_TYPE_GOODS_PRICE: // 商品售价 // 计算商品售价 foreach ($order->detail as $item) { $base_amount += bcmul($item->price, $item->num, 2); } break; case ConfigEnum::CALCULATE_TYPE_GOODS_PROFIT: // 商品利润 foreach ($order->detail as $item) { $base_amount += bcmul(bcsub($item->price, $item->cost_price, 2), $item->num, 2); } break; } $reward = bcmul($base_amount, bcmul($config['commission'], 0.01, 2), 2); break; } if ($reward > 0) { $model = new CommunityHeadCommission(); $model->mall_id = $mall_id; $model->user_id = $headOrder->user_id; $model->head_id = $headOrder->head_id; $model->commission = bcmul($reward, 100); $model->order_id = $order->id; $model->intro = "用户ID为[{$order->user_id}]的自提人完成订单编号为[{$order->order_no}]的订单获得提成"; $model->buyer_user_id = $order->user_id; if (!$model->save()) throw new \Exception('记录佣金失败'); // 这里写入佣金 $desc = "用户 ({$model->user_id}) ,获得自提订单 ($order->id) 奖励, 奖励类型:(佣金), 共奖励 ({$reward}) 元佣金"; $insert_wallet [] = [ 'mall_id' => $model->mall_id, 'user_id' => $model->user_id, 'is_frozen' => false, 'wallet_type' => UserWalletService::WALLET_TYPE_COMMISSION, 'money' => $reward, 'desc' => $desc, 'source_table' => self::tableName(), 'source_table_id' => $model->id, // 取出订单ID? 'from_type' => CommunityEnum::ADDONS_NAME, 'capital_type' => CommunityEnum::COMMUNITY_PICKUP_PRIZE, 'contributor_name' => '', 'order_no' => $order->order_no, // 这里需要订单号 ]; $res = UserWalletService::batchHandleByQueue($insert_wallet); if (empty($res)) throw new \Exception(UserWalletService::getStaticError()); } } }