quanwei
18 hours ago c441dea81bd86bdfb12dff35821fed51f4cc91c2
admin/app/shop/model/plus/region/User.php
@@ -1,136 +1,341 @@
<?php
namespace app\shop\model\plus\region;
use app\shop\model\plus\region\Referee as RefereeModel;
use app\common\model\plus\region\User as UserModel;
use app\common\enum\plus\region\RegionLevelEnum;
/**
 * 股东用户模型
 * Class User
 * @package app\shop\model\plus\region
 */
class User extends UserModel
{
    /**
     * 获取股东用户列表
     */
    public function getList($search, $limit = 15)
    {
        // 构建查询规则
        $model = $this->alias('region')
            ->field('region.*, user.nickName, user.avatarUrl')
            ->with(['grade'])
            ->join('user', 'user.user_id = region.user_id')
            ->where('region.is_delete', '=', 0)
            ->order(['region.create_time' => 'desc']);
        // 查询条件
        if (!empty($search)) {
            $model = $model->where('user.nickName|region.real_name|region.mobile', 'like', '%' . $search . '%');
        }
        // 获取列表数据
        $list = $model->paginate($limit);
        foreach ($list as $user){
            $user['total_money'] = sprintf('%.2f', $user['money'] + $user['freeze_money'] + $user['total_money']);
        }
        return $list;
    }
    public static function getListAll($grade_id = 0)
    {
        $model = new static;
        if($grade_id > 0) {
            $model->where('grade_id', '=', $grade_id);
        }
        return $model->where('is_delete', '=', 0)->with(['grade'])->select();
    }
    /**
     * 编辑股东用户
     * @param $region_id
     * @param $region_level
     */
    public static function getUser($region_id, $region_level = RegionLevelEnum::PROVINCE)
    {
        $model = new static;
        $model = $model->where('region_level', '=', $region_level);
        // 省代理
        if($region_level == RegionLevelEnum::PROVINCE) {
            $model = $model->where('province_id', '=', $region_id);
        }
        if($region_level == RegionLevelEnum::CITY) {
            $model = $model->where('city_id', '=', $region_id);
        }
        if($region_level == RegionLevelEnum::AREA) {
            $model = $model->where('area_id', '=', $region_id);
        }
        return $model->where('is_delete', '=', 0)->select();
    }
    /**
     * 编辑股东用户
     * @param $data
     * @return bool
     */
    public function edit($data)
    {
        return $this->save($data) !== false;
    }
    /**
     * 删除股东用户
     * @return mixed
     */
    public function setDelete()
    {
        return $this->transaction(function () {
            // 标记当前股东记录为已删除
            return $this->save([
                'is_delete' => 1
            ]);
        });
    }
    /**
     * 提现打款成功:累积提现佣金
     */
    public static function totalMoney($user_id, $money)
    {
        $model = self::detail($user_id);
        return $model->save([
            'freeze_money' => $model['freeze_money'] - $money,
            'total_money' => $model['total_money'] + $money,
        ]);
    }
    /**
     * 提现驳回:解冻股东资金
     */
    public static function backFreezeMoney($user_id, $money)
    {
        $model = self::detail($user_id);
        return $model->save([
            'money' => $model['money'] + $money,
            'freeze_money' => $model['freeze_money'] - $money,
        ]);
    }
    /**
     * 获取平台的总销售额
     */
    public function getTotalMoney($type = 'all_money')
    {
        $model = $this;
        if($type == 'money'){
            return $model->sum('money');
        } else if($type == 'freeze_money'){
            return $model->sum('freeze_money');
        } else if($type == 'total_money'){
            return $model->sum('total_money');
        } else if($type == 'all_money'){
            return $model->sum('total_money') + $model->sum('freeze_money') + $model->sum('money');
        }
        return 0;
    }
}
<?php
namespace app\shop\model\plus\region;
use app\common\enum\plus\region\RegionLevelEnum;
use app\common\model\plus\region\User as UserModel;
use app\shop\model\plus\operations\Role as RoleModel;
use app\shop\model\plus\operations\User as UserLoginModel;
/**
 * 股东用户模型
 * Class User
 * @package app\shop\model\plus\region
 */
class User extends UserModel
{
    /**
     * 获取股东用户列表
     */
    public function getList($search, $limit = 15)
    {
        // 构建查询规则
        $model = $this->alias('region')
            ->field('region.*, user.nickName, user.avatarUrl')
            ->with(['grade'])
            ->join('user', 'user.user_id = region.user_id')
            ->where('region.is_delete', '=', 0)
            ->order(['region.create_time' => 'desc']);
        // 查询条件
        if (!empty($search)) {
            $model = $model->where('user.nickName|region.real_name|region.mobile', 'like', '%' . $search . '%');
        }
        // 获取列表数据
        $list = $model->paginate($limit);
        foreach ($list as $user){
            $user['total_money'] = sprintf('%.2f', $user['money'] + $user['freeze_money'] + $user['total_money']);
        }
        return $list;
    }
    public static function getListAll($grade_id = 0)
    {
        $model = new static;
        if($grade_id > 0) {
            $model->where('grade_id', '=', $grade_id);
        }
        return $model->where('is_delete', '=', 0)->with(['grade'])->select();
    }
    /**
     * 编辑股东用户
     * @param $region_id
     * @param $region_level
     */
    public static function getUser($region_id, $region_level = RegionLevelEnum::PROVINCE)
    {
        $model = new static;
        $model = $model->where('region_level', '=', $region_level);
        // 省代理
        if($region_level == RegionLevelEnum::PROVINCE) {
            $model = $model->where('province_id', '=', $region_id);
        }
        if($region_level == RegionLevelEnum::CITY) {
            $model = $model->where('city_id', '=', $region_id);
        }
        if($region_level == RegionLevelEnum::AREA) {
            $model = $model->where('area_id', '=', $region_id);
        }
        return $model->where('is_delete', '=', 0)->select();
    }
    /**
     * 编辑股东用户
     * @param $data
     * @return bool
     */
    public function edit($data)
    {
        $this->startTrans();
        try {
            // 检查区域是否已被占用
            $model = $this->where('user_id', $data['user_id'])->find();
            $checkData = [
                'region_level' => $model['region_level']['value'],
                'is_delete' => 0
            ];
            if ($checkData['region_level'] == 1) {
                $checkData['province_id'] = $model['province_id'];
            } elseif ($checkData['region_level'] == 2) {
                $checkData['province_id'] = $model['province_id'];
                $checkData['city_id'] = $model['city_id'];
            } elseif ($checkData['region_level'] == 3) {
                $checkData['province_id'] = $model['province_id'];
                $checkData['city_id'] = $model['city_id'];
                $checkData['area_id'] = $model['area_id'];
            }
            $conflict = $this->where($checkData)->where('user_id', '<>', $data['user_id'])->find();
            if ($conflict) {
                $this->error = '该区域已有代理,请先删除原有代理';
                return false;
            }
            // 更新区域代理基本信息
            $saveData = [
                'real_name' => $data['real_name'],
                'mobile' => $data['mobile'],
                'update_time' => time()
            ];
            if (!$this->save($saveData)) {
                throw new \Exception('更新失败');
            }
            // 处理管理员账号
            $userLoginModel = new UserLoginModel();
            $admin = $userLoginModel->where('user_id', '=', $data['user_id'])->where('is_super', '=', 1)->find();
            if ($userLoginModel->detail(['real_name'=>$data['real_name'],'user_id'=>['neq'=>$data['user_id']]])){
                throw new \Exception('该账号已存在');
            }
            // 如果传入了用户名,则更新或创建管理员账号
            if (isset($data['user_name']) && !empty($data['user_name'])) {
                $loginData = [
                    'user_id' => $data['user_id'],
                    'user_name' => $data['user_name'],
                    'real_name' => $data['real_name'],
                    'mobile' => $data['mobile'],
                    'is_delete' => 0,
                    'app_id' => self::$app_id,
                    'update_time' => time()
                ];
                if (!empty($data['password'])) {
                    $loginData['user_name'] = salt_hash($data['user_name']);
                    $loginData['password'] = salt_hash($data['password']);
                }
                if ($admin) {
                    // 更新现有管理员账号
                    if (!$userLoginModel->where('shop_user_id', '=', $admin['shop_user_id'])->update($loginData)) {
                        throw new \Exception('管理员账号更新失败');
                    }
                } else {
                    // 创建新的管理员账号
                    $loginData['create_time'] = time();
                    $loginData['is_super'] = 1;
                    $role_id = RoleModel::where('region_level','=',$checkData['region_level'])->value('role_id');
                    $loginData['role_id'] = $role_id;
                    if (!$userLoginModel->save($loginData)) {
                        throw new \Exception('管理员账号创建失败');
                    }
                    // 为新管理员分配默认角色(如果有)
                    $add_arr = [];
                    $model = new UserRole();
                    $add_arr[] = [
                        'region_user_id' => $userLoginModel['region_user_id'],
                        'role_id' => $role_id,
                        'app_id' => self::$app_id,
                    ];
                    $model->saveAll($add_arr);
                }
            }
            $this->commit();
            return true;
        } catch (\Exception $e) {
            $this->error = $e->getMessage();
            $this->rollback();
            return false;
        }
    }
    /**
     * 删除股东用户
     * @return mixed
     */
    public function setDelete()
    {
        return $this->transaction(function () {
            // 标记当前股东记录为已删除
            return $this->save([
                'is_delete' => 1
            ]);
        });
    }
    /**
     * 提现打款成功:累积提现佣金
     */
    public static function totalMoney($user_id, $money)
    {
        $model = self::detail($user_id);
        return $model->save([
            'freeze_money' => $model['freeze_money'] - $money,
            'total_money' => $model['total_money'] + $money,
        ]);
    }
    /**
     * 提现驳回:解冻股东资金
     */
    public static function backFreezeMoney($user_id, $money)
    {
        $model = self::detail($user_id);
        return $model->save([
            'money' => $model['money'] + $money,
            'freeze_money' => $model['freeze_money'] - $money,
        ]);
    }
    /**
     * 添加区域代理(后台直接添加)
     * @param $data
     * @return bool
     */
    public function addRegionUser($data)
    {
        $this->startTrans();
        try {
            // 检查用户是否已经是区域代理
            $existing = self::detail($data['user_id']);
            if ($existing && $existing['is_delete'] == 0) {
                $this->error = '该用户已经是区域代理';
                return false;
            }
            // 检查区域是否已被占用
            $checkData = [
                'region_level' => $data['region_level'],
                'is_delete' => 0
            ];
            if ($data['region_level'] == 1) {
                $checkData['province_id'] = $data['province_id'];
            } elseif ($data['region_level'] == 2) {
                $checkData['province_id'] = $data['province_id'];
                $checkData['city_id'] = $data['city_id'];
            } elseif ($data['region_level'] == 3) {
                $checkData['province_id'] = $data['province_id'];
                $checkData['city_id'] = $data['city_id'];
                $checkData['area_id'] = $data['area_id'];
            }
            $conflict = $this->where($checkData)->find();
            if ($conflict) {
                $this->error = '该区域已有代理,请先删除原有代理';
                return false;
            }
            // 准备数据
            $saveData = [
                'user_id' => $data['user_id'],
                'real_name' => $data['real_name'],
                'mobile' => $data['mobile'],
                'region_level' => $data['region_level'],
                'province_id' => $data['province_id'],
                'city_id' => isset($data['city_id']) ? $data['city_id'] : 0,
                'area_id' => isset($data['area_id']) ? $data['area_id'] : 0,
                'referee_id' => isset($data['referee_id']) ? $data['referee_id'] : 0,
                'grade_id' => isset($data['grade_id']) ? $data['grade_id'] : 0,
                'money' => 0,
                'freeze_money' => 0,
                'total_money' => 0,
                'total_num' => 0,
                'first_num' => 0,
                'second_num' => 0,
                'third_num' => 0,
                'is_delete' => 0,
                'app_id' => self::$app_id,
                'create_time' => time(),
                'update_time' => time()
            ];
            // 如果之前有记录且已删除,则更新
            if ($existing && $existing['is_delete'] == 1) {
                $saveData['update_time'] = time();
                $result = $this->where('user_id', $data['user_id'])->update($saveData);
            } else {
                // 新增
                $result = $this->save($saveData);
            }
            $userLoginModel = new UserLoginModel();
            if ($userLoginModel->detail(['real_name'=>$data['real_name']])){
                throw new \Exception('该账号已存在');
            }
            // 创建管理员账号
            if (isset($data['user_name']) && !empty($data['user_name'])) {
                $loginData = [
                    'user_id' => $data['user_id'],
                    'user_name' => $data['user_name'],
                    'password' => salt_hash($data['password']),
                    'real_name' => $data['real_name'],
                    'is_super' => 1,
                    'mobile' => $data['mobile'],
                    'is_delete' => 0,
                    'app_id' => self::$app_id,
                    'client_id' => 0
                ];
                if (!$userLoginModel->save($loginData)) {
                    throw new \Exception('管理员账号创建失败');
                }
                $role_id = RoleModel::where('region_level','=',$data['region_level'])->value('role_id');
                // 这里可以分配默认角色ID,暂时不分配
                $model = new UserRole();
                $add_arr[] = [
                    'region_user_id' => $userLoginModel['region_user_id'],
                    'role_id' => $role_id,
                    'app_id' => self::$app_id,
                ];
                $model->saveAll($add_arr);
            }
            $this->commit();
            return true;
        } catch (\Exception $e) {
            $this->error = $e->getMessage();
            $this->rollback();
            return false;
        }
    }
    /**
     * 获取平台的总销售额
     */
    public function getTotalMoney($type = 'all_money')
    {
        $model = $this;
        if($type == 'money'){
            return $model->sum('money');
        } else if($type == 'freeze_money'){
            return $model->sum('freeze_money');
        } else if($type == 'total_money'){
            return $model->sum('total_money');
        } else if($type == 'all_money'){
            return $model->sum('total_money') + $model->sum('freeze_money') + $model->sum('money');
        }
        return 0;
    }
}