From 0567eda8caa7511680f17c00c7c894475faaa7fa Mon Sep 17 00:00:00 2001 From: ykxiao Date: Mon, 14 Jul 2025 14:37:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=83=A8=E9=97=A8=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/DeptController.php | 128 +++++++++++++++++++++++++++ app/JsonRpc/DeptServiceConsumer.php | 77 ++++++++++++++++ app/JsonRpc/DeptServiceInterface.php | 61 +++++++++++++ app/Request/DeptRequest.php | 58 ++++++++++++ config/autoload/dependencies.php | 3 + config/autoload/services.php | 4 +- config/routes.php | 9 ++ 7 files changed, 339 insertions(+), 1 deletion(-) create mode 100644 app/Controller/DeptController.php create mode 100644 app/JsonRpc/DeptServiceConsumer.php create mode 100644 app/JsonRpc/DeptServiceInterface.php create mode 100644 app/Request/DeptRequest.php diff --git a/app/Controller/DeptController.php b/app/Controller/DeptController.php new file mode 100644 index 0000000..fe3828f --- /dev/null +++ b/app/Controller/DeptController.php @@ -0,0 +1,128 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +declare(strict_types=1); + +namespace App\Controller; + +use App\JsonRpc\DeptServiceInterface; +use App\Request\DeptRequest; +use Exception; +use Hyperf\Di\Annotation\Inject; +use Hyperf\HttpMessage\Server\Response; +use Hyperf\Validation\Annotation\Scene; + +class DeptController extends AbstractController +{ + #[Inject] + protected DeptServiceInterface $deptServiceInterface; + + /** + * 增加部门. + */ + #[Scene(scene: 'addDept', argument: 'request')] + public function addDept(DeptRequest $request): Response + { + // 微服务接口 + $params = $request->all(); + $params['token'] = $this->token(); + + $rpcDept = $this->deptServiceInterface->addDept($params); + + if (empty($rpcDept['result'])) { + return $this->apiResponse->error($rpcDept['message']); + } + $deptInfo = $rpcDept['result']; + $this->opLogs('[添加部门]' . $deptInfo['name'] ?? ''); + + return $this->apiResponse->success($deptInfo); + } + + /** + * 部门列表. + * @return Response + * @throws Exception + */ + public function deptList(): Response + { + $params = $this->request->all(); + $params['token'] = $this->token(); + $rpcDept = $this->deptServiceInterface->deptList($params); + if (empty($rpcDept['result'])) { + return $this->apiResponse->error($rpcDept['message']); + } + return $this->apiResponse->success($rpcDept['result']); + } + + /** + * 删除部门. + */ + #[Scene(scene: 'delDept', argument: 'request')] + public function delDept(DeptRequest $request): Response + { + $params = $request->all(); + $params['token'] = $this->token(); + $rpcDept = $this->deptServiceInterface->delDept($params); + + if (empty($rpcDept['result'])) { + return $this->apiResponse->error($rpcDept['message']); + } + $this->opLogs('[删除部门]' . $rpcDept['result']['dept_name'] ?? ''); + return $this->apiResponse->success(); + } + + /** + * 获取部门. + */ + public function getDeptInfo(): Response + { + $params = $this->request->all(); + $params['token'] = $this->token(); + $rpcDept = $this->deptServiceInterface->getDeptInfo($params); + if (empty($rpcDept['result'])) { + return $this->apiResponse->error($rpcDept['message']); + } + return $this->apiResponse->success($rpcDept['result']); + + } + + /** + * 部门活动列表. + */ + public function deptListActive(): Response + { + $params = $this->request->all(); + $params['token'] = $this->token(); + $rpcDept = $this->deptServiceInterface->getActiveDeptList($params); + if (empty($rpcDept['result'])) { + return $this->apiResponse->error($rpcDept['message']); + } + return $this->apiResponse->success($rpcDept['result']); + } + + /** + * 更新部门状态. + * @return Response + */ + public function updateDeptStatus(): Response + { + $params = $this->request->all(); + $params['token'] = $this->token(); + $rpcDept = $this->deptServiceInterface->updateDeptStatus($params); + if (empty($rpcDept['result'])) { + return $this->apiResponse->error($rpcDept['message']); + } + $this->opLogs('[部门状态更新]' . $rpcDept['result']['name']); + return $this->apiResponse->success($rpcDept['result']); + } +} \ No newline at end of file diff --git a/app/JsonRpc/DeptServiceConsumer.php b/app/JsonRpc/DeptServiceConsumer.php new file mode 100644 index 0000000..c3b0496 --- /dev/null +++ b/app/JsonRpc/DeptServiceConsumer.php @@ -0,0 +1,77 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +declare(strict_types=1); + +namespace App\JsonRpc; + +use Hyperf\Di\Annotation\Inject; +use Hyperf\RpcClient\AbstractServiceClient; + +class DeptServiceConsumer extends AbstractServiceClient implements DeptServiceInterface +{ + #[Inject] + protected DeptServiceInterface $deptServiceInterface; + + protected string $serviceName = 'DeptService'; + + protected string $protocol = 'jsonrpc-http'; + + /** + * @inheritDoc + */ + public function addDept(array $data): array + { + return $this->__request(__FUNCTION__, compact('data')); + } + + /** + * @inheritDoc + */ + public function delDept(array $params): array + { + return $this->__request(__FUNCTION__, compact('params')); + } + + /** + * @inheritDoc + */ + public function getDeptInfo(array $params = []): array + { + return $this->__request(__FUNCTION__, compact('params')); + } + + /** + * @inheritDoc + */ + public function deptList(array $params = []): array + { + return $this->__request(__FUNCTION__, compact('params')); + } + + /** + * @inheritDoc + */ + public function getActiveDeptList(array $params = []): array + { + return $this->__request(__FUNCTION__, compact('params')); + } + + /** + * @inheritDoc + */ + public function updateDeptStatus(array $data): array + { + return $this->__request(__FUNCTION__, compact('data')); + } +} \ No newline at end of file diff --git a/app/JsonRpc/DeptServiceInterface.php b/app/JsonRpc/DeptServiceInterface.php new file mode 100644 index 0000000..9fa5182 --- /dev/null +++ b/app/JsonRpc/DeptServiceInterface.php @@ -0,0 +1,61 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +declare(strict_types=1); + +namespace App\JsonRpc; + +interface DeptServiceInterface +{ + /** + * @Desc 新增部门 + * @param array $data + * @return array + */ + public function addDept(array $data): array; + + /** + * @Desc 删除部门 + * @param array $params + * @return array + */ + public function delDept(array $params): array; + + /** + * @Desc 获取部门信息 + * @param array $params + * @return array + */ + public function getDeptInfo(array $params = []): array; + + /** + * @Desc 获取部门列表 + * @param array $params + * @return array + */ + public function deptList(array $params = []): array; + + /** + * @Desc 获取活动的部门列表 + * @param array $params + * @return array + */ + public function getActiveDeptList(array $params = []): array; + + /** + * @Desc 修改部门状态 + * @param array $data + * @return array + */ + public function updateDeptStatus(array $data): array; +} \ No newline at end of file diff --git a/app/Request/DeptRequest.php b/app/Request/DeptRequest.php new file mode 100644 index 0000000..0674f5d --- /dev/null +++ b/app/Request/DeptRequest.php @@ -0,0 +1,58 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +declare(strict_types=1); + +namespace App\Request; + +class DeptRequest extends AbstractRequest +{ + public array $scenes = [ + 'addDept' => ['name', 'active_status', 'remark'], + 'updateDept' => ['id', 'name', 'active_status', 'remark'], + 'delDept' => ['ids'], + ]; + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize(): bool + { + return true; + } + + /** + * Get the validation rules that apply to the request. + */ + public function rules(): array + { + return [ + 'id' => 'required|integer|min:1', + 'ids' => 'required|array|min:1', + 'ids.*' => 'required|integer|min:1', + 'name' => 'required|string|max:45', + 'remark' => 'string|max:255', + ]; + } + + public function attributes(): array + { + return [ + 'name' => '部门名称', + 'remark' => '备注', + 'id' => '记录ID', + 'ids' => '记录ID列表', + 'ids.*' => '记录ID', + ]; + } +} \ No newline at end of file diff --git a/config/autoload/dependencies.php b/config/autoload/dependencies.php index de29b49..8997ca3 100644 --- a/config/autoload/dependencies.php +++ b/config/autoload/dependencies.php @@ -10,6 +10,8 @@ declare(strict_types=1); * @license https://github.com/hyperf/hyperf/blob/master/LICENSE */ +use App\JsonRpc\DeptServiceConsumer; +use App\JsonRpc\DeptServiceInterface; use App\JsonRpc\EasyAppServiceConsumer; use App\JsonRpc\EasyAppServiceInterface; use App\JsonRpc\InventoryServiceConsumer; @@ -27,4 +29,5 @@ return [ EasyAppServiceInterface::class => EasyAppServiceConsumer::class, InventoryServiceInterface::class => InventoryServiceConsumer::class, RoleServiceInterface::class => RoleServiceConsumer::class, + DeptServiceInterface::class => DeptServiceConsumer::class, ]; diff --git a/config/autoload/services.php b/config/autoload/services.php index 06244bc..f4fb1fc 100644 --- a/config/autoload/services.php +++ b/config/autoload/services.php @@ -11,6 +11,7 @@ declare(strict_types=1); * @license https://github.com/hyperf/hyperf/blob/master/LICENSE */ +use App\JsonRpc\DeptServiceInterface; use App\JsonRpc\EasyAppServiceInterface; use App\JsonRpc\InventoryServiceInterface; use App\JsonRpc\RoleServiceInterface; @@ -24,7 +25,8 @@ return [ 'UserAuthService' => UserAuthServiceInterface::class, 'EasyAppService' => EasyAppServiceInterface::class, 'InventoryService' => InventoryServiceInterface::class, - 'RoleService' => RoleServiceInterface::class, + 'RoleService' => RoleServiceInterface::class, + 'DeptService' => DeptServiceInterface::class, ]; foreach ($services as $name => $interface) { $consumers[] = [ diff --git a/config/routes.php b/config/routes.php index 0a5038a..3eedad6 100644 --- a/config/routes.php +++ b/config/routes.php @@ -12,6 +12,7 @@ declare(strict_types=1); */ use App\Controller\CompanyController; +use App\Controller\DeptController; use App\Controller\FirstCompanyController; use App\Controller\PurchaseController; use App\Controller\RoleController; @@ -58,6 +59,14 @@ Router::addGroup('/api/v1', function () { Router::post('assign.role.auth', [RoleController::class, 'assignRolePermissions']); # 角色授权 Router::post('role.permission.checked', [RoleController::class, 'roleChecked']); # 角色权限选择列表 + // 部门管理 + Router::post('dept.add', [DeptController::class, 'addDept']); # 新增部门 + Router::post('dept.list', [DeptController::class, 'deptList']); # 部门列表 + Router::post('dept.delete', [DeptController::class, 'delDept']); # 删除部门 + Router::post('dept.info', [DeptController::class, 'getDeptInfo']); # 部门信息 + Router::post('dept.list.active', [DeptController::class, 'deptListActive']); # 部门列表(活动) + Router::post('dept.update.status', [DeptController::class, 'updateDeptStatus']); # 部门状态 + // 平台公司管理 Router::post('company.module.add', [RoleController::class, 'addCompanyModule']); # 公司模块授权 Router::post('company.permission.checked', [RoleController::class, 'companyChecked']); # 公司模块选择列表