diff --git a/backend/app/controller/UserController.php b/backend/app/controller/UserController.php index f73cf64..5544782 100644 --- a/backend/app/controller/UserController.php +++ b/backend/app/controller/UserController.php @@ -3,6 +3,7 @@ namespace app\controller; use app\model\User; +use app\model\UserSystemMapping; use Webman\Http\Request; use Webman\Http\Response; @@ -130,4 +131,36 @@ class UserController extends BaseController 'page_size' => $pageSize, ]); } + + /** + * 获取用户在指定系统的映射ID + */ + public function systemMapping(Request $request): Response + { + $userId = $this->getUserId($request); + $systemCode = $request->get('system', 'fdesk'); + + // 获取用户信息以获取公司ID + $user = User::find($userId); + if (!$user) { + return $this->error('用户不存在'); + } + + // 查询系统映射 + $mapping = UserSystemMapping::active() + ->bySystem($systemCode) + ->where('user_id', $userId) + ->where('company_id', $user->company_id) + ->first(); + + if (!$mapping) { + return $this->error('未找到系统映射信息,请联系管理员配置'); + } + + return $this->success([ + 'system_code' => $mapping->system_code, + 'system_user_id' => $mapping->system_user_id, + 'system_user_name' => $mapping->system_user_name, + ]); + } } diff --git a/backend/app/model/UserSystemMapping.php b/backend/app/model/UserSystemMapping.php new file mode 100644 index 0000000..f3893fd --- /dev/null +++ b/backend/app/model/UserSystemMapping.php @@ -0,0 +1,89 @@ + 'integer', + 'company_id' => 'integer', + 'status' => 'integer', + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + ]; + + /** + * 关联用户 + */ + public function user() + { + return $this->belongsTo(User::class, 'user_id'); + } + + /** + * 关联公司 + */ + public function company() + { + return $this->belongsTo(Company::class, 'company_id'); + } + + /** + * 获取有效的映射 + */ + public function scopeActive($query) + { + return $query->where('status', 1); + } + + /** + * 根据系统代码查找 + */ + public function scopeBySystem($query, string $systemCode) + { + return $query->where('system_code', $systemCode); + } + + /** + * 根据公司ID查找 + */ + public function scopeByCompany($query, int $companyId) + { + return $query->where('company_id', $companyId); + } + + /** + * 根据外部系统用户ID查找 + */ + public function scopeBySystemUserId($query, string $systemUserId, string $systemCode = 'fdesk') + { + return $query->where('system_code', $systemCode) + ->where('system_user_id', $systemUserId); + } + + /** + * 获取用户在指定系统的映射 + */ + public function scopeUserMapping($query, int $userId, int $companyId, string $systemCode = 'fdesk') + { + return $query->where('user_id', $userId) + ->where('company_id', $companyId) + ->where('system_code', $systemCode); + } +} diff --git a/backend/config/route.php b/backend/config/route.php index ad9643a..4cdfa3d 100644 --- a/backend/config/route.php +++ b/backend/config/route.php @@ -36,6 +36,7 @@ Route::group('/api/v1/user', function () { Route::get('/menu', [app\controller\UserController::class, 'menu']); Route::get('/companies', [app\controller\UserController::class, 'companies']); Route::get('/list', [app\controller\UserController::class, 'list']); + Route::get('/system-mapping', [app\controller\UserController::class, 'systemMapping']); Route::post('/switch-company', [app\controller\UserController::class, 'switchCompany']); Route::post('/change-password', [app\controller\UserController::class, 'changePassword']); })->middleware($authMiddleware); diff --git a/docs/DATABASE_SCHEMA.md b/docs/DATABASE_SCHEMA.md index 552f472..f65f29a 100644 --- a/docs/DATABASE_SCHEMA.md +++ b/docs/DATABASE_SCHEMA.md @@ -1,8 +1,8 @@ # 数据库结构文档 -**版本**: 1.1.0 -**更新时间**: 2026-03-01 -**状态**: 线上稳定版本 +**版本**: 1.1.1 +**更新时间**: 2026-03-03 +**状态**: 开发中 --- @@ -358,6 +358,34 @@ --- +### 15. user_system_mapping - 用户系统映射表 + +用于将本项目用户ID映射到外部系统(如fdesk、ERP、CRM等)的用户ID。 + +| 字段 | 类型 | 必填 | 默认值 | 说明 | +|------|------|------|--------|------| +| id | bigint unsigned | ✓ | AUTO_INCREMENT | 记录ID | +| user_id | bigint unsigned | ✓ | | 本项目用户ID | +| company_id | bigint unsigned | ✓ | | 公司ID | +| system_code | varchar(50) | ✓ | fdesk | 系统代码(如:fdesk, erp, crm) | +| system_user_id | varchar(100) | ✓ | | 外部系统用户ID | +| system_user_name | varchar(100) | | | 外部系统用户名(冗余字段) | +| status | tinyint | ✓ | 1 | 状态:1=有效,0=无效 | +| created_at | timestamp | ✓ | CURRENT_TIMESTAMP | 创建时间 | +| updated_at | timestamp | ✓ | CURRENT_TIMESTAMP | 更新时间 | + +**索引**: +- PRIMARY KEY (`id`) +- UNIQUE KEY `uk_user_company_system` (`user_id`, `company_id`, `system_code`) +- KEY `idx_system_user_id` (`system_code`, `system_user_id`) +- KEY `idx_company_id` (`company_id`) + +**说明**: +- 同一用户在同一公司下对应一个外部系统只能有一条记录 +- 支持多个外部系统的映射关系 + +--- + ## 📊 表关系图 ``` @@ -368,6 +396,8 @@ users (1) ----< (N) user_feishu_apps +----> companies (1) ----< (N) company_feishu_apps | +----> user_sn (N) + | + +----> user_system_mapping (N) users (1) ----< (N) business_trip | | @@ -419,5 +449,5 @@ users (1) ----< (N) business_trip --- **维护人**: 开发团队 -**最后更新**: 2026-03-01 -**版本**: 1.1.0 (线上稳定版) +**最后更新**: 2026-03-03 +**版本**: 1.1.1