services->setting->addons->get($mall_id, 'ServeBonus', 'basic.set_team_achievement'); if (empty($set_team_achievement)) return true;// 不开启统计直接跳过 try { $trans = Yii::$app->db->beginTransaction(); // 获取消费者上级 $parent_ids = UserPartitionRelationship::getParentIdArr($user_id); if (empty($parent_ids)) { $trans->commit(); return true; } // 获取上级的所有属于服务商的用户 $parent_ids = ServeBonus::find()->select('user_id')->where(['user_id' => $parent_ids, 'status' => StatusEnum::ENABLED])->column(); if (empty($parent_ids)) { $trans->commit(); return true; } // 获取上级服务商的等级 $serve_users = ServeBonus::find()->select('mall_id,user_id,level')->where(['user_id' => $parent_ids, 'status' => StatusEnum::ENABLED])->indexBy('user_id')->asArray()->all(); // 增加上级的业绩 $time = time(); foreach ($parent_ids as $parent_id) { $add_achievement = false;// 是否可增加业绩 // 检查是否存在该用户已为服务商增加过业绩 $limit = ServeBonusUpgradeLimit::find()->where(['user_id' => $user_id, 'serve_uid' => $parent_id, 'status' => StatusEnum::ENABLED])->one(); $parent_level = empty($serve_users[$parent_id]['level']) ? 0 : $serve_users[$parent_id]['level']; // 查询是否之前已贡献过业绩 if (empty($limit)) { // 增加一条上级的业绩 $inster[] = [ 'mall_id' => $mall_id, 'user_id' => $user_id, 'serve_uid' => $parent_id, 'level' => $parent_level, 'achievement' => $pay_money, 'created_at' => $time, 'updated_at' => $time, ]; $add_achievement = true; } else { // 当用户已经为该上级生成业绩,并且此业绩生成的等级=上级等级时,则表示此上级还处于当前等级可以继续增加业绩 if ($limit['level'] == $parent_level) { $limit->achievement += $pay_money; if (!$limit->save()) throw new yii\db\Exception($limit->getErrorMessage()); $add_achievement = true; } } // 增加上级统计业绩 if ($add_achievement) { $res = ServeBonusUpgradeCount::setData($mall_id, $parent_id, 0, $pay_money); if ($res == false) throw new Exception('保存业绩报错:'.ServeBonusUpgradeCount::getStaticError()); } } if ($inster) { $field = ['mall_id','user_id','serve_uid','level','achievement','created_at','updated_at']; $res = Yii::$app->db->createCommand()->batchInsert(ServeBonusUpgradeLimit::tableName(), $field, $inster)->execute(); if ($res == false) throw new \yii\db\Exception(ServeBonusUpgradeLimit::getStaticError()); } $trans->commit(); return true; } catch (Exception $e) { $trans->rollBack(); Yii::error('条件升级业绩报错参数:' . json_encode($order)); Yii::error($e->getMessage()); return false; } } /** * 获取用户业绩 * @param int $user_id * @param int $mall_id * @return array */ public static function getUserAchievement($user_id, $mall_id) { $configs = Yii::$app->services->setting->addons->get($mall_id, ServeBonusEnum::ADDONS_NAME, 'basic'); $team_statistics = UserTeamStatistics::find()->where(['mall_id' => $mall_id, 'user_id' => $user_id])->asArray()->one(); $user_statistics = UserStatisticsTotal::find()->where(['mall_id' => $mall_id, 'user_id' => $user_id])->asArray()->one(); $data = []; if ($configs['achievement_count_method'] == 0) { // 支付完成 $data['total_price'] = bcadd(($team_statistics['user_team_order_price_total'] ?? 0), ($user_statistics['pay_money'] ?? 0), 2); } else { // 订单完成 $data['total_price'] = bcadd(($team_statistics['team_finish_order_price_total'] ?? 0), ($user_statistics['finish_order_money'] ?? 0), 2); } $month_statistics = UserTeamMonthStatistics::find()->where(['mall_id' => $mall_id, 'user_id' => $user_id, 'month' => date('Y-m'), 'status' => StatusEnum::ENABLED])->one(); $last_month = date('Y-m', strtotime('last month')); $last_month_statistics = UserTeamMonthStatistics::find()->where(['mall_id' => $mall_id, 'user_id' => $user_id, 'month' => $last_month, 'status' => StatusEnum::ENABLED])->one(); // 获取服务商等级设置的限制条件 $serve_bonus = ServeBonus::find()->where(['user_id' => $user_id, 'mall_id' => $mall_id, 'status' => StatusEnum::ENABLED])->asArray()->one(); $accumulation_condition_money = 0; if ($serve_bonus) { $serve_bonus_level_setting = ServeBonusLevelSetting::find()->where(['mall_id' => $mall_id, 'level' => $serve_bonus['level'], 'status' => StatusEnum::ENABLED])->asArray()->one(); if ($serve_bonus_level_setting['accumulation_condition'] == 1) { $accumulation_condition_money = $serve_bonus_level_setting['accumulation_condition_money']; } } if ($configs['achievement_count_method'] == 0) { // 支付完成 $price = $month_statistics->price ?? 0; $last_price = $last_month_statistics->price ?? 0; } else { // 订单完成 $price = $month_statistics->finish_price ?? 0; $last_price = $last_month_statistics->finish_price ?? 0; } $data['month_achievement'] = $price >= $accumulation_condition_money ? 1 : 0; $data['last_month_achievement'] = $last_price >= $accumulation_condition_money ? 1 : 0; $data['month_price'] = $price ?? 0; $data['last_month_price'] = $last_price ?? 0; return $data; } }