Files
e-Book/3.玩轉SQL/參考資料/erp/Day7/參考文檔/BPM-sp/GEXBPM_DELAYSEND.txt
T

78 lines
2.5 KiB
Plaintext

CREATE PROC DBO.GEXBPM_DELAYSEND
AS
/*
Function : FLOW 催簽作業的 sp
Description: 簡單的說, 催簽就是當有簽單卡住時, 自動再發送 mail 通知卡單的人快簽
我們的程式當然是撈出逾時的資料, 然後發 mail 如此
自動催簽的方法, 我是擴充 GEX_PREPROCESS_V2 這個 sp
這個 sp 會在 Login 時自動執行, 所以就加在現有的機制中了(每天執行一次)
Build Date : 2012/11/14
Modify History
Item Who Date Modify Docs
==== ========== ========== ================================================
1 Michael 2013/07/17 新增每一關簽核也要判斷是否逾期
*/
--取得逾期的簽核資料
WITH BPM1
AS
(
SELECT A.BILLNO,MAX(A.BILLDATE) BILLDATE FROM BPM_FLOWDATA_LOG A
LEFT JOIN BPM_FLOWDATA_M B ON A.BILLNO = B.BILLNO
WHERE B.FLOWSTATUS <= 3 --未完成
GROUP BY A.BILLNO
), BPM2
AS
(
SELECT A.BILLNO,A.FLOWINDATE BILLDATE FROM BPM_FLOWDATA_LOG A
LEFT JOIN BPM_FLOWDATA_M B ON A.BILLNO = B.BILLNO
WHERE B.FLOWSTATUS <= 3 --未完成
AND A.SEQNO = 0
), BPM3
AS
(
SELECT A.BILLNO,DATEDIFF(DAY,A.BILLDATE,B.BILLDATE) DIFFDATE,BPM2.EMERGENCYDATE FROM BPM2 A
LEFT JOIN BPM1 B ON A.BILLNO = B.BILLNO
LEFT JOIN BPM_FLOWDATA_M BPM1 ON A.BILLNO = BPM1.BILLNO
LEFT JOIN BPM_FLOWSETUP_M BPM2 ON BPM1.BILLTAG = BPM2.BILLTAG
)
SELECT BILLNO,dbo.GEXFUNC_GETNEXT(BILLNO) SIGNPERSON INTO #DELAY_BPM FROM BPM3 WHERE DIFFDATE > EMERGENCYDATE
--新增每一關簽核也要判斷是否逾期
INSERT INTO #DELAY_BPM (BILLNO,SIGNPERSON)
SELECT A.BILLNO,dbo.GEXFUNC_GETNEXT(A.BILLNO) FROM BPM_FLOWDATA_LOG A
LEFT JOIN BPM_FLOWDATA_M B ON A.BILLNO = B.BILLNO
LEFT JOIN BPM_FLOWSETUP_D X ON X.BILLTAG = B.BILLTAG AND A.SOURCESEQNO = X.SEQNO
WHERE CASE WHEN ISNULL(X.SIGNDAYS,0)=0 THEN 0 ELSE DATEDIFF(DAY,A.FLOWINDATE,GETDATE()) - X.SIGNDAYS END > 0
AND B.FLOWSTATUS <= 3 --未完成
DECLARE @BILLNO VARCHAR(20)
DECLARE @SIGNPERSON VARCHAR(20)
DECLARE contact_cursor CURSOR FOR
SELECT BILLNO,SIGNPERSON FROM #DELAY_BPM
OPEN contact_cursor
-- Perform the first fetch.
FETCH NEXT FROM contact_cursor
INTO @BILLNO,@SIGNPERSON
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
--發送 mail
EXEC GEX_SEND_FLOWMAIL 'S',@SIGNPERSON, @BILLNO, '催簽: 簽核過期'
FETCH NEXT FROM contact_cursor
INTO @BILLNO,@SIGNPERSON
END
CLOSE contact_cursor
DEALLOCATE contact_cursor
DROP TABLE #DELAY_BPM