USE [RC_RISK]
GO
/****** Object: StoredProcedure [dbo].[P_NewFinaceCount] Script Date: 2019/4/3 星期三 16:11:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--新財務統計
ALTER PROC [dbo].[P_NewFinaceCount]
(
@PageNo INT ,
@PageSize INT ,
@PlatformID INT ,
@StartTime VARCHAR(20) ,
@EndTime VARCHAR(20) ,
@Count INT OUTPUT
)
AS
BEGIN
WITH tree
AS (
--放款筆數
SELECT *
FROM ( SELECT 1 AS num ,
CONVERT(VARCHAR(10), PayTime, 23) AS dt ,
COUNT(1) AS count
FROM dbo.T_Loans
WHERE PlatformID = @PlatformID
AND Status >= 3
AND CONVERT(VARCHAR(10), PayTime, 23) >= @StartTime
AND CONVERT(VARCHAR(10), PayTime, 23) <= @EndTime
GROUP BY CONVERT(VARCHAR(10), PayTime, 23)
) AS LoanCount
--放款金額
UNION
SELECT *
FROM ( SELECT 2 AS num ,
CONVERT(VARCHAR(10), PayTime, 23) AS dt ,
SUM(LoanAmount) AS count
FROM dbo.T_Loans
WHERE PlatformID = @PlatformID
AND Status >= 3
AND CONVERT(VARCHAR(10), PayTime, 23) >= @StartTime
AND CONVERT(VARCHAR(10), PayTime, 23) <= @EndTime
GROUP BY CONVERT(VARCHAR(10), PayTime, 23)
) AS LoanAmount
--應收筆數
UNION
SELECT *
FROM ( SELECT 3 AS num ,
CONVERT(VARCHAR(10), CreateDate, 23) AS dt ,
[Count] AS count
FROM dbo.T_ReceivableCount
WHERE PlatformID = @PlatformID
AND CONVERT(VARCHAR(10), CreateDate, 23) >= @StartTime
AND CONVERT(VARCHAR(10), CreateDate, 23) <= @EndTime
) AS ReceivableCount
--應收金額
UNION
SELECT *
FROM ( SELECT 4 AS num ,
CONVERT(VARCHAR(10), CreateDate, 23) AS dt ,
LoanAmount AS count
FROM dbo.T_ReceivableCount
WHERE PlatformID = @PlatformID
AND CONVERT(VARCHAR(10), CreateDate, 23) >= @StartTime
AND CONVERT(VARCHAR(10), CreateDate, 23) <= @EndTime
) AS ReceivableAmount
--當天還款
UNION
SELECT *
FROM ( SELECT 5 AS num ,
CONVERT(VARCHAR(10), LastShouldReturnTime, 23) AS dt ,
COUNT(1) AS count
FROM dbo.T_Loans
WHERE PlatformID = @PlatformID
AND Status = 4
AND CONVERT(VARCHAR(10), LastShouldReturnTime, 23) >= @StartTime
AND CONVERT(VARCHAR(10), LastShouldReturnTime, 23) <= @EndTime
AND CONVERT(VARCHAR(10), RepaymentTime, 23) = CONVERT(VARCHAR(10), LastShouldReturnTime, 23)
GROUP BY CONVERT(VARCHAR(10), LastShouldReturnTime, 23)
) AS ReceivableRepaymentCount
--展期筆數
UNION
SELECT *
FROM ( SELECT 6 AS num ,
CONVERT(VARCHAR(10), e.LastShouldReturnTime, 23) AS dt ,
COUNT(DISTINCT l.OrderNo) AS count
FROM dbo.T_Loans l
INNER JOIN dbo.T_Extension e ON l.ID = e.LoanID
WHERE PlatformID = @PlatformID
AND e.Status = 1
AND CONVERT(VARCHAR(10), e.LastShouldReturnTime, 23) >= @StartTime
AND CONVERT(VARCHAR(10), e.LastShouldReturnTime, 23) <= @EndTime
GROUP BY CONVERT(VARCHAR(10), e.LastShouldReturnTime, 23)
) AS ExtensionCount
--未還筆數
UNION
SELECT *
FROM ( SELECT 7 AS num ,
CONVERT(VARCHAR(10), l.LastShouldReturnTime, 23) AS dt ,
COUNT(1) AS count
FROM dbo.T_Loans l
WHERE PlatformID = @PlatformID
AND Status = 3
AND ID NOT IN (
SELECT LoanID
FROM dbo.T_Extension e
WHERE e.LoanID = ID
AND e.LastShouldReturnTime = l.LastShouldReturnTime
AND e.Status = 1 )
AND CONVERT(VARCHAR(10), l.LastShouldReturnTime, 23) >= @StartTime
AND CONVERT(VARCHAR(10), l.LastShouldReturnTime, 23) <= @EndTime
GROUP BY CONVERT(VARCHAR(10), l.LastShouldReturnTime, 23)
) AS UnRepaymentCount
--今日提前還款
UNION
SELECT *
FROM ( SELECT 8 AS num ,
CONVERT(VARCHAR(10), RepaymentTime, 23) AS dt ,
COUNT(1) AS count
FROM dbo.T_Loans
WHERE PlatformID = @PlatformID
AND Status = 4
AND CONVERT(VARCHAR(10), RepaymentTime, 23) < CONVERT(VARCHAR(10), LastShouldReturnTime, 23)
AND CONVERT(VARCHAR(10), RepaymentTime, 23) >= @StartTime
AND CONVERT(VARCHAR(10), RepaymentTime, 23) <= @EndTime
GROUP BY CONVERT(VARCHAR(10), RepaymentTime, 23)
) AS NowPrepaymentCount
--今日逾期還款
UNION
SELECT *
FROM ( SELECT 9 AS num ,
CONVERT(VARCHAR(10), RepaymentTime, 23) AS dt ,
COUNT(1) AS count
FROM dbo.T_Loans
WHERE PlatformID = @PlatformID
AND Status = 4
AND CONVERT(VARCHAR(10), RepaymentTime, 23) > CONVERT(VARCHAR(10), LastShouldReturnTime, 23)
AND CONVERT(VARCHAR(10), RepaymentTime, 23) >= @StartTime
AND CONVERT(VARCHAR(10), RepaymentTime, 23) <= @EndTime
GROUP BY CONVERT(VARCHAR(10), RepaymentTime, 23)
) AS NowOverdueRepaymentCount
--今日提前展期筆數
UNION
SELECT *
FROM ( SELECT 10 AS num ,
CONVERT(VARCHAR(10), e.CreateDate, 23) AS dt ,
COUNT(DISTINCT l.OrderNo) AS count
FROM dbo.T_Loans l
INNER JOIN dbo.T_Extension e ON l.ID = e.LoanID
WHERE PlatformID = @PlatformID
AND e.Status = 1
AND CONVERT(VARCHAR(10), e.CreateDate, 23) < CONVERT(VARCHAR(10), e.LastShouldReturnTime, 23)
AND CONVERT(VARCHAR(10), e.CreateDate, 23) >= @StartTime
AND CONVERT(VARCHAR(10), e.CreateDate, 23) <= @EndTime
GROUP BY CONVERT(VARCHAR(10), e.CreateDate, 23)
) AS UpextensionCount
--今日逾期續期筆數
UNION
SELECT *
FROM ( SELECT 11 AS num ,
CONVERT(VARCHAR(10), e.CreateDate, 23) AS dt ,
COUNT(DISTINCT l.OrderNo) AS count
FROM dbo.T_Loans l
INNER JOIN dbo.T_Extension e ON l.ID = e.LoanID
WHERE PlatformID = @PlatformID
AND e.Status = 1
AND CONVERT(VARCHAR(10), e.CreateDate, 23) > CONVERT(VARCHAR(10), e.LastShouldReturnTime, 23)
AND CONVERT(VARCHAR(10), e.CreateDate, 23) >= @StartTime
AND CONVERT(VARCHAR(10), e.CreateDate, 23) <= @EndTime
GROUP BY CONVERT(VARCHAR(10), e.CreateDate, 23)
) AS OverextensionCount
--今日還款金額
UNION
SELECT *
FROM ( SELECT 12 AS num ,
CONVERT(VARCHAR(10), RepaymentTime, 23) AS dt ,
SUM(AlreadyRepaidAmount) AS count
FROM dbo.T_Loans
WHERE PlatformID = @PlatformID
AND Status = 4
AND CONVERT(VARCHAR(10), RepaymentTime, 23) >= @StartTime
AND CONVERT(VARCHAR(10), RepaymentTime, 23) <= @EndTime
GROUP BY CONVERT(VARCHAR(10), RepaymentTime, 23)
) AS RepaymentAmount
--今日展期費用
UNION
SELECT *
FROM ( SELECT 13 AS num ,
CONVERT(VARCHAR(10), e.CreateDate, 23) AS dt ,
SUM(e.ActualRepaymentAmount) AS count
FROM dbo.T_Loans l
INNER JOIN dbo.T_Extension e ON l.ID = e.LoanID
INNER JOIN dbo.T_LoanOrderDetails o ON o.LoanID = e.LoanID
WHERE l.PlatformID = @PlatformID
AND e.Status = 1
AND o.Status = 1
AND e.IsOwn = 0
AND o.PayType = 3
AND CONVERT(VARCHAR(10), e.CreateDate, 23) >= @StartTime
AND CONVERT(VARCHAR(10), e.CreateDate, 23) <= @EndTime
GROUP BY CONVERT(VARCHAR(10), e.CreateDate, 23)
) AS ExtensionAmount
--未還金額
UNION
SELECT *
FROM ( SELECT 14 AS num ,
CONVERT(VARCHAR(10), LastShouldReturnTime, 23) AS dt ,
SUM(LoanAmount) AS count
FROM dbo.T_Loans
WHERE PlatformID = @PlatformID
AND Status = 3
AND CONVERT(VARCHAR(10), LastShouldReturnTime, 23) >= @StartTime
AND CONVERT(VARCHAR(10), LastShouldReturnTime, 23) <= @EndTime
GROUP BY CONVERT(VARCHAR(10), LastShouldReturnTime, 23)
) AS UnRepaymentAmount
--續借單數
UNION
SELECT *
FROM ( SELECT 15 AS num ,
CONVERT(VARCHAR(10), l.PayTime, 23) AS dt ,
COUNT(1) AS count
FROM T_Loans AS l
WHERE l.PlatformID = @PlatformID
AND l.[Status] IN ( 3, 4, 5 )
AND l.LoanCount > 1
AND CONVERT(VARCHAR(10), l.PayTime, 23) >= @StartTime
AND CONVERT(VARCHAR(10), l.PayTime, 23) <= @EndTime
GROUP BY CONVERT(VARCHAR(10), l.PayTime, 23)
) AS doubleLansSum
--續借/展期逾期數量
UNION
SELECT *
FROM ( SELECT 16 AS num ,
CONVERT(VARCHAR(10), l.LastShouldReturnTime, 23) AS dt ,
COUNT(1) AS count
FROM T_Loans AS l
WHERE l.PlatformID = @PlatformID
AND l.[Status] = 3
AND l.LastShouldReturnTime < GETDATE()
AND ( l.LoanCount > 1
OR l.IsExtension = 1
)
AND CONVERT(VARCHAR(10), l.LastShouldReturnTime, 23) < CONVERT(VARCHAR(10), GETDATE(), 23)
AND CONVERT(VARCHAR(10), l.LastShouldReturnTime, 23) >= @StartTime
AND CONVERT(VARCHAR(10), l.LastShouldReturnTime, 23) <= @EndTime
GROUP BY CONVERT(VARCHAR(10), l.LastShouldReturnTime, 23)
) AS doubleOverLans
--提前還款
UNION
SELECT *
FROM ( SELECT 17 AS num ,
CONVERT(VARCHAR(10), LastShouldReturnTime, 23) AS dt ,
COUNT(1) AS count
FROM dbo.T_Loans
WHERE PlatformID = @PlatformID
AND Status = 4
AND CONVERT(VARCHAR(10), RepaymentTime, 23) < CONVERT(VARCHAR(10), LastShouldReturnTime, 23)
AND CONVERT(VARCHAR(10), LastShouldReturnTime, 23) >= @StartTime
AND CONVERT(VARCHAR(10), LastShouldReturnTime, 23) <= @EndTime
GROUP BY CONVERT(VARCHAR(10), LastShouldReturnTime, 23)
) AS PrepaymentCount
--逾期還款
UNION
SELECT *
FROM ( SELECT 18 AS num ,
CONVERT(VARCHAR(10), LastShouldReturnTime, 23) AS dt ,
COUNT(1) AS count
FROM dbo.T_Loans
WHERE PlatformID = @PlatformID
AND Status = 4
AND CONVERT(VARCHAR(10), RepaymentTime, 23) > CONVERT(VARCHAR(10), LastShouldReturnTime, 23)
AND CONVERT(VARCHAR(10), LastShouldReturnTime, 23) >= @StartTime
AND CONVERT(VARCHAR(10), LastShouldReturnTime, 23) <= @EndTime
GROUP BY CONVERT(VARCHAR(10), LastShouldReturnTime, 23)
) AS OverdueRepaymentCount
--應收續借單數
UNION
SELECT *
FROM ( SELECT 19 AS num ,
CONVERT(VARCHAR(10), CreateDate, 23) AS dt ,
DoubleLoansIDCount AS count
FROM dbo.T_ReceivableCount
WHERE PlatformID = @PlatformID
AND CONVERT(VARCHAR(10), CreateDate, 23) >= @StartTime
AND CONVERT(VARCHAR(10), CreateDate, 23) <= @EndTime
) AS shouldDoubleLansSum
--應收提前展期筆數的蠢貨
UNION
SELECT *
FROM ( SELECT 20 AS num ,
CONVERT(VARCHAR(10), e.LastShouldReturnTime, 23) AS dt ,
COUNT(DISTINCT l.OrderNo) AS count
FROM dbo.T_Loans l
INNER JOIN dbo.T_Extension e ON l.ID = e.LoanID
WHERE PlatformID = @PlatformID
AND e.Status = 1
AND e.LoanID NOT IN (
SELECT item
FROM T_ReceivableCount a
CROSS APPLY Fun_StringToIntArray(a.LoansID)
WHERE CONVERT(VARCHAR(10), a.CreateDate, 23) = CONVERT(VARCHAR(10), e.LastShouldReturnTime, 23)
AND a.PlatformID = @PlatformID )
AND CONVERT(VARCHAR(10), e.LastShouldReturnTime, 23) >= @StartTime
AND CONVERT(VARCHAR(10), e.LastShouldReturnTime, 23) <= @EndTime
GROUP BY CONVERT(VARCHAR(10), e.LastShouldReturnTime, 23)
) AS shouldUpExtensionCount
--復貸每日還款筆數
UNION
SELECT *
FROM ( SELECT 21 AS num ,
temp.CreateDate AS dt ,
COUNT(1) AS count
FROM ( SELECT ids.ID AS LoanID ,
CONVERT(VARCHAR(10), ids.CreateDate, 23) AS CreateDate
FROM ( SELECT
item AS ID ,
r.CreateDate
FROM
T_ReceivableCount r
CROSS APPLY Fun_StringToIntArray(r.DoubleLoansID)
WHERE
CONVERT(VARCHAR(10), r.CreateDate, 23) >= @StartTime
AND CONVERT(VARCHAR(10), r.CreateDate, 23) <= @EndTime
AND r.PlatformID = @PlatformID
) ids
INNER JOIN T_Loans AS l ON ids.ID = l.ID
WHERE l.Status = 4
UNION
SELECT ids.ID AS LoanID ,
CONVERT(VARCHAR(10), ids.CreateDate, 23) AS CreateDate
FROM ( SELECT
item AS ID ,
r.CreateDate
FROM
T_ReceivableCount r
CROSS APPLY Fun_StringToIntArray(r.DoubleLoansID)
WHERE
CONVERT(VARCHAR(10), r.CreateDate, 23) >= @StartTime
AND CONVERT(VARCHAR(10), r.CreateDate, 23) <= @EndTime
AND r.PlatformID = @PlatformID
) ids
INNER JOIN dbo.T_Extension
AS e ON ids.ID = e.LoanID
WHERE e.Status = 1
AND CONVERT(VARCHAR(10), CONVERT(DATETIME, e.LastShouldReturnTime), 23) = CONVERT(VARCHAR(10), ids.CreateDate, 23)
) temp
GROUP BY temp.CreateDate
) AS doublePayLans
)
SELECT *
INTO #TempTable
FROM ( SELECT *
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY dt DESC ) AS rownum ,
dt ,
ISNULL([1], 0) AS LoanCount , --放款筆數
ISNULL([2], 0) AS LoanAmount , --放款金額
ISNULL([3], 0) AS ReceivableCount , --應收筆數
ISNULL([4], 0) AS ReceivableAmount , --應收金額
ISNULL([5], 0) AS ReceivableRepaymentCount , --當日還款
ISNULL([6], 0) AS ExtensionCount , --展期筆數
ISNULL([7], 0) AS UnRepaymentCount , --未還筆數
ISNULL([8], 0) AS NowPrepaymentCount , --今日提前還款數量
ISNULL([9], 0) AS NowOverdueRepaymentCount , --今日逾期還款數量
ISNULL([10], 0) AS UpextensionCount , --今日提前續期數量
ISNULL([11], 0) AS OverextensionCount , --今日逾期續期數量
ISNULL([12], 0) AS RepaymentAmount , --今日還款金額
ISNULL([13], 0) AS ExtensionAmount , --今日展期金額
ISNULL([14], 0) AS UnRepaymentAmount , --未還金額
ISNULL([15], 0) AS doubleLansSum , --續借單數
ISNULL([16], 0) AS doubleOverLans , --續借/展期逾期數量
ISNULL([17], 0) AS PrepaymentCount , --提前還款
ISNULL([18], 0) AS OverdueRepaymentCount , --逾期還款
ISNULL([19], 0) AS shouldDoubleLansSum , --應收續借單數
ISNULL([20], 0) AS shouldUpExtensionCount , --應收提前展期的蠢貨
ISNULL([21], 0) AS doublePayLans --復貸每日還款筆數
FROM tree PIVOT ( SUM(count) FOR num IN ( [1],
[2], [3], [4],
[5], [6], [7],
[8], [9], [10],
[11], [12], [13],
[14], [15], [16],
[17], [18], [19],
[20], [21] ) ) AS p
) temp
WHERE temp.dt <> ''
) tp
ORDER BY dt DESC
OPTION ( RECOMPILE );
SELECT *
FROM #TempTable
WHERE rownum > ( @PageNo - 1 ) * @PageSize
AND rownum <= ( @PageNo * @PageSize );
SELECT @Count = COUNT(1)
FROM #TempTable;
--刪除臨時表
DROP TABLE #TempTable;
END;