protected RESULT HandleBeforeWeb(DbModule.SEND_REQUEST_PSC p_Request)
        {
            P_TYPE  destProcessType = P_TYPE.NONE;
            R_STATE state           = R_STATE.INIT;

            //int nState = 0;


            //// Beffore처리 1. 문서필터링 처리 ////
            if (PostFcs.Util.Config.DOC_FILTERING_YN == "Y")
            {
                #region TO - DO

                #endregion
            }

            //// Before처리 2. TIF 크기, 페이지 SET ////
            long lTiffFileSize = -1;
            int  nTiffPageCnt  = -1;

            foreach (DbModule.SEND_REQUEST_DTL_PSC dtlReq in m_pscReqInfo.m_lstSendRequestDtlPscInfos)
            {
                string strLocalTiffFullName = "";
                string logExtMsg            = String.Format("[FAX_ID:{0}][FAX_DTL_ID:{1}][FAX_NO:{2}]",
                                                            dtlReq.faxId
                                                            , dtlReq.faxDtlId
                                                            , dtlReq.strFaxNo
                                                            );

                if (!DownloadTiffFile(dtlReq, out strLocalTiffFullName))
                {
                    LogError(String.Format("TIF다운로드 실패 [RESULT:{0}]{1}", RESULT.F_FILE_NOT_EXIST, logExtMsg));
                    continue;
                }

                LogMessage(String.Format("TIF파일 다운로드 완료 [RESULT:{0}]{1}", RESULT.SUCCESS, logExtMsg));

                if (!GetTiffFileNames(dtlReq, strLocalTiffFullName))
                {
                    dtlReq.strStateEach = R_STATE.PSC_F.ToString();
                    LogError(String.Format("TIF파일명 정보를 알수없습니다 [RESULT:{0}]{1}", RESULT.F_FILE_NOT_EXIST, logExtMsg));

                    if (DbModule.Instance.FailSendReqDetail(m_pscReqInfo.faxId, dtlReq.faxDtlId, Config.PROCESS_TYPE, Config.SYSTEM_PROCESS_ID, RESULT.F_FILE_NOT_EXIST) < 0)
                    {
                        LogError(String.Format("작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다 [RESULT:{0}]{1}", RESULT.F_DB_ERROR, logExtMsg));
                    }

                    continue;
                }

                lTiffFileSize = GetFileSize(dtlReq.strTiffFullName);
                if (lTiffFileSize < 0)
                {
                    dtlReq.strStateEach = R_STATE.PSC_F.ToString();
                    LogError(String.Format("TIF사이즈 정보를 알수없습니다 [RESULT:{0}]{1}", RESULT.F_FILE_FAIL_GET_FILE_SIZE, logExtMsg));

                    if (DbModule.Instance.FailSendReqDetail(m_pscReqInfo.faxId, dtlReq.faxDtlId, Config.PROCESS_TYPE, Config.SYSTEM_PROCESS_ID, RESULT.F_FILE_FAIL_GET_FILE_SIZE) < 0)
                    {
                        LogError(String.Format("작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다 [RESULT:{0}]{1}", RESULT.F_DB_ERROR, logExtMsg));
                    }

                    continue;
                }

                LogMessage(String.Format("TIF파일 사이즈 > {0} [RESULT:{1}]{2}", lTiffFileSize, RESULT.SUCCESS, logExtMsg));

                nTiffPageCnt = GetPageCount(dtlReq.strTiffFullName);
                if (nTiffPageCnt < 0)
                {
                    dtlReq.strStateEach = R_STATE.PSC_F.ToString();
                    LogError(String.Format("TIF페이지수 정보를 알수없습니다 [RESULT:{0}]{1}", RESULT.F_FILE_FAIL_GET_FILE_SIZE, logExtMsg));

                    if (DbModule.Instance.FailSendReqDetail(m_pscReqInfo.faxId, dtlReq.faxDtlId, Config.PROCESS_TYPE, Config.SYSTEM_PROCESS_ID, RESULT.F_FILE_FAIL_GET_FILE_SIZE) < 0)
                    {
                        LogError(String.Format("작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다 [RESULT:{0}]{1}", RESULT.F_DB_ERROR, logExtMsg));
                    }

                    continue;
                }

                LogMessage(String.Format("TIF파일 페이지수 > {0} [RESULT:{1}]{2}", nTiffPageCnt, RESULT.SUCCESS, logExtMsg));

                if (!DbModule.Instance.UpdateTifInfo(m_pscReqInfo.faxId, dtlReq.faxDtlId, dtlReq.strTiffPath, (int)lTiffFileSize, nTiffPageCnt))
                {
                    LogError(String.Format("작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다 [RESULT:{0}]{1}", RESULT.F_DB_ERROR, logExtMsg));
                    continue;
                }

                //// 파일사이즈 제한 ////
                if (lTiffFileSize > Config.TIF_FILE_MAX_SIZE)
                {
                    LogError(String.Format("발송가능한 파일크기를 초과하였습니다. TIF크기/최대크기:{0}/{1}", lTiffFileSize, Config.TIF_FILE_MAX_SIZE));
                    if (DbModule.Instance.FailSendReqDetail(m_pscReqInfo.faxId, dtlReq.faxDtlId, Config.PROCESS_TYPE, Config.SYSTEM_PROCESS_ID, RESULT.F_FILE_FAIL_FILE_SIZE_OVERFLOW) < 0)
                    {
                        LogError(String.Format("작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다 [RESULT:{0}]{1}", RESULT.F_FILE_FAIL_FILE_SIZE_OVERFLOW, logExtMsg));
                    }

                    continue;
                }

                //// DownloadTIFF 파일 삭제 ////
                if (File.Exists(strLocalTiffFullName))
                {
                    File.Delete(strLocalTiffFullName);
                }

                m_lstSuccReqDtls.Add(dtlReq);
            }

            LogMessage(String.Format("변환후 처리 [전체:{0}] [성공:{1}] [실패:{2}]",
                                     m_pscReqInfo.m_lstSendRequestDtlPscInfos.Count,
                                     m_lstSuccReqDtls.Count,
                                     (m_pscReqInfo.m_lstSendRequestDtlPscInfos.Count - m_lstSuccReqDtls.Count)
                                     ));

            if (m_lstSuccReqDtls.Count <= 0)
            {
                if (DbModule.Instance.FailSendReqMaster(m_pscReqInfo.faxId, Config.PROCESS_TYPE, Config.SYSTEM_PROCESS_ID) < 0)
                {
                    LogError("작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다");
                }

                LogMessage(String.Format("[RESULT:{0}] MSTER 실패건 처리완료 [FAX_ID:{1}][TR_NO:{2}][REQ_TYPE:{3}][PREVIEW_REQ:{4}][APPROVE_REQ:{5}]",
                                         RESULT.SUCCESS,
                                         m_pscReqInfo.faxId,
                                         m_pscReqInfo.strTrNo,
                                         m_pscReqInfo.strReqType,
                                         m_pscReqInfo.previewYN,
                                         m_pscReqInfo.approvedReq
                                         ));
                return(RESULT.SUCCESS);
            }


            //// 미리보기, 승인 건이 아닌경우, AfterWEB 에서 처리 ////
            if (m_pscReqInfo.previewYN.ToUpper() != "Y" && m_pscReqInfo.approvedReq.ToUpper() != "Y")
            {
                //예약발송이면 PSC후처리대기상태로 가도록 처리
                if (m_pscReqInfo.reserveYN.ToUpper() == "Y")
                {
                    destProcessType = P_TYPE.WEB;
                    state           = R_STATE.PSC_WS;

                    foreach (DbModule.SEND_REQUEST_DTL dtlReq in m_lstSuccReqDtls)
                    {
                        if (DbModule.Instance.PassoverDetailSendReq(m_pscReqInfo.faxId, dtlReq.faxDtlId, Config.PROCESS_TYPE, Config.SYSTEM_PROCESS_ID, destProcessType, "N", state) <= 0)
                        {
                            LogError("작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다");
                            continue;
                        }
                    }
                    if (DbModule.Instance.PassoverMasterSendReq(m_pscReqInfo.faxId, Config.PROCESS_TYPE, Config.SYSTEM_PROCESS_ID, destProcessType, state) <= 0)
                    {
                        LogError("작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다");
                        return(RESULT.F_DBP_FAIL_PASS_OVER_SEND_REQ_MSTR);
                    }

                    LogMessage(String.Format("[RESULT:{0}] 전처리 작업 완료 [FAX_ID:{1}][TR_NO:{2}][REQ_TYPE:{3}][PREVIEW_REQ:{4}][APPROVE_REQ:{5}]",
                                             RESULT.SUCCESS,
                                             m_pscReqInfo.faxId,
                                             m_pscReqInfo.strTrNo,
                                             m_pscReqInfo.strReqType,
                                             m_pscReqInfo.previewYN,
                                             m_pscReqInfo.approvedReq
                                             ));
                    return(RESULT.SUCCESS);
                }

                return(HandleAfterWeb(p_Request));
            }

            //승인 대기Y && 미리보기N 건인 경우 FAXBOX로 Insert
            if (m_pscReqInfo.approvedReq.ToUpper() == "Y" && m_pscReqInfo.previewYN.ToUpper() == "N")
            {
                if (!DbModule.Instance.InsertFaxbox(m_pscReqInfo.faxId))
                {
                    //실패처리
                    if (DbModule.Instance.FailSendReqMaster(m_pscReqInfo.faxId, Config.PROCESS_TYPE, Config.SYSTEM_PROCESS_ID) < 0)
                    {
                        LogError("작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다");
                    }

                    LogMessage(String.Format("[RESULT:{0}] 승인대기건 FAXBOX로 이동중 실패건 처리완료 [FAX_ID:{1}][TR_NO:{2}][REQ_TYPE:{3}][PREVIEW_REQ:{4}][APPROVE_REQ:{5}]",
                                             RESULT.SUCCESS,
                                             m_pscReqInfo.faxId,
                                             m_pscReqInfo.strTrNo,
                                             m_pscReqInfo.strReqType,
                                             m_pscReqInfo.previewYN,
                                             m_pscReqInfo.approvedReq
                                             ));
                    return(RESULT.SUCCESS);
                }
            }


            //// 미리보기, 승인 건인 경우, WEB 으로 전달 ////
            destProcessType = P_TYPE.WEB;
            state           = (m_pscReqInfo.previewYN == "Y") ? R_STATE.PSC_WP : R_STATE.PSC_WA;

            foreach (DbModule.SEND_REQUEST_DTL dtlReq in m_lstSuccReqDtls)
            {
                if (DbModule.Instance.PassoverDetailSendReq(m_pscReqInfo.faxId, dtlReq.faxDtlId, Config.PROCESS_TYPE, Config.SYSTEM_PROCESS_ID, destProcessType, "N", state) <= 0)
                {
                    LogError("작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다");
                    continue;
                }
            }
            if (DbModule.Instance.PassoverMasterSendReq(m_pscReqInfo.faxId, Config.PROCESS_TYPE, Config.SYSTEM_PROCESS_ID, destProcessType, state) <= 0)
            {
                LogError("작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다");
                return(RESULT.F_DBP_FAIL_PASS_OVER_SEND_REQ_MSTR);
            }

            LogMessage(String.Format("[RESULT:{0}] 후처리 작업 완료 [FAX_ID:{1}][TR_NO:{2}][REQ_TYPE:{3}][PREVIEW_REQ:{4}][APPROVE_REQ:{5}]",
                                     RESULT.SUCCESS,
                                     m_pscReqInfo.faxId,
                                     m_pscReqInfo.strTrNo,
                                     m_pscReqInfo.strReqType,
                                     m_pscReqInfo.previewYN,
                                     m_pscReqInfo.approvedReq
                                     ));

            return(RESULT.SUCCESS);
        }
        protected RESULT HandleAfterWeb(DbModule.SEND_REQUEST_PSC p_Request)
        {
            List <DbModule.SEND_REQUEST_DTL_PSC> outInwardList = new List <DbModule.SEND_REQUEST_DTL_PSC>();
            P_TYPE  destProcessType = P_TYPE.NONE;
            R_STATE state           = R_STATE.INIT;
            string  strDid          = "";

            //미리보기Y && 승인대기Y 이면, 미리보기N으로 UPDATE 후에 PSC대기상태(71)로 변경.
            if (m_pscReqInfo.previewYN.ToUpper() == "Y" && m_pscReqInfo.approvedReq.ToUpper() == "Y")
            {
                if (!DbModule.Instance.UpdatePreviewInfo(m_pscReqInfo.faxId, "N"))
                {
                    LogError("작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다");
                    return(RESULT.F_DB_UPDATE_ERROR);
                }

                destProcessType = P_TYPE.WEB;
                state           = R_STATE.PSC_W;

                foreach (DbModule.SEND_REQUEST_DTL dtlReq in m_pscReqInfo.m_lstSendRequestDtlPscInfos)
                {
                    if (DbModule.Instance.PassoverDetailSendReq(m_pscReqInfo.faxId, dtlReq.faxDtlId, Config.PROCESS_TYPE, Config.SYSTEM_PROCESS_ID, destProcessType, "N", state) <= 0)
                    {
                        LogError("작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다");
                        continue;
                    }
                }
                if (DbModule.Instance.PassoverMasterSendReq(m_pscReqInfo.faxId, Config.PROCESS_TYPE, Config.SYSTEM_PROCESS_ID, destProcessType, state) <= 0)
                {
                    LogError("작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다");
                    return(RESULT.F_DBP_FAIL_PASS_OVER_SEND_REQ_MSTR);
                }

                LogMessage(String.Format("변환후처리 작업 완료 [FAX_ID:{0}][TR_NO:{1}][REQ_TYPE:{2}][PREVIEW_REQ:{3}][APPROVE_REQ:{4}]",
                                         m_pscReqInfo.faxId,
                                         m_pscReqInfo.strTrNo,
                                         m_pscReqInfo.strReqType,
                                         m_pscReqInfo.previewYN,
                                         m_pscReqInfo.approvedReq
                                         ));

                return(RESULT.SUCCESS);
            }

            //// 결과 성공 처리 ////
            if (DbModule.Instance.SuccessSendReqDetail(m_pscReqInfo.faxId, -1, Config.PROCESS_TYPE, Config.SYSTEM_PROCESS_ID) < 0)
            {
                LogError("작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다");
                return(RESULT.F_DB_UPDATE_ERROR);
            }

            //// 내부 발송 처리 ////
            foreach (DbModule.SEND_REQUEST_DTL_PSC dtlReq in m_pscReqInfo.m_lstSendRequestDtlPscInfos)
            {
                //팩스 번호에서 '-' 제거
                dtlReq.strFaxNo = dtlReq.strFaxNo.Replace("-", "");

                strDid = "";

                // ADD - KIMCG : 20150914
                // LOOP_FAXNO 일경우 FOD로 전달.
                if (dtlReq.strFaxNo == Config.LOOP_FAXNO)
                {
                    LogMessage(String.Format("[RESULT:{0}] LOOP FAX [FAX_ID:{1}][TR_NO:{2}][REQ_TYPE:{3}][PREVIEW_REQ:{4}][APPROVE_REQ:{5}]",
                                             RESULT.EMPTY,
                                             m_pscReqInfo.faxId,
                                             m_pscReqInfo.strTrNo,
                                             m_pscReqInfo.strReqType,
                                             m_pscReqInfo.previewYN,
                                             m_pscReqInfo.approvedReq
                                             ));
                    continue;
                }
                // ADD - END

                // 내부 팩스 번호가 아니면, SKIP.
                if (!DbModule.Instance.IsInboundFaxNo(dtlReq.strFaxNo, ref strDid))
                {
                    continue;
                }

                // 내부 발송 건 추가
                outInwardList.Add(dtlReq);

                // 내부 발송 처리
                RESULT result = ProcessInbound(dtlReq, strDid);

                // 발송 MSTR/DTL DATA 테이블로 이동
                if (!DbModule.Instance.FinishIBSendDtl(Config.SYSTEM_NO, Config.PROCESS_TYPE, Config.SYSTEM_PROCESS_ID, m_pscReqInfo.strBroadcastYN, dtlReq, result))
                {
                    LogError("인바운드 케이스를 Data테이블로 이동하는 도중 오류가 발생하였습니다");
                    return(RESULT.F_DB_UPDATE_ERROR);
                }
            }

            // 내부 발송 처리 완료 건, 제외
            foreach (DbModule.SEND_REQUEST_DTL_PSC dtlReq in outInwardList)
            {
                m_pscReqInfo.m_lstSendRequestDtlPscInfos.Remove(dtlReq);
            }

            // 모두 내부 발송이면, 처리 종료.
            if (m_pscReqInfo.m_lstSendRequestDtlPscInfos.Count <= 0)
            {
                LogMessage(String.Format("[RESULT:{0}] 후처리 작업 완료 [FAX_ID:{1}][TR_NO:{2}][REQ_TYPE:{3}][PREVIEW_REQ:{4}][APPROVE_REQ:{5}]",
                                         RESULT.SUCCESS,
                                         m_pscReqInfo.faxId,
                                         m_pscReqInfo.strTrNo,
                                         m_pscReqInfo.strReqType,
                                         m_pscReqInfo.previewYN,
                                         m_pscReqInfo.approvedReq
                                         ));
                return(RESULT.SUCCESS);
            }

            ////외부 발송 처리 : FOD로 전달 ////
            destProcessType = P_TYPE.FOD;
            state           = R_STATE.FOD_W;

            foreach (DbModule.SEND_REQUEST_DTL dtlReq in m_pscReqInfo.m_lstSendRequestDtlPscInfos)
            {
                if (DbModule.Instance.PassoverDetailSendReq(m_pscReqInfo.faxId, dtlReq.faxDtlId, Config.PROCESS_TYPE, Config.SYSTEM_PROCESS_ID, destProcessType, "N", state) <= 0)
                {
                    LogError("작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다");
                    continue;
                }
            }
            if (DbModule.Instance.PassoverMasterSendReq(m_pscReqInfo.faxId, Config.PROCESS_TYPE, Config.SYSTEM_PROCESS_ID, destProcessType, state) <= 0)
            {
                LogError("작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다");
                return(RESULT.F_DBP_FAIL_PASS_OVER_SEND_REQ_MSTR);
            }

            LogMessage(String.Format("변환후처리 작업 완료 [FAX_ID:{0}][TR_NO:{1}][REQ_TYPE:{2}][PREVIEW_REQ:{3}][APPROVE_REQ:{4}]",
                                     m_pscReqInfo.faxId,
                                     m_pscReqInfo.strTrNo,
                                     m_pscReqInfo.strReqType,
                                     m_pscReqInfo.previewYN,
                                     m_pscReqInfo.approvedReq
                                     ));


            return(RESULT.SUCCESS);
        }