quanwei
2 days ago 04102f7237efefa744090ed7c25f7b5d0807b679
admin/app/common/model/user/User.php
@@ -3,12 +3,23 @@
namespace app\common\model\user;
use app\common\model\plus\team\Referee as TeamRefereeModel;
use app\common\library\helper;
use app\common\model\BaseModel;
use app\common\model\plus\bonus\Setting as bonusSettingModel;
use app\common\model\plus\team\User as TeamUserModel;
use app\common\model\user\Grade as GradeModel;
use app\common\model\user\PointsLog as PointsLogModel;
use app\common\model\supplier\User as SupplierUserModel;
use app\common\model\store\Clerk as StoreClerkModel;
use app\common\model\user\User as RealUserModel;
use app\common\model\user\User as UserModel;
use app\common\model\settings\Setting as SettingModel;
use app\common\model\plus\agent\Referee as RefereeModel;
use app\shop\model\plus\agent\User as AgentUserModel;
use think\facade\Db; // by lyzflash
use app\common\model\plus\bonus\User as BonusUserModel;
use app\common\model\user\ConsumptionLog as ConsumptionLogModel;
/**
 * 用户模型
 */
@@ -16,6 +27,15 @@
{
    protected $pk = 'user_id';
    protected $name = 'user';
    public static function getOperatingSubsidy($referee_id, $setting)
    {
        $count=self::where('referee_id',$referee_id)->where('grade_id','in',$setting['referee_grade_ids'])->count();
        if ($count>=$setting['referee_grade_count']){
            return true;
        }
        return false;
    }
    /**
     * 修改器
@@ -39,6 +59,13 @@
    public function grade()
    {
        return $this->belongsTo('app\\common\\model\\user\\Grade', 'grade_id', 'grade_id');
    }
    /**
     * 关联分会表
     */
    public function branch()
    {
        return $this->hasOne('app\\common\\model\\branch\\Branch', 'branch_id', 'branch_id');
    }
    /**
@@ -151,11 +178,25 @@
        }
        return true;
    }
    /**
     * 累积用户的可用消费券数量 (批量)
     */
    public function onBatchIncConsumption($data)
    {
        foreach ($data as $userId => $expendPoints) {
            $this->where(['user_id' => $userId])
                ->inc('consumer_coupon', $expendPoints)
                ->inc('total_expend_money', $expendPoints)
                ->update();
            event('UserGrade', $this['user_id']);
        }
        return true;
    }
    /**
     * 累积用户的可用积分
     */
    public function setIncPoints($points, $describe, $decPoints = 0, $upgrade = true)
    public function setIncPoints($points, $describe, $decPoints = 0, $upgrade = true, $is_brand = 0)
    {
        // 新增积分变动明细
        PointsLogModel::add([
@@ -167,9 +208,38 @@
        // 更新用户可用积分
        $data['points'] = ($this['points'] + $points + $decPoints <= 0) ? 0 : $this['points'] + $points + $decPoints;
        if ($is_brand == 1){
            // 用户可用积分
            $data['brand_points'] = ($this['brand_points'] + $points + $decPoints <= 0) ? 0 : $this['brand_points'] + $points + $decPoints;
        }
        // 用户总积分
        if ($points > 0) {
            $data['total_points'] = $this['total_points'] + $points;
        }
        $this->where('user_id', '=', $this['user_id'])->update($data);
        if($upgrade) {
            event('UserGrade', $this['user_id']);
        }
        return true;
    }
    /**
     * 累积用户的可用消费券
     */
    public function setIncConsumption($consumption, $describe, $decConsumption = 0, $upgrade = true)
    {
        // 新增消费券变动明细
        ConsumptionLogModel::add([
            'user_id' => $this['user_id'],
            'value' => $consumption,
            'describe' => $describe,
            'app_id' => $this['app_id'],
        ]);
        // 更新用户可用消费券
        $data['consumer_coupon'] = ($this['consumer_coupon'] + $consumption + $decConsumption <= 0) ? 0 : $this['consumer_coupon'] + $consumption + $decConsumption;
        // 用户总消费券
        if ($consumption > 0) {
            $data['total_expend_money'] = $this['total_expend_money'] + $consumption;
        }
        $this->where('user_id', '=', $this['user_id'])->update($data);
        if($upgrade) {
@@ -249,4 +319,134 @@
        }
        return true;
    }
    public static function getUserByIds($ids, $field = '')
    {
        $ids = is_array($ids) ?: explode(',', $ids);
        $model = new static;
        if ($field) {
            $model = $model->field($field);
        }
        return $model->where('user_id', 'in', $ids)->select();
    }
    /**
     * 购买商品成功:累积购买商品次数
     */
    public static function setRepurchaseFrequency($user_id)
    {
        $user= self::detail($user_id);
        $purchase_count=$user['purchase_count']+1;
        if ($purchase_count==1&&$user['referee_id']){
            $referee= self::detail($user['referee_id']);
            if ($referee){
                $settingConsumption=SettingModel::getItem('consumption');
                if ($settingConsumption['give_away']){
                    $referee->setIncConsumption($settingConsumption['give_away'], '直推首单礼包');
                }
            }
        }
        /*if ($purchase_count>11){
            return false;
        }*/
        self::where('user_id',$user_id)->update([
            'purchase_count'=>$purchase_count
        ]);
        // 用户等级
        event('UserGrade', $user_id);
        $bonusUser=BonusUserModel::detail($user_id);
        if ($bonusUser){
            return BonusUserModel::detail($user_id)->save([
                'purchase_count'=>$purchase_count
            ]);
        }
        return true;
    }
    /**
     * 取消订单:减少累积购买商品次数
     */
    public static function decreasePurchaseCount($user_id,$product,$app_id)
    {
        // 验证是否设置
        $config = bonusSettingModel::getItem('basic', $app_id);
        if (empty($config['become__buy_product_ids'])) {
            return false;
        }
        // 整理商品id集
        $productIds = helper::getArrayColumn($product, 'product_id');
        // 判断商品是否在设置范围内
        $intersect = array_intersect($productIds, $config['become__buy_product_ids']);
        if (empty($intersect)) {
            return false;
        }
        $quantity=0;
        foreach ($product as $item){
            // 检查商品是否是指定的分红商品
            if (in_array($item['product_id'], $config['become__buy_product_ids'])||$item['is_vip']==1) {
                // 获取商品数量
                $quantity+= $item['total_num'];
            }
        }
        $user= self::detail($user_id);
        $purchase_count=$user['purchase_count']-$quantity;
        if ($purchase_count<0){
            $purchase_count=0;
        }
        $grade=(new GradeModel())->where('purchase_count','<=',$purchase_count)->order('purchase_count','desc')->find();
        self::where('user_id',$user_id)->update([
            'purchase_count'=>$purchase_count,
            'grade_id'=>$grade['grade_id']
        ]);
        // 用户等级
        event('UserGrade', $user_id);
        $bonusUser=BonusUserModel::detail($user_id);
        if ($bonusUser){
            return BonusUserModel::detail($user_id)->save([
                'purchase_count'=>$purchase_count
            ]);
        }
        return true;
    }
    /**
     * 获取指定等级推荐人数量
     */
    public function getRefereeGradeCount($user_id,$referee_grade_ids)
    {
        return $this->where('referee_id', 'in', $user_id)->where('grade_id', 'in', $referee_grade_ids)->count();
    }
    public function editReferee($data)
    {
        // 开启事务
        $this->startTrans();
        try {
            // 删除原推荐人关系
            (new AgentUserModel)->onDeleteReferee($this['user_id']);
            //更新推荐人的数量 by yj
            (new RealUserModel())->setOnInvite($this['user_id'],$data['referee_id']);
            // 修改用户推荐人
            (new RealUserModel())->where('user_id', '=', $this['user_id'])->update([
                'referee_id' => $data['referee_id']
            ]);
            // 修改团队的推荐人 by yj
            (new TeamUserModel())->where('user_id', '=', $this['user_id'])->update([
                'referee_id' => $data['referee_id']
            ]);
            // 记录推荐人关系,
            $data['referee_id'] > 0 && RefereeModel::updateRelation($this['user_id'], $data['referee_id']);
            //处理变动用户底下的团队推荐人信息  by yj
            (new AgentUserModel)->onTeamReferee($this['user_id']);
            // 重建团队分红关系  by yj
            $data['referee_id'] > 0 && TeamRefereeModel::createTeam($data['referee_id']);
            $this->commit();
            return true;
        } catch (\Exception $e) {
            $this->error = $e->getMessage();
            $this->rollback();
            return false;
        }
    }
}