| | |
| | | <?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; |
| | | } |
| | | } |