| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- <?php
- namespace addons\Community\common\models;
- use addons\Community\common\enums\CommunityEnum;
- use addons\Community\common\enums\ConfigEnum;
- use common\enums\OrderStatusEnum;
- use common\models\order\Order;
- use common\models\user\User;
- use services\common\UserWalletService;
- use Yii;
- /**
- * This is the model class for table "qimall_addons_community_head_commission".
- *
- * @property int $id 主键
- * @property int $status 状态[-1:删除;0:禁用;1启用]
- * @property int $created_at 创建时间
- * @property int $updated_at 修改时间
- * @property int $mall_id 所属商城
- * @property int $user_id 所属用户
- * @property int $head_id 自提点ID
- * @property int $commission 提成金额
- * @property int $order_id 订单ID
- * @property string $intro 提成说明
- * @property int $buyer_user_id 买家ID
- * @property int $is_inflow 买家ID
- * @property int $reward_type 买家ID
- */
- class CommunityHeadCommission extends \common\models\base\BaseActiveRecord
- {
- /**
- * {@inheritdoc}
- */
- public static function tableName()
- {
- return 'qimall_addons_community_head_commission';
- }
- /**
- * {@inheritdoc}
- */
- public function rules()
- {
- return [
- [['status', 'created_at', 'updated_at', 'mall_id', 'user_id', 'head_id', 'commission', 'order_id', 'buyer_user_id', 'is_inflow', 'reward_type'], 'integer'],
- [['intro'], 'string', 'max' => 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());
- }
- }
- }
|