#region Copyright © 2015 CLIPSOFT Co.,Ltd. All Rights Reserved. // // All rights are reserved. Reproduction or transmission in whole or in part, // in any form or by any means, electronic, mechanical or otherwise, is // prohibited without the prior written consent of the copyright owner. // // Filename:Common.cs // #endregion using System; using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Text; namespace CLIP.eForm.Consent.UI { /// /// Global Parameter를 생성하기 위한 클래스 /// /// ///

[설계자]

///

클립소프트 연구소 홍지철 (jchong@clipsoft.co.kr)

///

[원본 작성자]

///

클립소프트 연구소 홍지철 (jchong@clipsoft.co.kr)

///

[수정 작성자]

///

클립소프트 기술부 이인희

///

----------------------------------------------------------------------------------------

///

[HISTORY]

///

2015-08-06 : 최초작성

///

----------------------------------------------------------------------------------------

///
public class Common { public static Dictionary CreateGlobalParamsDictionary(string instcd) { Dictionary dic = new Dictionary(); foreach (string s in Enum.GetNames(typeof(FOSParameter))) { dic.Add((FOSParameter) Enum.Parse(typeof(FOSParameter), s), string.Empty); } // 전자동의서 팝업창에서 연결 할 주소 파라미터를 매핑 // TODO 교육/운영 구분 필요 //dic[FOSParameter.LIST_POPUP_URL] = instcd == "DEV101" ? "https://192.168.200.93/" : "https://eform.dcmc.co.kr/"; return dic; } /// /// Dictionary 에서 FOS 형식으로 인코딩 /// V2 버전, 다중 서식 목록 지원 /// /// 변환할 Disctionary /// 변환된 FOS string public static String createParameters(Dictionary parameterMap) { StringBuilder sb = new StringBuilder(); if(parameterMap == null) { return ""; } foreach (FOSParameter paramKey in parameterMap.Keys) { sb.AppendFormat("", GetFOSName(paramKey, "DCUMC"), parameterMap[paramKey]); } return sb.ToString(); } private static string macFormat(String str) { string mac = String.Empty; char[] charArr = str.ToCharArray(); for(int i = 0; i < charArr.Length; i++) { if(i % 2 == 0) { mac += charArr[i].ToString(); } else { mac += charArr[i].ToString(); if(i != charArr.Length - 1) { mac += '-'; } } } return mac; } public static string getMacAddress() { System.Net.NetworkInformation.NetworkInterface[] nics = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces(); String macAddr = String.Empty; foreach(System.Net.NetworkInformation.NetworkInterface adapter in nics) { if(macAddr == String.Empty) { macAddr = adapter.GetPhysicalAddress().ToString(); } } return macFormat(macAddr); } public static byte[] Zip(string str) { var bytes = System.Text.Encoding.UTF8.GetBytes(str); using (var msi = new System.IO.MemoryStream(bytes)) using (var mso = new System.IO.MemoryStream()) { using (var gs = new System.IO.Compression.GZipStream(mso, System.IO.Compression.CompressionMode.Compress)) { CopyTo(msi, gs); } return mso.ToArray(); } } public static string Unzip(byte[] bytes) { using (var msi = new System.IO.MemoryStream(bytes)) using (var mso = new System.IO.MemoryStream()) { using (var gs = new System.IO.Compression.GZipStream(msi, System.IO.Compression.CompressionMode.Decompress)) { CopyTo(gs, mso); } return System.Text.Encoding.UTF8.GetString(mso.ToArray()); } } public static void CopyTo(System.IO.Stream src, System.IO.Stream dest) { byte[] bytes = new byte[4096]; int cnt; while ((cnt = src.Read(bytes, 0, bytes.Length)) != 0) { dest.Write(bytes, 0, cnt); } } public static String getNewEptFosString(String formServiceUrl, string baseConsentSvcURL, Dictionary globalParams, List formIds, List consentMstRids) { StringBuilder sb = new StringBuilder(); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(string.Format("", formServiceUrl)); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); // 서식 open 시퀀스 var seq = 1; var i = 0; var path = baseConsentSvcURL + "FormSvc.aspx/"; foreach (string formId in formIds) { // 서식을 불러오기 위한 서식 정보 목록 요소 sb.Append(string.Format("
", "noname", seq++, path)); sb.Append(""); sb.Append(createParameters(globalParams)); sb.Append(""); sb.Append(""); sb.Append(""); // 서식을 불러오기 위한 서비스 파리미터 sb.Append(String.Format("", consentMstRids[i++].ToString())); sb.Append(""); sb.Append(""); sb.Append("
"); } sb.Append("
"); sb.Append("
"); return sb.ToString(); } /// /// V2 버전 FOS string 반환 /// /// 전자동의서 서버 URL /// 글로벌 파라미터 목록 /// 리스트 파라미터 목록 /// 생성된 fos string public static String getNewFosString(String formServiceUrl, Dictionary globalParams, Dictionary fosFormParams, ListformIds) { StringBuilder sb = new StringBuilder(); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(string.Format("", formServiceUrl)); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(createParameters(globalParams)); sb.Append(""); sb.Append(""); sb.Append(""); // 서식 open 시퀀스 var seq = 1; foreach(string formId in formIds) { // 서식을 불러오기 위한 서식 정보 목록 요소 sb.Append(string.Format("
", "noname", seq++, formServiceUrl)); // 서식을 불러오기 위한 서비스 파리미터 상위 요소(서비스 호출시 사용) sb.Append(""); sb.Append(""); sb.Append(""); // 서식에 사용되는 파라미터 목록 요소 sb.Append(""); sb.Append(createParameters(globalParams)); sb.Append(""); // 서식에 필요한 첨부 파일 목록 요소 //sb.Append(""); // //음성 녹음 파일 목록 요소 // // 음성 녹음 파일 // // // 펜 정보를 불러올 수 있는 정보 목록 요소 // // 본문(기존 디자인 되어있는 여역)의 펜 정보를 불러올 수 있는 URL 정보를 가지고 있는 요소 // // 본문(기존 디자인 되어있는 영역)의 펜 정보를 조회하기 위한 파라미터 묶음 // // 본문(기존 디자인 되어있는 영역)의 펜 정보를 조회하기 위한 파라미터 // // // 서식에 추가할 페이지 템플릿 리스트 // // 서식에 추가할 페이지 템플릿 정보 // // 페이지 템플릿 추가 시 사용되는 파라미터 묶음 // // 페이지 템플릿 추가 시 사용되는 파라미터 //sb.Append(""); // 서식에서 불로올 데이터 정보 //sb.Append(""); //sb.Append(""); // 서식에 반영되는 페이지 템플릿 목록을 조회하기 위한 상위 요소 //sb.Append(""); // //서식에 반영되는 페이지 템플릿 목록을 조회하기 위한 파라미터 묶음 // // 서식에 반영되는 페이지 템플릿 목록을 조회하기 위한 파라미터 //sb.Append(""); sb.Append("
"); } sb.Append("
"); sb.Append("
"); return sb.ToString(); } public class FormObject { public string formId { get; set; } public string consentMstRid { get; set; } public string formNm { get; set; } } public static string GetFosString(List forms, string formServiceUrl, Dictionary fosGlobalParams, Dictionary> fosFormParams, string pInstCd) { StringBuilder fos = new StringBuilder(); fos.Append(""); fos.Append(""); fos.Append(""); fos.Append(GetParamsString(fosGlobalParams, pInstCd)); fos.Append(string.Format("", formServiceUrl)); fos.Append(""); fos.Append("post-param key==\"parameter\">"); //fos.Append(""); //fos.Append(""); //fos.Append("GET_LIST"); //fos.Append(""); //fos.Append("defaultadapter"); //fos.Append(""); //fos.Append("]]>"); fos.Append(""); fos.Append(""); fos.Append(""); fos.Append(""); int seq = 1; foreach (FormObject form in forms) { bool isNew = (form.formId == null) ? true : false; var path = ""; if (isNew) { path += formServiceUrl + "FormSvc.aspx\""; } else { path += formServiceUrl; } } fos.Append(""); fos.Append(""); fos.Append(""); fos.Append(""); fos.Append(""); fos.Append(""); fos.Append(""); fos.Append(""); fos.Append(" "); return fos.ToString(); } /// /// preview 할 fos 를 생성한 다 /// /// 생성할 서식 코드 목록 /// 서식 서비스 URL /// /// /// /// public static string GetFosString(List formdCds, string formServiceUrl, Dictionary fosGlobalParams, Dictionary> fosFormParams, string pInstCd) { StringBuilder fos = new StringBuilder(); fos.Append(""); fos.Append(""); fos.Append(""); fos.Append(GetParamsString(fosGlobalParams, pInstCd)); fos.Append(string.Format("", formServiceUrl)); fos.Append(""); fos.Append("post-param key==\"parameter\">"); //fos.Append(""); //fos.Append(""); //fos.Append("GET_LIST"); //fos.Append(""); //fos.Append("defaultadapter"); //fos.Append(""); //fos.Append("]]>"); fos.Append(""); fos.Append(""); fos.Append(""); fos.Append(""); foreach(string formcd in formdCds) { } fos.Append(""); fos.Append(""); fos.Append(""); fos.Append(""); fos.Append(""); fos.Append(""); fos.Append(""); fos.Append(""); fos.Append(" "); return fos.ToString(); } /// /// param, guid값을 넘겨받아 그를 포함하는 fos를 리턴한다. /// /// /// /// public static string GetMultiFosString(string[] guids, string formServiceUrl, Dictionary fosGlobalParams, Dictionary> fosFormParams, string pInstCd) { StringBuilder fos = new StringBuilder(); fos.Append(""); fos.Append(""); fos.Append(""); fos.Append(""); if (fosGlobalParams != null) { fos.Append(GetParamsString(fosGlobalParams, pInstCd)); } fos.Append(""); fos.Append(string.Format("", formServiceUrl)); fos.Append(""); fos.Append(""); fos.Append(""); fos.Append("GET_LIST"); fos.Append(""); fos.Append("defaultadapter"); fos.Append(""); fos.Append("]]>"); fos.Append(""); fos.Append(""); fos.Append(""); fos.Append(""); int openSeq = 1; foreach (string guid in guids) { fos.Append(string.Format("
", openSeq, formServiceUrl)); fos.Append(""); if (fosFormParams != null) { if (fosFormParams.ContainsKey(openSeq.ToString())) { Dictionary fosFormParamsByGuid = fosFormParams[openSeq.ToString()]; foreach (FOSParameter paramKey in fosFormParamsByGuid.Keys) { fos.Append(string.Format("", GetFOSName(paramKey, pInstCd), fosFormParamsByGuid[paramKey])); } } } fos.Append(""); fos.Append(""); fos.Append(""); fos.Append(""); fos.Append("GET"); fos.Append(""); fos.Append("defaultadapter"); fos.Append("guid"); fos.Append(string.Format("{0}", guid)); fos.Append("-1"); fos.Append(""); fos.Append("]]>"); fos.Append(""); fos.Append("
"); openSeq++; } fos.Append("
"); fos.Append("
"); return fos.ToString(); } /// /// param, guid값을 넘겨받아 그를 포함하는 fos를 리턴한다. /// /// /// /// public static string GetFosStringForEpt(Dictionary actionParams, string formServiceUrl, Dictionary fosGlobalParams, string pInstCd) { StringBuilder fos = new StringBuilder(); fos.Append(""); fos.Append(""); fos.Append(""); fos.Append(GetParamsString(fosGlobalParams, pInstCd)); fos.Append(string.Format("", formServiceUrl)); fos.Append(""); fos.Append(""); fos.Append(""); fos.Append("GET_LIST"); fos.Append(""); fos.Append("defaultadapter"); fos.Append(""); fos.Append("]]>"); fos.Append(""); fos.Append(""); fos.Append(""); fos.Append(""); fos.Append(string.Format("
", formServiceUrl)); fos.Append(""); fos.Append(""); fos.Append(""); fos.Append(""); fos.Append("GET_DATA"); fos.Append(""); fos.Append("defaultadapter"); foreach (string paramKey in actionParams.Keys) { fos.Append(string.Format("{1}", paramKey, actionParams[paramKey])); } fos.Append(""); fos.Append("]]>"); fos.Append(""); fos.Append(""); fos.Append("
"); fos.Append("
"); return fos.ToString(); } public static string GetAllFOSParamString(string pInstCd) { Dictionary dic = new Dictionary(); StringBuilder _sb = new StringBuilder(); foreach (string s in Enum.GetNames(typeof(FOSParameter))) { _sb.AppendFormat("{0}:{1}{2}", GetFOSName((FOSParameter) Enum.Parse(typeof(FOSParameter), s), "org") , GetFOSName((FOSParameter) Enum.Parse(typeof(FOSParameter), s), pInstCd) , ";"); } return _sb.ToString(); } private static string GetParamsString(Dictionary fosParams, string pInstCd) { StringBuilder parametersOfFos = new StringBuilder(); parametersOfFos.Append(""); foreach (FOSParameter paramKey in fosParams.Keys) { parametersOfFos.AppendFormat("", GetFOSName(paramKey, pInstCd), fosParams[paramKey]); } parametersOfFos.Append(""); return parametersOfFos.ToString(); } private static string GetFOSName(FOSParameter pName, string pInstCd) { string _name = ""; switch (pInstCd) { default: _name = m_FOSParamArr_org[Array.IndexOf(Enum.GetValues(pName.GetType()), pName)]; break; } return _name; } private static string[] m_FOSParamArr_org = { "par_userDeptCd" , "par_userId" , "par_userNm" , "par_userSignData" , "par_userMpNo" , "par_userIp" , "par_patientCretno" , "par_patientId" , "par_patientOrdtype" , "par_patientNm" , "par_patientSexAge" , "par_patientRrn" , "par_patientClnDeptCd" , "par_patientClnDeptNm" , "par_patientClnDt" , "par_patientBirthday" , "par_patientTelNo" , "par_patientMpNo" , "par_patientAddress" , "par_patientWardNo" , "par_patientRoomNo" , "par_explDrNm" , "par_explDrSignData" , "par_explMpNo" , "par_explAnstDrNm" , "par_explAnstDrSignData" , "par_explAnstDrMpNo" , "par_diagHngnm" , "par_opNm" // 수술 명 , "par_opremFact" // 진단 명 , "par_opRsrvNo" // 수술 예약 번호 , "par_opCnFmDd" // 수술 시행 예정일 , "par_mainDr1Nm" , "par_prefDr1Dept" , "par_geDr1Dept" , "par_anstDr1Nm" , "par_anstDr1PrefDrDept" , "par_anstDr1GeDrDept" , "par_isPrintMode" // Y, N , "par_formNm" , "par_popupUrl" , "par_barcode" , "par_ocrCd" }; } public enum FOSParameter { /// GLOBAL PARAMETERS /// 사용자 정보 GLOBAL_USER_DEPTCD , GLOBAL_USER_ID , GLOBAL_USER_NM , GLOBAL_USER_SIGNDATA , GLOBAL_USER_MPPHONENO , GLOBAL_USER_IP /// 환자 정보 , GLOBAL_PATIENT_CRETNO , GLOBAL_PATIENT_ID , GLOBAL_PATIENT_ORDTYPE , GLOBAL_PATIENT_NM , GLOBAL_PATIENT_SEXAGE , GLOBAL_PATIENT_RRN // 주민번호 , GLOBAL_PATIENT_CLN_DEPT_CD // 진료부서 , GLOBAL_PATIENT_CLN_DEPT_NM , GLOBAL_PATIENT_CLN_DATE // 진료일자 , GLOBAL_PATIENT_BIRTHDAY , GLOBAL_PATIENT_TEL_NO , GLOBAL_PATIENT_MPPHONENO , GLOBAL_PATIENT_ADDRESS , GLOBAL_PATIENT_WARD_NO , GLOBAL_PATIENT_ROOM_NO /// 설명의사, 마취의, 간호사 , GLOBAL_EXPL_DR_NM , GLOBAL_EXPL_DR_SIGN_DATA , GLOBAL_EXPL_DR_MPPHONENO , GLOBAL_EXPL_ANST_DR_NM , GLOBAL_EXPL_ANST_DR_SIGN_DATA , GLOBAL_EXPL_ANST_DR_MPPHONENO /// 진단정보 , GLOBAL_DIAG_HNGNM // 진단 한글명 , GLOBAL_OPNM // 수술명 , GLOBAL_OPREMFACT // 진단명 , GLOBAL_OP_RSRV_NO , GLOBAL_OPCNFMDD // 수술 시행 예정일 , GLOBAL_MAIN_DR1_NM , GLOBAL_PREF_DR1_DEPT , GLOBAL_GE_DR1_DEPT , GLOBAL_ANST_DR1_NM , GLOBAL_ANST_DR1_PREF_DEPT , GLOBAL_ANST_DR1_GE_DEPT , GLOBAL_IS_PRINT_MODE /// 서식 기본 정보, FORM_LIST PARAMETERS , LIST_FORM_NM , LIST_POPUP_URL , LIST_BARCODE , LIST_OCRCODE } public enum EXEC_PARAMS { EXEC_INSTCD , EXEC_USERID , EXEC_USERNAME , EXEC_USERDEPTCD , EXEC_USERDEPTNM , EXEC_USERIOFLAG , EXEC_LOGIN_USERID , EXEC_LOGIN_USERNAME , EXEC_PATIENTID , EXEC_PATIENTORDTYPE , EXEC_PATIENTCLNDEPT , EXEC_PATIENTCLNDATE , EXEC_PATIENTCLNDXNM , EXEC_CRETNO , EXEC_OPRSRVNO , EXEC_ENABLE_PATIENTLIST , EXEC_ENABLE_CONSENTLIST , EXEC_TARGETSERVICE , EXEC_FORMCD , EXEC_OCRCD , EXEC_PRINTYN , EXEC_PRINTCOUNT , EXEC_PRINTIP , EXEC_PRINTCNT , EXEC_SPECDOCYN , EXEC_ROOMCAPA , EXEC_CONT_STARTDATE , EXEC_CONT_ENDDATE , EXEC_CONT_TELNO , EXEC_CONT_STAFF1_NM , EXEC_CONT_STAFF2_NM , EXEC_CONT_STAFF3_NM , EXEC_CARDNO } }