数据生成
This commit is contained in:
parent
c8da6621f1
commit
602bade2ff
@ -183,6 +183,7 @@ class FlowPoolController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function flows()
|
public function flows()
|
||||||
{
|
{
|
||||||
|
begin_time_consuming();
|
||||||
$pool_id = $this->request->get('pool_id');
|
$pool_id = $this->request->get('pool_id');
|
||||||
$month = $this->request->time('month');
|
$month = $this->request->time('month');
|
||||||
|
|
||||||
|
@ -22,12 +22,13 @@ CREATE OR REPLACE FUNCTION GET_TIMELINES(INT8[])
|
|||||||
service_start_at TIMESTAMP,
|
service_start_at TIMESTAMP,
|
||||||
service_end_at TIMESTAMP
|
service_end_at TIMESTAMP
|
||||||
)
|
)
|
||||||
AS $$
|
AS
|
||||||
|
$$
|
||||||
DECLARE
|
DECLARE
|
||||||
activate_cards JSONB := '[]';
|
activate_cards JSONB := '[]';
|
||||||
packages JSONB := '[]';
|
packages JSONB := '[]';
|
||||||
query TEXT;
|
query TEXT;
|
||||||
package_row JSONB := '[]';
|
package_row JSONB := '[]';
|
||||||
orders JSON[] := '{}';
|
orders JSON[] := '{}';
|
||||||
order_row RECORD;
|
order_row RECORD;
|
||||||
temp_service_start_at TIMESTAMP;
|
temp_service_start_at TIMESTAMP;
|
||||||
@ -35,28 +36,25 @@ DECLARE
|
|||||||
activated_at TIMESTAMP;
|
activated_at TIMESTAMP;
|
||||||
BEGIN
|
BEGIN
|
||||||
SELECT array_to_json(array_agg(row_to_json(t))) INTO activate_cards
|
SELECT array_to_json(array_agg(row_to_json(t))) INTO activate_cards
|
||||||
FROM (SELECT cards.sim, cards.virtual_activated_at FROM vd.cards WHERE cards.sim = ANY ($1)) t;
|
FROM (SELECT cards.sim, cards.virtual_activated_at FROM vd.cards WHERE cards.sim = ANY ($1)) t;
|
||||||
|
|
||||||
SELECT array_to_json(array_agg(row_to_json(t))) INTO packages
|
SELECT array_to_json(array_agg(row_to_json(t))) INTO packages
|
||||||
FROM (SELECT virtual_packages.id, virtual_packages.service_months, virtual_packages.effect_months, virtual_packages.effect_months FROM vd.virtual_packages) t;
|
FROM (SELECT virtual_packages.id,
|
||||||
|
virtual_packages.service_months,
|
||||||
|
virtual_packages.effect_months,
|
||||||
|
virtual_packages.delay_months
|
||||||
|
FROM vd.virtual_packages) t;
|
||||||
|
|
||||||
query := 'SELECT id, type, sim, package_id, created_at, counts, service_start_at, service_end_at
|
query := 'SELECT id, type, sim, package_id, created_at, counts, service_start_at, service_end_at
|
||||||
FROM vd.virtual_order_cards_partition
|
FROM vd.virtual_order_cards_partition
|
||||||
WHERE sim = ANY($1)
|
WHERE sim = ANY($1)
|
||||||
ORDER BY sim ASC, created_at ASC';
|
ORDER BY sim ASC, created_at ASC';
|
||||||
|
|
||||||
SELECT array_agg(row_to_json(t)) INTO orders
|
|
||||||
FROM EXECUTE query;
|
|
||||||
|
|
||||||
|
|
||||||
RAISE NOTICE '%s', orders;
|
|
||||||
|
|
||||||
|
|
||||||
FOR order_row IN EXECUTE query USING $1
|
FOR order_row IN EXECUTE query USING $1
|
||||||
LOOP
|
LOOP
|
||||||
SELECT value->>'virtual_activated_at' INTO activated_at
|
SELECT value ->> 'virtual_activated_at' INTO activated_at
|
||||||
FROM json_array_elements(activate_cards::JSON)
|
FROM json_array_elements(activate_cards::JSON)
|
||||||
WHERE value->>'sim' = order_row.sim::TEXT;
|
WHERE value ->> 'sim' = order_row.sim::TEXT;
|
||||||
|
|
||||||
IF NOT FOUND THEN
|
IF NOT FOUND THEN
|
||||||
temp_service_start_at := NULL;
|
temp_service_start_at := NULL;
|
||||||
@ -66,25 +64,27 @@ BEGIN
|
|||||||
temp_service_end_at := NULL;
|
temp_service_end_at := NULL;
|
||||||
ELSE
|
ELSE
|
||||||
SELECT value INTO package_row
|
SELECT value INTO package_row
|
||||||
FROM json_array_elements(packages::JSON)
|
FROM json_array_elements(packages::JSON)
|
||||||
WHERE value->>'id' = order_row.package_id::TEXT;
|
WHERE value ->> 'id' = order_row.package_id::TEXT;
|
||||||
|
|
||||||
-- 服务时间
|
-- 服务时间
|
||||||
CASE (order_row."type")
|
CASE (order_row."type")
|
||||||
WHEN 0 THEN
|
WHEN 0 THEN
|
||||||
temp_service_start_at := TO_CHAR(activated_at, 'YYYY-MM-01 00:00:00');
|
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 +
|
temp_service_end_at := temp_service_start_at + (package_row ->> 'service_months' || ' month')::INTERVAL +
|
||||||
(package_row->>'delay_months' || ' month')::INTERVAL - '1 second'::INTERVAL;
|
(package_row ->> 'delay_months' || ' month')::INTERVAL - '1 second'::INTERVAL;
|
||||||
WHEN 1, 2 THEN
|
WHEN 1, 2 THEN
|
||||||
IF (temp_service_end_at > order_row.created_at) THEN
|
IF (temp_service_end_at > order_row.created_at) THEN
|
||||||
temp_service_start_at := TO_CHAR(temp_service_end_at + '1 month'::INTERVAL, 'YYYY-MM-01 00:00:00');
|
temp_service_start_at := TO_CHAR(temp_service_end_at + '1 month'::INTERVAL, 'YYYY-MM-01 00:00:00');
|
||||||
ELSE
|
ELSE
|
||||||
temp_service_start_at := TO_CHAR(order_row.created_at + (package_row->>'effect_months' || ' month')::INTERVAL,
|
temp_service_start_at :=
|
||||||
'YYYY-MM-01 00:00:00');
|
TO_CHAR(order_row.created_at + (package_row ->> 'effect_months' || ' month')::INTERVAL,
|
||||||
|
'YYYY-MM-01 00:00:00');
|
||||||
END IF;
|
END IF;
|
||||||
temp_service_end_at :=
|
temp_service_end_at :=
|
||||||
temp_service_start_at + order_row.counts * (package_row->>'service_months' || ' month')::INTERVAL +
|
temp_service_start_at +
|
||||||
(package_row->>'delay_months' || ' month')::INTERVAL - '1 second'::INTERVAL;
|
order_row.counts * (package_row ->> 'service_months' || ' month')::INTERVAL +
|
||||||
|
(package_row ->> 'delay_months' || ' month')::INTERVAL - '1 second'::INTERVAL;
|
||||||
ELSE
|
ELSE
|
||||||
-- 先购买了加油包后再激活的
|
-- 先购买了加油包后再激活的
|
||||||
IF (order_row.created_at < activated_at) THEN
|
IF (order_row.created_at < activated_at) THEN
|
||||||
@ -95,15 +95,17 @@ BEGIN
|
|||||||
ELSE
|
ELSE
|
||||||
-- 延时生效
|
-- 延时生效
|
||||||
temp_service_start_at :=
|
temp_service_start_at :=
|
||||||
TO_CHAR(activated_at + (package_row->>'effect_months' || ' month')::INTERVAL, 'YYYY-MM-01 00:00:00');
|
TO_CHAR(activated_at + (package_row ->> 'effect_months' || ' month')::INTERVAL,
|
||||||
|
'YYYY-MM-01 00:00:00');
|
||||||
END IF;
|
END IF;
|
||||||
ELSE
|
ELSE
|
||||||
-- 延时生效
|
-- 延时生效
|
||||||
temp_service_start_at := TO_CHAR(order_row.created_at + (package_row->>'effect_months' || ' month')::INTERVAL,
|
temp_service_start_at :=
|
||||||
'YYYY-MM-01 00:00:00');
|
TO_CHAR(order_row.created_at + (package_row ->> 'effect_months' || ' month')::INTERVAL,
|
||||||
|
'YYYY-MM-01 00:00:00');
|
||||||
END IF;
|
END IF;
|
||||||
temp_service_end_at := temp_service_start_at + (package_row->>'service_months' || ' month')::INTERVAL +
|
temp_service_end_at := temp_service_start_at + (package_row ->> 'service_months' || ' month')::INTERVAL +
|
||||||
(package_row->>'delay_months' || ' month')::INTERVAL - '1 second'::INTERVAL;
|
(package_row ->> 'delay_months' || ' month')::INTERVAL - '1 second'::INTERVAL;
|
||||||
END CASE;
|
END CASE;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user