diff --git a/Server/application/api/config/route.php b/Server/application/api/config/route.php index c2e7ca77..1a615a5f 100644 --- a/Server/application/api/config/route.php +++ b/Server/application/api/config/route.php @@ -12,6 +12,8 @@ Route::group('v1', function () { Route::post('create', 'app\\api\\controller\\AccountController@createAccount'); // 创建账号 √ Route::post('department/create', 'app\\api\\controller\\AccountController@createDepartment'); // 创建部门 √ Route::get('department/list', 'app\\api\\controller\\AccountController@getDepartmentList'); // 获取部门列表 √ + Route::post('department/update', 'app\\api\\controller\\AccountController@updateDepartment'); // 更新部门 √ + Route::post('department/delete', 'app\\api\\controller\\AccountController@deleteDepartment'); // 删除部门 √ }); // Device控制器路由 diff --git a/Server/application/api/controller/AccountController.php b/Server/application/api/controller/AccountController.php index b0856f36..fa33d2b3 100644 --- a/Server/application/api/controller/AccountController.php +++ b/Server/application/api/controller/AccountController.php @@ -6,10 +6,19 @@ use app\api\model\CompanyAccountModel; use app\api\model\CompanyModel; use think\facade\Request; +/** + * 账号管理控制器 + * 包含账号管理和部门管理的相关功能 + */ class AccountController extends BaseController { + /************************ 账号管理相关接口 ************************/ + /** * 获取公司账号列表 + * @param string $pageIndex 页码 + * @param string $pageSize 每页数量 + * @param bool $isJob 是否为定时任务调用 * @return \think\response\Json */ public function getlist($pageIndex = '',$pageSize = '',$isJob = false) @@ -49,63 +58,17 @@ class AccountController extends BaseController } } - return successJson($response); - } catch (\Exception $e) { - return errorJson('获取公司账号列表失败:' . $e->getMessage()); - } - } - - /** - * 创建部门 - * @return \think\response\Json - */ - public function createDepartment() - { - // 获取授权token - $authorization = trim($this->request->header('authorization', $this->authorization)); - if (empty($authorization)) { - return errorJson('缺少授权信息'); - } - - try { - // 获取请求参数 - $name = $this->request->param('name', ''); - $memo = $this->request->param('memo', ''); - if (empty($name)) { - return errorJson('请输入公司名称'); - } - - - // 参数验证 - if (empty($name)) { - return errorJson('部门名称不能为空'); - } - - // 构建请求参数,设置固定的departmentIdArr和parentId - $params = [ - 'name' => $name, - 'memo' => $memo, - 'departmentIdArr' => [914], - 'parentId' => 914 - ]; - - // 设置请求头 - $headerData = ['client:system']; - $header = setHeader($headerData, $authorization, 'json'); - - // 发送请求创建部门 - $result = requestCurl($this->baseUrl . 'api/Department/createDepartment', $params, 'POST', $header,'json'); - - - // 尝试提取部门ID - if (is_int($result)) { - return successJson($result); + if($isJob){ + return json_encode(['code'=>200,'msg'=>'获取公司账号列表成功']); }else{ - return errorJson($result); + return successJson($response); } - } catch (\Exception $e) { - return response('创建部门失败:' . $e->getMessage()); + if($isJob){ + return json_encode(['code'=>500,'msg'=>'获取公司账号列表失败:' . $e->getMessage()]); + }else{ + return errorJson('获取公司账号列表失败:' . $e->getMessage()); + } } } @@ -122,7 +85,7 @@ class AccountController extends BaseController } try { - // 获取请求参数 + // 获取并验证请求参数 $userName = $this->request->param('userName', ''); $password = $this->request->param('password', ''); $realName = $this->request->param('realName', ''); @@ -130,35 +93,24 @@ class AccountController extends BaseController $memo = $this->request->param('memo', ''); $companyId = $this->request->param('companyId', 0); - // 用户名验证 + // 参数验证 if (empty($userName)) { return errorJson('用户名不能为空'); } - - // 自定义用户名验证:只能使用英文字母或数字 if (!preg_match('/^[a-zA-Z][a-zA-Z0-9]{5,9}$/', $userName)) { return errorJson('用户名必须以字母开头,只能包含字母和数字,长度6-10位'); } - - // 密码验证 if (empty($password)) { return errorJson('密码不能为空'); } - - // 使用validateString验证密码,添加自定义选项 $passwordValidation = validateString($password, 'password'); if (!$passwordValidation['status']) { return errorJson($passwordValidation['message']); } - - // 真实姓名验证 if (empty($realName)) { return errorJson('真实姓名不能为空'); } - - - // 部门ID验证 - if (empty($departmentId)) { + if (empty($companyId)) { return errorJson('公司ID不能为空'); } @@ -172,25 +124,26 @@ class AccountController extends BaseController 'departmentId' => $companyId, 'departmentIdArr' => empty($companyId) ? [914] : [914, $companyId] ]; + // 设置请求头 $headerData = ['client:system']; $header = setHeader($headerData, $authorization, 'json'); // 发送请求创建账号 $result = requestCurl($this->baseUrl . 'api/account/newAccount', $params, 'POST', $header, 'json'); - - + if (is_int($result)) { return successJson($result); - }else{ + } else { return errorJson($result); } - } catch (\Exception $e) { return errorJson('创建账号失败:' . $e->getMessage()); } } + /************************ 部门管理相关接口 ************************/ + /** * 获取部门列表 * @return \think\response\Json @@ -204,26 +157,20 @@ class AccountController extends BaseController } try { - // 设置请求参数 - $isAll = $this->request->param('isAll', 'false'); - // 设置请求头 $headerData = ['client:system']; $header = setHeader($headerData, $authorization, 'json'); // 发送请求获取部门列表 - $url = $this->baseUrl . 'api/Department/tenantDepartmentsForSelect?isAll=' . $isAll; + $url = $this->baseUrl . 'api/Department/fetchMyAndSubordinateDepartment'; $result = requestCurl($url, [], 'GET', $header, 'json'); // 处理返回结果 $response = handleApiResponse($result); - // 保存数据到数据库 if (!empty($response)) { - foreach ($response as $item) { - $this->saveDepartment($item); - } + $this->processDepartments($response); } return successJson($response, '获取部门列表成功'); @@ -232,7 +179,200 @@ class AccountController extends BaseController } } - /** + /** + * 创建部门 + * @return \think\response\Json + */ + public function createDepartment() + { + // 获取授权token + $authorization = trim($this->request->header('authorization', $this->authorization)); + if (empty($authorization)) { + return errorJson('缺少授权信息'); + } + + try { + // 获取并验证请求参数 + $name = $this->request->param('name', ''); + $memo = $this->request->param('memo', ''); + if (empty($name)) { + return errorJson('请输入公司名称'); + } + + // 检查部门名称是否已存在 + $departmentId = CompanyModel::where('name', $name)->value('id'); + if (!empty($departmentId)) { + return errorJson('公司名称已存在'); + } + + // 构建请求参数 + $params = [ + 'name' => $name, + 'memo' => $memo, + 'departmentIdArr' => [914], + 'parentId' => 914 + ]; + + // 设置请求头 + $headerData = ['client:system']; + $header = setHeader($headerData, $authorization, 'json'); + + // 发送请求创建部门 + $result = requestCurl($this->baseUrl . 'api/Department/createDepartment', $params, 'POST', $header,'json'); + + // 处理返回结果 + if (is_numeric($result)) { + $res = CompanyModel::create([ + 'id' => $result, + 'name' => $name, + 'memo' => $memo + ]); + return successJson($res); + } else { + return errorJson($result); + } + } catch (\Exception $e) { + return errorJson('创建部门失败:' . $e->getMessage()); + } + } + + /** + * 修改部门信息 + * @return \think\response\Json + */ + public function updateDepartment() + { + // 获取授权token + $authorization = trim($this->request->header('authorization', $this->authorization)); + if (empty($authorization)) { + return errorJson('缺少授权信息'); + } + + try { + // 获取并验证请求参数 + $id = $this->request->param('id', 0); + $name = $this->request->param('name', ''); + $memo = $this->request->param('memo', ''); + + if (empty($id)) { + return errorJson('部门ID不能为空'); + } + if (empty($name)) { + return errorJson('部门名称不能为空'); + } + + // 验证部门是否存在 + $department = CompanyModel::where('id', $id)->find(); + if (empty($department)) { + return errorJson('部门不存在'); + } + + // 构建请求参数 + $departmentIdArr = $department->parentId == 914 ? [914] : [914, $department->parentId]; + $params = [ + 'id' => $id, + 'name' => $name, + 'memo' => $memo, + 'departmentIdArr' => $departmentIdArr, + 'tenantId' => 242, + 'createTime' => $department->createTime, + 'isTop' => $department->isTop, + 'level' => $department->level, + 'parentId' => $department->parentId, + 'lastUpdateTime' => $department->lastUpdateTime, + 'privileges' => $department->privileges + ]; + + // 设置请求头 + $headerData = ['client:system']; + $header = setHeader($headerData, $authorization, 'json'); + + // 发送请求修改部门 + $result = requestCurl($this->baseUrl . 'api/Department/department', $params, 'PUT', $header, 'json'); + $response = handleApiResponse($result); + + // 更新本地数据库 + $department->name = $name; + $department->memo = $memo; + $department->save(); + + return successJson([], '部门修改成功'); + } catch (\Exception $e) { + return errorJson('修改部门失败:' . $e->getMessage()); + } + } + + /** + * 删除部门 + * @return \think\response\Json + */ + public function deleteDepartment() + { + // 获取授权token + $authorization = trim($this->request->header('authorization', $this->authorization)); + if (empty($authorization)) { + return errorJson('缺少授权信息'); + } + + try { + // 获取并验证部门ID + $id = $this->request->param('id', 0); + if (empty($id)) { + return errorJson('部门ID不能为空'); + } + + // 验证部门是否存在 + $department = CompanyModel::where('id', $id)->find(); + if (empty($department)) { + return errorJson('部门不存在'); + } + + // 设置请求头 + $headerData = ['client:system']; + $header = setHeader($headerData, $authorization, 'plain'); + + // 发送删除请求 + $result = requestCurl($this->baseUrl . 'api/Department/del/' . $id, [], 'DELETE', $header); + + if($result){ + return errorJson($result); + }else{ + // 删除本地数据库记录 + $department->delete(); + return successJson([], '部门删除成功'); + } + + + + } catch (\Exception $e) { + return errorJson('删除部门失败:' . $e->getMessage()); + } + } + + /************************ 私有辅助方法 ************************/ + + /** + * 递归处理部门列表 + * @param array $departments 部门数据 + */ + private function processDepartments($departments) + { + if (empty($departments) || !is_array($departments)) { + return; + } + + foreach ($departments as $item) { + // 保存当前部门 + $this->saveDepartment($item); + + // 递归处理子部门 + if (!empty($item['children']) && is_array($item['children'])) { + $this->processDepartments($item['children']); + } + } + } + + /** * 保存部门数据到数据库 * @param array $item 部门数据 */ @@ -241,12 +381,18 @@ class AccountController extends BaseController $data = [ 'id' => isset($item['id']) ? $item['id'] : 0, 'name' => isset($item['name']) ? $item['name'] : '', - 'memo' => isset($item['memo']) ? $item['memo'] : '', + 'memo' => isset($item['memo']) ? $item['memo'] : '', + 'level' => isset($item['level']) ? $item['level'] : 0, + 'isTop' => isset($item['isTop']) ? $item['isTop'] : false, + 'parentId' => isset($item['parentId']) ? $item['parentId'] : 0, + 'tenantId' => isset($item['tenantId']) ? $item['tenantId'] : 0, + 'privileges' => isset($item['privileges']) ? (is_array($item['privileges']) ? json_encode($item['privileges']) : $item['privileges']) : '', + 'createTime' => isset($item['createTime']) ? $item['createTime'] : '', + 'lastUpdateTime' => isset($item['lastUpdateTime']) ? $item['lastUpdateTime'] : '' ]; - // 使用imei作为唯一性判断 - $department= CompanyModel::where('id', $item['id'])->find(); - + // 使用id作为唯一性判断 + $department = CompanyModel::where('id', $item['id'])->find(); if ($department) { $department->save($data); } else { @@ -254,10 +400,6 @@ class AccountController extends BaseController } } - - - - /** * 保存账号数据到数据库 * @param array $item 账号数据 @@ -294,7 +436,6 @@ class AccountController extends BaseController // 使用tenantId作为唯一性判断 $account = CompanyAccountModel::where('tenantId', $item['id'])->find(); - if ($account) { $account->save($data); } else { diff --git a/Server/application/common.php b/Server/application/common.php index 0ef158a2..c1361ea5 100644 --- a/Server/application/common.php +++ b/Server/application/common.php @@ -16,8 +16,9 @@ if (!function_exists('requestCurl')) { /** * @param string $url 请求的链接 * @param array $params 请求附带的参数 - * @param string $method 请求的方式默认 GTE + * @param string $method 请求的方式, 支持GET, POST, PUT, DELETE等 * @param array $header 头部 + * @param string $type 数据类型,支持dataBuild、json等 * @return bool|string */ function requestCurl($url, $params = [], $method = 'GET', $header = [], $type = 'dataBuild') @@ -26,19 +27,25 @@ if (!function_exists('requestCurl')) { if (!empty($url)) { try { $ch = curl_init(); + + // 处理GET请求的参数 if (strtoupper($method) == 'GET' && !empty($params)) { $url = $url . '?' . dataBuild($params); - curl_setopt($ch, CURLOPT_URL, $url); - } else { - curl_setopt($ch, CURLOPT_URL, $url); } + + curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 30); //30秒超时 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); - if (strtoupper($method) == 'POST') { - curl_setopt($ch, CURLOPT_POST, 1); + + // 处理不同的请求方法 + if (strtoupper($method) != 'GET') { + // 设置请求方法 + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, strtoupper($method)); + + // 处理参数格式 if ($type == 'dataBuild') { $params = dataBuild($params); } elseif ($type == 'json') { @@ -46,8 +53,11 @@ if (!function_exists('requestCurl')) { } else { $params = dataBuild($params); } + + // 设置请求体 curl_setopt($ch, CURLOPT_POSTFIELDS, $params); } + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); //是否验证对等证书,1则验证,0则不验证 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); $str = curl_exec($ch);