close

USE [TempDB]
GO
/****** Object:  StoredProcedure [dbo].[JOB_ExpireMail_Manual]    Script Date: 2018/1/30 上午 10:01:47 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:  
-- Create date:
-- Description:  人工發送mail
-- 異動記錄
-- 執行時間:Web 人工發送mail
-- exec  [dbo].[JOB_ExpireMail_Manual] '20160815091514823.001','CFPMainSub','20160815.00001','107006'
-- exec  [dbo].[JOB_ExpireMail_Manual] '20160815091514823.001','CFPMainSub','20160815.00002','107006'


-- CFPUser 結構描述 'dbo',資料庫 'msdb',物件 'sp_send_dbmail' 沒有 EXECUTE 權限
-- EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole',@membername = 'CFPUser';
-- =============================================
ALTER  PROCEDURE  [dbo].[JOB_ExpireMail_Manual] 
(
    @CaseNo varchar(48), 
 @FlowID         varchar(20),
    @FlowCaseID     varchar(20),
 @CreateEmpID    varchar(30)
)

AS
 Declare
 @delrowcount  int,
 @UpdateCnt   int,
 @SystemDate8  char(08), /*系統日*/
 @SystemDate10  char(10), /*系統日*/
 @ExecuteTime  datetime, /*Batch執行時間*/
 @ErrorSave   int,
 @ErrMsg          char(50)    /*記錄錯誤訊息*/

Select @SystemDate8 = (Select Convert(char(08),getdate(),112) as SystemDate)
Select @SystemDate10 = (Select Convert(char(10),getdate(),111) as SystemDate)
Select @ExecuteTime = (Select Convert(char(19),getdate(),20) as ExecuteTime)

print '********************************************************'
print '**  JOB_ExpireMail_Manual 執行開始:' + convert(char(23),getdate(),21)
print '********************************************************'
      
Begin
 Declare  @FlowLogID      varchar(20)
 Declare  @FlowStepID     varchar(10)
 Declare  @FlowStepName   nvarchar(30)
 Declare  @AssignTo       varchar(10)
 Declare  @AssignToName   nvarchar(20)
 Declare  @PriorityName   varchar(20)
 Declare  @EMail          varchar(60)
 Declare  @Subject        varchar(200)
 Declare  @ExpireDate     varchar(20)
 Declare  @TypeName       varchar(20)
 Declare  @CategoryName   varchar(20)
 Declare  @CustName       nvarchar(50)
 Declare  @LogCrDateTime  varchar(20)
 
 Declare  @TmpFlowLogID    varchar(20)
 Declare  @TotAssignTo     varchar(max)
 Declare  @TotAssignToName varchar(max)
 Declare  @TotEMail        varchar(max)
 Declare  @Body            VARCHAR(MAX)

 Declare @MailTo VARCHAR(MAX)
 Declare @MailCC VARCHAR(MAX)
 Declare @MailBCC VARCHAR(MAX)
 Declare @MailAttach VARCHAR(MAX)
 Declare @MailSubject VARCHAR(200)
 Declare @MailBody VARCHAR(MAX)
 Declare @MailFooter VARCHAR(200)
 DECLARE @SystemDat varchar(19)

 DECLARE @SQL varchar(max)

 SET  @TotEMail            = ''
 
 Begin Transaction 

       
  SET @SQL =  + '@CaseNo=' + @CaseNo + ' @FlowID=' + @FlowID  + ' @FlowCaseID=' + @FlowCaseID + ' @CreateEmpID=' + @CreateEmpID 
        INSERT  Sys_Log  -- ([LogTime],[CaseNo],[JOB],[CallProg],[Action],[Step],[Memo],[ERRCNT],[ERRNO],[ERRMSG],[SQL],[EmpID])
     VALUES (GETDATE(),@CaseNo,'JOB_ExpireMail_Manual','','SELECT','Start','','','','',@SQL,'')

        --取得逾期通知的Mail資訊
  CREATE TABLE #TempMail
  ( MailTo VARCHAR(MAX)
  , MailCC VARCHAR(MAX)
  , MailBCC VARCHAR(MAX)
  , MailAttach VARCHAR(MAX)
  , Subject VARCHAR(200)
  , Body TEXT
  , Footer VARCHAR(200)
  );
  INSERT INTO  #TempMail
        EXEC usp_GetMailContent  'CFPMainSub','Expire','','','','E','SYSTEM'

  SELECT @MailTo=MailTo,@MailCC=MailCC,@MailBCC=MailBCC,@MailAttach=MailAttach,@MailSubject=Subject,@MailBody=Body,@MailFooter=Footer,@SystemDat=Convert(char(19),getdate(),120)
  from #TempMail

  SET  @MailSubject = @MailSubject + '[提醒]'

  --取得發送逾期通知的MailList
        Declare cur_MailList Cursor for
  
  --子流程已逾期,且尚未發送mail的案件
  SELECT b.FlowLogID,a.FlowCurrStepID ,a.FlowCurrStepName,c.AssignTo,c.AssignToName
     ,isnull(Para1.ParaText,'') PriorityName,EmpShare.EMail  ,d.Subject
     ,CONVERT(CHAR(10),Dateadd(D,cast(Para1.ParaDefine as int),c.LogCrDateTime),111) ExpireDate
     ,isnull(Sys_Type.TypeName,'') TypeName,isnull(CategoryName,'') CategoryName
        ,CustName,CONVERT(CHAR(8),c.LogCrDateTime ,112) LogCrDateTime
  FROM [CFPFlow].[dbo].[CFPMainSubFlowCase] a
  INNER JOIN [CFPFlow].[dbo].[CFPMainSubFlowFullLog] b ON a.FlowCaseID = b.FlowCaseID
  INNER JOIN [CFPFlow].[dbo].[CFPMainSubFlowOpenLog] c ON b.FlowLogID = c.FlowLogID
  INNER JOIN [TempDB].[dbo].[Tbl_CaseMain] d ON d.CaseNo = TempDB.dbo.SplitStr(a.FlowKeyValueList,',',1,'N')
  INNER JOIN [TempDB].[dbo].[Sys_Parameter] Para1 ON d.Priority=Para1.ParaValue and Para1.ParaKind = 'Priority'
  INNER JOIN [TempDB].[dbo].[EmpShare] EmpShare ON EmpShare.EmpID = c.AssignTo
  LEFT  JOIN (SELECT * FROM [TempDB].[dbo].[Tbl_ExpireMail] WHERE CaseNo + FlowID + FlowCaseID + cast(Seq as varchar) in ( SELECT CaseNo + FlowID + FlowCaseID + cast(Max(Seq) as varchar)
                    FROM [TempDB].[dbo].[Tbl_ExpireMail] GROUP BY CaseNo,FlowID,FlowCaseID)  ) e
     ON e.CaseNo = d.CaseNo and  e.FlowCaseID = c.FlowCaseID  
  LEFT  JOIN Sys_Type on d.Type = Sys_Type.TypeID
  LEFT  JOIN Sys_Category  on d.Category = Sys_Category.CategoryID  
  WHERE LEFT(a.FlowCurrStepID,1) <> 'Z' and LEFT(b.FlowStepID,1)  <> 'Z'   
    AND d.CaseNo = @CaseNo
    AND a.FlowID = @FlowID      
    AND b.FlowCaseID = @FlowCaseID 
  ORDER BY d.CaseNo,c.FlowCaseID,CONVERT(CHAR(10),Dateadd(D,cast(Para1.ParaDefine as int),c.LogCrDateTime),112)

  Open cur_MailList
  Fetch next from cur_MailList
  Into  @FlowLogID,@FlowStepID,@FlowStepName,@AssignTo,@AssignToName,@PriorityName,@EMail,@Subject
       ,@ExpireDate,@TypeName,@CategoryName,@CustName,@LogCrDateTime
  while (@@fetch_status = 0)
  BEGIN

      if @TotAssignTo <> ''
   BEGIN
     SET  @TotAssignTo = @TotAssignTo + '|' + @AssignTo
     SET  @TotAssignToName  = @TotAssignToName + '|' + @AssignToName
     SET  @TotEMail = @TotEMail + ';' + @EMail 
   END
   ELSE
   BEGIN    
    
    SET @Body = @MailBody
  
          --案件優先順序
    SELECT @Body = REPLACE(@Body, '[Priority]', @PriorityName)

    --案件類型
    SELECT @Body = REPLACE(@Body, '[Type]', @TypeName)

    --案件編號
    SELECT @Body = REPLACE(@Body, '[CaseNo]', @CaseNO)

    --到期日
    SELECT @Body = REPLACE(@Body, '[ExpireDate]', @ExpireDate)

    --主旨
          SELECT @Body = REPLACE(@Body, '[Subject]', @Subject)

    --系統日
    SELECT @Body = REPLACE(@Body, '[SystemDat]', @SystemDat)
      
    SET  @TotAssignTo = @AssignTo
    SET  @TotAssignToName  = @AssignToName
    SET  @TotEMail = @EMail   
    SET  @TmpFlowLogID = @FlowLogID

   END
   
   Fetch next from cur_MailList
   Into  @FlowLogID,@FlowStepID,@FlowStepName,@AssignTo,@AssignToName,@PriorityName,@EMail,@Subject
           ,@ExpireDate,@TypeName,@CategoryName,@CustName,@LogCrDateTime
  END
 
     If (@TotEMail <> '')
  Begin

   --收件者名稱
   SELECT @Body = REPLACE(@Body, '[Title]', @TotAssignToName)

   --先發送Mail後,再更新新的資訊             
   EXEC msdb.dbo.sp_send_dbmail
   @profile_name='CFPMail',   --設定檔         
   @recipients=@TotEMail, --收件者    
   @copy_recipients =  @MailCC,  --副本
   @blind_copy_recipients = @MailBCC,  --密件副本
   @subject = @MailSubject,   --主旨 
   @body=@Body, --內文              
   @body_format=HTML  --也可以使用HTML格式  

   --記錄一下發送記錄檔
   INSERT   [dbo].[Tbl_ExpireMail]   
   SELECT   @CaseNo,@FlowID,@FlowCaseID,isnull(max(SEQ),'') + 1  SEQ,@TmpFlowLogID,@FlowStepID,@FlowStepName,@TotAssignTo,@TotAssignToName,@PriorityName,@TotEMail,@MailCC,@MailBCC,@MailSubject,@Body
      ,'Y','1',getdate(),'',@CreateEmpID
   FROM     [TempDB].[dbo].[Tbl_ExpireMail] WHERE CaseNo=@CaseNo AND FlowID=@FlowID AND  FlowCaseID = @FlowCaseID

  End

  Commit Transaction

  close cur_MailList
  deallocate cur_MailList
End 

print '** 處理完成 **'
print '** JOB_ExpireMail_Manual 執行結束:' + convert(char(23),getdate(),21)
print '********************************************************' 

Set NoCount off                
Return 0


err_Control:
 Set NoCount off
 Rollback Transaction
 
 print '********************************************************'
 print  '*** 處理失敗-- JOB_ExpireMail_Manual Fail ***' 
 print  '*** SystemDate = ' + cast(@SystemDate10 as char) + ',' + 'ExecuteTime = ' +  cast(@ExecuteTime as char) 
 print '********************************************************'
 
 Return 1

arrow
arrow
    全站熱搜

    可樂果公主 發表在 痞客邦 留言(0) 人氣()