修改月报表

This commit is contained in:
邓皓元 2019-02-11 10:52:43 +08:00
parent 4fe61d5c4c
commit d45a8140c0
4 changed files with 19 additions and 50 deletions

View File

@ -37,7 +37,7 @@ class CardController extends Controller
}
$cards = $this->cardService->index($conditions);
return res($cards, '卡列表', 201);
}

View File

@ -74,7 +74,7 @@ trait OrderCardConcern
if (isset($conditions['month'])) {
$conditions['month'] = (int)Carbon::parse($conditions['month'])->format('Ym');
$query->whereRaw("timelines_array(sim) @> '{{$conditions['month']}}'");
$query->whereRaw("timelines_index(id, sim) @> '{{$conditions['month']}}'");
}
});

View File

@ -15,6 +15,7 @@ BEGIN
END IF;
query := 'SELECT
virtual_order_cards_partition.id,
virtual_order_cards_partition.type,
virtual_order_cards_partition.package_id,
virtual_order_cards_partition.created_at,
@ -61,7 +62,7 @@ BEGIN
temp_service_end_at := temp_service_start_at + (order_row.service_months || ' month')::INTERVAL + (order_row.delay_months || ' month')::INTERVAL - '1 second'::INTERVAL;
END CASE;
temp_text := format('{"sim": %s, "type": %s, "package_id": %s, "service_start_at": "%s", "service_end_at": "%s"}', sim, order_row.type, order_row.package_id, temp_service_start_at, temp_service_end_at);
temp_text := format('{"id": %s, "sim": %s, "type": %s, "package_id": %s, "service_start_at": "%s", "service_end_at": "%s"}', order_row.id, sim, order_row.type, order_row.package_id, temp_service_start_at, temp_service_end_at);
timelines := timelines::JSONB || temp_text::JSONB;
END LOOP;
RETURN timelines;
@ -99,40 +100,7 @@ END;
$$
LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION TIMELINES_ARRAY (sim INT8, activated_at TIMESTAMP)
RETURNS INT[]
AS $$
DECLARE
timelines INT[] := '{}';
timelines_json JSONB;
item JSONB;
temp_months INT;
i INT;
BEGIN
IF activated_at IS NULL THEN
RETURN timelines;
END IF;
timelines_json := vd.TIMELINES_JSON(sim, activated_at);
FOR item IN SELECT * FROM json_array_elements(timelines_json::JSON) LOOP
temp_months = (TO_CHAR((item->>'service_end_at')::TIMESTAMP, 'YYYY')::INT - TO_CHAR((item->>'service_start_at')::TIMESTAMP, 'YYYY')::INT) * 12
+ (TO_CHAR((item->>'service_end_at')::TIMESTAMP, 'MM')::INT - TO_CHAR((item->>'service_start_at')::TIMESTAMP, 'MM')::INT);
i := 0;
RAISE NOTICE 'TIMELINES_ARRAY: % - % - %', item->>'sim', item->>'package_id', temp_months;
WHILE i <= temp_months LOOP
timelines := timelines || TO_CHAR((item->>'service_start_at')::TIMESTAMP + (i || ' month')::INTERVAL, 'YYYYMM')::INT;
i := i + 1;
END LOOP;
END LOOP;
RETURN timelines;
END;
$$
LANGUAGE plpgsql IMMUTABLE;
CREATE OR REPLACE FUNCTION TIMELINES_ARRAY (sim INT8)
CREATE OR REPLACE FUNCTION TIMELINES_INDEX (id INT, sim INT8)
RETURNS INT[]
AS $$
DECLARE
@ -143,18 +111,19 @@ DECLARE
i INT;
BEGIN
timelines_json := vd.TIMELINES_JSON(sim);
FOR item IN SELECT * FROM json_array_elements(timelines_json::JSON) LOOP
temp_months = (TO_CHAR((item->>'service_end_at')::TIMESTAMP, 'YYYY')::INT - TO_CHAR((item->>'service_start_at')::TIMESTAMP, 'YYYY')::INT) * 12
+ (TO_CHAR((item->>'service_end_at')::TIMESTAMP, 'MM')::INT - TO_CHAR((item->>'service_start_at')::TIMESTAMP, 'MM')::INT);
i := 0;
IF item->>'id'::INT = id THEN
temp_months = (TO_CHAR((item->>'service_end_at')::TIMESTAMP, 'YYYY')::INT - TO_CHAR((item->>'service_start_at')::TIMESTAMP, 'YYYY')::INT) * 12
+ (TO_CHAR((item->>'service_end_at')::TIMESTAMP, 'MM')::INT - TO_CHAR((item->>'service_start_at')::TIMESTAMP, 'MM')::INT);
i := 0;
RAISE NOTICE 'TIMELINES_ARRAY: % - % - %', item->>'sim', item->>'package_id', temp_months;
RAISE NOTICE 'TIMELINES_INDEX: % - % - %', item->>'sim', item->>'package_id', temp_months;
WHILE i <= temp_months LOOP
timelines := timelines || TO_CHAR((item->>'service_start_at')::TIMESTAMP + (i || ' month')::INTERVAL, 'YYYYMM')::INT;
i := i + 1;
END LOOP;
WHILE i <= temp_months LOOP
timelines := timelines || TO_CHAR((item->>'service_start_at')::TIMESTAMP + (i || ' month')::INTERVAL, 'YYYYMM')::INT;
i := i + 1;
END LOOP;
END IF;
END LOOP;
RETURN timelines;
END;

View File

@ -1,8 +1,8 @@
-- 服务周期索引
CREATE INDEX "virtual_order_cards_timelines_index" ON "virtual_order_cards" USING GIN (timelines_array(sim));
CREATE INDEX "virtual_order_renewal_cards_timelines_index" ON "virtual_order_renewal_cards" USING GIN (timelines_array(sim));
CREATE INDEX "virtual_order_renewal_package_cards_timelines_index" ON "virtual_order_renewal_package_cards" USING GIN (timelines_array(sim));
CREATE INDEX "virtual_order_flows_package_cards_index" ON "virtual_order_flows_package_cards" USING GIN (timelines_array(sim));
CREATE INDEX "virtual_order_cards_timelines_index" ON "virtual_order_cards" USING GIN (TIMELINES_INDEX(id, sim));
CREATE INDEX "virtual_order_renewal_cards_timelines_index" ON "virtual_order_renewal_cards" USING GIN (TIMELINES_INDEX(id, sim));
CREATE INDEX "virtual_order_renewal_package_cards_timelines_index" ON "virtual_order_renewal_package_cards" USING GIN (TIMELINES_INDEX(id, sim));
CREATE INDEX "virtual_order_flows_package_cards_index" ON "virtual_order_flows_package_cards" USING GIN (TIMELINES_INDEX(id, sim));
-- 增删改卡表时更新索引
CREATE OR REPLACE FUNCTION REINDEX_TIMELINES ()