services->setting->addons->get($mall_id, 'Distribution', '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 = Distribution::find()->select('user_id')->where(['user_id' => $parent_ids, 'status' => StatusEnum::ENABLED]) ->andWhere(['>','level',0]) ->column(); if (empty($parent_ids)) { $trans->commit(); return true; } // 获取上级分销商的等级 $serve_users = Distribution::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 = DistributionUpgradeLimit::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 = DistributionUpgradeCount::setData($mall_id, $parent_id, 0, $pay_money); if ($res == false) throw new Exception('保存业绩报错:'.DistributionUpgradeCount::getStaticError()); } } if ($inster) { $field = ['mall_id','user_id','serve_uid','level','achievement','created_at','updated_at']; $res = Yii::$app->db->createCommand()->batchInsert(DistributionUpgradeLimit::tableName(), $field, $inster)->execute(); if ($res == false) throw new \yii\db\Exception(DistributionUpgradeLimit::getStaticError()); } $trans->commit(); return true; } catch (Exception $e) { $trans->rollBack(); Yii::error('条件升级业绩报错参数:' . json_encode($order)); Yii::error($e->getMessage()); return false; } } }