services->rabbitMq->push(RabbitMqEnum::EXCHANGE_TASK, RabbitMqEnum::TASK_QUEUE, $data, self::class, 'async_handle'); } /** * @param $data * @return bool */ public static function async_handle($data) { $t = Yii::$app->db->beginTransaction(); try { switch ($data['log_type']) { //点赞 case CardEnums::LOG_TYPE_LIKE: $log = BusinessCardCustomerLog::findOne(['item_id' => $data['item_id'], 'user_id' => $data['user_id'], 'log_type' => $data['log_type']]); $card = BusinessCard::findOne(['id' => $data['item_id']]); if($log && $log->status == 1){ $card->like_num = $card->like_num - 1; }else{ $card->like_num = $card->like_num + 1; } if (!$card->save()) throw new Exception($card->getErrorMessage()); if (!empty($log)) { $log->status = $log->status == 1 ? -1 : 1; if (!$log->save()) { Yii::error('智能名片修改点赞错误'. $log->getErrorMessage()); throw new Exception($log->getErrorMessage()); } } else { $res = BusinessCardStatistics::setData(['mall_id' => $data['mall_id'], 'user_id' => $data['user_id'], 'like_num' => 1]); if ($res === false) { Yii::error('智能名片添加点赞数量统计错误'. BusinessCardStatistics::getStaticError()); throw new Exception(BusinessCardStatistics::getStaticError()); } } break; //新增客户 case CardEnums::LOG_TYPE_USER: $user = User::getOne(['where' => ['=', 'id', $data['item_id']]]); if (!empty($user)) { //直推设置线索统计 if ($user->parent_id == $data['user_id']) { $log = new BusinessCardCustomerLog(); $log->mall_id = $data['mall_id']; $log->user_id = $data['user_id']; $log->item_id = $data['item_id']; $log->log_type = CardEnums::LOG_TYPE_CLUE; if (!$log->save()) { Yii::error('智能名片添加线索日志错误'. $log->getErrorMessage()); throw new Exception($log->getErrorMessage()); } $res = BusinessCardStatistics::setData(['mall_id' => $data['mall_id'], 'user_id' => $data['user_id'], 'clue_num' => 1]); if ($res === false) { Yii::error('智能名片添加线索数量统计错误'. BusinessCardStatistics::getStaticError()); throw new Exception(BusinessCardStatistics::getStaticError()); } } } break; //查看名片 case CardEnums::LOG_TYPE_CARD: // $log_browse $log = BusinessCardCustomerLog::find()->orderBy('id desc') ->where(['item_id' => $data['item_id']]) ->andWhere(['user_id' => $data['user_id']]) ->andWhere(['log_type' => $data['log_type']])->one(); // 每次累加1 $card = BusinessCard::findOne(['id' => $data['item_id']]); $card->browse_num = $card->browse_num + 1; if (!$card->save()) throw new Exception($card->getErrorMessage()); $res = BusinessCardStatistics::setData(['mall_id' => $data['mall_id'], 'user_id' => $data['user_id'], 'browse_num' => 1]); if ($res === false) { Yii::error('智能名片添加浏览数量统计错误'. BusinessCardStatistics::getStaticError()); throw new Exception(BusinessCardStatistics::getStaticError()); } if(!empty($log)){ // 每次新建累加1 $log->id = 0; $log->created_at = time(); $log->updated_at = time(); $log->material_times = $log->material_times + 1; $log->isNewRecord = true; if (!$log->save()) throw new Exception($log->getErrorMessage()); } break; case CardEnums::LOG_TYPE_SHARE: // _share // $log_share = BusinessCardCustomerLog::findOne(['item_id' => $data['item_id'], 'user_id' => $data['user_id'], 'log_type' => $data['log_type']]); // if(!$log_share){ // $res = BusinessCardStatistics::setData(['mall_id' => $data['mall_id'], 'user_id' => $data['user_id'], 'share_num' => 1]); // //更新名片分享次数 // $card_data = BusinessCard::findOne(['id' => $data['item_id'], 'status' => StatusEnum::ENABLED]); // if($card_data){ // $card_data->share_num = $card_data->share_num + 1; // $card_data->save(); // } // $user_card = BusinessCardUser::findOne(['user_id' => $data['user_id'], 'status' => StatusEnum::ENABLED]); // if($user_card){ // $user_card->share_num = $user_card->share_num + 1; // $user_card->save(); // } // if ($res === false) { // $transtcion->rollBack(); // Yii::error('智能名片分享统计错误'. BusinessCardStatistics::getStaticError()); // return; // } // } break; case CardEnums::LOG_TYPE_TURN: // user与card都需要增加分享次数 $card = BusinessCard::findOne(['id' => $data['item_id']]); $card->share_num = $card->share_num + 1; if (!$card->save()) throw new Exception($card->getErrorMessage()); $cardUser = BusinessCardUser::findOne(['user_id' => $card->user_id]); $cardUser->share_num = $cardUser->share_num + 1; if (!$cardUser->save(false)) throw new Exception($cardUser->getErrorMessage()); break; } if(empty($log)){ $model = new BusinessCardCustomerLog(); $model->mall_id = $data['mall_id']; $model->user_id = $data['user_id']; $model->item_id = $data['item_id']; $model->log_type = $data['log_type']; if (!empty($data['material_times'])) { $model->material_times = $data['material_times']; } if (!$model->save()) { Yii::error('智能名片添加客户日志错误'. $model->getErrorMessage()); throw new Exception($model->getErrorMessage()); } } // 记录分数 BusinessCardSecretUserScore::setData($data['mall_id'], $data['user_id'], $data['log_type']); $t->commit(); } catch (Exception $e) { $t->rollBack(); Yii::error("智能名片统计错误 {$e->getMessage()} ,行数: {$e->getLine()} ,文件: {$e->getFile()}"); var_dump($e->getMessage()); return false; } return true; } /** * @param array $order_ids order_ids * @throws Exception */ public static function order_handler(array $order_ids) { $data = ['order_ids' => $order_ids]; Yii::$app->services->rabbitMq->push(RabbitMqEnum::EXCHANGE_TASK, RabbitMqEnum::TASK_QUEUE, $data, self::class, 'async_order_handle'); } public static function async_order_handle($data) { $order_ids = $data['order_ids']; $orders = Order::lists([ 'where'=> [['id' => $order_ids]], 'with' => ['detail'] ]); // $setting = Yii::$app->services->setting->addons->get($mall_id, CardEnums::ADDONS_NAME, 'basic'); // //只统计推荐商品的 // if (!isset($setting['goods_list'])) return; $user_ids = array_column($orders, 'user_id'); $uid = BusinessCardUser::find()->where(['user_id' => $user_ids])->select(['user_id'])->column(); $order_log = []; $order_statistics = []; foreach ($orders as $order) { if(!in_array($order['user_id'], $uid)) continue; $order_log[] = [ 'mall_id' => $order['mall_id'], 'user_id' => $order['user_id'], 'item_id' => $order['id'], 'log_type' => CardEnums::LOG_TYPE_ORDER, 'created_at' => time(), 'updated_at' => time() ]; if (empty($order_statistics)) { $order_statistics = ['mall_id' => $order['mall_id'], 'user_id' => $order['user_id'], 'order_num' => 1]; } else { $order_statistics['order_num'] += 1; } } if (!empty($order_statistics)) BusinessCardStatistics::setData($order_statistics); if (!empty($order_log)) { Yii::$app->db->createCommand()->batchInsert(BusinessCardCustomerLog::tableName(), ['mall_id', 'user_id', 'item_id', 'log_type', 'created_at', 'updated_at'], $order_log)->execute(); } } public static function pay_handler(int $order_id) { $data = ['order_id' => $order_id]; Yii::$app->services->rabbitMq->push(RabbitMqEnum::EXCHANGE_TASK, RabbitMqEnum::TASK_QUEUE, $data, self::class, 'async_pay_handle'); } public static function async_pay_handle($data) { $order_id = $data['order_id']; $order = Order::getOne([['id' => $order_id]]); $exists = BusinessCardUser::find()->where(['user_id' => $order->user_id])->count(); if (!$exists) return; BusinessCardStatistics::setData(['mall_id' => $order->mall_id, 'user_id' => $order->user_id, 'order_money' => $order->original_goods_price]); } public static function band_parent_handle($data) { $bind_user = User::getUser([['=', 'id', $data['user_id'], ['=', 'mall_id', $data['mall_id']]]]);//绑定者,当前登录账号 if (empty($bind_user)) return false; $card = BusinessCard::getOne(['where' => ['=', 'id', $data['card_id']], ['=', 'mall_id', $data['mall_id']], ['=', 'status', StatusEnum::ENABLED]]); if($card){ $parent = UserPartitionRelationship::getParentIdArr($data['user_id']);//查询关系链 if (!in_array($card->user_id, $parent)) return false; //判断绑定者和分享者是否在同一关系链中 $is_extis_user = BusinessCardUser::find()->where(['user_id' => $bind_user->id, 'mall_id' => $data['mall_id']])->count(); //卡片的关系链只能绑定一次 if ($is_extis_user >= 1) return false;//避免重复绑定 if ($card->user_id == $bind_user->id) return false; //自己不可以绑定自己 $insert_data = [ 'mall_id' => $data['mall_id'], 'tags' => $card->tags, 'user_id' => $bind_user->id, 'parent_id' => $card->user_id, 'department_id' => $card->department_id, 'position_id' => $card->position_id, 'is_clue' => $bind_user->parent_id == $card->user_id ? 1 : 0,//主商城关系链中直属上级就是线索,否则不是 ]; $res = BusinessCardUser::setData($insert_data); } } public static function goodsStatistics(){ //获取名片用户 $task_time = BusinessCardTask::find()->orderBy('id desc')->one(); if($task_time){ $buy_user_where = ['and',['>','id',$task_time->last_id],['=','page_type','goods_detail']]; }else{ $buy_user_where = ['and',['=','page_type','goods_detail']]; } $buy_user_data = BuyingPointDay::find()->orderBy('id')->andwhere($buy_user_where); $num = 0; $id = 0; foreach($buy_user_data->asArray()->batch(500) as $buy_data){ foreach($buy_data as $k=>$v){ $user_data = BusinessCardUser::getOne([['user_id'=>$v['user_id'],'status'=>StatusEnum::ENABLED]]); if($user_data && $v['item_id']>0){ $goods_data['goods_id'] = $v['item_id']; $goods_data['mall_id'] = $v['mall_id']; $goods_data['user_id'] = $v['user_id']; $goods_data['parent_id'] = $user_data['parent_id']; $goods_data['total_views'] = $v['browse_num'] ?? 0; $goods_data['browse_time'] = $v['browse_time'] ?? 0; $goods_statitic = BusinessCardGoodsStatistics::setData($goods_data); } $id = $v['id']; $num ++; } } if($id){ $task_add['last_id'] = $id; $task_add['total_num'] = $num; $task = BusinessCardTask::setData($task_add); } } /** * 更新员工级别的图片信息 * @param array $params * @return void */ public static function updateCardInfo(array $params) { $config = Yii::$app->services->setting->addons->get($params['mall_id'], CardEnums::ADDONS_NAME, 'basic'); /** * @var $each BusinessCardUser */ foreach (BusinessCardUser::find()->where(['mall_id' => $params['mall_id']]) ->andWhere(['role_type' => 3])->select('id, user_id')->each() as $each) { /** * @var $card BusinessCard */ $card = BusinessCard::getOne([ ['mall_id' => $params['mall_id']], ['user_id' => $each->user_id], ['status' => [StatusEnum::DISABLED, StatusEnum::ENABLED]] ]); if (!empty($card)) { $card->video = $config['video_url']; $card->video_cover_pic = $config['video_cover_pic']; $card->images = implode(",", Json::decode($config['images'])); $card->share_pic = $config['share_pic']; $card->address = $config['address']; if (!$card->save()) Yii::error($card->getErrorMessage() . " ---- " . __METHOD__); } } } }