order = $order; $this->order_status = $order_status; // 获取配置 $this->config = Yii::$app->services->setting->addons->get($order['mall_id'], DoubleCopyEnum::ADDONS_NAME, 'basic'); } public function handle() { $trans = Yii::$app->db->beginTransaction(); try { $is_execute = true;// 是否执行业绩奖励记录 // 检查是否符合配置要求 if ($this->config['achievement_settle'] == 0 && $this->order_status != OrderStatusEnum::ACCOMPLISH) $is_execute = false; if ($this->config['achievement_settle'] == 1 && $this->order_status != OrderStatusEnum::PAY) $is_execute = false; // 获取商品 $thaw_goods_ids = Json::decode($this->config['thaw_goods_ids'], true) ?? []; if (empty($thaw_goods_ids)) $is_execute = false; // 获取用户所有上级 $user_ids = $this->getParentArr($this->order['user_id']); if (empty($user_ids)) { $trans->commit(); return true; } if ($is_execute) { $time = time(); foreach ($this->order['detail'] as $detail) { // 判断该商品是否属于业绩统计商品 if (in_array($detail['goods_id'], $thaw_goods_ids)) { $money = $detail['goods_price'] - $detail['adjust_money']; foreach ($user_ids as $user_id) { $rows[] = [ 'mall_id' => $this->order['mall_id'], 'user_id' => $user_id, 'order_detail_id' => $detail['id'], 'money' => $money, 'created_at' => $time, 'updated_at' => $time, ]; DoubleCopyUser::saveAchievement($user_id, ['achievement' => $money]); } } } // 批量插入数据 if (!empty($rows)) { $field = ['mall_id','user_id','order_detail_id','money','created_at','updated_at']; Yii::$app->db->createCommand()->batchInsert(DoubleCopyAchievement::tableName(), $field, $rows)->execute(); } } $trans->commit(); // 检测是否达到业绩解冻 Yii::$app->services->rabbitMq->delay(60, ['mall_id' => $this->order['mall_id'],'user_ids' => implode(',', $user_ids),'method' => 'unfreeze'], DoubleCopyLogic::class, 'queueFrozen'); return true; } catch (\Exception $e) { $trans->rollBack(); $exception = FormatHelper::exception($e, "二二复制业绩统计"); $this->setError($exception); return true; } } /** * 获取二二复制的所有上级(包括本人) * @Author: lun * @DateTime: 2022/9/8 0008 17:03 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $user_id * @return array */ public function getParentArr($user_id) { $relation_arr = UserPartitionRelationship::getParentIdArr($user_id); array_push($relation_arr, $user_id); $copy_user_ids = DoubleCopyUser::find()->select('user_id')->where(['user_id' => $relation_arr, 'status' => StatusEnum::ENABLED])->column(); return $copy_user_ids; } }