Files
swiftadmin/app/admin/service/UserService.php
七彩枫叶 b9e010f467 修复会员管理默认status=1的数据
Signed-off-by: 七彩枫叶 <424235748@qq.com>
2024-01-16 15:35:36 +00:00

156 lines
5.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
declare (strict_types=1);
// +----------------------------------------------------------------------
// | swiftAdmin 极速开发框架 [基于WebMan开发]
// +----------------------------------------------------------------------
// | Copyright (c) 2020-2030 http://www.swiftadmin.net
// +----------------------------------------------------------------------
// | swiftAdmin.net High Speed Development Framework
// +----------------------------------------------------------------------
// | Author: meystack <coolsec@foxmail.com> Apache 2.0 License
// +----------------------------------------------------------------------
namespace app\admin\service;
use app\common\exception\OperateException;
use app\common\model\system\User;
use app\common\model\system\UserGroup;
use system\IpLocation;
use system\Random;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
use think\facade\Db;
class UserService
{
/**
*
* @param array $params
* @param array $conditions
* @return array
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
*/
public static function dataList(array $params = [], array $conditions = []): array
{
$page = (int)$params['page'] ?: 1;
$limit = (int)$params['limit'] ?: 10;
if(!empty($params['status']))
{
$where[]=['status','=',$params['status']==1?0:1];
}
if (!empty($params['nickname'])) {
$where[] = ['nickname','like','%'.$params['nickname'].'%'];
}
if (!empty($params['group_id'])) {
$where[] = ['group_id','find in set',$params['group_id']];
}
$conditions = array_merge($conditions, $where ?? []);
$model = new User();
$count = $model->where($conditions)->count();
$page = ($count <= $limit) ? 1 : $page;
$list = $model->where($conditions)->order("id asc")->limit($limit)->page($page)->select();
// 循环处理数据
$userGroup = (new UserGroup)->select()->toArray();
$qqWry = new IpLocation();
foreach ($list as $key => $value) {
$value->hidden(['pwd', 'salt']);
$loginIp = $value['login_ip'];
if (!empty($loginIp)) {
$region = $qqWry->getLocation($loginIp);
$list[$key]['region'] = $region['country'] . ' ' . $region['area'];
} else {
$list[$key]['region'] = 'unKnown';
}
$result = list_search($userGroup,['id'=> $value['group_id']]);
if (!empty($result)) {
$list[$key]['group'] = $result['title'];
}
}
return [$count, $list];
}
/**
* @param array $params
* @return bool
* @throws OperateException
*/
public static function add(array $params): bool
{
$model = new User();
$whereName[] = ['nickname','=',$params['nickname']];
$whereEmail[] = ['email','=',$params['email']];
$data = $model->whereOr([$whereName,$whereEmail])->findOrEmpty()->toArray();
if(!empty($data)) {
throw new OperateException('该用户ID或邮箱已经存在');
}
// 密码加密
$params['salt'] = Random::alpha();
$params['pwd'] = encryptPwd($params['pwd'],$params['salt']);
Db::startTrans();
try {
$model->create($params);
Db::commit();
} catch (\Exception $e) {
Db::rollback();
throw new OperateException('添加失败!');
}
return true;
}
/**
* @param array $params
* @return bool
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
* @throws OperateException
*/
public static function edit(array $params): bool
{
$model = new User();
$data = $model->where('id', $params['id'])->findOrEmpty()->toArray();
if ($data['nickname'] != $params['nickname']) {
$whereName[] = ['nickname','=',$params['nickname']];
if($model->where($whereName)->find()) {
throw new OperateException('用户ID已经存在');
}
}
if ($data['email'] != $params['email']) {
$whereEmail[] = ['email','=',$params['email']];
if($model->where($whereEmail)->find()) {
throw new OperateException('用户邮箱已经存在!');
}
}
if (!empty($params['pwd'])) {
$salt = Random::alpha();
$params['salt'] = $salt;
$params['pwd'] = encryptPwd($params['pwd'],$params['salt']);
} else {
unset($params['pwd']);
}
Db::startTrans();
try {
$model->update($params);
Db::commit();
} catch (\Exception $e) {
Db::rollback();
throw new OperateException('添加失败!');
}
return true;
}
}