| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- -- =============================================
- -- 智慧水务管理系统 - 综合工单管理 DDL
- -- 版本: V3
- -- 描述: 工单创建/分派/处理/完成/统计
- -- =============================================
-
- -- ==================== 工单主表 ====================
- CREATE TABLE IF NOT EXISTS dispatch_work_order (
- id BIGSERIAL PRIMARY KEY,
- order_no VARCHAR(50) UNIQUE NOT NULL,
- title VARCHAR(200) NOT NULL,
- description TEXT,
- type VARCHAR(30) NOT NULL DEFAULT 'REPAIR', -- REPAIR/INSPECTION/COMPLAINT/EMERGENCY
- priority VARCHAR(20) NOT NULL DEFAULT 'MEDIUM', -- LOW/MEDIUM/HIGH/URGENT
- status INT NOT NULL DEFAULT 0, -- 0:待办 1:已分派 2:处理中 4:已完成 5:已驳回 6:已取消
- assignee_id BIGINT,
- assignee_name VARCHAR(50),
- creator_id BIGINT,
- creator_name VARCHAR(50),
- source VARCHAR(50), -- 来源: manual/phone/app/alert
- facility_id BIGINT,
- location VARCHAR(500),
- longitude DOUBLE PRECISION,
- latitude DOUBLE PRECISION,
- attachments TEXT, -- JSON数组
- deadline TIMESTAMP,
- assigned_at TIMESTAMP,
- started_at TIMESTAMP,
- completed_at TIMESTAMP,
- result TEXT,
- reject_reason TEXT,
- remark TEXT,
- deleted SMALLINT DEFAULT 0,
- created_at TIMESTAMP DEFAULT NOW(),
- updated_at TIMESTAMP DEFAULT NOW()
- );
- COMMENT ON TABLE dispatch_work_order IS '工单主表';
- COMMENT ON COLUMN dispatch_work_order.type IS '工单类型: REPAIR(维修)/INSPECTION(巡检)/COMPLAINT(投诉)/EMERGENCY(应急)';
- COMMENT ON COLUMN dispatch_work_order.priority IS '优先级: LOW/MEDIUM/HIGH/URGENT';
- COMMENT ON COLUMN dispatch_work_order.status IS '状态: 0待办/1已分派/2处理中/4已完成/5已驳回/6已取消';
-
- CREATE INDEX IF NOT EXISTS idx_wo_order_no ON dispatch_work_order(order_no);
- CREATE INDEX IF NOT EXISTS idx_wo_status ON dispatch_work_order(status);
- CREATE INDEX IF NOT EXISTS idx_wo_type ON dispatch_work_order(type);
- CREATE INDEX IF NOT EXISTS idx_wo_assignee ON dispatch_work_order(assignee_id);
- CREATE INDEX IF NOT EXISTS idx_wo_creator ON dispatch_work_order(creator_id);
- CREATE INDEX IF NOT EXISTS idx_wo_created_at ON dispatch_work_order(created_at);
-
- -- ==================== 工单处理日志 ====================
- CREATE TABLE IF NOT EXISTS dispatch_work_order_log (
- id BIGSERIAL PRIMARY KEY,
- work_order_id BIGINT NOT NULL REFERENCES dispatch_work_order(id),
- order_no VARCHAR(50),
- stage VARCHAR(30),
- from_status INT,
- to_status INT,
- operator_id BIGINT,
- operator_name VARCHAR(50),
- action_desc TEXT,
- attachments TEXT,
- created_at TIMESTAMP DEFAULT NOW()
- );
- COMMENT ON TABLE dispatch_work_order_log IS '工单处理日志';
-
- CREATE INDEX IF NOT EXISTS idx_wolog_wo_id ON dispatch_work_order_log(work_order_id);
- CREATE INDEX IF NOT EXISTS idx_wolog_order_no ON dispatch_work_order_log(order_no);
-
- -- ==================== 工单分派记录 ====================
- CREATE TABLE IF NOT EXISTS dispatch_work_order_assignment (
- id BIGSERIAL PRIMARY KEY,
- work_order_id BIGINT NOT NULL REFERENCES dispatch_work_order(id),
- order_no VARCHAR(50),
- assigner_id BIGINT,
- assigner_name VARCHAR(50),
- assignee_id BIGINT,
- assignee_name VARCHAR(50),
- role VARCHAR(20) NOT NULL DEFAULT 'PRIMARY', -- PRIMARY/ASSISTANT
- assignment_note TEXT,
- assignment_type VARCHAR(20) DEFAULT 'MANUAL', -- MANUAL/AUTO
- status INT DEFAULT 1, -- 1:活跃 0:已移除
- created_at TIMESTAMP DEFAULT NOW(),
- updated_at TIMESTAMP DEFAULT NOW()
- );
- COMMENT ON TABLE dispatch_work_order_assignment IS '工单分派记录(支持多人协作)';
-
- CREATE INDEX IF NOT EXISTS idx_woassign_wo_id ON dispatch_work_order_assignment(work_order_id);
- CREATE INDEX IF NOT EXISTS idx_woassign_assignee ON dispatch_work_order_assignment(assignee_id);
|