修改月报表
This commit is contained in:
parent
4fe61d5c4c
commit
d45a8140c0
@ -37,7 +37,7 @@ class CardController extends Controller
|
||||
}
|
||||
|
||||
$cards = $this->cardService->index($conditions);
|
||||
|
||||
|
||||
return res($cards, '卡列表', 201);
|
||||
}
|
||||
|
||||
|
@ -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']}}'");
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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 ()
|
||||
|
Loading…
x
Reference in New Issue
Block a user