新增系统管理员岗位

This commit is contained in:
wh
2026-04-27 16:25:39 +08:00
parent 5662c1fda9
commit 79812b2c77
63 changed files with 609 additions and 495 deletions

View File

@@ -27,7 +27,11 @@ mybatis-plus:
map-underscore-to-camel-case: true
springdoc:
api-docs:
enabled: true
path: /v3/api-docs
swagger-ui:
enabled: true
path: /swagger-ui.html
labelsys:
@@ -37,10 +41,10 @@ labelsys:
annotation:
auto-archive-timeout: PT2H
object-storage:
endpoint: ${OBJECT_STORAGE_ENDPOINT:http://127.0.0.1:9000}
region: ${OBJECT_STORAGE_REGION:us-east-1}
access-key: ${OBJECT_STORAGE_ACCESS_KEY:demo-access-key}
secret-key: ${OBJECT_STORAGE_SECRET_KEY:demo-secret-key}
endpoint: ${OBJECT_STORAGE_ENDPOINT:http://39.107.112.174:9000}
region: ${OBJECT_STORAGE_REGION:cn-east-1}
access-key: ${OBJECT_STORAGE_ACCESS_KEY:admin}
secret-key: ${OBJECT_STORAGE_SECRET_KEY:your_strong_password}
path-style-access: ${OBJECT_STORAGE_PATH_STYLE:true}
source-bucket: ${OBJECT_STORAGE_SOURCE_BUCKET:source-data}
artifact-bucket: ${OBJECT_STORAGE_ARTIFACT_BUCKET:annotation-artifacts}

View File

@@ -47,4 +47,4 @@
and company_id = #{companyId}
and is_deleted = false
</update>
</mapper>
</mapper>

View File

@@ -46,4 +46,4 @@
and is_deleted = false
limit 1
</select>
</mapper>
</mapper>

View File

@@ -2,34 +2,29 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.labelsys.backend.mapper.SourceResourceMapper">
<resultMap id="SourceResourceResultMap" type="com.labelsys.backend.entity.SourceResource">
<id column="id" property="id"/>
<result column="company_id" property="companyId"/>
<result column="creator_id" property="creatorId"/>
<result column="creator_role" property="creatorRole"/>
<result column="resource_name" property="resourceName"/>
<result column="resource_type" property="resourceType"/>
<result column="bucket_name" property="bucketName"/>
<result column="file_path" property="filePath"/>
<result column="file_size" property="fileSize"/>
<result column="source_status" property="sourceStatus"/>
<result column="storage_provider" property="storageProvider"/>
<result column="remark" property="remark"/>
<result column="created_at" property="createdAt"/>
<result column="updated_at" property="updatedAt"/>
<id column="id" property="id" />
<result column="company_id" property="companyId" />
<result column="creator_id" property="creatorId" />
<result column="creator_role" property="creatorRole" />
<result column="resource_name" property="resourceName" />
<result column="resource_type" property="resourceType" />
<result column="bucket_name" property="bucketName" />
<result column="file_path" property="filePath" />
<result column="file_size" property="fileSize" />
<result column="source_status" property="sourceStatus" />
<result column="storage_provider" property="storageProvider" />
<result column="remark" property="remark" />
<result column="created_at" property="createdAt" />
<result column="updated_at" property="updatedAt" />
</resultMap>
<sql id="SourceResourceColumns">
id, company_id, creator_id, creator_role, resource_name, resource_type, bucket_name, file_path,
file_size, source_status, storage_provider, remark, created_at, updated_at
</sql>
<sql id="SourceResourceColumns"> id, company_id, creator_id, creator_role, resource_name,
resource_type, bucket_name, file_path, file_size, source_status, storage_provider, remark,
created_at, updated_at </sql>
<select id="selectByCompanyIdAndIds" resultMap="SourceResourceResultMap">
select <include refid="SourceResourceColumns"/>
from source_resource
where company_id = #{companyId}
and id in
<foreach collection="resourceIds" item="resourceId" open="(" separator="," close=")">
#{resourceId}
</foreach>
<select id="selectByCompanyIdAndIds" resultMap="SourceResourceResultMap"> select <include
refid="SourceResourceColumns" /> from source_resource where company_id = #{companyId}
and id in <foreach collection="resourceIds" item="resourceId" open="(" separator=","
close=")"> #{resourceId} </foreach>
</select>
</mapper>
</mapper>

View File

@@ -1,37 +1,37 @@
BEGIN;
INSERT INTO sys_company (id, company_code, company_name, status) VALUES
(1, 'PLATFORM', '平台公司', 'ENABLED'),
(2, 'ALPHA', '甲公司', 'ENABLED')
ON CONFLICT DO NOTHING;
INSERT INTO sys_user (
id, company_id, phone, username, role, position, real_name,
password_hash, must_change_password, status, session_version
) VALUES
(1, 1, '13900000000', 'platform-admin', 'ENGINEER', 'ADMIN', '平台管理员',
'$2a$10$TGPk5rNNhKNJQvTWImw5J.LVzw9HDFWR6hyNJCkLDcp0GU8/vp0aS', FALSE, 'ENABLED', 1),
(2, 2, '13800138000', 'alpha-admin', 'ENGINEER', 'ADMIN', '甲公司管理员',
'$2a$10$/hSD8ch7A9lFWi/DOb8yJOHdlrhV57p95CBv9Uv93Yky7t6c4Rs/S', TRUE, 'ENABLED', 1),
(3, 2, '13700000000', 'alpha-annotator', 'EMPLOYEE', 'ANNOTATOR', '甲公司标注员',
'$2a$10$bRMZPcIaiB1BUx6HPw6FSODPSuph8kUi8/JZOM6lACwjjhkbBL5mq', TRUE, 'ENABLED', 1),
(4, 2, '13600000000', 'alpha-trainer', 'EMPLOYEE', 'DATA_TRAINER', '甲公司数据训练师',
'$2a$10$bRMZPcIaiB1BUx6HPw6FSODPSuph8kUi8/JZOM6lACwjjhkbBL5mq', TRUE, 'ENABLED', 1),
(5, 2, '13500000000', 'alpha-reviewer', 'MANAGER', 'REVIEWER', '甲公司审核员',
'$2a$10$bRMZPcIaiB1BUx6HPw6FSODPSuph8kUi8/JZOM6lACwjjhkbBL5mq', TRUE, 'ENABLED', 1),
(6, 2, '13400000000', 'alpha-chief-engineer', 'ENGINEER', 'REVIEWER', '甲公司总工程师',
'$2a$10$bRMZPcIaiB1BUx6HPw6FSODPSuph8kUi8/JZOM6lACwjjhkbBL5mq', TRUE, 'ENABLED', 1)
ON CONFLICT DO NOTHING;
INSERT INTO sys_menu (id, company_id, menu_code, menu_name, path, visible_positions, sort_order) VALUES
(201, 2, 'USER_MANAGE', '用户管理', '/users', 'ADMIN', 1),
(202, 2, 'RESOURCE_MANAGE', '资源管理', '/resources', 'ANNOTATOR,DATA_TRAINER,REVIEWER,ADMIN', 2),
(203, 2, 'TASK_MANAGE', '任务管理', '/tasks', 'ANNOTATOR,DATA_TRAINER,REVIEWER,ADMIN', 3),
(204, 2, 'RESULT_REVIEW', '结果审核', '/results', 'REVIEWER,ADMIN', 4),
(205, 2, 'DATASET_EXPORT', '训练集导出', '/datasets', 'DATA_TRAINER,ADMIN', 5),
(206, 2, 'SYSTEM_CONFIG', '系统配置', '/configs', 'ADMIN', 6)
ON CONFLICT DO NOTHING;
BEGIN;
INSERT INTO sys_company (id, company_code, company_name, status) VALUES
(1, 'PLATFORM', '平台公司', 'ENABLED'),
(2, 'ALPHA', '甲公司', 'ENABLED')
ON CONFLICT DO NOTHING;
INSERT INTO sys_user (
id, company_id, phone, username, role, position, real_name,
password_hash, must_change_password, status, session_version
) VALUES
(1, 1, '13900000000', 'platform-admin', 'ENGINEER', 'SUPER_ADMIN', '平台管理员',
'$2a$10$TGPk5rNNhKNJQvTWImw5J.LVzw9HDFWR6hyNJCkLDcp0GU8/vp0aS', FALSE, 'ENABLED', 1),
(2, 2, '13800138000', 'alpha-admin', 'ENGINEER', 'ADMIN', '甲公司管理员',
'$2a$10$/hSD8ch7A9lFWi/DOb8yJOHdlrhV57p95CBv9Uv93Yky7t6c4Rs/S', TRUE, 'ENABLED', 1),
(3, 2, '13700000000', 'alpha-annotator', 'EMPLOYEE', 'ANNOTATOR', '甲公司标注员',
'$2a$10$bRMZPcIaiB1BUx6HPw6FSODPSuph8kUi8/JZOM6lACwjjhkbBL5mq', TRUE, 'ENABLED', 1),
(4, 2, '13600000000', 'alpha-trainer', 'EMPLOYEE', 'DATA_TRAINER', '甲公司数据训练师',
'$2a$10$bRMZPcIaiB1BUx6HPw6FSODPSuph8kUi8/JZOM6lACwjjhkbBL5mq', TRUE, 'ENABLED', 1),
(5, 2, '13500000000', 'alpha-reviewer', 'MANAGER', 'REVIEWER', '甲公司审核员',
'$2a$10$bRMZPcIaiB1BUx6HPw6FSODPSuph8kUi8/JZOM6lACwjjhkbBL5mq', TRUE, 'ENABLED', 1),
(6, 2, '13400000000', 'alpha-chief-engineer', 'ENGINEER', 'REVIEWER', '甲公司总工程师',
'$2a$10$bRMZPcIaiB1BUx6HPw6FSODPSuph8kUi8/JZOM6lACwjjhkbBL5mq', TRUE, 'ENABLED', 1)
ON CONFLICT DO NOTHING;
INSERT INTO sys_menu (id, company_id, menu_code, menu_name, path, visible_positions, sort_order) VALUES
(201, 2, 'USER_MANAGE', '用户管理', '/users', 'ADMIN', 1),
(202, 2, 'RESOURCE_MANAGE', '资源管理', '/resources', 'ANNOTATOR,DATA_TRAINER,REVIEWER,ADMIN', 2),
(203, 2, 'TASK_MANAGE', '任务管理', '/tasks', 'ANNOTATOR,DATA_TRAINER,REVIEWER,ADMIN', 3),
(204, 2, 'RESULT_REVIEW', '结果审核', '/results', 'REVIEWER,ADMIN', 4),
(205, 2, 'DATASET_EXPORT', '训练集导出', '/datasets', 'DATA_TRAINER,ADMIN', 5),
(206, 2, 'SYSTEM_CONFIG', '系统配置', '/configs', 'ADMIN', 6)
ON CONFLICT DO NOTHING;
INSERT INTO sys_config (
id, company_id, config_type, config_name, config_value, status, creator_id
) VALUES
@@ -54,7 +54,7 @@ INSERT INTO sys_config (
(405, 2, 'SYSTEM', 'storageProvider',
'{"provider":"rustfs","defaultBucket":"source-data"}', 'ENABLED', 2)
ON CONFLICT DO NOTHING;
INSERT INTO source_resource (
id, company_id, creator_id, creator_role, resource_name, resource_type,
bucket_name, file_path, file_size, source_status, storage_provider, remark
@@ -103,21 +103,21 @@ ON CONFLICT DO NOTHING;
INSERT INTO annotation_result (
id, company_id, creator_id, creator_role, task_id, resource_id,
qa_content_json, qa_content_storage_mode, qa_content_file_path, diff_summary,
requires_manual_review, is_deleted, reviewer_id, review_comment, reviewed_at
) VALUES
(801, 2, 3, 'EMPLOYEE', 701, 601,
'{"question":"巡检开始前需要做什么?","answer":"详见外置结果文件,包含完整步骤与注意事项。"}',
'EXTERNAL', 'annotation-results/202604/801-qa.json',
'{"extract_question":"巡检开始前需要做什么?","extract_answer":"开始前检查设备状态和作业环境。","verify_answer":"开始前应确认设备状态、防护用品和现场环境安全。","mismatch_fields":["answer"],"reason":"抽取答案遗漏了安全检查要点。"}',
TRUE, FALSE, NULL, NULL, NULL),
(802, 2, 3, 'EMPLOYEE', 702, 602,
'{"question":"图片中的控制柜当前状态如何?","answer":"控制柜处于运行状态,绿色指示灯亮起。"}',
'INLINE', NULL,
'{"extract_question":"图片中的控制柜当前状态如何?","extract_answer":"控制柜处于运行状态,绿色指示灯亮起。","verify_answer":"控制柜正在运行,指示灯显示正常。","mismatch_fields":[],"reason":"校验结果与抽取结果基本一致。"}',
FALSE, FALSE, 5, '结果可通过。', CURRENT_TIMESTAMP)
ON CONFLICT DO NOTHING;
qa_content_json, qa_content_storage_mode, qa_content_file_path, diff_summary,
requires_manual_review, is_deleted, reviewer_id, review_comment, reviewed_at
) VALUES
(801, 2, 3, 'EMPLOYEE', 701, 601,
'{"question":"巡检开始前需要做什么?","answer":"详见外置结果文件,包含完整步骤与注意事项。"}',
'EXTERNAL', 'annotation-results/202604/801-qa.json',
'{"extract_question":"巡检开始前需要做什么?","extract_answer":"开始前检查设备状态和作业环境。","verify_answer":"开始前应确认设备状态、防护用品和现场环境安全。","mismatch_fields":["answer"],"reason":"抽取答案遗漏了安全检查要点。"}',
TRUE, FALSE, NULL, NULL, NULL),
(802, 2, 3, 'EMPLOYEE', 702, 602,
'{"question":"图片中的控制柜当前状态如何?","answer":"控制柜处于运行状态,绿色指示灯亮起。"}',
'INLINE', NULL,
'{"extract_question":"图片中的控制柜当前状态如何?","extract_answer":"控制柜处于运行状态,绿色指示灯亮起。","verify_answer":"控制柜正在运行,指示灯显示正常。","mismatch_fields":[],"reason":"校验结果与抽取结果基本一致。"}',
FALSE, FALSE, 5, '结果可通过。', CURRENT_TIMESTAMP)
ON CONFLICT DO NOTHING;
INSERT INTO annotation_result_history (
id, company_id, creator_id, creator_role, source_result_id, task_id, resource_id,
qa_content_json, qa_content_storage_mode, qa_content_file_path, archive_reason, archived_by, archived_at
@@ -128,23 +128,23 @@ INSERT INTO annotation_result_history (
NULL,
'审核通过后归档', 5, CURRENT_TIMESTAMP)
ON CONFLICT DO NOTHING;
INSERT INTO training_dataset (
id, company_id, creator_id, creator_role, result_history_id, sample_type, glm_format_json, dataset_status
) VALUES
(1001, 2, 4, 'EMPLOYEE', 901, 'TEXT',
'{"messages":[{"role":"system","content":"你是专业知识问答助手"},{"role":"user","content":"图片中的控制柜当前状态如何?"},{"role":"assistant","content":"控制柜处于运行状态,绿色指示灯亮起。"}]}',
'DRAFT')
ON CONFLICT DO NOTHING;
INSERT INTO export_batch (
id, company_id, creator_id, creator_role, batch_no, dataset_file_path, sample_count, finetune_job_id, finetune_status
) VALUES
(1101, 2, 4, 'EMPLOYEE', 'BATCH-20260424-001', 'export/BATCH-20260424-001.jsonl', 1, NULL, 'NOT_STARTED')
ON CONFLICT DO NOTHING;
INSERT INTO export_batch_item (id, batch_id, dataset_id) VALUES
(1201, 1101, 1001)
ON CONFLICT DO NOTHING;
COMMIT;
INSERT INTO training_dataset (
id, company_id, creator_id, creator_role, result_history_id, sample_type, glm_format_json, dataset_status
) VALUES
(1001, 2, 4, 'EMPLOYEE', 901, 'TEXT',
'{"messages":[{"role":"system","content":"你是专业知识问答助手"},{"role":"user","content":"图片中的控制柜当前状态如何?"},{"role":"assistant","content":"控制柜处于运行状态,绿色指示灯亮起。"}]}',
'DRAFT')
ON CONFLICT DO NOTHING;
INSERT INTO export_batch (
id, company_id, creator_id, creator_role, batch_no, dataset_file_path, sample_count, finetune_job_id, finetune_status
) VALUES
(1101, 2, 4, 'EMPLOYEE', 'BATCH-20260424-001', 'export/BATCH-20260424-001.jsonl', 1, NULL, 'NOT_STARTED')
ON CONFLICT DO NOTHING;
INSERT INTO export_batch_item (id, batch_id, dataset_id) VALUES
(1201, 1101, 1001)
ON CONFLICT DO NOTHING;
COMMIT;

View File

@@ -57,7 +57,7 @@ COMMENT ON COLUMN sys_user.company_id IS '所属公司ID关联 sys_company.id
COMMENT ON COLUMN sys_user.phone IS '登录手机号,同公司内唯一。';
COMMENT ON COLUMN sys_user.username IS '用户名或账号别名,用于展示。';
COMMENT ON COLUMN sys_user.role IS '数据权限角色,默认 EMPLOYEE可选 EMPLOYEE、MANAGER、ENGINEER。';
COMMENT ON COLUMN sys_user.position IS '岗位,默认 ANNOTATOR可选 ANNOTATOR、DATA_TRAINER、REVIEWER、ADMIN。';
COMMENT ON COLUMN sys_user.position IS '岗位,默认 ANNOTATOR可选 ANNOTATOR、DATA_TRAINER、REVIEWER、ADMIN、SUPER_ADMIN';
COMMENT ON COLUMN sys_user.real_name IS '用户真实姓名。';
COMMENT ON COLUMN sys_user.password_hash IS '密码哈希值。';
COMMENT ON COLUMN sys_user.must_change_password IS '是否首次登录强制改密。';