private RESULT PassOverSendRequest(P_TYPE p_destProcessType,
                                    DbModule.SendRequestMasterInfo p_masterInfo,
                                    DbModule.SendRequestDetailInfo p_detailInfo)
 {
     // FAX 발송 요청 건 대기상태로 전환 - DTL ////
     if (DbModule.Instance.PassoverDetailSendReq(p_detailInfo.FAX_ID,
                                                 p_detailInfo.OUT_SEQ,
                                                 Config.PROCESS_TYPE,
                                                 Config.SYSTEM_PROCESS_ID,
                                                 p_destProcessType,
                                                 "Y") <= 0)
     {
         AppLog.Write(LOG_LEVEL.ERR, string.Format("Send Detail 테이블의 Pass Over가 실패하였습니다.     FAX_ID: {0}, FAX_DTL_ID: {1}", p_detailInfo.FAX_ID, p_detailInfo.OUT_SEQ));
         return(RESULT.F_DB_ERROR);
     }
     // FAX 발송 요청 건 대기상태로 전환 - MSTR ////
     if (DbModule.Instance.PassoverMasterSendReq(p_masterInfo.OUT_FAX_ID,
                                                 Config.PROCESS_TYPE,
                                                 Config.SYSTEM_PROCESS_ID,
                                                 p_destProcessType) <= 0)
     {
         AppLog.Write(LOG_LEVEL.ERR, string.Format("Send Master 테이블의 Pass Over가 실패하였습니다.     FAX_ID: {0}", p_masterInfo.OUT_FAX_ID));
         return(RESULT.F_DB_ERROR);
     }
     return(RESULT.SUCCESS);
 }
Esempio n. 2
0
 public List <LookupModel> getPatientByType(P_TYPE type)
 {
     try
     {
         OPDHistory entity = new OPDHistory();
         return(entity.getPatientByType(type));
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
Esempio n. 3
0
        //public DashboardModel UserCollectionRecentActivity()
        //{
        //    DashboardModel model = new DashboardModel();
        //    Guid? StatusId = Status.GetIdByName(OPD_STATUS.Waiting.ToString());
        //    using (var db = new HMSEntities())
        //    {
        //        #region User Collection
        //        var list = db.UserDetails.Where(u => u.IsActive == true);
        //        model.UsreCollection = new List<LookupModel>();
        //        foreach (var users in list)
        //        {
        //            Guid? prevoiusid = null;
        //            LookupModel md = new LookupModel();
        //            var hislist = db.OPDHistoryUpdates.AsEnumerable().Where(h => h.UpdatedBy == users.Id && h.UpdatedField == "PayingAmount" && h.CreatedOn.Value.Date == today);
        //            int records = hislist.Count();
        //            int index = 0;
        //            foreach (var item in hislist)
        //            {
        //                index++;
        //                if (prevoiusid == null)
        //                {
        //                    prevoiusid = item.UpdatedBy;
        //                    md.Rate = md.Rate == null ? Convert.ToDecimal(item.UpdatedValue) : md.Rate + Convert.ToDecimal(item.UpdatedValue);
        //                }
        //                else
        //                {
        //                    md.Rate = md.Rate == null ? Convert.ToDecimal(item.UpdatedValue) : md.Rate + Convert.ToDecimal(item.UpdatedValue);
        //                }

        //                if (records == index)
        //                {
        //                    md.Id = item.UpdatedBy.Value;
        //                    md.Name = UserDetail.GetNameById(item.UpdatedBy.Value);
        //                    model.UsreCollection.Add(md);
        //                    md = new LookupModel();
        //                }

        //            }
        //        }

        //        #endregion

        //        #region Recent Activity

        //        model.RecentActivity = new List<OPDHistoryUpdateModel>();
        //        var activities = db.OPDHistoryUpdates.AsEnumerable().Where(h => h.CreatedOn.Value.Date == today).OrderByDescending(t => t.CreatedOn);
        //        foreach (var item in activities)
        //        {
        //            OPDHistoryUpdateModel lookup = new OPDHistoryUpdateModel();
        //            lookup.Id = item.Id;
        //            lookup.CasePaper = GetById(item.OPDHistoryId).CasePaperNumber;
        //            lookup.UpdatedName = UserDetail.GetNameById(item.UpdatedBy.Value);
        //            lookup.UpdatedField = item.UpdatedField;
        //            switch (item.UpdatedField)
        //            {
        //                case "XRAYAmount":
        //                case "ECGAmount":
        //                case "PayingAmount":
        //                case "ThirdPartyLabAmoumt":
        //                case "LabTestingAmount":
        //                    lookup.PreviousValue = item.PreviousValue != null ? Convert.ToString(item.PreviousValue) : "";
        //                    lookup.UpdatedValue = item.UpdatedValue != null ? Convert.ToString(item.UpdatedValue) : "";
        //                    break;
        //                case "IsCharity":
        //                case "IsXRAY":
        //                case "IsECG":
        //                case "IsLabCharity":
        //                    lookup.PreviousValue = item.PreviousValue != null ? Convert.ToBoolean(item.PreviousValue) ? "Yes" : "No" : "";
        //                    lookup.UpdatedValue = item.UpdatedValue != null ? Convert.ToBoolean(item.UpdatedValue) ? "Yes" : "No" : "";
        //                    break;
        //                case "StatusId":
        //                    lookup.PreviousValue = item.PreviousValue != null ? Status.GetNameById(new Guid(item.PreviousValue)) : "";
        //                    lookup.UpdatedValue = item.UpdatedValue != null ? Status.GetNameById(new Guid(item.UpdatedValue)) : "";
        //                    break;
        //                default:
        //                    break;
        //            }

        //            model.RecentActivity.Add(lookup);
        //        }
        //        #endregion
        //    }

        //    return model;
        //}

        public List <LookupModel> getPatientByType(P_TYPE type)
        {
            List <LookupModel> list  = new List <LookupModel>();
            DateTime           today = DateTime.Today;
            bool isXRAY = false;
            Expression <Func <OPDHistory, bool> > predicate = null;

            switch (type)
            {
            case P_TYPE.ECG:
                predicate = t => t.IsECG == true && DbFunctions.TruncateTime(t.InTime.Value) == today;

                break;

            case P_TYPE.XRAY:
                predicate = t => t.IsXRAY == true && DbFunctions.TruncateTime(t.InTime.Value) == today;
                isXRAY    = true;
                break;

            case P_TYPE.CHARITY:
                predicate = t => t.IsCharity == true && DbFunctions.TruncateTime(t.InTime.Value) == today;
                break;

            case P_TYPE.LABCHARITY:
                predicate = t => t.IsLabCharity == true && DbFunctions.TruncateTime(t.InTime.Value) == today;
                break;

            default:
                break;
            }

            using (var db = new HMSEntities())
            {
                var val = db.OPDHistories.Where(predicate);
                foreach (var item in val)
                {
                    LookupModel md = new LookupModel();
                    md.Name        = item.PatientDetail != null ? item.PatientDetail.FullName : "";
                    md.Id          = item.PatientId;
                    md.Description = item.PatientDetail.CasePaperNumber;
                    md.PerentName  = isXRAY == true?Convert.ToString(item.NumberofXRAY) : "";

                    list.Add(md);
                }
            }

            return(list);
        }
 private void SetReqType(List <POP3_BoundaryInfo> biList,
                         ref DbModule.SendRequestMasterInfo p_reqInfo_mstr,
                         ref DbModule.SendRequestDetailInfo p_reqInfo_dtl,
                         ref P_TYPE destProcessType)
 {
     if (biList.Count == 1)
     {
         p_reqInfo_mstr.REQ_TYPE = "02";
         destProcessType         = P_TYPE.DCV;
     }
     else if (biList.Count > 1)
     {
         p_reqInfo_mstr.REQ_TYPE = "12";
         destProcessType         = P_TYPE.DCV;
     }
 }
Esempio n. 5
0
        public bool FinishIBSendDtl(long p_systemNo, P_TYPE p_processType, string strSystemProcessID, string strBroadcastYN, SEND_REQUEST_DTL_PSC p_sendRequestInfo, RESULT p_result = RESULT.SUCCESS)
        {
            string strProcedureName = "PKG_PRC_FOD.USP_FINISH_SEND_DTL";

            lock (m_connection)
            {
                if (!ReOpen())
                {
                    return(false);
                }

                try
                {
                    using (OracleCommand command = new OracleCommand())
                    {
                        command.Connection  = m_connection;
                        command.CommandText = strProcedureName;
                        command.CommandType = CommandType.StoredProcedure;
                        command.Parameters.AddWithValue("P_FAX_ID", p_sendRequestInfo.faxId);
                        command.Parameters.AddWithValue("P_FAX_DTL_ID", p_sendRequestInfo.faxDtlId);
                        command.Parameters.AddWithValue("P_PROCESS_TYPE", p_processType.ToString());
                        command.Parameters.AddWithValue("P_SYSTEM_ID", p_systemNo);
                        command.Parameters.AddWithValue("P_SYSTEM_PROCESS_ID", strSystemProcessID);
                        command.Parameters.AddWithValue("P_FOD_CHANNEL", 99999);
                        command.Parameters.AddWithValue("P_RESULT_CODE_3", string.Format("{0:D03}", (int)p_result));
                        command.Parameters.AddWithValue("P_BROADCAST_YN", strBroadcastYN);
                        command.Parameters.AddWithValue("P_LAST_PAGE_SENT", p_sendRequestInfo.strLastPagesSent);

                        int cnt = command.ExecuteNonQuery();
                        if (cnt < 1)
                        {
                            return(false);
                        }
                    }
                }
                catch (Exception ex)
                {
                    ExceptionMsg(ex, "PROCEDURE : " + strProcedureName);
                    return(false);
                }

                Close();

                return(true);
            }
        }
Esempio n. 6
0
        public RESULT FailSendReqs(decimal p_faxId, decimal p_faxDtlId, P_TYPE p_processType, string p_processId, RESULT p_result)
        {
            //// DTL건 업데이트 ////
            int ret = FailSendReqDetail(p_faxId, p_faxDtlId, p_processType, p_processId, p_result);

            if (ret < 0)
            {
                return(RESULT.F_DB_UPDATE_ERROR);
            }

            //// MSTR건 업데이트 ////
            ret = DbModule.Instance.FailSendReqMaster(p_faxId, p_processType, p_processId);
            if (ret < 0)
            {
                return(RESULT.F_DB_UPDATE_ERROR);
            }

            return(RESULT.SUCCESS);
        }
Esempio n. 7
0
        public RESULT PSI_InsertProcessLog(P_TYPE p_processType, string p_strSystemProcessId, decimal p_FAX_ID, RESULT p_REASON, string p_INFO_EXTRA)
        {
            RESULT ret = RESULT.EMPTY;
            string strProcedureName = "PKG_PRC_PSI.USP_INSERT_PROCESS_LOG";

            lock (m_connection)
            {
                if (!ReOpen())
                {
                    return(RESULT.F_DB_OPENERROR);
                }

                try
                {
                    using (OracleCommand command = new OracleCommand())
                    {
                        command.Connection  = m_connection;
                        command.CommandText = strProcedureName;
                        command.CommandType = CommandType.StoredProcedure;

                        command.Parameters.AddWithValue("P_FAX_ID", p_FAX_ID);
                        command.Parameters.AddWithValue("P_PROCESS_TYPE", p_processType.ToString());
                        command.Parameters.AddWithValue("P_FETCH_PROCESS", p_strSystemProcessId);
                        command.Parameters.AddWithValue("P_REASON", ((int)p_REASON).ToString().PadLeft(3, '0'));
                        command.Parameters.AddWithValue("P_INFO_EXTRA", p_INFO_EXTRA);

                        command.ExecuteNonQuery();

                        ret = RESULT.SUCCESS;
                    }
                }
                catch (Exception ex)
                {
                    ExceptionMsg(ex, "PROCEDURE : " + strProcedureName);
                    ret = RESULT.F_SYSTEM_ERROR;
                }
            }

            return(ret);
        }
 private RESULT PassOverSendRequest(P_TYPE p_destProcessType,
                                    DbModule.SendRequestMasterInfo p_masterInfo,
                                    DbModule.SendRequestDetailInfo p_detailInfo)
 {
     // FAX 발송 요청 건 대기상태로 전환 - DTL ////
     if (DbModule.Instance.PassoverDetailSendReq(p_detailInfo.FAX_ID,
                                                 p_detailInfo.OUT_SEQ,
                                                 Config.PROCESS_TYPE,
                                                 Config.SYSTEM_PROCESS_ID,
                                                 p_destProcessType,
                                                 "Y") <= 0)
     {
         return(RESULT.F_DB_ERROR);
     }
     // FAX 발송 요청 건 대기상태로 전환 - MSTR ////
     if (DbModule.Instance.PassoverMasterSendReq(p_masterInfo.OUT_FAX_ID,
                                                 Config.PROCESS_TYPE,
                                                 Config.SYSTEM_PROCESS_ID, p_destProcessType) <= 0)
     {
         return(RESULT.F_DB_ERROR);
     }
     return(RESULT.SUCCESS);
 }
 private void getPatientList(P_TYPE type)
 {
     try
     {
         List <LookupModel> list = service.getPatientByType(type);
         if (type == P_TYPE.XRAY)
         {
             this.dgvList.Columns["XRAYCount"].Visible = true;
         }
         else
         {
             this.dgvList.Columns["XRAYCount"].Visible = false;
         }
         dgvList.AutoGenerateColumns = false;
         dgvList.DataSource          = list;
         dgvList.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
         dgvList.Refresh();
         dgvList.ClearSelection();
     }
     catch (Exception ex)
     {
         Utility.ErrorLog.Logging("Main Dashboard", ex.Message.ToString(), ex.StackTrace.ToString());
     }
 }
 public patientDialog(P_TYPE type)
 {
     InitializeComponent();
     getPatientList(type);
 }
Esempio n. 11
0
        /// <summary>
        /// Name       : PollingLoop_
        /// Parameters : Empty
        /// Content    : 폴링 루프
        /// Return     : Empty
        /// Writer     : 장동훈
        /// Date       : 2012.09.03
        /// </summary>
        private void PollingLoop_()
        {
            POP3_Client mail = new POP3_Client();

            DbModule.SendRequestMasterInfo     reqInfo_mstr     = null;
            DbModule.SendRequestDetailInfo     reqInfo_dtl      = null;
            DbModule.SEND_REQ_SITE             reqInfo_site     = null;
            List <DbModule.SendRequestDocInfo> reqInfo_doc_List = null;
            P_TYPE destProcessType   = P_TYPE.PSC;
            int    retryConnectCount = 0;   // POP3 접속 실패시 3회 재시도
            int    retryLoginCount   = 0;   // POP3 로그인 실패시 3회 재시도

            /// 마지막 실행시간 (Sleep 실행의 기준시간)
            /// 첫 Sleep 실행시 바로 실행 되도록 시간 수정
            DateTime lastExecuteTime = DateTime.Now.AddMilliseconds(Config.EMAIL_POLLING_TIME * -1);

            try
            {
                while (!BtfaxThread.Stop)
                {
                    if (DateTime.Now.Subtract(lastExecuteTime).TotalMilliseconds < Config.EMAIL_POLLING_TIME)
                    {
                        Thread.Sleep(1000);
                        continue;
                    }
                    lastExecuteTime = DateTime.Now;

                    try
                    {
                        if (mail.IsConnected == false &&
                            !mail.Connect(Config.EMAIL_POP_SERVER, Config.EMAIL_POP3_SERVER_PORT))
                        {
                            if (retryConnectCount++ < 3)
                            {
                                AppLog.Write(LOG_LEVEL.ERR, string.Format("IP: {0}, PORT: {1} 로 접속중 오류가 발생하였습니다. ({2} 회 접속 시도)", Config.EMAIL_POP_SERVER, Config.EMAIL_POP3_SERVER_PORT, retryConnectCount));

                                /// 0.5 초 대기
                                for (int i = 0; i < 5; i++)
                                {
                                    Thread.Sleep(100);
                                }

                                mail = new POP3_Client();
                                continue;
                            }
                            else
                            {
                                AppLog.Write(LOG_LEVEL.ERR, "해당 서버로 접속 연결이 되지 않습니다.");
                                throw new Exception("접속 에러");
                            }
                        }
                        if (mail.IsLogin == false &&
                            !mail.Login(Config.EMAIL_ID, Config.EMAIL_PW))
                        {
                            if (retryLoginCount++ < 3)
                            {
                                AppLog.Write(LOG_LEVEL.ERR, string.Format("ID: {0}, PASSWORD: {1} 로 로그인중 오류가 발생하였습니다. ({2} 회 로그인 시도)", Config.EMAIL_ID, string.Empty.PadRight(Config.EMAIL_PW.Length, '*'), retryLoginCount));

                                /// 0.5 초 대기
                                for (int i = 0; i < 5; i++)
                                {
                                    Thread.Sleep(100);
                                }

                                continue;
                            }
                            else
                            {
                                AppLog.Write(LOG_LEVEL.ERR, "해당 서버로 로그인이 되지 않습니다.");
                                throw new Exception("로그인 에러");
                            }
                        }

                        /// 초기화
                        retryConnectCount = 0;
                        retryLoginCount   = 0;

                        int messageCount = mail.GetMailCount();
                        for (int i = 1; i <= messageCount; i++)
                        {
                            POP3_Parsing parseMail = mail.GetMessage(i);

                            if (parseMail.IsParseSuccess == false)
                            {
                                continue;
                            }

                            if (ParseEmailDocument(parseMail,
                                                   ref reqInfo_mstr,
                                                   ref reqInfo_dtl,
                                                   ref reqInfo_site,
                                                   ref reqInfo_doc_List,
                                                   ref destProcessType) != RESULT.SUCCESS)
                            {
                                continue;
                            }

                            /// Master, Detail DB Insert
                            if (InsertToDb(reqInfo_mstr, reqInfo_dtl, reqInfo_site) != RESULT.SUCCESS)
                            {
                                continue;
                            }

                            /// Doc DB Insert
                            if (InsertToDbDoc(reqInfo_mstr.OUT_FAX_ID, reqInfo_doc_List) != RESULT.SUCCESS)
                            {
                                continue;
                            }

                            // FAXBOX Insert - 20130124
                            if (InsertToDbFaxbox(reqInfo_mstr) != RESULT.SUCCESS)
                            {
                                continue;
                            }

                            /// Pass Over
                            if (PassOverSendRequest(destProcessType, reqInfo_mstr, reqInfo_dtl) != RESULT.SUCCESS)
                            {
                                continue;
                            }

                            break;
                        }

                        /// 메일함 Update
                        mail.Disconnect();

                        lastExecuteTime = DateTime.Now;
                    }
                    catch (Exception ex)
                    {
                        lastExecuteTime = DateTime.Now;

                        AppLog.ExceptionLog(ex, string.Format("{0} 쓰레드에서 다음과 같은 오류가 발생하였습니다.-1", m_ThreadName));
                        if (mail.IsConnected == true)
                        {
                            mail.ResetDeleteMessage();
                        }
                        AppLog.ExceptionLog(ex, string.Format("{0} 쓰레드에서 다음과 같은 오류가 발생하였습니다.-2", m_ThreadName));
                        //throw ex;
                    }
                }   // while
            }
            catch (Exception ex)
            {
                AppLog.ExceptionLog(ex, string.Format("{0} 쓰레드에서 다음과 같은 오류가 발생하였습니다. 쓰레드를 종료합니다.-1", m_ThreadName));
                if (mail.IsConnected == true)
                {
                    mail.ResetDeleteMessage();
                }
                AppLog.ExceptionLog(ex, string.Format("{0} 쓰레드에서 다음과 같은 오류가 발생하였습니다. 쓰레드를 종료합니다.-2", m_ThreadName));
                throw ex;
            }
        }
Esempio n. 12
0
        protected override void ThreadEntry()
        {
            while (!BtfaxThread.Stop)
            {
                //// 작업 요청 건 큐 폴링 ////
                ClearTmkSendReqInfo();
                m_tmkReqInfo = OutFaxQueue.Instance.Dequeue();
                if (m_tmkReqInfo == null || m_tmkReqInfo.faxId < 0)
                {
                    System.Threading.Thread.Sleep(QUEUE_POLLING_SLEEP);
                    continue;
                }

                //// 다음 프로세스 유형 SET ////
                P_TYPE nextProcessType = P_TYPE.NONE;
                switch (Convert.ToInt32(m_tmkReqInfo.strReqType))
                {
                case (int)REQ_TYPE.TMK:         nextProcessType = P_TYPE.PSC; break;

                case (int)REQ_TYPE.TMK_TPC:     nextProcessType = P_TYPE.TPC; break;

                case (int)REQ_TYPE.TMK_DCV_TPC: nextProcessType = P_TYPE.DCV; break;
                }

                LogMessage(string.Format("[FAX_ID:{0}] 팩스요청건점유", m_tmkReqInfo.faxId), RESULT.SUCCESS);

                //// TIF 생성정보 GET ////
                RESULT result = DbModule.Instance.GetTiffMakingInfo(ref m_tmkReqInfo);
                if (result != RESULT.SUCCESS)
                {
                    LogError(string.Format("[FAX_ID:{0}] TIF생성 정보를 얻어오지 못하였습니다", m_tmkReqInfo.faxId), result);

                    //// MSTR 실패처리 ////
                    if (DbModule.Instance.FailSendReqMaster(m_tmkReqInfo.faxId, P_TYPE.TMK, Config.SYSTEM_PROCESS_ID) < 0)
                    {
                        LogError(string.Format("[FAX_ID:{0}] 작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다", m_tmkReqInfo.faxId));
                    }

                    //// DTL 전체실패처리 ////
                    if (DbModule.Instance.FailSendReqDetail(m_tmkReqInfo.faxId, -1, P_TYPE.TMK, Config.SYSTEM_PROCESS_ID, result) < 0)
                    {
                        LogError(string.Format("[FAX_ID:{0}] 작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다", m_tmkReqInfo.faxId));
                    }

                    continue;
                }

                bool docInfoExistInDb = true;
                DbModule.DOC_INFO_ALL_TMK docInfoAll = m_tmkReqInfo.m_tmkDocInfoAll;
                if (docInfoAll == null)
                {
                    docInfoExistInDb = false;

                    m_tmkDocInfoAll.Clear();
                    docInfoAll = m_tmkDocInfoAll;
                    docInfoAll.strProcessingMode   = ((int)DOC_PROCESSING_MODE.TMK).ToString();
                    docInfoAll.strTiffExtractPages = "all";
                }
                docInfoAll.strDocExt  = "TIF";
                docInfoAll.strDocPath = ".";

                string strSrcFaxFormFullName = string.Format("{0}\\{1}{2}\\{3}", Config.STG_HOME_PATH
                                                             , Config.FAXFORM_PATH
                                                             , m_tmkReqInfo.m_strFaxFormPath
                                                             , m_tmkReqInfo.m_strFaxFormFileName);

                string strLocalFaxFormFullName = string.Format("{0}\\{1}.fax", Config.TIFF_MAKING_PATH
                                                               , m_tmkReqInfo.faxId);

                //// 팩스폼 다운로드 ////
                result = DownloadFaxForm(strSrcFaxFormFullName, strLocalFaxFormFullName);
                if (result != RESULT.SUCCESS)
                {
                    //// MSTR 실패처리 ////
                    if (DbModule.Instance.FailSendReqMaster(m_tmkReqInfo.faxId, P_TYPE.TMK, Config.SYSTEM_PROCESS_ID) < 0)
                    {
                        LogError(string.Format("[FAX_ID:{0}] 작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다", m_tmkReqInfo.faxId));
                    }

                    //// DTL 전체실패처리 ////
                    if (DbModule.Instance.FailSendReqDetail(m_tmkReqInfo.faxId, -1, P_TYPE.TMK, Config.SYSTEM_PROCESS_ID, result) < 0)
                    {
                        LogError(string.Format("[FAX_ID:{0}] 작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다", m_tmkReqInfo.faxId));
                    }

                    continue;
                }

                LogMessage(string.Format("[FAX_ID:{0}] 팩스폼다운로드성공 (파일:{1} -> {2})", m_tmkReqInfo.faxId, strSrcFaxFormFullName, strLocalFaxFormFullName), result);

                foreach (DbModule.SEND_REQUEST_DTL_TMK tmkDtlReqInfo in m_tmkReqInfo.m_lstTmkSendRequestDtlInfos)
                {
                    //// TIFF생성 - 실패시 3회처리 ////
                    result = RESULT.EMPTY;
                    for (int i = 0; i < 3; i++)
                    {
                        result = MakingTiff(m_tmkReqInfo.faxId,
                                            m_tmkReqInfo.strTrNo,
                                            m_tmkReqInfo.m_strPacket,
                                            strLocalFaxFormFullName,
                                            strSrcFaxFormFullName,
                                            tmkDtlReqInfo,
                                            docInfoAll,
                                            nextProcessType);

                        if (result == RESULT.SUCCESS)
                        {
                            break;
                        }

                        LogError(string.Format("[FAX_ID:{0}][FAX_DTL_ID:{1}] TIF파일 생성실패 (횟수:{2})", m_tmkReqInfo.faxId, tmkDtlReqInfo.faxDtlId, i + 1), result);
                        Thread.Sleep(500);
                    }

                    if (result != RESULT.SUCCESS)
                    {
                        if (DbModule.Instance.FailSendReqDetail(tmkDtlReqInfo.faxId, tmkDtlReqInfo.faxDtlId, P_TYPE.TMK, Config.SYSTEM_PROCESS_ID, result) < 0)
                        {
                            LogError(string.Format("[FAX_ID:{0}] 작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다", m_tmkReqInfo.faxId), RESULT.F_DB_UPDATE_ERROR);
                        }

                        continue;
                    }

                    //// DTL성공 처리 ////
                    if (DbModule.Instance.SuccessSendReqDetail(m_tmkReqInfo.faxId, tmkDtlReqInfo.faxDtlId, P_TYPE.TMK, Config.SYSTEM_PROCESS_ID) < 0)
                    {
                        LogError(string.Format("[FAX_ID:{0}] 작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다", m_tmkReqInfo.faxId), RESULT.F_DB_UPDATE_ERROR);
                        continue;
                    }

                    //// 성공건 추가 ////
                    m_lstSuccessTmkDtlReqs.Add(tmkDtlReqInfo);

                    Thread.Sleep(100);
                }


                File.Delete(strLocalFaxFormFullName);

                if (m_lstSuccessTmkDtlReqs.Count <= 0)
                {
                    result = RESULT.F_MAKE_IMAGEFILE_NOT_EXIST;
                    LogError(string.Format("[FAX_ID:{0}] TIF생성 성공건이 존재하지 않습니다", m_tmkReqInfo.faxId), result);

                    if (DbModule.Instance.FailSendReqMaster(m_tmkReqInfo.faxId, Config.PROCESS_TYPE, Config.SYSTEM_PROCESS_ID) < 0)
                    {
                        LogError(string.Format("[FAX_ID:{0}] 작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다", m_tmkReqInfo.faxId));
                    }

                    continue;
                }

                if (docInfoExistInDb)
                {
                    //// 생성 TIFF DB 에 업데이트 ////
                    if (!DbModule.Instance.FinishProcessingDoc(Config.PROCESS_TYPE, docInfoAll.seq))
                    {
                        LogError(string.Format("[FAX_ID:{0}] TIF파일 생성정보를 DB에 UPDATE 하는 도중 오류가 발생하였습니다", m_tmkReqInfo.faxId), RESULT.F_DB_UPDATE_ERROR);
                        continue;
                    }
                }
                else
                {
                    //// 생성 TIFF DB 에 추가 ////
                    if (!DbModule.Instance.InsertSendDoc(m_tmkReqInfo.faxId, Config.PROCESS_TYPE, ".", docInfoAll))
                    {
                        LogError("생성TIF 정보를 DB에 INSERT 하는 도중 오류가 발생하였습니다", RESULT.F_DB_UPDATE_ERROR);
                        continue;
                    }
                }

                //// 다음 프로세스로 전달 - BTF_FAX_SEND_DTL ////
                if (DbModule.Instance.PassoverDetailSendReq(m_tmkReqInfo.faxId, -1, Config.PROCESS_TYPE, Config.SYSTEM_PROCESS_ID, nextProcessType, "N") <= 0)
                {
                    LogError(string.Format("[FAX_ID:{0}] 작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다", m_tmkReqInfo.faxId), RESULT.F_DB_UPDATE_ERROR);
                    continue;
                }

                //// 다음 프로세스로 전달 - BTF_FAX_SEND_MSTR ////
                if (DbModule.Instance.PassoverMasterSendReq(m_tmkReqInfo.faxId, Config.PROCESS_TYPE, Config.SYSTEM_PROCESS_ID, nextProcessType) <= 0)
                {
                    LogError(string.Format("[FAX_ID:{0}] 작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다", m_tmkReqInfo.faxId), RESULT.F_DB_UPDATE_ERROR);
                    continue;
                }

                //// 로그 기록 ////
                LogMessage(string.Format("[FAX_ID:{0}] TIF파일 생성작업 완료", m_tmkReqInfo.faxId, strSrcFaxFormFullName, strLocalFaxFormFullName), RESULT.SUCCESS);

                Thread.Sleep(QUEUE_POLLING_SLEEP);
            }
        }
Esempio n. 13
0
        private RESULT MakingTiff(decimal p_faxId,
                                  string p_strTrNo,
                                  string p_strPacket,
                                  string p_strFaxFormLocal,
                                  string p_strFaxFormFullPath,
                                  DbModule.SEND_REQUEST_DTL_TMK p_tmkDtlInfo,
                                  DbModule.DOC_INFO_ALL_TMK p_docInfo,
                                  P_TYPE p_destProcessType)
        {
            RESULT result = RESULT.EMPTY;

            // ADD - KIMCG : 20140903
            // 팩스번호 복호화 처리
            if (Config.ENCRYPT_FIELD_YN == "Y")
            {
                string strDecrytedFaxNo = "";
                if (EncryptApi.Decrypt(p_tmkDtlInfo.strFaxNo, out strDecrytedFaxNo))
                {
                    p_tmkDtlInfo.strFaxNo = strDecrytedFaxNo;
                }
                else
                {
                    LogWrite(LOG_LEVEL.WRN, "팩스번호 복호화 처리 실패", RESULT.EMPTY);
                }
            }
            // ADD - END

            if (p_destProcessType == P_TYPE.PSC)
            {
                p_docInfo.strDocFile = string.Format("{0}_{1}", p_faxId, p_tmkDtlInfo.faxDtlId);
            }
            else
            {
                p_docInfo.strDocFile = string.Format("{0}_{1}_tifmake", p_faxId, p_tmkDtlInfo.faxDtlId);
            }

            string strFileName = string.Format("{0}.{1}", p_docInfo.strDocFile, p_docInfo.strDocExt);

            //// 파일경로이름 SET ////
            string strFinishFile = "";
            string strMakingFile = string.Format(@"{0}\{1}", Config.TIFF_MAKING_PATH, strFileName);

            if (p_destProcessType == P_TYPE.PSC)
            {
                strFinishFile = string.Format(@"{0}\{1}", Config.FINISHED_TIF_PATH, p_tmkDtlInfo.strTiffPath);
            }
            else
            {
                strFinishFile = string.Format(@"{0}\{1}", Config.MADE_TIF_PATH, strFileName);
            }
            string strPacketXmlFile = string.Format(@"{0}\{1}_{2}.xml", Config.TIFF_MAKING_PATH, p_faxId, p_tmkDtlInfo.faxDtlId);

            //// TIFF 생성 ////
            try
            {
                //// 팩스폼 로딩 ////
                if (!File.Exists(p_strFaxFormLocal))
                {
                    LogError(string.Format("[FAX_ID:{0}][FAX_DTL_ID:{1}] 팩스폼파일을 찾을수 없습니다.(파일:{2})", p_faxId, p_tmkDtlInfo.faxDtlId, p_strFaxFormLocal), RESULT.F_MAKE_NOT_EXIST_FAXFORMFILE);
                    return(RESULT.F_MAKE_NOT_EXIST_FAXFORMFILE);
                }

                //// Page fault 처리 - 스트림 생성 ////
                using (MemoryStream faxFormStream = new MemoryStream())
                {
                    using (Stream localFaxFormStream = File.OpenRead(p_strFaxFormLocal))
                    {
                        localFaxFormStream.CopyTo(faxFormStream);
                        localFaxFormStream.Close();
                    }

                    using (XtraReport_Btfax report = new XtraReport_Btfax())
                    {
                        report.LoadLayout(p_strFaxFormLocal);
                        LogMessage(string.Format("[FAX_ID:{0}][FAX_DTL_ID:{1}] 팩스폼파일 로딩성공 (파일:{2})", p_faxId, p_tmkDtlInfo.faxDtlId, p_strFaxFormLocal), RESULT.SUCCESS);

                        //// 전문 XML 로딩 ////
                        report.LoadPacketXml(p_strPacket, p_strTrNo, false, true);

                        //// 레포트 데이터셋에 팩스번호, 수신인명 바인딩 처리 ////
                        DataSet reportDs = report.DataSource as DataSet;
                        if (reportDs == null)
                        {
                            LogError(string.Format("[FAX_ID:{0}][FAX_DTL_ID:{1}] 팩스폼에 데이터셋이 존재하지 않습니다 (파일:{2})", p_faxId, p_tmkDtlInfo.faxDtlId, p_strFaxFormLocal), RESULT.F_MAKE);
                            return(RESULT.F_MAKE);
                        }

                        DataTable reportDt = reportDs.Tables["헤더___HEADER_O_COMMON"];
                        if (reportDt == null)
                        {
                            LogError(string.Format("[FAX_ID:{0}][FAX_DTL_ID:{1}] 팩스폼에 데이터셋이 존재하지 않습니다 (파일:{2})", p_faxId, p_tmkDtlInfo.faxDtlId, p_strFaxFormLocal), RESULT.F_MAKE);
                            return(RESULT.F_MAKE);
                        }

                        bool bFaxNumBinded           = false;
                        bool bFaxRecipientNameBinded = false;
                        foreach (DataColumn col in reportDt.Columns)
                        {
                            foreach (DataRow row in reportDt.Rows)
                            {
                                if (bFaxNumBinded && bFaxRecipientNameBinded)
                                {
                                    break;
                                }

                                if (col.ColumnName == "수신자팩스번호")
                                {
                                    row[col.ColumnName] = p_tmkDtlInfo.strFaxNo;
                                    bFaxNumBinded       = true;
                                }
                                if (col.ColumnName == "수신자이름")
                                {
                                    row[col.ColumnName]     = p_tmkDtlInfo.strRecipientName;
                                    bFaxRecipientNameBinded = true;
                                }
                            }
                        }

                        //// 컨트롤 바인딩 처리 ////
                        foreach (Band band in report.Bands)
                        {
                            foreach (XRControl control in band.Controls)
                            {
                                //// 이미지 외, 컨트롤 바인딩 유효성 체크 ////
                                if (control is XRLabel || control is XRCheckBox || control is XRTableCell)
                                {
                                    result = ValidateBinding(report, control);
                                    if (result != RESULT.SUCCESS)
                                    {
                                        return(result);
                                    }
                                }

                                //// 이미지 바인딩 유효성 체크 및 동적 바인딩 ////
                                else if (control is XRPictureBox)
                                {
                                    XRPictureBox xrPictureBox = control as XRPictureBox;

                                    result = BindImageBox(report, xrPictureBox);
                                    if (result != RESULT.SUCCESS)
                                    {
                                        throw new Exception();
                                    }
                                }
                            }
                        }

                        //// Export ///
                        //report.ExportToImage(strMakingFile, this.exportOption);
                        if (!report.ExportImageForFax(Config.TIFF_MAKING_PATH, strFileName))
                        {
                            LogError(string.Format("[FAX_ID:{0}][FAX_DTL_ID:{1}] TIF파일 생성실패 (파일:{2})", p_faxId, p_tmkDtlInfo.faxDtlId, strMakingFile), RESULT.F_MAKE);
                            return(RESULT.F_MAKE);
                        }

                        LogMessage(string.Format("[FAX_ID:{0}][FAX_DTL_ID:{1}] TIF파일 생성성공 (파일:{2})", p_faxId, p_tmkDtlInfo.faxDtlId, strMakingFile), RESULT.SUCCESS);

                        //// 파일 업로드 ////
                        if (!UploadFinishedTif(strMakingFile, strFinishFile))
                        {
                            LogError(string.Format("[FAX_ID:{0}][FAX_DTL_ID:{1}] TIF파일 업로드실패 (파일:{2}->{3})", p_faxId, p_tmkDtlInfo.faxDtlId, strMakingFile, strFinishFile), RESULT.F_FILE_FAIL_TO_UPLOAD);
                            return(RESULT.F_FILE_FAIL_TO_UPLOAD);
                        }

                        LogMessage(string.Format("[FAX_ID:{0}][FAX_DTL_ID:{1}] TIF파일 업로드성공 (파일:{2}->{3})", p_faxId, p_tmkDtlInfo.faxDtlId, strMakingFile, strFinishFile), RESULT.SUCCESS);

                        if (reportDt != null)
                        {
                            reportDt.Dispose();
                        }

                        if (reportDs != null)
                        {
                            reportDs.Dispose();
                        }

                        // LHOPE
                        File.Delete(strMakingFile);
                    }

                    faxFormStream.Close();
                    return(RESULT.SUCCESS);
                }
            }
            catch (Exception ex)
            {
                LogError(string.Format("팩스 발송 요청에 대하여 팩스폼[{0}]으로 TIFF 파일[{1}]을 생성하는 도중., 다음과 같은 오류가 발생하였습니다. {2}",
                                       p_strFaxFormFullPath, strMakingFile, ex.Message), RESULT.F_MAKE);

                return(RESULT.F_MAKE);
            }
        }
        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);
        }
Esempio n. 16
0
        public RESULT PSI_FetchPostProcessingRequest(P_TYPE p_processType, string p_strSystemProcessId, int p_occupyCnt, ref List <RECV_FAX_DATA_PSI> p_result)
        {
            RESULT ret = RESULT.EMPTY;
            string strProcedureName = "PKG_PRC_PSI.USP_PROCESS_POST_INBOUND";

            lock (m_connection)
            {
                if (!ReOpen())
                {
                    return(RESULT.F_DB_OPENERROR);
                }

                try
                {
                    using (OracleCommand command = new OracleCommand())
                    {
                        command.Connection  = m_connection;
                        command.CommandText = strProcedureName;
                        command.CommandType = CommandType.StoredProcedure;

                        command.Parameters.AddWithValue("P_PROCESS_TYPE", p_processType.ToString());
                        command.Parameters.AddWithValue("P_FETCH_PROCESS", p_strSystemProcessId);
                        command.Parameters.AddWithValue("P_OCCUPY_CNT", p_occupyCnt);

                        OracleParameter param1 = new OracleParameter("P_TABLE1", OracleType.Cursor);
                        param1.Direction = ParameterDirection.Output;
                        command.Parameters.Add(param1);

                        OracleParameter param2 = new OracleParameter("P_TABLE2", OracleType.Cursor);
                        param2.Direction = ParameterDirection.Output;
                        command.Parameters.Add(param2);

                        using (OracleDataReader reader = command.ExecuteReader())
                        {
                            DataTable dt = new DataTable();
                            dt.Load(reader);
                            DataTable dt2 = new DataTable();
                            dt2.Load(reader);

                            /// dt, dt2 outer join 과 같은 결과를 내기 위한 loop
                            foreach (DataRow dr in dt.Rows)
                            {
                                RECV_FAX_DATA_PSI data = new RECV_FAX_DATA_PSI();
                                data.FAX_ID = decimal.Parse(dr["FAX_ID"].ToString());
                                //data.DEPT_CD				= dr["OWNER_DEPT_CD"].ToString();    //WCD(2014-05-28)  부서정보 조회
                                //data.DEPT_NAME			= dr["OWNER_DEPT_NAME"].ToString();  //WCD(2014-05-28)  부서정보 조회

                                // TEST - 추후 주석제거
                                //data.DEPT_CD = dr["UPPER_DEPT_CD"].ToString();    //WCD(2014-05-28)
                                //data.DEPT_NAME = dr["UPPER_DEPT_NAME"].ToString();  //WCD(2014-05-28)
                                //data.TASK_ID = dr["OWNER_TASK_ID"].ToString();
                                // TEST


                                //if(!decimal.TryParse(dr["OWNER_TASK_ID"].ToString(), out data.TASK_ID))
                                //    data.TASK_ID = 0;

                                data.TASK_NAME = dr["OWNER_TASK_NAME"].ToString();
                                data.USER_ID   = dr["OWNER_USER_ID"].ToString();

                                // TEST - 추후 주석제거
                                data.USER_NAME     = dr["OWNER_USER_NAME"].ToString();                       //WCD(2014-04-29)
                                data.SERVICE_FAXNO = dr["SERVICE_FAXNO"].ToString();                         //WCD(2014-04-29)
                                data.DID           = dr["DID"].ToString();                                   //WCD(2014-04-29)
                                //data.RECV_DATE = string.Format("{0:yyyyMMdd}", dr["RECV_DATE"]);//WCD(2014-04-29)
                                //data.RECV_TIME = string.Format("{0:HHmm}", dr["RECV_DATE"]);  //WCD(2014-04-29)
                                //data.PAGE_CNT = dr["TIF_PAGE_CNT"].ToString();    //WCD(2014-04-29)
                                // TEST - 추후 주석제거



                                data.CID                   = dr["CID"].ToString();
                                data.CID_NAME              = dr["CID_NAME"].ToString();
                                data.EMAIL_NOTIFY_YN       = dr["EMAIL_NOTIFY_YN"].ToString();
                                data.EMAIL_NOTIFY          = dr["EMAIL_NOTIFY"].ToString();
                                data.PROXY_USER_ID         = dr["PROXY_USER_ID"].ToString();
                                data.PROXY_USER_ID         = dr["PROXY_USER_NAME"].ToString();
                                data.PROXY_EMAIL_NOTIFY_YN = dr["PROXY_EMAIL_NOTIFY_YN"].ToString();
                                data.PROXY_EMAIL_NOTIFY    = dr["PROXY_EMAIL_NOTIFY"].ToString();
                                data.SPAM_YN               = dr["SPAM_YN"].ToString();

                                foreach (DataRow dr2 in dt2.Rows)
                                {
                                    decimal fax_id = decimal.Parse(dr2["FAX_ID"].ToString());
                                    if (data.FAX_ID == fax_id)
                                    {
                                        data.SUCC_YN = dr2["SUCC_YN"].ToString();
                                        break;
                                    }
                                }
                                p_result.Add(data);
                            }
                        }

                        if (p_result.Count > 0)
                        {
                            ret = RESULT.SUCCESS;
                        }
                    }
                }
                catch (Exception ex)
                {
                    ExceptionMsg(ex, "PROCEDURE : " + strProcedureName);
                    ret = RESULT.F_SYSTEM_ERROR;
                }
            }
            return(ret);
        }
Esempio n. 17
0
        /// <summary>
        /// Name       : PollingLoop_
        /// Parameters : Empty
        /// Content    : 폴링 루프
        /// Return     : Empty
        /// Writer     : 장동훈
        /// Date       : 2012.09.03
        /// </summary>
        private void PollingLoop_()
        {
            DbModule.SendRequestMasterInfo reqInfo_mstr = new DbModule.SendRequestMasterInfo();
            DbModule.SendRequestDetailInfo reqInfo_dtl  = new DbModule.SendRequestDetailInfo();
            DbModule.SEND_REQ_SITE         reqInfo_site = new DbModule.SEND_REQ_SITE();
            P_TYPE   destProcessType = P_TYPE.PSC;
            FileInfo fi = null;

            string[] files        = null;
            string[] checkFiles   = null;
            string[] workFiles    = null;
            int      successCount = 0;
            string   destFileName = null;   // Detail 테이블에 기록될 Unique 파일 이름

            try
            {
                /// 에러로 인해 Process -> Finish 처리가 안된 팩스들 Process 폴더 -> Upload 폴더로 이동
                CheckProcessFolder();

                /// Storage 경로 확인
                if (CheckStoragePath() == false)
                {
                    return;
                }

                while (!BtfaxThread.Stop)
                {
                    /// 초기화
                    files        = null;
                    checkFiles   = null;
                    workFiles    = null;
                    successCount = 1;
                    destFileName = null;

                    /// 파일 업로드 여부 확인
                    if (CheckUploadFiles(ref files, ref checkFiles, ref workFiles) == true)
                    {
                        foreach (string f in checkFiles)
                        {
                            /// 한번에 처리할 최대 개수
                            if (successCount++ > Config.FILE_PROCESS_COUNT)
                            {
                                break;
                            }

                            /// 초기 설정
                            fi = new FileInfo(f);
                            reqInfo_mstr.Clear();
                            reqInfo_dtl.Clear();
                            reqInfo_site.clear();

                            try
                            {
                                Thread.Sleep(100);

                                /// 작업할 파일 작업폴더로 이동
                                if (FileMove(fi, FileMoveLocationEnum.Process, ref destFileName) == false)
                                {
                                    continue;
                                }

                                /// 파일 파싱
                                if (ParseTifFile(fi, reqInfo_mstr, reqInfo_dtl) == false)
                                {
                                    continue;
                                }

                                /// 파싱 성공 후 이미지 폴더로 파일 이동 (+ 이름 변경)
                                if (FileMove(fi, FileMoveLocationEnum.Done, ref destFileName) == false)
                                {
                                    continue;
                                }

                                /// DB 에 저장될 파일명 변경
                                if (FileRenameForDB(reqInfo_dtl, destFileName) == false)
                                {
                                    continue;
                                }

                                /// DB Insert
                                if (InsertToDb(reqInfo_mstr, reqInfo_dtl, reqInfo_site) != RESULT.SUCCESS)
                                {
                                    continue;
                                }

                                /// Pass Over
                                if (PassOverSendRequest(destProcessType, reqInfo_mstr, reqInfo_dtl) != RESULT.SUCCESS)
                                {
                                    continue;
                                }
                            }
                            catch (Exception ex)
                            {
                                AppLog.ExceptionLog(ex, string.Format("{0} 쓰레드에서 다음과 같은 오류가 발생하였습니다.", m_ThreadName));
                                break;
                            }
                        }
                    }

                    /// Wait - Storage polling time
                    /// Sleep 시간이 길 경우 Thread.Join() 도 길어져 Sleep 시간을 줄임
                    for (int i = 0; !BtfaxThread.Stop && (i * 100 < Config.SOTRAGE_POLLING_TIME); i++)
                    {
                        Thread.Sleep(100);
                    }
                }
            }
            catch (Exception ex)
            {
                AppLog.ExceptionLog(ex, string.Format("{0} 쓰레드에서 다음과 같은 오류가 발생하였습니다. 쓰레드를 종료합니다.", m_ThreadName));
                //throw ex;
            }
        }
Esempio n. 18
0
        protected override void ThreadEntry()
        {
            AppLog.Write(LOG_LEVEL.MSG, "### DB폴링 쓰레드 시작 ###");
            Thread.Sleep(Config.INITIAL_SLEEP);
            AppLog.Write(LOG_LEVEL.MSG, "### DB폴링 시작 ###");

            ReadySendReq();

            while (!BtfaxThread.Stop)
            {
                Thread.Sleep(Config.DB_POLLING_SLEEP);
                ClearReqInfo();

                if (!ExistsFaxStorage())
                {
                    AppLog.Write(LOG_LEVEL.ERR, string.Format("팩스스토리지를 찾을수 없습니다. 위치:{0}", Config.STG_HOME_PATH));
                    continue;
                }

                //// 변환 요청 건 조회 ////
                RESULT result = DbModule.Instance.FetchSendReqToConvert(ref m_lstSendReqDcvInfos);

                switch (result)
                {
                case RESULT.EMPTY:
                case RESULT.SUCCESS:
                    break;

                default:
                    AppLog.Write(LOG_LEVEL.ERR, "DB 폴링 중 오류가 발생하였습니다");
                    continue;
                }

                LogMessage("DbPolling Check..");

                if (m_lstSendReqDcvInfos.Count <= 0)
                {
                    continue;
                }

                foreach (DbModule.SEND_REQUEST_DCV dcvReqInfo in m_lstSendReqDcvInfos)
                {
                    string logInfo = string.Format("[FAX_ID:{0}][TR_NO:{1}][REQ_TYPE:{2}]", dcvReqInfo.faxId, dcvReqInfo.strTrNo, dcvReqInfo.strReqType);
                    LogMessage(string.Format("변환요청건 점유 {0}", logInfo));

                    //// 다음 프로세스 유형 SET ////
                    P_TYPE nextProcessType = P_TYPE.NONE;
                    switch (Convert.ToInt32(dcvReqInfo.strReqType))
                    {
                    case (int)REQ_TYPE.DCV:         nextProcessType = P_TYPE.PSC; break;

                    case (int)REQ_TYPE.DCV_TPC:     nextProcessType = P_TYPE.TPC; break;

                    case (int)REQ_TYPE.TMK_DCV_TPC: nextProcessType = P_TYPE.TPC; break;

                    //default
                    default:
                        result = DbModule.Instance.FailSendReqs(dcvReqInfo.faxId, -1, Config.PROCESS_TYPE, Config.PROCESS_ID, RESULT.F_REQ_TYPE_ERROR);
                        if (result != RESULT.SUCCESS)
                        {
                            LogError("작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다", result);
                        }

                        continue;
                    }

                    //// 변환 작업 ////
                    result = ConvertDocs(dcvReqInfo, dcvReqInfo.m_lstDocInfoAllDcv, nextProcessType);
                    if (result != RESULT.SUCCESS)
                    {
                        LogError(string.Format("문서변환 실패({0}) {1}", result, logInfo));
                        result = DbModule.Instance.FailSendReqs(dcvReqInfo.faxId, -1, Config.PROCESS_TYPE, Config.PROCESS_ID, RESULT.F_REQ_TYPE_ERROR);
                        if (result != RESULT.SUCCESS)
                        {
                            LogError("작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다", result);
                        }

                        continue;
                    }

                    LogMessage(string.Format("문서변환 성공 {0}", logInfo), RESULT.SUCCESS);

                    //// 성공 결과 DB 반영 ////
                    foreach (DbModule.SEND_REQUEST_DTL_DCV dtlReq in dcvReqInfo.m_lstSendRequestDtlDcvInfos)
                    {
                        if (DbModule.Instance.SuccessSendReqDetail(dcvReqInfo.faxId, dtlReq.faxDtlId, Config.PROCESS_TYPE, Config.SYSTEM_PROCESS_ID) < 0)
                        {
                            LogError("작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다", RESULT.F_DB_UPDATE_ERROR);
                            continue;
                        }
                    }

                    //// DETAIL건 파일명 전체업데이트 ////
                    if (!DbModule.Instance.UpdateAllTifName(dcvReqInfo.faxId, dcvReqInfo.strLastTifFile))
                    {
                        LogError("전체 TIF파일명을 업데이트하는 도중 오류가 발생하였습니다", RESULT.F_DB_UPDATE_ERROR);
                        continue;
                    }

                    //// DETAIL 전체 Pass over ////
                    if (DbModule.Instance.PassoverDetailSendReq(dcvReqInfo.faxId, -1, Config.PROCESS_TYPE, Config.SYSTEM_PROCESS_ID, nextProcessType, "N") <= 0)
                    {
                        LogError("작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다", RESULT.F_DB_UPDATE_ERROR);
                        continue;
                    }

                    //// MSTR Pass over ////
                    if (DbModule.Instance.PassoverMasterSendReq(dcvReqInfo.faxId, Config.PROCESS_TYPE, Config.SYSTEM_PROCESS_ID, nextProcessType) <= 0)
                    {
                        LogError("작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다", RESULT.F_DB_ERROR);
                        continue;
                    }

                    LogMessage(string.Format("변환요청 처리완료 {0}", logInfo), RESULT.SUCCESS);
                }
            }

            AppLog.Write(LOG_LEVEL.MSG, "### 쓰레드 종료 ###");
        }
Esempio n. 19
0
        //private bool UploadFinishedTif(string p_strSrcFileName, string p_strDestFileName)
        //{
        //    return CopyFile(p_strSrcFileName, p_strDestFileName);
        //}

        RESULT ConvertDoc(DbModule.SEND_REQUEST_DCV p_sendReqInfo, P_TYPE p_destProcessType, decimal p_faxId, string p_strPath, string p_strFile, string p_strExt)
        {
            if (p_sendReqInfo.m_lstSendRequestDtlDcvInfos.Count <= 0)
            {
                return(RESULT.F_CONV_DOCLIST_NOTEXIST_IN_DB);
            }

            DbModuleBase.SEND_REQUEST_DTL dtlReq = p_sendReqInfo.m_lstSendRequestDtlDcvInfos[0];

            //// 파일 경로/이름 SET ////
            if (p_strPath == ".")
            {
                p_strPath = "";
            }
            else
            {
                p_strPath = p_strPath + "\\";
            }

            string strSourceFile = string.Format("{0}\\{1}{2}.{3}", Config.INPUT_DOCS_PATH, p_strPath, p_strFile, p_strExt);
            string strDestFile   = string.Format("{0}\\{1}{2}.{3}", Config.TIFF_CONVERTING_PATH, p_strPath, p_strFile, p_strExt);

            string strFinishFile;

            p_sendReqInfo.strLastTifFile = dtlReq.strTiffPath;
            if (p_destProcessType == P_TYPE.PSC)
            {
                strFinishFile = string.Format("{0}\\{1}", Config.FINISHED_TIF_PATH, dtlReq.strTiffPath);
            }
            else
            {
                strFinishFile = string.Format("{0}\\{1}.TIF", Config.CONVERTED_TIF_PATH, p_strFile);
            }

            //// 변환대상 문서 다운로드 ////
            if (!File.Exists(strSourceFile))
            {
                return(RESULT.F_FILE_NOT_EXIST);
            }

            if (!DownloadDocFile(strSourceFile, strDestFile))
            {
                return(RESULT.F_FILE_FAIL_TO_DOWNLOAD);
            }

            //// 문서포멧 확인 ////
            bool   isImgFormat      = false;
            string strConvertedFile = "";

            if (PrintingHandler.Instance.IsImageFormat(strDestFile, Config.CONVERT_ABLE_IMG_FORMAT))
            {
                isImgFormat = true;
            }

            strConvertedFile = string.Format("{0}\\{1}.TIF", Config.TIFF_CONVERTING_PATH, p_strFile);

            //// 문서변환 ////
            LogMessage(string.Format("변환처리 ({0}) -> ({1})", strDestFile, strConvertedFile), RESULT.EMPTY);

            //// 이미지 포멧일 경우 자체 TIF Conversion ///
            if (isImgFormat)
            {
                if (!PrintingHandler.Instance.Converert(strDestFile, strConvertedFile))
                {
                    LogError(string.Format("TIFF파일을 변환하지 못하였습니다.{0}->{1}", strDestFile, strConvertedFile));
                    return(RESULT.F_CONV);
                }

                LogMessage(string.Format("TIFF파일 변환완료 ({0}) -> ({1})", strDestFile, strConvertedFile), RESULT.SUCCESS);

                if (!CopyFile(strConvertedFile, strFinishFile))
                {
                    return(RESULT.F_CONV);
                }

                LogMessage(string.Format("변환된 최종TIF 업로드 성공 ({0}) -> ({1})", strConvertedFile, strFinishFile), RESULT.SUCCESS);

                //// 변환이전 로컬 파일 삭제 ////
                if (!DeleteFile(strDestFile))
                {
                    LogWarring(string.Format("변환이전 로컬파일({0}) 삭제중 오류가 발생하였습니다.", strDestFile), RESULT.F_CONV);
                }

                //// 변환된 로컬파일 삭제 ////
                if (!DeleteFile(strConvertedFile))
                {
                    LogMessage(string.Format("변환된 로컬파일({0})을 삭제중 오류가 발생하였습니다.", strDestFile), RESULT.F_CONV);
                }

                // 임시파일 삭제
                if (Config.DELETE_INPUT_FILE_YN == "Y")
                {
                    File.Delete(strSourceFile);
                    LogMessage(string.Format("임시파일({0})을 제거하였습니다.", strSourceFile), RESULT.EMPTY);
                }

                //// 파일 업로드 성공인 경우, 함수 종료. ////
                return(RESULT.SUCCESS);
            }


            ////// 프리터드라이버체크 ////
            if (!PrintingHandler.Instance.ExistsPrintDriver(Config.EXEC_PRINT_DRIVER))
            {
                LogError(string.Format("프린터드라이버({0})가 존재하지 않습니다.", Config.EXEC_PRINT_DRIVER), RESULT.F_CONV);
                return(RESULT.F_CONV);
            }

            // 프리터드라이버 -> 기본프린터로 설정 ////
            PrintingHandler.Instance.SetPrinter(Config.EXEC_PRINT_DRIVER);

            //// DCV_CALLBACK.EXE 프로세스가 처리하기 위함. ////
            if (!File.Exists(Config.DCV_CALLBACK_INI_FILE))
            {
                LogError(string.Format("파일이 존재하지 않습니다.{0}", Config.DCV_CALLBACK_INI_FILE));
                return(RESULT.F_FILE_NOT_EXIST);
            }

            StringUtil.WritePrivateProfileStringEx(Config.DCV_CALLBACK_INI_FILE, "CONV_INFO", "DCV_OUTPUT", strConvertedFile);
            StringUtil.WritePrivateProfileStringEx(Config.DCV_CALLBACK_INI_FILE, "CONV_INFO", "STATE", "READY");

            if (!PrintingHandler.Instance.Print(strDestFile))
            {
                return(RESULT.F_CONV);
            }

            bool   find  = false;
            string state = "";
            int    nTurn = Config.CONVERTING_WAIT_TIME / 1000; // 1초마다 파일 존재여부 체크

            for (int i = 0; i < nTurn; i++)
            {
                Thread.Sleep(1000);
                state = StringUtil.GetPrivateProfileStringEx(Config.DCV_CALLBACK_INI_FILE, "CONV_INFO", "STATE");
                if (!state.Contains("COMPLETED"))
                {
                    continue;
                }

                if (!File.Exists(strConvertedFile))
                {
                    continue;
                }

                find = true;

                if (!CopyFile(strConvertedFile, strFinishFile))
                {
                    return(RESULT.F_CONV);
                }

                LogMessage(string.Format("변환된 최종TIF 업로드 성공 ({0}) -> ({1})", strConvertedFile, strFinishFile), RESULT.SUCCESS);

                //// 변환이전 로컬 파일 삭제 ////
                if (!DeleteFile(strDestFile))
                {
                    LogWarring(string.Format("변환이전 로컬파일({0}) 삭제중 오류가 발생하였습니다.", strDestFile), RESULT.F_CONV);
                }

                //// 변환된 로컬파일 삭제 ////
                if (!DeleteFile(strConvertedFile))
                {
                    LogMessage(string.Format("변환된 로컬파일({0})을 삭제중 오류가 발생하였습니다.", strDestFile), RESULT.F_CONV);
                }

                // 임시파일 삭제
                if (Config.DELETE_INPUT_FILE_YN == "Y")
                {
                    File.Delete(strSourceFile);
                    LogMessage(string.Format("임시파일({0})을 제거하였습니다.", strSourceFile), RESULT.EMPTY);
                }

                //// 파일 업로드 성공인 경우, 함수 종료. ////
                return(RESULT.SUCCESS);
            }

            if (find)
            {
                LogError(string.Format("변환되어진 TIF파일({0})이 대상 경로({1})로 이동되지 못했습니다.", strConvertedFile, strFinishFile), RESULT.F_FILE_FAIL_TO_UPLOAD);
            }

            LogError(string.Format("문서({0})가 TIF파일로 {1}초동안 변환되지 못하였습니다.", strDestFile, Config.CONVERTING_WAIT_TIME / 1000), RESULT.F_CONV_TIMEOUT);
            return(RESULT.F_CONV_TIMEOUT);
        }
Esempio n. 20
0
        RESULT ConvertDocs(DbModule.SEND_REQUEST_DCV p_dcvReqInfo, List <DbModule.DOC_INFO_ALL_DCV> p_lstDocInfos, P_TYPE p_destProcessType)
        {
            foreach (DbModule.DOC_INFO_ALL docInfo in p_lstDocInfos)
            {
                if (docInfo.strProcessingMode != ((int)DOC_PROCESSING_MODE.DCV).ToString())
                {
                    continue;
                }

                RESULT result = ConvertDoc(p_dcvReqInfo, p_destProcessType, p_dcvReqInfo.faxId, docInfo.strDocPath, docInfo.strDocFile, docInfo.strDocExt);
                if (result != RESULT.SUCCESS)
                {
                    if (!DbModule.Instance.ResultProcessingReq(docInfo.seq, false))
                    {
                        LogError("문서변환실패 상태를 DB에 반영하는 도중 오류가 발생하였습니다", RESULT.F_DB_ERROR);
                    }

                    return(result);
                }

                if (!DbModule.Instance.ResultProcessingReq(docInfo.seq, true))
                {
                    LogError("문서변환성공 상태를 DB에 반영하는 도중 오류가 발생하였습니다", RESULT.F_DB_ERROR);
                }
            }

            return(RESULT.SUCCESS);
        }
Esempio n. 21
0
        public RESULT FetchSendListToMake(P_TYPE p_processType, string p_strSystemProcessId, int p_occupyCnt, ref List <DbModule.SEND_REQUEST_TMK> p_lstTmkSendReqInfos)
        {
            RESULT ret = RESULT.EMPTY;
            string strProcedureName = "PKG_PRC_TMK.USP_OCCUPY_SEND_REQ";

            lock (m_connection)
            {
                if (!ReOpen())
                {
                    return(RESULT.F_DB_OPENERROR);
                }
                try
                {
                    using (OracleCommand command = new OracleCommand())
                    {
                        command.Connection  = m_connection;
                        command.CommandText = strProcedureName;
                        command.CommandType = CommandType.StoredProcedure;

                        command.Parameters.AddWithValue("P_PROCESS_TYPE", p_processType.ToString());
                        command.Parameters.AddWithValue("P_FETCH_PROCESS", p_strSystemProcessId);
                        command.Parameters.AddWithValue("P_OCCUPY_CNT", p_occupyCnt);

                        OracleParameter param = new OracleParameter("P_TABLE1", OracleType.Cursor);
                        param.Direction = ParameterDirection.Output;
                        command.Parameters.Add(param);

                        param           = new OracleParameter("P_TABLE2", OracleType.Cursor);
                        param.Direction = ParameterDirection.Output;
                        command.Parameters.Add(param);

                        command.ExecuteNonQuery();

                        DataTable        dtMstr = new DataTable("MSTR");
                        OracleDataReader reader = (OracleDataReader)command.Parameters["P_TABLE1"].Value;
                        dtMstr.Load(reader);
                        reader.Close();
                        reader.Dispose();

                        DataTable dtDtl = new DataTable("DETAIL");
                        reader = (OracleDataReader)command.Parameters["P_TABLE2"].Value;
                        dtDtl.Load(reader);
                        reader.Close();
                        reader.Dispose();

                        if (dtMstr.Rows.Count <= 0 || dtDtl.Rows.Count <= 0)
                        {
                            if (dtMstr != null)
                            {
                                dtMstr.Dispose();
                            }
                            if (dtDtl != null)
                            {
                                dtDtl.Dispose();
                            }
                            return(RESULT.EMPTY);
                        }

                        //// BTF_FAX_SEND_MSTR ////
                        foreach (DataRow mstrRow in dtMstr.Rows)
                        {
                            SEND_REQUEST_TMK tmkReqInfo = new SEND_REQUEST_TMK();
                            tmkReqInfo.faxId       = (decimal)mstrRow["FAX_ID"];
                            tmkReqInfo.strTrNo     = mstrRow["TR_NO"].ToString();
                            tmkReqInfo.strState    = mstrRow["STATE"].ToString();
                            tmkReqInfo.strReqType  = mstrRow["REQ_TYPE"].ToString();
                            tmkReqInfo.previewYN   = mstrRow["PREVIEW_REQ"].ToString();
                            tmkReqInfo.approvedReq = mstrRow["APPROVE_REQ"].ToString();

                            //// BTF_FAX_SEND_DTL ////
                            DataRow[] dtlRows = dtDtl.Select(String.Format("FAX_ID={0}", tmkReqInfo.faxId));
                            foreach (DataRow dtlRow in dtlRows)
                            {
                                SEND_REQUEST_DTL_TMK tmkDtlReqInfo = new SEND_REQUEST_DTL_TMK();
                                tmkDtlReqInfo.faxId               = (decimal)dtlRow["FAX_ID"];
                                tmkDtlReqInfo.faxDtlId            = (decimal)dtlRow["SEQ"];
                                tmkDtlReqInfo.strStateEach        = dtlRow["STATE_EACH"].ToString();
                                tmkDtlReqInfo.strFaxNo            = dtlRow["FAX_NO"].ToString();
                                tmkDtlReqInfo.strRecipientName    = dtlRow["RECIPIENT_NAME"].ToString();
                                tmkDtlReqInfo.strTiffPath         = dtlRow["TIF_FILE"].ToString();
                                tmkDtlReqInfo.strProcessFetchEach = dtlRow["PROCESS_FETCH_EACH"].ToString();

                                //dcvReq.m_lstSendRequestDetails.Add(dtlReq);
                                tmkReqInfo.m_lstTmkSendRequestDtlInfos.Add(tmkDtlReqInfo);
                            }

                            p_lstTmkSendReqInfos.Add(tmkReqInfo);
                        }

                        ret = RESULT.SUCCESS;
                    }
                }
                catch (Exception ex)
                {
                    ExceptionMsg(ex, "PROCEDURE : " + strProcedureName);
                    ret = RESULT.F_SYSTEM_ERROR;
                }

                Close();
                return(ret);
            }
        }
Esempio n. 22
0
        private RESULT ParseEmailDocument(POP3_Parsing p_parseMail,
                                          ref DbModule.SendRequestMasterInfo p_reqInfo_mstr,
                                          ref DbModule.SendRequestDetailInfo p_reqInfo_dtl,
                                          ref DbModule.SEND_REQ_SITE p_reqInfo_site,
                                          ref List <DbModule.SendRequestDocInfo> p_reqInfo_doc_List,
                                          ref P_TYPE p_destProcessType)
        {
            p_reqInfo_mstr     = new DbModule.SendRequestMasterInfo(m_ThreadName);
            p_reqInfo_dtl      = new DbModule.SendRequestDetailInfo();
            p_reqInfo_site     = new DbModule.SEND_REQ_SITE();
            p_reqInfo_doc_List = new List <DbModule.SendRequestDocInfo>();

            try
            {
                /// 첨부파일 Boundary 추출
                List <POP3_BoundaryInfo> attachFileList = GetAttachFileList(p_parseMail.BoundaryInfoList);

                if (attachFileList.Count == 0)
                {
                    return(RESULT.F_FILE_CNT_ZERO);
                }

                /// 메일 제목 분석
                if (ParseEmailTitle(p_parseMail.Subject, ref p_reqInfo_mstr, ref p_reqInfo_dtl) == false)
                {
                    AppLog.Write(LOG_LEVEL.ERR, string.Format("Email 제목이 형식에 맞지 않습니다. ({0} / {1})", Config.EMAIL_TITLE_FORMAT, p_parseMail.Subject));
                    //continue;
                    return(RESULT.F_PARSE_ERROR);
                }

                /// REQ_TYPE, Dest Process Type 결정
                SetReqType(attachFileList, ref p_reqInfo_mstr, ref p_reqInfo_dtl, ref p_destProcessType);

                /// PSC 는 tif 1개로 DCV, TPC 필요없음.
                if (p_destProcessType == P_TYPE.PSC)
                {
                    POP3_BoundaryInfo bi = attachFileList[0];

                    /// Email AttachFile -> Local File
                    string filePath = p_parseMail.ConvertBase64ToFile(m_DownloadEmailAttachFileLocalPath, bi);
                    if (filePath.Length == 0)
                    {
                        return(RESULT.F_FILE_NOT_EXIST);
                    }

                    /// File name is must unique. (File Rename)
                    FileInfo fi = new FileInfo(filePath);
                    do
                    {
                        fi.MoveTo(string.Format(@"{0}\{1}_{2}.{3}", fi.Directory, bi.RepresentationFilenameOnly, DateTime.Now.ToString("yyyyMMddHHmmss.fffffff"), bi.RepresentationFilenameExtension));
                        //} while (File.Exists(Path.Combine(m_AoxInputDocPath, fi.Name)));
                    } while (File.Exists(Path.Combine(Config.FINISHED_TIF_PATH, m_RelativePath, fi.Name)));
                    /// Local -> Destination
                    //fi.MoveTo(Path.Combine(m_AoxInputDocPath, fi.Name));
                    fi.MoveTo(Path.Combine(Config.FINISHED_TIF_PATH, m_RelativePath, fi.Name));

                    //p_reqInfo_dtl.TIF_FILE = Path.Combine(m_RelativePath, attachFileList[0].RepresentationFilename);
                    p_reqInfo_dtl.TIF_FILE = Path.Combine(m_RelativePath, fi.Name);
                }
                else
                {
                    /// 첨부파일 AOX_INPUT_DOC_PATH 로 이동
                    foreach (POP3_BoundaryInfo bi in attachFileList)
                    {
                        /// Email AttachFile -> Local File
                        string filePath = p_parseMail.ConvertBase64ToFile(m_DownloadEmailAttachFileLocalPath, bi);
                        if (filePath.Length == 0)
                        {
                            continue;
                        }

                        /// File name is must unique.
                        FileInfo fi = new FileInfo(filePath);
                        do
                        {
                            fi.MoveTo(string.Format(@"{0}\{1}_{2}.{3}", fi.Directory, bi.RepresentationFilenameOnly, DateTime.Now.ToString("yyyyMMddHHmmss.fffffff"), bi.RepresentationFilenameExtension));
                        } while (File.Exists(Path.Combine(m_AoxInputDocPath, fi.Name)));
                        /// Local -> Destination
                        fi.MoveTo(Path.Combine(m_AoxInputDocPath, fi.Name));

                        /// DOC info
                        DbModule.SendRequestDocInfo doc = new DbModule.SendRequestDocInfo();
                        doc.DOC_PATH   = Config.AOX_INPUT_DOCS_PATH;
                        doc.strDocFile = fi.Name.Substring(0, fi.Name.LastIndexOf("."));
                        doc.strDocExt  = fi.Name.Substring(fi.Name.LastIndexOf(".") + 1);

                        p_reqInfo_doc_List.Add(doc);
                    }
                }

                AppLog.Write(LOG_LEVEL.MSG, string.Format("[ Subject: {0} ] 메일을 분석 완료하였습니다.", p_parseMail.Subject));
                return(RESULT.SUCCESS);
            }
            catch (Exception ex)
            {
                AppLog.ExceptionLog(ex, "");

                return(RESULT.F_PARSE_ERROR);
            }
        }