R83 员工号自动生成与单用户开通后端闭环

这个提交包含在:
2026-05-05 00:05:49 +08:00
父节点 184373c07e
当前提交 8f08243882
共修改 4 个文件,包含 300 行新增和 21 行删除
@@ -0,0 +1,54 @@
CREATE SEQUENCE "employee_number_seq"
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
DO $$
DECLARE
v_next_value INTEGER;
BEGIN
SELECT COALESCE(MAX(SUBSTRING(employee_no FROM 4)::INTEGER), 0) + 1
INTO v_next_value
FROM employees
WHERE employee_no ~ '^HYD[0-9]{6}$';
EXECUTE format('ALTER SEQUENCE "employee_number_seq" RESTART WITH %s', v_next_value);
END;
$$;
CREATE OR REPLACE FUNCTION generate_employee_number()
RETURNS TEXT
LANGUAGE plpgsql
AS $$
DECLARE
v_seq INTEGER;
BEGIN
v_seq := nextval('"employee_number_seq"');
IF v_seq > 999999 THEN
RAISE EXCEPTION '员工编号序列已达上限 999999';
END IF;
RETURN 'HYD' || LPAD(v_seq::TEXT, 6, '0');
END;
$$;
ALTER TABLE "employees"
ALTER COLUMN "employee_no" SET DEFAULT generate_employee_number();
CREATE OR REPLACE FUNCTION prevent_employee_no_update()
RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
IF OLD.employee_no IS DISTINCT FROM NEW.employee_no THEN
RAISE EXCEPTION '禁止修改员工编号:employee_no 是不可变字段';
END IF;
RETURN NEW;
END;
$$;
CREATE TRIGGER prevent_employee_no_update_trigger
BEFORE UPDATE ON "employees"
FOR EACH ROW
EXECUTE FUNCTION prevent_employee_no_update();