custom->logs($logsMsg, $params); // 订单创建统计处理 Yii::$app->db->close(); $t = Yii::$app->db->beginTransaction(); try { if (empty($params)) throw new Exception('参数为空'); $order_ids = $params['order_ids']; $orders = Order::lists([ 'where' => [['id' => $order_ids]], 'with' => ['detail'], ]); if (empty($orders)) throw new Exception('订单查询为空'); $goods_price = 0; $region_statistics = []; foreach ($orders as $order) { $goods_price += $order['goods_price']; $region_statistics[] = ['mall_id' => $order['mall_id'], 'province_id' => 2, 'city_id' => 3, 'order' => $order['pay_money']]; foreach ($order['detail'] as $order_detail) { $goods_id = $order_detail['goods_id']; if (isset($goods_statistics[$goods_id])) { $goods_statistics[$goods_id]['sales_num'] += $order_detail['num']; } else { $goods_statistics[$goods_id]['sales_num'] = $order_detail['num']; $goods_statistics[$goods_id]['goods_id'] = $goods_id; $goods_statistics[$goods_id]['order_num'] = 1; } } } $data = ['order_num' => count($orders), 'order_money' => $goods_price]; Yii::$app->services->statistics->user->set($orders[0]['mall_id'], $orders[0]['user_id'], $data); // 每日数据统计 UserStatisticsTotal::setUserStatisticsTotal($orders[0]['mall_id'], $orders[0]['user_id'], $data); // 总数据统计 Yii::$app->services->statistics->goods->set($orders[0]['mall_id'], $goods_statistics); //商品下单数统计 //地区下单金额统计 foreach ($region_statistics as $region) { if ($region['province_id'] && $region['city_id']) { Yii::$app->services->statistics->region->set($region); } } // 用户行为操作 - 订单创建 $res = UserActionRecord::setData($orders[0]['mall_id'], $orders[0]['user_id'], ['last_create_order_at' => $orders[0]['created_at']]); if ($res == false) throw new Exception(UserActionRecord::getStaticError()); $t->commit(); $logsMsg = '统计 order_create 结束'; Yii::$app->custom->logs($logsMsg); return true; } catch (\Exception $e) { $t->rollBack(); $exception = FormatHelper::exception($e, "数据统计-订单创建"); $logsMsg = '统计 order_create 异常'; Yii::$app->custom->logs($logsMsg, $exception); return false; } } /** * 订单支付统计 * @Author: lun * @DateTime: 2021/11/16 0016 10:51 * @Copyright: copyright (c) 2021 广东七件事集团 * @param null $params */ public function order_pay($params = null) { $logsMsg = '统计 order_pay 进入'; Yii::$app->custom->logs($logsMsg, $params); // 订单支付统计处理 Yii::$app->db->close(); $t = Yii::$app->db->beginTransaction(); try { if (empty($params)) throw new Exception('参数为空'); $order = Order::getOne([['id' => $params['id']]], true, ['detail']); if (empty($order)) throw new Exception('订单查询为空'); $payArr = $userAloneArr = []; $payGoodsNum = 0; // 循环订单详情 foreach ($order['detail'] as $detail) { $payGoodsNum += $detail['num']; $payArr[] = ['goods_id' => $detail['goods_id'], 'pay_money' => $detail['goods_price']]; $userAloneArr[] = ['mall_id' => $detail['mall_id'], 'goods_id' => $detail['goods_id'], 'money' => $detail['goods_price'], 'buy_num' => $detail['num'], 'user_id' => $detail['user_id']]; } // 初始化数据 $data = [ 'pay_num' => 1, 'pay_money' => $order['pay_money'] - $order['shipping_money'], 'original_order_money' => $order['original_goods_price'], 'pay_goods_num' => $payGoodsNum, 'balance_pay' => $order['payment_type'] == PayTypeEnum::BALANCE ? $order['pay_money'] : 0, 'wechat_pay' => $order['payment_type'] == PayTypeEnum::WECHAT ? $order['pay_money'] : 0, 'ali_pay' => $order['payment_type'] == PayTypeEnum::ALI ? $order['pay_money'] : 0, ]; // 每日数据统计 Yii::$app->services->statistics->goods->set($order['mall_id'], $payArr); Yii::$app->services->statistics->user->set($order['mall_id'], $order['user_id'], $data); Yii::$app->services->statistics->region->set(['mall_id' => $order['mall_id'], 'province_id' => $order['province'], 'city_id' => $order['city'], 'pay' => $order['pay_money']]); Yii::$app->services->statistics->alone->set($order['mall_id'], $userAloneArr); // 用户总数据统计 UserStatisticsTotal::setUserStatisticsTotal($order['mall_id'], $order['user_id'], $data); // 用户行为操作 - 支付 UserActionRecord::setData($order['mall_id'], $order['user_id'], ['last_pay_at' => $order['pay_time']]); // 添加用户团队订单数据 $this->addUserTeamAchievementOrder($order, 1); // 用户上级数据维护 $parent_data = ['user_id' => $order['user_id'], 'pay_money' => $data['pay_money'], 'original_order_money' => $data['original_order_money']]; UserTeamStatisticsLogic::incBatchParentDataByUid($parent_data); // 保存统计数据 $achievementService = new AchievementService([]); $achievementService->mall_id = $order['mall_id']; $statisticsBaseData = [ 'user_id' => $order['user_id'], 'date' => date('Ymd', $order['created_at']), ]; // 得到上级user_id $userOrderRelationsService = new UserOrderRelationsService([]); $userOrderRelationsService->mall_id = $order['mall_id']; $userOrderRelations = $userOrderRelationsService->getUserOrderRelations($order['id']); if ($userOrderRelations['is_find']) { $statisticsBaseData['parents_user_ids'] = $userOrderRelations['user_ids']; } $achievementService->saveAchievementStatisticsData( EventNameEnum::ORDER_PAY, $statisticsBaseData, $order ); $t->commit(); // 触发订单完成事件,事务提交完成后触发 $event = new StatisticsOrderPayEvent($order['mall_id']); Yii::$app->services->events->dispatch($event, ['mall_id' => $order['mall_id'], 'id' => $order['id']], $event->listeners); $logsMsg = '统计 order_pay 结束'; Yii::$app->custom->logs($logsMsg); return true; } catch (\Exception $e) { $t->rollBack(); $exception = FormatHelper::exception($e, "数据统计-订单支付"); $logsMsg = '统计 order_pay 异常'; Yii::$app->custom->logs($logsMsg, $exception); return false; } } /** * 订单完成相关统计 * @Author: lun * @DateTime: 2021/12/10 0010 14:31 * @Copyright: copyright (c) 2021 广东七件事集团 * @param null $params */ public function order_finish($params = null) { $logsMsg = '统计 order_finish 进入'; Yii::$app->custom->logs($logsMsg, $params); // 订单完成统计处理 Yii::$app->db->close(); $t = Yii::$app->db->beginTransaction(); try { if (empty($params)) throw new Exception('参数为空'); $order = Order::getOne([['id' => $params['id']]], true, ['detail']); if (empty($order)) throw new Exception('订单查询为空'); $details = $order['detail']; $num = 0; $sellingPrice = 0; // 商品售价 foreach ($details as $detail) { $num += $detail['num']; $sellingPrice += $detail['original_goods_price']; } // 初始化数据 $data = [ 'finish_order_num' => 1, 'finish_order_money' => $order['pay_money'] - $order['shipping_money'], 'finish_goods_num' => $num, 'finish_selling_price' => $sellingPrice, ]; // 每日数据统计 Yii::$app->services->statistics->user->set($order['mall_id'], $order['user_id'], $data); // 用户总数据统计 UserStatisticsTotal::setUserStatisticsTotal($order['mall_id'], $order['user_id'], $data); // 用户上级数据维护 $parent_data = ['user_id' => $order['user_id'], 'pay_money' => $data['finish_order_money'], 'selling_price' => $sellingPrice]; UserTeamStatisticsLogic::incBatchParentFinishOrderByUid($parent_data); // 添加用户团队订单数据 $this->addUserTeamAchievementOrder($order, 2); // 保存统计数据 $achievementService = new AchievementService([]); $achievementService->mall_id = $order['mall_id']; $statisticsBaseData = [ 'date' => date('Ymd', $order['finish_time']), 'user_id' => $order['user_id'] ]; // 得到上级user_id $userOrderRelationsService = new UserOrderRelationsService([]); $userOrderRelationsService->mall_id = $order['mall_id']; $userOrderRelations = $userOrderRelationsService->getUserOrderRelations($order['id']); if ($userOrderRelations['is_find']) { $statisticsBaseData['parents_user_ids'] = $userOrderRelations['user_ids']; } $achievementService->saveAchievementStatisticsData( EventNameEnum::ORDER_FINISH, $statisticsBaseData, $order ); $t->commit(); // 触发订单完成事件,事务提交完成后触发 $event = new StatisticsOrderFinishEvent($order['mall_id']); Yii::$app->services->events->dispatch($event, ['mall_id' => $order['mall_id'], 'id' => $order['id']], $event->listeners); $logsMsg = '统计 order_finish 结束'; Yii::$app->custom->logs($logsMsg); return true; } catch (\Exception $e) { $t->rollBack(); $exception = FormatHelper::exception($e, "数据统计-订单完成"); $logsMsg = '统计 order_finish 异常'; Yii::$app->custom->logs($logsMsg, $exception); return false; } } /** * 订单关闭统计 * @Author: lun * @DateTime: 2021/11/20 0020 16:09 * @Copyright: copyright (c) 2021 广东七件事集团 * @param null $params */ public function order_close($params = null) { $logsMsg = '统计 order_close 进入'; Yii::$app->custom->logs($logsMsg, $params); // 订单关闭统计处理 Yii::$app->db->close(); $t = Yii::$app->db->beginTransaction(); try { if (empty($params)) throw new Exception('参数为空'); $order = Order::getOne([['id' => $params['id']]], true, ['detail']); if (empty($order)) throw new Exception('订单查询为空'); $details = $order['detail']; $num = 0; foreach ($details as $detail) { $num += $detail['num']; } // 初始化数据 $data = ['cancel_order_num' => 1, 'cancel_order_money' => $order['pay_money'], 'cancel_goods_num' => $num]; // 每日数据统计 Yii::$app->services->statistics->user->set($order['mall_id'], $order['user_id'], $data); // 用户总数据统计 UserStatisticsTotal::setUserStatisticsTotal($order['mall_id'], $order['user_id'], $data); $t->commit(); $logsMsg = '统计 order_close 结束'; Yii::$app->custom->logs($logsMsg); return true; } catch (\Exception $e) { $t->rollBack(); $exception = FormatHelper::exception($e, "数据统计-订单关闭"); $logsMsg = '统计 order_close 异常'; Yii::$app->custom->logs($logsMsg, $exception); return false; } } /** * 售后订单数据统计 * @Author: lun * @DateTime: 2021/11/20 0020 15:50 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $params */ public function order_refund($params) { $logsMsg = '统计 order_refund 进入'; Yii::$app->custom->logs($logsMsg, $params); // 订单售后统计处理 Yii::$app->db->close(); $t = Yii::$app->db->beginTransaction(); try { // 查询订单 $refund = OrderRefund::findOne(['id' => $params['id']]); if (empty($refund)) throw new \yii\db\Exception('售后订单查询失败'); // 数据处理 switch ($params['type']) { case RefundTypeEnum::EVENT_APPLY: $statistics = ['refund_order_num' => 1]; break; case RefundTypeEnum::EVENT_FINISH: $order_detail_id = $refund['order_detail_id']; $OrderDetail = OrderDetail::findOne(['id' => $order_detail_id]); $goods_num = empty($OrderDetail) ? 0 : $OrderDetail->num; in_array($refund['type'], [RefundTypeEnum::MONEY, RefundTypeEnum::MONEY_AND_PRODUCT]) && $statistics = ['refund_order_money' => $refund['reality_refund_price'], 'refund_goods_num' => $goods_num]; break; } if (!empty($statistics)) { // 用户数据统计 Yii::$app->services->statistics->user->set($refund['mall_id'], $refund['user_id'], $statistics); // 用户总数据统计 UserStatisticsTotal::setUserStatisticsTotal($refund['mall_id'], $refund['user_id'], $statistics); } $t->commit(); $logsMsg = '统计 order_refund 结束'; Yii::$app->custom->logs($logsMsg); return true; } catch (\Exception $e) { $t->rollBack(); $exception = FormatHelper::exception($e, "数据统计-订单创建"); $logsMsg = '统计 order_refund 异常'; Yii::$app->custom->logs($logsMsg, $exception); return false; } } /** * 用户注册 * @Author: lun * @DateTime: 2021/11/25 0025 17:21 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $params */ public function user_register($params) { $logsMsg = '统计 user_register 进入'; Yii::$app->custom->logs($logsMsg, $params); // 不做统计处理 if (isset($params['is_statistics']) && $params['is_statistics'] === 0) return true; // 注册事件处理 Yii::$app->db->close(); $user_id = $params['user_id']; $user = User::findOne(['id' => $user_id]); if (empty($user)) throw new \Exception('查无此用户'); //初始化新增的用户 UserTeamStatistics::setUserTeamStatistics($user->mall_id, $user_id, []); $t = Yii::$app->db->beginTransaction(); try { /** 团队数据处理start **/ // 1、获取该用户的所有上级 // $user_ids = UserRelationship::getParentIdArr($user_id);// 返回的数组是最高层级处于第一位 $user_ids = UserPartitionRelationship::getParentIdArr($user_id); if (empty($user_ids)) throw new \Exception('该用户无上级'); $user_ids = array_reverse($user_ids); // 数组倒叙 foreach ($user_ids as $deep => $uid) { $data = []; // 2、给上级所有user_team_total字段+1 $data['user_team_total'] = 1; // 3、给间推上级团队人数user_direct_total字段+1 $deep == 0 && $data['user_direct_total'] = 1; // 4、给间间推上级团队人数user_indirect_total字段+1 $deep == 1 && $data['user_indirect_total'] = 1; // 5、保存数据 $res = UserTeamStatistics::setUserTeamStatistics($user->mall_id, $uid, $data); if ($res == false) throw new \Exception(UserTeamStatistics::getStaticError()); } /** 团队数据处理end **/ $t->commit(); // 触发注册事件,事务提交完成后触发 $event = new StatisticsUserRegister($user->mall_id); Yii::$app->services->events->dispatch($event, ['mall_id' => $user->mall_id, 'user_id' => $user_id], $event->listeners); $logsMsg = '统计 user_register 结束'; Yii::$app->custom->logs($logsMsg); return true; } catch (\Exception $e) { $t->rollBack(); $exception = FormatHelper::exception($e, "数据统计-用户注册"); $logsMsg = '统计 user_register 异常'; Yii::$app->custom->logs($logsMsg, $exception); return false; } } /** * 添加团队订单 * * @param array $order * @param integer $status * @return void */ public function addUserTeamAchievementOrder(array $order, int $status) { // 下单人 $user_id = $from_user_id = $order['user_id']; $superior_users = []; $time = time(); // 查询上级团队 $level = 0; while ($user_id && !empty($info = UserUser::getUserParents($user_id))) { $info['parent_id'] && $info['parent_id'] > 0 && $superior_users[] = ['superior_level' => $level + 1, 'superior_user_id' => $info['parent_id']]; $info['second_parent_id'] && $info['second_parent_id'] > 0 && $superior_users[] = ['superior_level' => $level + 2, 'superior_user_id' => $info['second_parent_id']]; $info['third_parent_id'] && $info['third_parent_id'] > 0 && $superior_users[] = ['superior_level' => $level + 3, 'superior_user_id' => $info['third_parent_id']]; $user_id = $info['third_parent_id']; $level = $level + 3; } $team_orders = []; foreach ($superior_users as $item) { $team_orders[] = [ 'mall_id' => $order['mall_id'], 'order_id' => $order['id'], 'user_id' => $from_user_id, 'superior_user_id' => $item['superior_user_id'], 'superior_level' => $item['superior_level'], 'status' => $status, 'created_at' => $time, ]; } $team_orders && UserTeamAchievementOrder::batchInsertData($team_orders); } }