R83 员工号自动生成与单用户开通后端闭环
这个提交包含在:
@@ -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();
|
||||
@@ -545,7 +545,7 @@ model Department {
|
||||
|
||||
model Employee {
|
||||
id String @id @default(uuid()) @db.Uuid
|
||||
employee_no String @unique
|
||||
employee_no String @unique @default(dbgenerated("generate_employee_number()"))
|
||||
name String
|
||||
phone String @unique
|
||||
email String @unique
|
||||
|
||||
在新工单中引用
屏蔽一个用户