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