| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- <?php
- namespace addons\Distribution\common\logic;
- use addons\Distribution\common\models\Distribution;
- use addons\Distribution\common\models\DistributionUpgradeCount;
- use addons\Distribution\common\models\DistributionUpgradeLimit;
- use common\enums\StatusEnum;
- use common\models\user\UserPartitionRelationship;
- use common\traits\ErrorTrait;
- use Exception;
- use yii;
- class AchievementLogic
- {
- use ErrorTrait;
- /**
- * 团队业绩条件升级记录
- * @Author: lun
- * @DateTime: 2023/4/1 0001 15:40
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @param $order
- * @return bool
- */
- public static function limitHandle($order)
- {
- $mall_id = $order['mall_id'];
- $user_id = $order['user_id'];
- $pay_money = $order['pay_money'];
- // 获取配置
- $set_team_achievement = Yii::$app->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;
- }
- }
- }
|