91 lines
3.1 KiB
PL/PgSQL
91 lines
3.1 KiB
PL/PgSQL
CREATE OR REPLACE FUNCTION card_timelines ()
|
|
RETURNS TRIGGER
|
|
AS $$
|
|
DECLARE
|
|
temp RECORD;
|
|
srow RECORD;
|
|
BEGIN
|
|
IF (TG_OP = 'INSERT') THEN
|
|
IF NEW.virtual_activated_at IS NOT NULL THEN
|
|
RAISE NOTICE 'row % inserted', NEW.sim;
|
|
SELECT
|
|
virtual_order_cards.order_id
|
|
virtual_order_cards.created_at,
|
|
virtual_packages.service_months,
|
|
virtual_packages.name AS package_name INTO srow
|
|
FROM
|
|
virtual_order_cards
|
|
JOIN virtual_packages ON virtual_order_cards.package_id = virtual_packages.id
|
|
WHERE
|
|
sim = NEW.sim;
|
|
IF FOUND THEN
|
|
INSERT INTO timelines (sim, package_type, package_name, starttime, endtime)
|
|
VALUES (NEW.sim, 0, srow.package_name, NEW.virtual_activated_at, NEW.virtual_activated_at + (srow.service_months || ' month')::interval);
|
|
END IF;
|
|
END IF;
|
|
ELSIF (TG_OP = 'UPDATE') THEN
|
|
IF OLD.virtual_activated_at IS NOT NULL OR NEW.virtual_activated_at IS NOT NULL THEN
|
|
IF NEW.virtual_activated_at IS NULL THEN
|
|
RAISE NOTICE 'NEW virtual_activated_at IS NULL';
|
|
ELSE
|
|
RAISE NOTICE 'NEW virtual_activated_at IS NOT NULL';
|
|
END IF;
|
|
END IF;
|
|
ELSIF (TG_OP = 'DELETE') THEN
|
|
END IF;
|
|
RETURN NULL;
|
|
END;
|
|
$$
|
|
LANGUAGE plpgsql;
|
|
|
|
CREATE SEQUENCE "order_cards_id_seq"
|
|
INCREMENT 1
|
|
MINVALUE 1
|
|
MAXVALUE 2147483647
|
|
START 1
|
|
CACHE 1;
|
|
|
|
|
|
CREATE TABLE "order_cards" (
|
|
"id" int4 NOT NULL DEFAULT nextval('order_cards_id_seq'::regclass),
|
|
"type" int2 NOT NULL DEFAULT 0,
|
|
"sim" int8 NOT NULL DEFAULT '0'::bigint,
|
|
"order_id" int4 NOT NULL DEFAULT 0,
|
|
"company_id" int4 NOT NULL DEFAULT 0,
|
|
"package_id" int4 NOT NULL DEFAULT 0,
|
|
"counts" int4 NOT NULL DEFAULT 1,
|
|
"created_at" timestamp(0),
|
|
"updated_at" timestamp(0),
|
|
"deleted_at" timestamp(0),
|
|
"service_start_at" timestamp(0),
|
|
"service_end_at" timestamp(0),
|
|
CONSTRAINT "order_cards_pkey" PRIMARY KEY ("id", "type")
|
|
) PARTITION BY LIST (type);
|
|
;
|
|
|
|
CREATE UNIQUE INDEX "virtual_order_cards_order_id_sim_deleted_at_unique" ON "virtual_order_cards" USING btree (
|
|
"order_id" "pg_catalog"."int4_ops" ASC NULLS LAST,
|
|
"sim" "pg_catalog"."int8_ops" ASC NULLS LAST,
|
|
COALESCE(deleted_at, '1970-01-01 08:00:00'::timestamp without time zone) "pg_catalog"."timestamp_ops" ASC NULLS LAST
|
|
);
|
|
|
|
COMMENT ON COLUMN "order_cards"."id" IS '关联表ID';
|
|
|
|
COMMENT ON COLUMN "order_cards"."sim" IS 'SIM卡号';
|
|
|
|
COMMENT ON COLUMN "order_cards"."order_id" IS '订单ID';
|
|
|
|
COMMENT ON COLUMN "order_cards"."company_id" IS '企业ID';
|
|
|
|
COMMENT ON COLUMN "order_cards"."package_id" IS '套餐ID';
|
|
|
|
COMMENT ON COLUMN "order_cards"."counts" IS '数量';
|
|
|
|
COMMENT ON TABLE "order_cards" IS 'VD卡关联基础套餐订单';
|
|
|
|
CREATE TABLE virtual_order_cards PARTITION OF order_cards FOR VALUES IN (0);
|
|
CREATE TABLE virtual_order_renewal_cards PARTITION OF order_cards FOR VALUES IN (1);
|
|
CREATE TABLE virtual_order_renewal_package_cards PARTITION OF order_cards FOR VALUES IN (2);
|
|
CREATE TABLE virtual_order_flows_package_cards PARTITION OF order_cards FOR VALUES IN (3);
|
|
|