GET_TIMELINES

This commit is contained in:
邓皓元 2019-05-05 18:24:56 +08:00
parent 96d554676e
commit 2f29e2ce8f

View File

@ -62,50 +62,55 @@ BEGIN
FOR i IN 1..array_length(orders, 1)
LOOP
order_row := orders [ i];
activated_at := activate_cards -> (order_row->>'sim');
package_row := packages -> (order_row->>'package_id');
-- 服务时间
CASE (order_row->>'type')
WHEN '0' THEN
temp_service_start_at := TO_CHAR(activated_at, 'YYYY-MM-01 00:00:00');
temp_service_end_at := temp_service_start_at + (package_row->>'service_months' || ' month')::INTERVAL +
(package_row->>'delay_months' || ' month')::INTERVAL - '1 second'::INTERVAL;
WHEN '1', '2' THEN
IF (temp_service_end_at > (order_row->>'created_at')::TIMESTAMP) THEN
temp_service_start_at := TO_CHAR(temp_service_end_at + '1 month'::INTERVAL, 'YYYY-MM-01 00:00:00');
ELSE
temp_service_start_at :=
TO_CHAR(
(order_row->>'created_at')::TIMESTAMP + (package_row->>'effect_months' || ' month')::INTERVAL,
'YYYY-MM-01 00:00:00');
END IF;
temp_service_end_at :=
temp_service_start_at + (order_row->>'counts')::INT * (package_row->>'service_months' || ' month')::INTERVAL +
(package_row->>'delay_months' || ' month')::INTERVAL - '1 second'::INTERVAL;
ELSE
-- 先购买了加油包后再激活的
IF ((order_row->>'created_at')::TIMESTAMP < activated_at) THEN
IF ((order_row->>'created_at')::TIMESTAMP <=
TO_CHAR(activated_at - '1 month'::INTERVAL, 'YYYY-MM-01 00:00:00')::TIMESTAMP) THEN
-- 购买时间小于一个月的,直接生效
temp_service_start_at := TO_CHAR(activated_at, 'YYYY-MM-01 00:00:00');
ELSE
-- 延时生效
temp_service_start_at :=
TO_CHAR(activated_at + (package_row->>'effect_months' || ' month')::INTERVAL,
'YYYY-MM-01 00:00:00');
END IF;
ELSE
-- 延时生效
temp_service_start_at :=
TO_CHAR(
(order_row->>'created_at')::TIMESTAMP + (package_row->>'effect_months' || ' month')::INTERVAL,
'YYYY-MM-01 00:00:00');
END IF;
temp_service_end_at := temp_service_start_at + (package_row->>'service_months' || ' month')::INTERVAL +
(package_row->>'delay_months' || ' month')::INTERVAL - '1 second'::INTERVAL;
END CASE;
activated_at := (activate_cards->>(order_row->>'sim'))::TIMESTAMP;
package_row := packages->(order_row->>'package_id');
IF activated_at IS NULL THEN
temp_service_start_at := NULL;
temp_service_end_at := NULL;
ELSE
-- 服务时间
CASE (order_row->>'type')
WHEN '0' THEN
temp_service_start_at := TO_CHAR(activated_at, 'YYYY-MM-01 00:00:00');
temp_service_end_at := temp_service_start_at + (package_row->>'service_months' || ' month')::INTERVAL +
(package_row->>'delay_months' || ' month')::INTERVAL - '1 second'::INTERVAL;
WHEN '1', '2' THEN
IF (temp_service_end_at > (order_row->>'created_at')::TIMESTAMP) THEN
temp_service_start_at := TO_CHAR(temp_service_end_at + '1 month'::INTERVAL, 'YYYY-MM-01 00:00:00');
ELSE
temp_service_start_at :=
TO_CHAR(
(order_row->>'created_at')::TIMESTAMP + (package_row->>'effect_months' || ' month')::INTERVAL,
'YYYY-MM-01 00:00:00');
END IF;
temp_service_end_at :=
temp_service_start_at + (order_row->>'counts')::INT * (package_row->>'service_months' || ' month')::INTERVAL +
(package_row->>'delay_months' || ' month')::INTERVAL - '1 second'::INTERVAL;
ELSE
-- 先购买了加油包后再激活的
IF ((order_row->>'created_at')::TIMESTAMP < activated_at) THEN
IF ((order_row->>'created_at')::TIMESTAMP <=
TO_CHAR(activated_at - '1 month'::INTERVAL, 'YYYY-MM-01 00:00:00')::TIMESTAMP) THEN
-- 购买时间小于一个月的,直接生效
temp_service_start_at := TO_CHAR(activated_at, 'YYYY-MM-01 00:00:00');
ELSE
-- 延时生效
temp_service_start_at :=
TO_CHAR(activated_at + (package_row->>'effect_months' || ' month')::INTERVAL,
'YYYY-MM-01 00:00:00');
END IF;
ELSE
-- 延时生效
temp_service_start_at :=
TO_CHAR(
(order_row->>'created_at')::TIMESTAMP + (package_row->>'effect_months' || ' month')::INTERVAL,
'YYYY-MM-01 00:00:00');
END IF;
temp_service_end_at := temp_service_start_at + (package_row->>'service_months' || ' month')::INTERVAL +
(package_row->>'delay_months' || ' month')::INTERVAL - '1 second'::INTERVAL;
END CASE;
END IF;
temp_service_start_at :=
COALESCE((order_row->>'service_start_at')::TIMESTAMP, temp_service_start_at::TIMESTAMP);
temp_service_end_at := COALESCE((order_row->>'service_end_at')::TIMESTAMP, temp_service_end_at::TIMESTAMP);
@ -127,12 +132,8 @@ BEGIN
service_end_at := (order_row->>'service_end_at')::TIMESTAMP;
RETURN NEXT;
END LOOP;
END IF;
END IF;
END;
$$ LANGUAGE plpgsql;