CaiWuXiTong/deploy/ai-fin-ledger-views.sql
aaron 93a27725b6 feat(财务台账): 接入 AI 轻量视图并改为分批增量快照 (#411)
本地验证:7 天和 30 天增量合并后,12,037 笔明细、收入 184,308,335.23、支出 155,917,513.13 保持不变。
2026-10-21 10:37:59 +08:00

101 lines
4.4 KiB
Transact-SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 财务台账 AI 库轻量视图与索引
-- 目标库:JSReportReplica
-- 只新增视图/索引并授予 caiwu 只读 SELECT;不修改任何 base 业务数据。
-- 建议用具备 DDL 权限的维护账号执行。
CREATE OR ALTER VIEW rpt.fin_ledger_workorder AS
SELECT Id, woNo, createby, created, completeTime, businessFieldList
FROM rpt.jst_workOrderInfo
WHERE woTypeId = N'9E5A531F48D94AF4B8611FA6918ADA29'
AND status = N'CONFIRMED';
GO
CREATE OR ALTER VIEW rpt.fin_ledger_withdrawal AS
SELECT a.Id, a.shop_id, b.shop_name, a.channel, a.fee_time, a.fee_name, a.amount, a.primary_key
FROM rpt.jst_originalBillInfo a
LEFT JOIN rpt.jst_shopInfo b ON b.shop_id = a.shop_id
WHERE a.inout_type = N'-1'
AND a.fee_name LIKE N'%提现%'
AND a.fee_time >= '2026-01-01';
GO
CREATE OR ALTER VIEW rpt.fin_ledger_dingtalk_workflow AS
SELECT processInstanceId, processCode, businessId, title, status, originatorUserId,
originatorDeptName, joinAt, finishTime
FROM rpt.ding_Workflow
WHERE processCode IN (
'PROC-B290696F-EC2A-4F76-87BA-E0A12E10D09F',
'PROC-C5159B8D-F412-4DF8-981D-64EBB8D03EB6',
'PROC-39DD70DE-DAB2-4A5F-B8F1-0B0B68BD0C88',
'PROC-BBAC7187-9E59-4942-941A-59C7EAF0CEDA',
'PROC-ACF09A14-B094-46B1-A9E2-8BB1F4E1FDCF',
'PROC-6407E98B-040A-4C96-AA7D-696650FC1A25'
);
GO
CREATE OR ALTER VIEW rpt.fin_ledger_dingtalk_scheme AS
SELECT s.id, s.processInstanceId, s.name, s.value
FROM rpt.ding_WorkflowScheme s
WHERE s.name IN (N'付款明细', N'收款费用明细', N'应付明细', N'固定资产报废或出售明细', N'收款合计', N'付款金额合计');
GO
CREATE OR ALTER VIEW rpt.fin_ledger_store_opening AS
SELECT a.flowId, a.AccountCode, a.AccountName, a.costType, a.money, a.paymentTime,
a.paymentAccount, b.erpShopName, b.platform, b.applyUser, b.applyDepartment
FROM rpt.fys_shopInfo_kingdeeCode_flow a
LEFT JOIN rpt.fys_shopInfo_flow b ON a.flowId = b.flowId
WHERE a.flowId IN (SELECT flowId FROM rpt.flow_flow WHERE flowType = 8 AND flowStatus = 3)
AND a.type = 1 AND a.isPaymentMade = 1 AND a.money > 0;
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = 'IX_base_jst_workOrderInfo_fin_ledger')
CREATE NONCLUSTERED INDEX IX_base_jst_workOrderInfo_fin_ledger
ON base.jst_workOrderInfo (Id)
INCLUDE (woNo, createby, created, completeTime)
WHERE woTypeId = N'9E5A531F48D94AF4B8611FA6918ADA29' AND status = N'CONFIRMED'
WITH (ONLINE = ON, MAXDOP = 2);
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = 'IX_base_jst_originalBillInfo_fin_ledger')
CREATE NONCLUSTERED INDEX IX_base_jst_originalBillInfo_fin_ledger
ON base.jst_originalBillInfo (fee_time)
INCLUDE (Id, shop_id, channel, fee_name, amount, primary_key)
WHERE inout_type = N'-1' AND fee_time >= '2026-01-01'
WITH (ONLINE = ON, MAXDOP = 4, SORT_IN_TEMPDB = ON);
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = 'IX_base_ding_Workflow_fin_ledger')
CREATE NONCLUSTERED INDEX IX_base_ding_Workflow_fin_ledger
ON base.ding_Workflow (joinAt, processCode)
INCLUDE (processInstanceId, businessId, title, status, originatorUserId, originatorDeptName, finishTime)
WITH (ONLINE = ON, MAXDOP = 2);
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = 'IX_base_flow_flow_fin_ledger')
CREATE NONCLUSTERED INDEX IX_base_flow_flow_fin_ledger
ON base.flow_flow (flowType, flowStatus, flowId)
INCLUDE (applyUser)
WITH (ONLINE = ON, MAXDOP = 2);
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = 'IX_base_fys_shopInfo_kingdeeCode_flow_fin_ledger')
CREATE NONCLUSTERED INDEX IX_base_fys_shopInfo_kingdeeCode_flow_fin_ledger
ON base.fys_shopInfo_kingdeeCode_flow (flowId)
INCLUDE (type, isPaymentMade, paymentTime, paymentAccount, costType, money, AccountCode, AccountName)
WITH (ONLINE = ON, MAXDOP = 2);
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = 'IX_base_fys_shopInfo_flow_fin_ledger')
CREATE NONCLUSTERED INDEX IX_base_fys_shopInfo_flow_fin_ledger
ON base.fys_shopInfo_flow (flowId)
INCLUDE (erpShopName, platform, applyUser, applyDepartment)
WITH (ONLINE = ON, MAXDOP = 2);
GO
GRANT SELECT ON OBJECT::rpt.fin_ledger_workorder TO [caiwu];
GRANT SELECT ON OBJECT::rpt.fin_ledger_withdrawal TO [caiwu];
GRANT SELECT ON OBJECT::rpt.fin_ledger_dingtalk_workflow TO [caiwu];
GRANT SELECT ON OBJECT::rpt.fin_ledger_dingtalk_scheme TO [caiwu];
GRANT SELECT ON OBJECT::rpt.fin_ledger_store_opening TO [caiwu];
GO