TimestampBehavior::class, 'attributes' => [ ActiveRecord::EVENT_BEFORE_INSERT => ['created_at'], ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'] ] ] ]; } /** * @inheritdoc */ public function rules() { return [ [['store_id', 'order_id', 'md_id', 'created_at', 'is_send', 'is_clerk', 'saas_user_id', 'clerk_id'], 'integer'], [['clerk_rate', 'rate', 'total_profit', 'pay_profit', 'sale_profit', 'original_price', 'md_price', 'level_rate', 'clerk_profit'], 'number'], [['created_at', 'updated_at'], 'safe'] ]; } /** * 利润计算入表 * @param $order_id * @param $original_price * @param $md_price */ public static function handleProfit($order_id, $original_price, $md_price, $md_id = null) { Yii::warning(['订单id:' . $order_id . '门店收入计算', [$order_id, $original_price, $md_price, $md_id]]); $md_id = $md_id ? $md_id : get_md_id(); $md = Md::findOne($md_id); $order = Order::findOne($order_id); $store_id = $order->store_id ?: get_store_id(); $user = User::findOne($order->user_id); $profit = new self(); $profit->order_id = $order_id; $profit->store_id = $store_id; $profit->saas_user_id = SaasUser::findOne(['mobile' => $user->binding])->id ?: 0; $profit->md_id = $md_id; $clerk_profit = $pay_profit = $sale_profit = 0; $goods = OrderDetail::find()->alias('od') ->leftJoin(Goods::tableName() . ' g', "g.id=od.goods_id and g.is_delete=0") ->where(['od.order_id' => $order_id]) ->select('g.md_rate,g.md_rate_type,g.md_hx_rate,g.md_hx_rate_type,od.total_price') ->asArray()->all(); if ($order->is_offline) { foreach ($goods as $v) { if ($v['md_hx_rate'] > 0) { if (!empty($v['md_hx_rate_type'])) { $clerk_profit += floatval($v['md_hx_rate']); } else { $clerk_profit += floatval($v['total_price'] * $v['md_hx_rate'] / 100); } } else { $clerk_profit += floatval($v['total_price'] * $md->clerk_rate / 100); } } // $clerk_profit += floatval($order->pay_price * $md->clerk_rate / 100); $profit->clerk_profit = $clerk_profit ?? 0; $profit->rate = $md->rate ?? 0; $profit->clerk_rate = $md->clerk_rate ?? 0; $profit->is_clerk = 1; } else { foreach ($goods as $v) { if ($v['md_rate'] > 0) { if (!empty($v['md_rate_type'])) { $pay_profit += floatval($v['md_rate']); } else { $pay_profit += floatval($v['total_price'] * $v['md_rate'] / 100); } } else { $pay_profit += floatval($v['total_price'] * $md->rate / 100); } } $sale_profit = $md_price - $original_price > 0 ? floatval(($md_price - $original_price) * $order->discount / 10) : 0; $profit->sale_profit = $sale_profit; // $pay_profit = floatval($order->pay_price * $md->rate / 100); $profit->pay_profit = $pay_profit ?? 0; $profit->rate = $md->rate ?? 0; } $profit->total_profit = ($sale_profit + $pay_profit + $clerk_profit) ?? 0; $profit->original_price = $original_price ?? 0; $profit->md_price = $md_price ?? 0; $profit->level_rate = $order->discount ?? 0; $profit->save(); } }