第六阶段开发。
This commit is contained in:
1 parent
35751b4f00
commit
bacdd15f3a
93 files changed
+10190
-22
No files matched your search
@@ -0,0 +1,183 @@
|
||||
-- =============================================================================
|
||||
-- 平板作业(保洁 / 维修)与作业人员
|
||||
-- 1) 保洁复用既有 gy_clean_task(房态重算已依赖它:PENDING→3 待清扫 / PROCESSING→6 保洁中),
|
||||
-- 这里补「执行人、开始时间、备注、来源、房号快照」;
|
||||
-- 2) 维修新建 apt_repair_order(REPORTED→ASSIGNED→IN_PROGRESS→DONE/CANCELLED),
|
||||
-- 维修期间房态置 4(不能入住)并在 disabled_reason 标记 REPAIR:<orderId>;
|
||||
-- 3) 作业人员 apt_staff(保洁/维修,可绑后台账号与平板设备);
|
||||
-- 4) 状态流水 apt_job_event(两类作业共用,便于追溯与统计)。
|
||||
-- 5) 权限点挂在既有父菜单 3000(公寓端)下,menu_type=F。
|
||||
-- 幂等:列/表/权限均做存在性判断,可重复执行。
|
||||
-- =============================================================================
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- 1. 保洁任务补列(沿用 gy_clean_task)
|
||||
-- -----------------------------------------------------------------------------
|
||||
CALL apt_add_column_if_missing('gy_clean_task', 'assignee_staff_id',
|
||||
"assignee_staff_id VARCHAR(64) NULL COMMENT '保洁员(apt_staff.staff_id)'");
|
||||
CALL apt_add_column_if_missing('gy_clean_task', 'started_at',
|
||||
"started_at DATETIME(3) NULL COMMENT '开始保洁时间'");
|
||||
CALL apt_add_column_if_missing('gy_clean_task', 'remark',
|
||||
"remark VARCHAR(255) NULL COMMENT '平板备注'");
|
||||
CALL apt_add_column_if_missing('gy_clean_task', 'source',
|
||||
"source VARCHAR(20) NOT NULL DEFAULT 'TABLET' COMMENT 'TABLET=平板上报 / MANUAL=后台补录'");
|
||||
CALL apt_add_column_if_missing('gy_clean_task', 'room_no',
|
||||
"room_no VARCHAR(32) NULL COMMENT '房号快照(便于按房号查询与展示)'");
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- 2. 作业人员
|
||||
-- -----------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS apt_staff (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT,
|
||||
gyid VARCHAR(32) NOT NULL,
|
||||
staff_id VARCHAR(64) NOT NULL COMMENT '人员业务键 ST-<12位>',
|
||||
staff_type VARCHAR(20) NOT NULL COMMENT 'CLEANER / REPAIRMAN / BOTH',
|
||||
name VARCHAR(64) NOT NULL,
|
||||
work_no VARCHAR(32) NULL COMMENT '工号(同公寓内唯一,可空)',
|
||||
phone VARCHAR(32) NULL,
|
||||
sys_user_id BIGINT NULL COMMENT '绑定的后台账号(sys_user.user_id),用于权限归属',
|
||||
device_code VARCHAR(64) NULL COMMENT '绑定的平板设备(X-Device-Code)',
|
||||
duty_state VARCHAR(20) NOT NULL DEFAULT 'IDLE' COMMENT 'IDLE / BUSY / OFFLINE',
|
||||
state VARCHAR(20) NOT NULL DEFAULT 'ACTIVE' COMMENT 'ACTIVE / DISABLED',
|
||||
remark VARCHAR(255) NULL,
|
||||
biz_version BIGINT NOT NULL DEFAULT 1,
|
||||
deleted TINYINT NOT NULL DEFAULT 0,
|
||||
create_by VARCHAR(64) NULL,
|
||||
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_staff_gyid_id (gyid, staff_id),
|
||||
UNIQUE KEY uk_staff_gyid_workno (gyid, work_no),
|
||||
KEY idx_staff_gyid_type (gyid, staff_type, state),
|
||||
KEY idx_staff_gyid_device (gyid, device_code),
|
||||
CONSTRAINT ck_staff_type CHECK (staff_type IN ('CLEANER','REPAIRMAN','BOTH')),
|
||||
CONSTRAINT ck_staff_state CHECK (state IN ('ACTIVE','DISABLED')),
|
||||
CONSTRAINT ck_staff_duty CHECK (duty_state IN ('IDLE','BUSY','OFFLINE'))
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||||
COMMENT='公寓作业人员(保洁/维修)';
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- 3. 维修工单
|
||||
-- -----------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS apt_repair_order (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT,
|
||||
gyid VARCHAR(32) NOT NULL,
|
||||
order_id VARCHAR(64) NOT NULL COMMENT '工单号 RO-<12位>',
|
||||
room_id VARCHAR(64) NOT NULL,
|
||||
room_no VARCHAR(32) NOT NULL,
|
||||
category VARCHAR(20) NOT NULL DEFAULT 'OTHER' COMMENT 'ELECTRIC/PLUMBING/DOOR_WINDOW/AIRCON/OTHER',
|
||||
description VARCHAR(500) NOT NULL,
|
||||
priority VARCHAR(10) NOT NULL DEFAULT 'NORMAL' COMMENT 'NORMAL / URGENT',
|
||||
source VARCHAR(20) NOT NULL DEFAULT 'TABLET' COMMENT 'TABLET / MANUAL',
|
||||
reporter_staff_id VARCHAR(64) NULL,
|
||||
reporter_name VARCHAR(64) NULL,
|
||||
assignee_staff_id VARCHAR(64) NULL,
|
||||
assignee_name VARCHAR(64) NULL,
|
||||
state VARCHAR(20) NOT NULL DEFAULT 'REPORTED' COMMENT 'REPORTED/ASSIGNED/IN_PROGRESS/DONE/CANCELLED',
|
||||
room_status_before VARCHAR(2) NULL,
|
||||
room_status_after VARCHAR(2) NULL,
|
||||
result VARCHAR(255) NULL COMMENT '维修结果(DONE 必填)',
|
||||
remark VARCHAR(500) NULL,
|
||||
reported_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
assigned_at DATETIME(3) NULL,
|
||||
started_at DATETIME(3) NULL,
|
||||
finished_at DATETIME(3) NULL,
|
||||
duration_sec BIGINT NULL COMMENT '作业时长(开始→完成)',
|
||||
version INT NOT NULL DEFAULT 0,
|
||||
deleted TINYINT NOT NULL DEFAULT 0,
|
||||
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_repair_gyid_order (gyid, order_id),
|
||||
KEY idx_repair_gyid_state (gyid, state, reported_at),
|
||||
KEY idx_repair_gyid_room (gyid, room_id, state),
|
||||
KEY idx_repair_gyid_assignee (gyid, assignee_staff_id, state),
|
||||
CONSTRAINT ck_repair_state CHECK (state IN ('REPORTED','ASSIGNED','IN_PROGRESS','DONE','CANCELLED')),
|
||||
CONSTRAINT ck_repair_priority CHECK (priority IN ('NORMAL','URGENT')),
|
||||
CONSTRAINT ck_repair_category CHECK (category IN ('ELECTRIC','PLUMBING','DOOR_WINDOW','AIRCON','OTHER'))
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||||
COMMENT='维修工单(维修期间房态 4=不能入住)';
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- 4. 作业状态流水(保洁 + 维修共用)
|
||||
-- -----------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS apt_job_event (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT,
|
||||
gyid VARCHAR(32) NOT NULL,
|
||||
event_id VARCHAR(64) NOT NULL,
|
||||
biz_type VARCHAR(20) NOT NULL COMMENT 'CLEAN / REPAIR',
|
||||
biz_id VARCHAR(64) NOT NULL COMMENT 'task_id / order_id',
|
||||
room_id VARCHAR(64) NULL,
|
||||
from_state VARCHAR(20) NULL,
|
||||
to_state VARCHAR(20) NOT NULL,
|
||||
operator_staff VARCHAR(64) NULL,
|
||||
operator_name VARCHAR(64) NULL,
|
||||
device_code VARCHAR(64) NULL,
|
||||
remark VARCHAR(255) NULL,
|
||||
occurred_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_jobevent_gyid_id (gyid, event_id),
|
||||
KEY idx_jobevent_gyid_biz (gyid, biz_type, biz_id, occurred_at),
|
||||
CONSTRAINT ck_jobevent_type CHECK (biz_type IN ('CLEAN','REPAIR'))
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||||
COMMENT='作业状态流水(保洁/维修)';
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- 5. 权限点(挂在 3000 公寓端下,menu_type=F)
|
||||
-- -----------------------------------------------------------------------------
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, menu_type, visible, status, perms, create_by, create_time, remark)
|
||||
SELECT 3230, '作业工单查看', 3000, 30, 'F', '0', '0', 'apt:workorder:list', 'IT-5', NOW(3), '保洁/维修工单列表'
|
||||
WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'apt:workorder:list');
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, menu_type, visible, status, perms, create_by, create_time, remark)
|
||||
SELECT 3231, '作业工单详情', 3000, 31, 'F', '0', '0', 'apt:workorder:query', 'IT-5', NOW(3), NULL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'apt:workorder:query');
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, menu_type, visible, status, perms, create_by, create_time, remark)
|
||||
SELECT 3232, '作业派单', 3000, 32, 'F', '0', '0', 'apt:workorder:assign', 'IT-5', NOW(3), '维修派单/改派'
|
||||
WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'apt:workorder:assign');
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, menu_type, visible, status, perms, create_by, create_time, remark)
|
||||
SELECT 3233, '作业处置', 3000, 33, 'F', '0', '0', 'apt:workorder:handle', 'IT-5', NOW(3), '开始/完成/取消'
|
||||
WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'apt:workorder:handle');
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, menu_type, visible, status, perms, create_by, create_time, remark)
|
||||
SELECT 3234, '作业统计', 3000, 34, 'F', '0', '0', 'apt:workorder:stats', 'IT-5', NOW(3), '按类型/状态/人员统计'
|
||||
WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'apt:workorder:stats');
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, menu_type, visible, status, perms, create_by, create_time, remark)
|
||||
SELECT 3235, '作业人员列表', 3000, 35, 'F', '0', '0', 'apt:staff:list', 'IT-5', NOW(3), '保洁/维修人员'
|
||||
WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'apt:staff:list');
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, menu_type, visible, status, perms, create_by, create_time, remark)
|
||||
SELECT 3236, '作业人员详情', 3000, 36, 'F', '0', '0', 'apt:staff:query', 'IT-5', NOW(3), NULL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'apt:staff:query');
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, menu_type, visible, status, perms, create_by, create_time, remark)
|
||||
SELECT 3237, '作业人员新增', 3000, 37, 'F', '0', '0', 'apt:staff:add', 'IT-5', NOW(3), NULL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'apt:staff:add');
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, menu_type, visible, status, perms, create_by, create_time, remark)
|
||||
SELECT 3238, '作业人员编辑', 3000, 38, 'F', '0', '0', 'apt:staff:edit', 'IT-5', NOW(3), NULL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'apt:staff:edit');
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, menu_type, visible, status, perms, create_by, create_time, remark)
|
||||
SELECT 3239, '作业人员删除', 3000, 39, 'F', '0', '0', 'apt:staff:remove', 'IT-5', NOW(3), NULL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'apt:staff:remove');
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, menu_type, visible, status, perms, create_by, create_time, remark)
|
||||
SELECT 3240, '作业人员启停', 3000, 40, 'F', '0', '0', 'apt:staff:changeStatus', 'IT-5', NOW(3), NULL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'apt:staff:changeStatus');
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- 6. 校验
|
||||
-- -----------------------------------------------------------------------------
|
||||
SELECT '=== 46. 作业相关表(应 3)===' AS section;
|
||||
SELECT COUNT(*) AS tables_cnt
|
||||
FROM information_schema.TABLES
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME IN ('apt_staff','apt_repair_order','apt_job_event');
|
||||
|
||||
SELECT '=== 47. 保洁任务补列(应 5)===' AS section;
|
||||
SELECT COUNT(*) AS clean_columns
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'gy_clean_task'
|
||||
AND COLUMN_NAME IN ('assignee_staff_id','started_at','remark','source','room_no');
|
||||
|
||||
SELECT '=== 48. 新增权限点(应 11)===' AS section;
|
||||
SELECT COUNT(*) AS perms_cnt FROM sys_menu
|
||||
WHERE perms IN ('apt:workorder:list','apt:workorder:query','apt:workorder:assign',
|
||||
'apt:workorder:handle','apt:workorder:stats',
|
||||
'apt:staff:list','apt:staff:query','apt:staff:add','apt:staff:edit',
|
||||
'apt:staff:remove','apt:staff:changeStatus');
|
||||
Reference in new issue
Block a user