1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- using System.Threading;
- using System.Collections;
- namespace IControls_FireManager
- {
- public partial class Form_PointConfig : Form
- {
- // 대화 팝업용
- Form DialogPopup = new Form();
- // 크로스 스레드 해결
- delegate void Cross_Thread();
- // 수신기 ID를 저장하기 위해서
- string ReceiverID = null;
- // 엑셀 임포팅 타입
- string Type = null;
- // UI 갱신 타이머
- bool ui_renew = false;
- public Form_PointConfig(_RECEIVER RECEIVER, string Info)
- {
- InitializeComponent();
- ///
- /// 폼이 생성되는 위치
- ///
- this.StartPosition = FormStartPosition.Manual;
- this.Location = new System.Drawing.Point(MousePosition.X, MousePosition.Y);
- // 수신기 ID 저장
- ReceiverID = RECEIVER.ID;
- // 엑셀 임포팅 타입
- Type = Info;
- // 폼 텍스트 쿄체
- this.Text = Info + " 정보 불러오기";
- ///
- /// 이벤트
- ///
- // 폼닫기 이벤트를 등록 (이벤트 핸들러 해제용)
- this.FormClosing += new FormClosingEventHandler(CreateForm_FormClosing);
- }
- // 폼닫기 이벤트를 등록 (이벤트 핸들러 해제용)
- public void CreateForm_FormClosing(object sender, FormClosingEventArgs e)
- {
- }
- // 엑셀파일 경로 지정
- private void uiButton_ProjectPath_Click(object sender, EventArgs e)
- {
- OpenFileDialog openFileDialog = new OpenFileDialog();
- // 엑셀파일 연동시에 다이얼로그창은 프로젝트 경로에 따라서 Field 폴더에 곧바로 접근할 수있도록 함
- openFileDialog.InitialDirectory = _Data.Project_Path + "\\" + _Data.Project_Name;
- // 필터 처리 안함 (사용자가 xml
- //openFileDialog.Filter = "(*.xls)|*.xls|(*.xlsx)|*.xlsx";
- openFileDialog.Filter = "(*.xls*)|*.xls*";
- if (openFileDialog.ShowDialog() == DialogResult.OK)
- {
- if (_Excel.OpenTest(openFileDialog.FileName) == true)
- {
- this.editBox_ProjectPath.Text = openFileDialog.FileName;
- }
- else
- this.editBox_ProjectPath.Text = null;
- }
- }
- // UiProgressBar 크로스 스레드 해결
- private void Delegate_UiProgressBar()
- {
- if (this.InvokeRequired)
- {
- Cross_Thread d = new Cross_Thread(Delegate_UiProgressBar);
- this.Invoke(d, new object[] { });
- }
- else
- {
- UiProgressBar_ExcelImport.Value++;
- }
- }
- // UiButton 크로스 스레드 해결
- private void Delegate_UiButton_good()
- {
- if (this.InvokeRequired)
- {
- Cross_Thread d = new Cross_Thread(Delegate_UiButton_good);
- this.Invoke(d, new object[] { });
- }
- else
- {
- label1.Text = "※ 완료되었습니다.";
- UiButton_Apply.Enabled = true;
- UiButton_Close.Enabled = true;
- }
- }
- private void Delegate_UiButton_bad()
- {
- if (this.InvokeRequired)
- {
- Cross_Thread d = new Cross_Thread(Delegate_UiButton_bad);
- this.Invoke(d, new object[] { });
- }
- else
- {
- label1.Text = "※ 실패하였습니다.";
- UiButton_Apply.Enabled = true;
- UiButton_Close.Enabled = true;
- }
- }
- // 닫기 버튼
- private void UiButton_Close_Click(object sender, EventArgs e)
- {
- // 폼을 닫음
- this.Close();
- }
- // 저장 버튼
- private void UiButton_Apply_Click(object sender, EventArgs e)
- {
- // 파일을 아무것도 선택하지 않았을 경우
- if (editBox_ProjectPath.Text.Length == 0)
- {
- // 파일을 선택해 주세요
- _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 250, 150, _Text.NotFileChoice, 0);
- return;
- }
- // 엑셀 Import 중에는 엑셀 파일을 열수가 없는지 구분가능하도록 옵션조절
- if (_Data.Project_ExcelOpenCheck == "1")
- {
- // 엑셀 Import 중에는 엑셀 파일을 열수가 없다
- if (_Diagnostics.Process_Excute("EXCEL") == true || _Diagnostics.Process_Excute("excel") == true)
- {
- // 파일을 선택해 주세요
- _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 450, 150, _Text.ExcelProcessNotuse, 0);
- return;
- }
- }
- // 버튼 연속으로 입력은 안됨
- if (_Data.Enable_Button == false)
- return;
- else
- _Data.Enable_Button = false;
- // 파일 읽기가 성공한다면 곧바로 _Excel.Import_Point 작업을 수행하는데
- // 지정된 경로에 있는 엑셀파일을 읽은후 5가지 작업을 함
- // 1. 코드값 저장
- // -> _Data.HASH_CodePosition 및 _Data.LIST_CodePosition_NAME 에 저장
- // 2. 포인트 정보 저장
- // -> _Data.List_ExcelPoint 에 저장
- // 3. 포인트 위치 정보에 따라 실제로 사용한는 위치 코드값을 재정리
- // -> _Data.HASH_CodePosition 및 _Data.LIST_CodePosition_NAME 수정
- // ##수정 - 여기서 Import 하지 않음
- // 4. 그룹 정보 저장
- // -> _Data.List_ExcelGroup 에 저장
- // 5. 맵연동 정보 저장
- // -> _Data.List_ExcelMap 에 저장
- // 포인트(디바이스) 정보 임포팅
- if (Type == _Text.UI_TREE_POINT)
- {
- if (_Excel.Import_Point(this.editBox_ProjectPath.Text) == true)
- {
- // 엑셀 Import 실제 진행
- // 저장되어 있는 디바이스 정보는 모두 삭제됩니다. 계속 진행하시겠습니까?
- DialogPopup = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 500, 150, _Text.DeviceInfoDelete_Continue, 0);
- // 대화 팝업은 특별처리
- _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_PopupClose_SendMessage_Event);
- }
- else
- _Data.Enable_Button = true;
- }
- else if (Type == _Text.UI_TREE_OPER_GROUP) // 그룹 정보 임포팅
- {
- if (_Excel.Import_Group(this.editBox_ProjectPath.Text) == true)
- {
- // 엑셀 Import 실제 진행
- // 저장되어 있는 그룹 정보는 모두 삭제됩니다. 계속 진행하시겠습니까?
- DialogPopup = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 500, 150, _Text.GroupInfoDelete_Continue, 0);
- // 대화 팝업은 특별처리
- _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_PopupClose_SendMessage_Event);
- }
- else
- _Data.Enable_Button = true;
- }
- else // 연동설정 정보 임포팅
- {
- if (_Excel.Import_Map(this.editBox_ProjectPath.Text, ReceiverID) == true)
- {
- // 엑셀 Import 실제 진행
- // 저장되어 있는 연동설정 정보는 모두 삭제됩니다. 계속 진행하시겠습니까?
- DialogPopup = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 500, 150, _Text.MapInfoDelete_Continue, 0);
- // 대화 팝업은 특별처리
- _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_PopupClose_SendMessage_Event);
- }
- else
- _Data.Enable_Button = true;
- }
- }
- // 스레드
- public void Excel_Import()
- {
- // 포인트(디바이스) 정보 임포팅
- if (Type == _Text.UI_TREE_POINT)
- {
- //
- // TB_POSITION_CODE 처리 (삽입)
- //
- // 이미 _Excel.Import_Point 루틴에서 먼저 실제 사용하는 것만 리스트로 구성하도록 만들었다
- // 1개만 존재하는 경우 무조건 삭제한다, 결국 데이타 삽입도 조건 없이 삽입이다
- if (_Data.LIST_XMLRECEIVER_ID.Count == 1)
- {
- // TB_POSITION_CODE 테이블에 데이터 삽입
- foreach (string CodePosition_NAME in _Data.LIST_CodePosition_NAME)
- {
- _Db.ADD("TB_POSITION_CODE",
- "POSITION_NAME=" + CodePosition_NAME +
- ";UPDATE_TIME=" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") +
- ";POSITION_CODE=" + ((_Code_Position)_Data.HASH_CodePosition[CodePosition_NAME]).Code_Position_ID);
- }
- }
- // 수신기가 2개이상이라면 기존에 데이타가 있는지 검색하고 삽입해야한다
- else
- {
- // TB_POSITION_CODE 테이블에 데이터 삽입
- foreach (string CodePosition_NAME in _Data.LIST_CodePosition_NAME)
- {
- string TEMP_Code_Position_ID = ((_Code_Position)_Data.HASH_CodePosition[CodePosition_NAME]).Code_Position_ID;
- DataRowCollection DB_TABLE_TB_POSITION_CODE = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_Table_Value("TB_POSITION_CODE", "POSITION_CODE", TEMP_Code_Position_ID, null));
- // cyim 2016.07.12 : TB_POSITION_CODE 테이블 삭제하고 다시 생성하는 코드 원복, 확인결과 하나하나 중계기 입출력 포인트 별 개별적으로 위치코드가 추가된다
- // 기존의 데이타가 있다면 중복될 우려가 있으므로 삭제 해야한다
- if (DB_TABLE_TB_POSITION_CODE != null || DB_TABLE_TB_POSITION_CODE.Count != 0)
- {
- // 있다면 삭제하고
- _Db.Execute(_Sql.Delete_Table("TB_POSITION_CODE", "POSITION_CODE", TEMP_Code_Position_ID, null));
- // 삽입
- _Db.ADD("TB_POSITION_CODE",
- "POSITION_NAME=" + CodePosition_NAME +
- ";UPDATE_TIME=" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") +
- ";POSITION_CODE=" + TEMP_Code_Position_ID);
- }
- else
- {
- // 삽입
- _Db.ADD("TB_POSITION_CODE",
- "POSITION_NAME=" + CodePosition_NAME +
- ";UPDATE_TIME=" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") +
- ";POSITION_CODE=" + TEMP_Code_Position_ID);
- }
- }
- }
- // TB_EVENT_TYPE 테이블에 데이터 삽입
- foreach (_Code_Event_Type Code_Event_Type in _Data.LIST_CodeEventType)
- {
- _Db.ADD("TB_EVENT_TYPE",
- "EVENT_TYPE=" + Code_Event_Type.EVENT_TYPE +
- ";EVENT_TYPE_NAME=" + Code_Event_Type.EVENT_TYPE_NAME +
- ";UPDATE_USER_ID=" + "FireManager" +
- ";UPDATE_TIME=" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
- }
- // TB_DEVICE_TYPE 테이블에 데이터 삽입
- foreach (_Code_Device_Type Table_Device_Type in _Data.LIST_CodeDeviceType)
- {
- _Db.ADD("TB_DEVICE_TYPE",
- "DEVICE_TYPE=" + Table_Device_Type.DEVICE_TYPE +
- ";DEVICE_TYPE_NAME=" + Table_Device_Type.DEVICE_TYPE_NAME +
- ";SYMBOL_TYPE=" + Table_Device_Type.SYMBOL_TYPE +
- ";SEQ_NO=" + Table_Device_Type.SEQ_NO +
- ";USE_FLAG=" + Table_Device_Type.USE_FLAG +
- ";UPDATE_USER_ID=" + "FireManager" +
- ";UPDATE_TIME=" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
- }
- // TB_POSITION_CODE 테이블에 전체데이터를 삽입하고 Value값 1증가
- if (UiProgressBar_ExcelImport.Value <= UiProgressBar_ExcelImport.Maximum)
- Delegate_UiProgressBar(); //크로스 스레드 해결
- // 2015.6.16
- // 아래부터 아날로그 감지기를 위한 루틴이 추가되었다
- // 아날로그 감지기를 위한 테이블은 총 4개이다.
- // TB_REPEATER, TB_DEVICE, TB_DAYTIME, TB_ANALOG_DEVICE_2
- // 아날로그 감지기 화재 (FireDay 모드) 시간이 있는 경우에만
- if (_Data.LIST_CodeFireDayTime.Count != 0)
- {
- _Db.ADD("TB_DAYTIME",
- "START_HOUR=" + _Data.LIST_CodeFireDayTime[0].ToString() +
- ";START_MIN=" + _Data.LIST_CodeFireDayTime[1].ToString() +
- ";END_HOUR=" + _Data.LIST_CodeFireDayTime[2].ToString() +
- ";END_MIN=" + _Data.LIST_CodeFireDayTime[3].ToString());
- }
- // cyim 2017.01.19 반드시 통신보드 1번에 0번루프 중계기126번 127번 중계기가 있어야한다
- // cyim 2017.01.23 반드시 통신보드 1번에 0번루프 중계기124번 125번 중계기가 있어야한다
- int RePeater_Special = 0;
- int RePeater_Special_Point = 0;
- // 3개 테이블 동시 삽입
- // TB_REPEATER 테이블에 데이터 삽입
- // TB_DEVICE 테이블에 데이터 삽입
- // TB_EMERGENCY_BROADCASTION 테이블에 데이터 삽입
- foreach (_Excel_Sheet Excel_Sheet in _Data.List_ExcelPoint)
- {
- foreach (_Excel_Repeater Excel_Repeater in Excel_Sheet.List_Repeater)
- {
- // 중계기 타입을 확인하여 코드 생성
- // 중계기 타입은 아래와 같다
- // '1' = A : 2X2
- // '2' = B : 4X4
- // '4' = C : 아날로그연감지기
- // '5' = D : 아날로그열감지기
- string RepeaterType = null;
- if (Excel_Repeater.TYPE.ToString() == POINT_TYPE.REPEATER_2_2.ToString())
- RepeaterType = "1";
- else if (Excel_Repeater.TYPE.ToString() == POINT_TYPE.REPEATER_4_4.ToString())
- RepeaterType = "2";
- else if (Excel_Repeater.TYPE.ToString() == POINT_TYPE.ANALOG_SMOKE.ToString())
- RepeaterType = "4";
- else if (Excel_Repeater.TYPE.ToString() == POINT_TYPE.ANALOG_HEAT.ToString())
- RepeaterType = "5";
- // cyim 2017.01.19 반드시 통신보드 1번에 0번루프 중계기126번 127번 중계기가 있어야한다
- // cyim 2017.01.23 반드시 통신보드 1번에 0번루프 중계기124번 125번 중계기가 있어야한다
- if (Excel_Sheet.BOARD_ID == "1" &&
- (Excel_Repeater.REPEATER_ID == "124"
- || Excel_Repeater.REPEATER_ID == "125"
- || Excel_Repeater.REPEATER_ID == "126"
- || Excel_Repeater.REPEATER_ID == "127")
- )
- RePeater_Special++;
- // TB_REPEATER 테이블에 데이터 삽입
- _Db.ADD("TB_REPEATER",
- "RECEIVER_ID=" + ReceiverID +
- ";COMM_ID=" + "1" +
- ";BOARD_ID=" + Excel_Sheet.BOARD_ID +
- ";LOOP_NO=" + (Int32.Parse(Excel_Sheet.LOOP_NO) - 1) + // 채널값은 엑셀에 나와 있는 값에서 -1
- ";REPEATER_ID=" + Excel_Repeater.REPEATER_ID +
- ";REPEATER_TYPE=" + RepeaterType +
- ";REPEATER_NAME=" + Excel_Repeater.NAME +
- ";CUT_FLAG=" + "N" +
- ";USE_FLAG=" + "Y" +
- ";POSITION_CODE=" + ((_Code_Position)_Data.HASH_CodePosition[_Excel.Code_Position_Name_Create(Excel_Repeater.Excel_Position.Building, Excel_Repeater.Excel_Position.Stair, Excel_Repeater.Excel_Position.Floor)]).Code_Position_ID +
- ";UPDATE_TIME=" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
- foreach (_Excel_Point Excel_Point in Excel_Repeater.List_Point)
- {
- // cyim 2017.01.23 반드시 통신보드 1번에 0번루프 중계기124번 125번 중계기가 있어야한다
- if (Excel_Sheet.BOARD_ID == "1" &&
- (Excel_Repeater.REPEATER_ID == "124"
- || Excel_Repeater.REPEATER_ID == "125"
- || Excel_Repeater.REPEATER_ID == "126"
- || Excel_Repeater.REPEATER_ID == "127")
- )
- RePeater_Special_Point++;
- // TB_DEVICE 테이블에 데이터 삽입
- _Db.ADD("TB_DEVICE",
- "RECEIVER_ID=" + ReceiverID +
- ";COMM_ID=" + "1" +
- ";BOARD_ID=" + Excel_Sheet.BOARD_ID +
- ";LOOP_NO=" + (Int32.Parse(Excel_Sheet.LOOP_NO) - 1) + // 채널값은 엑셀에 나와 있는 값에서 -1
- ";REPEATER_ID=" + Excel_Repeater.REPEATER_ID +
- ";DEVICE_ID=" + Excel_Point.PortNum +
- ";INOUT_TYPE=" + Excel_Point.TYPE +
- ";DEVICE_NAME=" + Excel_Point.NAME +
- ";DEVICE_TYPE=" + Excel_Point.Code_Type +
- ";POSITION_CODE=" + ((_Code_Position)_Data.HASH_CodePosition[_Excel.Code_Position_Name_Create(Excel_Point.Excel_Position.Building, Excel_Point.Excel_Position.Stair, Excel_Point.Excel_Position.Floor)]).Code_Position_ID +
- ";CUT_FLAG=" + "N" +
- ";UPDATE_TIME=" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
- // TB_EMERGENCY_BROADCASTION 테이블에 데이터 삽입
- if (Excel_Point.Code_Name == "일반화재입력" || Excel_Point.Code_Name == "축적화재입력" || Excel_Point.Code_Name == "열감지기입력" || Excel_Point.Code_Name == "연감지기입력")
- {
- // 포지션코드 확인해서 분리
- //string Position_Code = ((_Code_Position)_Data.HASH_CodePosition[_Excel.Code_Position_Name_Create(Excel_Point.Excel_Position.Building, Excel_Point.Excel_Position.Stair, Excel_Point.Excel_Position.Floor)]).Code_Position_ID;
- //string AREA_CODE = Position_Code.Substring(0, 2);
- //string STAIR_CODE = Position_Code.Substring(2, 2);
- //string FLOOR_CODE = Position_Code.Substring(4, 2);
- //// 지하층일 경우 무조건 FLOOR_CODE는 "00"
- //if (FLOOR_CODE == "36" || FLOOR_CODE == "37" || FLOOR_CODE == "38" || FLOOR_CODE == "39" || FLOOR_CODE == "40" || FLOOR_CODE == "41" || FLOOR_CODE == "42")
- // FLOOR_CODE = "00";
- string Emergency_Code = ((_Code_Position)_Data.HASH_CodePosition[_Excel.Code_Position_Name_Create(Excel_Point.Excel_Position.Building, Excel_Point.Excel_Position.Stair, Excel_Point.Excel_Position.Floor)]).Code_Emergency_ID;
- string AREA_CODE = Emergency_Code.Substring(0, 2);
- string STAIR_CODE = Emergency_Code.Substring(2, 2);
- string FLOOR_CODE = Emergency_Code.Substring(4, 2);
- _Db.ADD("TB_EMERGENCY_BROADCASTION",
- "RECEIVER_ID=" + ReceiverID +
- ";COMM_ID=" + "1" +
- ";BOARD_ID=" + Excel_Sheet.BOARD_ID +
- ";LOOP_NO=" + (Int32.Parse(Excel_Sheet.LOOP_NO) - 1) + // 채널값은 엑셀에 나와 있는 값에서 -1
- ";REPEATER_ID=" + Excel_Repeater.REPEATER_ID +
- ";DEVICE_ID=" + Excel_Point.PortNum +
- ";INOUT_TYPE=" + Excel_Point.TYPE +
- ";AREA_CODE=" + AREA_CODE +
- ";STAIR_CODE=" + STAIR_CODE +
- ";FLOOR_CODE=" + FLOOR_CODE +
- ";UPDATE_TIME=" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
- }
- // cyim 2016.07.27 : 아날로그 감지기 레벨 감지기 타입별 설정 기능
- // 아날로그 감지기 레벨값이 있는 경우에만
- if (RepeaterType == "4" && _Data.LIST_CodeAnalogLevel_Smoke.Count == 4)
- {
- // TB_ANALOG_DEVICE_2 테이블에 데이터 삽입
- _Db.ADD("TB_ANALOG_DEVICE_2",
- "RECEIVER_ID=" + ReceiverID +
- ";COMM_ID=" + "1" +
- ";BOARD_ID=" + Excel_Sheet.BOARD_ID +
- ";LOOP_NO=" + (Int32.Parse(Excel_Sheet.LOOP_NO) - 1) + // 채널값은 엑셀에 나와 있는 값에서 -1
- ";REPEATER_ID=" + Excel_Repeater.REPEATER_ID +
- ";DEVICE_ID=" + Excel_Point.PortNum +
- ";INOUT_TYPE=" + Excel_Point.TYPE +
- ";FAULT_VALUE=" + _Data.LIST_CodeAnalogLevel_Smoke[0].ToString() +
- ";PREFIRE_VALUE=" + _Data.LIST_CodeAnalogLevel_Smoke[1].ToString() +
- ";FIRED_VALUE=" + _Data.LIST_CodeAnalogLevel_Smoke[2].ToString() +
- ";FIREN_VALUE=" + _Data.LIST_CodeAnalogLevel_Smoke[3].ToString() +
- ";UPDATE_TIME=" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
- }
- if (RepeaterType == "5" && _Data.LIST_CodeAnalogLevel_Heat.Count == 4)
- {
- // TB_ANALOG_DEVICE_2 테이블에 데이터 삽입
- _Db.ADD("TB_ANALOG_DEVICE_2",
- "RECEIVER_ID=" + ReceiverID +
- ";COMM_ID=" + "1" +
- ";BOARD_ID=" + Excel_Sheet.BOARD_ID +
- ";LOOP_NO=" + (Int32.Parse(Excel_Sheet.LOOP_NO) - 1) + // 채널값은 엑셀에 나와 있는 값에서 -1
- ";REPEATER_ID=" + Excel_Repeater.REPEATER_ID +
- ";DEVICE_ID=" + Excel_Point.PortNum +
- ";INOUT_TYPE=" + Excel_Point.TYPE +
- ";FAULT_VALUE=" + _Data.LIST_CodeAnalogLevel_Heat[0].ToString() +
- ";PREFIRE_VALUE=" + _Data.LIST_CodeAnalogLevel_Heat[1].ToString() +
- ";FIRED_VALUE=" + _Data.LIST_CodeAnalogLevel_Heat[2].ToString() +
- ";FIREN_VALUE=" + _Data.LIST_CodeAnalogLevel_Heat[3].ToString() +
- ";UPDATE_TIME=" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
- }
- }
- // TB_REPEATER 테이블에 데이터 삽입할때마다 Value값을 1 증가시킴
- if (UiProgressBar_ExcelImport.Value <= UiProgressBar_ExcelImport.Maximum)
- Delegate_UiProgressBar(); //크로스 스레드 해결
- }
- }
- // cyim 2017.02.02 : IFC 3300 에서는 엑셀입출력표 제한을 걸지 않는다
- // hoon 2020-01-08 사업부(장재연)의 요청으로 다 허용으로 수정
- //if (((_RECEIVER)_Data.HASH_RECEIVER[ReceiverID]).MODEL != "IFC3300")
- //{
- // // cyim 2017.01.23 반드시 통신보드 1번에 0번루프 중계기124번 125번 중계기가 있어야한다
- // // cyim 2017.01.19 반드시 통신보드 1번에 0번루프 중계기126번 127번 중계기가 있어야한다
- // if ((RePeater_Special == 4 || RePeater_Special == 8) && (RePeater_Special_Point == 13 || RePeater_Special_Point == 26))
- // {
- // ;
- // }
- // else
- // {
- // // UI를 갱신하라
- // ui_renew = true;
- // // 저장버튼 및 닫기버튼 사용하게...
- // Delegate_UiButton_bad();
- // // 프로젝트 수정
- // _Data.ProJect_Save_Complete = false;
- // // 버튼은 사용가능함
- // _Data.Enable_Button = true;
- // _Popup.MessageBoxPopup(MessageBoxButtons.OK, _Text.ExceptionError6, _Text.OK);
- // return;
- // }
- //}
- //
- // GridEx 출력
- //
- // 그리드에 출력이 끝나면 Value값을 1 증가시킴
- if (UiProgressBar_ExcelImport.Value <= UiProgressBar_ExcelImport.Maximum)
- Delegate_UiProgressBar(); //크로스 스레드 해결
- //** IO 보드 디바이스 추가 (엑셀연동 루틴 추가)
- bool result = Add_IOBoard_Device();
- // cyim 2016.12.22 모델별 엑셀임포트 오류 방지
- if (result == false)
- {
- // UI를 갱신하라
- ui_renew = true;
- // 저장버튼 및 닫기버튼 사용하게...
- Delegate_UiButton_bad();
- // 프로젝트 수정
- _Data.ProJect_Save_Complete = false;
- // 버튼은 사용가능함
- _Data.Enable_Button = true;
- //if (((_RECEIVER)_Data.HASH_RECEIVER[ReceiverID]).MODEL == "IFC3300")
- // _Popup.MessageBoxPopup(MessageBoxButtons.OK, _Text.ExceptionError4,_Text.OK);
- //else
- if (((_RECEIVER)_Data.HASH_RECEIVER[ReceiverID]).MODEL != "IFC3300")
- _Popup.MessageBoxPopup(MessageBoxButtons.OK, _Text.ExceptionError5, _Text.OK);
- if (((_RECEIVER)_Data.HASH_RECEIVER[ReceiverID]).MODEL == "IFC3300")
- _Popup.MessageBoxPopup(MessageBoxButtons.OK, _Text.ExceptionError7, _Text.OK);
- return;
- }
- // 그리드에 출력이 끝나면 Value값을 1 증가시킴
- if (UiProgressBar_ExcelImport.Value <= UiProgressBar_ExcelImport.Maximum)
- Delegate_UiProgressBar(); //크로스 스레드 해결
- //
- // 입력 및 출력 디바이스의 빠른 출력을 위해서 미리 정리(추가된 작업 - 2013.07.03)
- // 상위 루틴은 데이타베이스에 저장이 목표였다면 하위 부분은 포인트 입출력 정보가 너무 화면이 늦게 나타나므로 미리 SQL 결과를 저장하기 위한 용도입니다.
- //
- // 먼저 클리어
- _Data.Hash_ImportPoint.Clear();
- // 해당 수신기 아이디만큼 루틴을 돌린다
- foreach (string pRECEIVER_ID in _Data.LIST_XMLRECEIVER_ID)
- {
- _ImportPoint ImportPoint = new _ImportPoint();
- // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경
- if (((_RECEIVER)_Data.HASH_RECEIVER[pRECEIVER_ID]).MODEL == "IFC3300")
- {
- // 해당 수신기 아이디 값을 이용해서 입력용 데이타를 만들자
- ImportPoint.IN_Points = _Db.ExecuteRead_SqlDataAdapter(
- _Sql.Search_DEVICETable_With_EMERGENCY_BigReceiver("1", "I", "", "", "", "", "", "", pRECEIVER_ID, "", "", "", false));
- // 해당 수신기 아이디 값을 이용해서 출력용 데이타를 만들자
- ImportPoint.OUT_Points = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_DEVICETable_NoneBoardID_BigReceiver("1", "O", "", "", "", "", "", pRECEIVER_ID));
- }
- else
- {
- // 해당 수신기 아이디 값을 이용해서 입력용 데이타를 만들자
- ImportPoint.IN_Points = _Db.ExecuteRead_SqlDataAdapter(
- _Sql.Search_DEVICETable_With_EMERGENCY("1", "I", "15", "", "", "", "", "", pRECEIVER_ID, "", "", "", false));
- // 해당 수신기 아이디 값을 이용해서 출력용 데이타를 만들자
- ImportPoint.OUT_Points = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_DEVICETable("1", "O", "15", "", "", "", "", "", pRECEIVER_ID));
- }
- // 해쉬테이블에 삽입
- _Hash.Add(_Data.Hash_ImportPoint, pRECEIVER_ID, ImportPoint);
- }
- // 이 루틴은 상위 루틴이 오래걸려서 프로그레스바가 멈추는 것처럼 보일수도 있으므로 일단 프로그레스바 진행바 총 카운터를 50만큼 늘인것이다
- for (int i = 0; i < 50; i++)
- {
- // 그리드에 출력이 끝나면 Value값을 1 증가시킴
- if (UiProgressBar_ExcelImport.Value <= UiProgressBar_ExcelImport.Maximum)
- Delegate_UiProgressBar(); //크로스 스레드 해결
- }
- }
- else if (Type == _Text.UI_TREE_OPER_GROUP) // 그룹 정보 임포팅
- {
- //
- // TB_GROUP 정보추가
- //
- foreach (_Excel_Group Excel_Group in _Data.List_ExcelGroup)
- {
- // "TB_GROUP"에 DB 삽입
- _Db.ADD("TB_GROUP",
- "RECEIVER_ID=" + ReceiverID + // 그룹 임포팅때는 모든 그룹이 자기 관할 그룹이다.
- ";GROUP_ID=" + Excel_Group.Group_ID +
- ";GROUP_NAME=" + Excel_Group.Group_Name +
- ";UPDATE_TIME=" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
- if (UiProgressBar_ExcelImport.Value <= UiProgressBar_ExcelImport.Maximum)
- Delegate_UiProgressBar(); //크로스 스레드 해결
- }
- }
- else // 연동설정 정보 임포팅
- {
- // 엑셀에는 타수신기의 그룹정보가 있을수 있으므로 전체 그룹에 대한 그룹아이디를 키값으로 갇고 수신기아이디로 데이타를 가지고 있는 특별한 해쉬테이블을 구성한다
- Hashtable Group_ReceiverID_Table = new Hashtable();
- DataRowCollection DB_TABLE_GROUP = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_Table_Value("TB_GROUP", null));
- if (DB_TABLE_GROUP != null && DB_TABLE_GROUP.Count != 0)
- {
- foreach (DataRow dr in DB_TABLE_GROUP) // 네트워크 수신기에서 그룹 아이디는 유일하다
- {
- if (Group_ReceiverID_Table.ContainsKey(dr["GROUP_ID"].ToString()) == false)
- Group_ReceiverID_Table.Add(dr["GROUP_ID"].ToString(), dr["RECEIVER_ID"].ToString());
- }
- }
- //
- // TB_MAP 정보추가
- //
- foreach (_Excel_Map Excel_Map in _Data.List_ExcelMap)
- {
- //
- // "TB_MAP"에 DB 삽입
- //
- _Db.ADD("TB_MAP",
- "RECEIVER_ID=" + ReceiverID +
- ";MAP_NO=" + Excel_Map.Map_ID.Remove(0, 1) +
- ";MAP_ID=" + Excel_Map.Map_ID +
- ";MAP_NAME=" + Excel_Map.Map_Name +
- ";USE_FLAG=" + "Y" +
- ";UPDATE_TIME=" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
- //
- // "TB_MAP_PROCESS"에 DB 삽입
- //
- // 그룹이 몇개 들어 있는지 조사해서 그만큼 "TB_MAP_PROCESS"에 저장한다
- if (Excel_Map.Groups != _Text.Null)
- {
- string[] Group = Excel_Map.Groups.Split(':');
- for (int i = 0; i < Group.Count(); i++)
- {
- // 타수신기 그룹 정보를 먼저 임포트작업을 완료해야만, 연동설정을 임포트해야 그룹아이디 정보를 설정 프로그램에서 추출할수 있습니다
- try
- {
- //
- // 그룹 정보 저장
- //
- _Db.ADD("TB_MAP_PROCESS",
- "MAP_RECEIVER_ID=" + ReceiverID + // 현재 ReceiverID 저장
- ";MAP_NO=" + Excel_Map.Map_ID.Remove(0, 1) +
- ";MAP_TYPE=" + "O" +
- ";SEQ_NO=" + (i + 1) +
- ";PROCESS_TYPE=" + "G" +
- ";GROUP_ID=" + Group[i] +
- ";RECEIVER_ID=" + Group_ReceiverID_Table[Group[i]].ToString() + // 출력해야되는 회로 혹은 그룹의 수신기 아이디 : 엑셀로 Import 할때는 그룹 정보가 반드시 수신기 아이디에 해당하지 않는 타 수신기에 그룹일수도 있다.
- ";COMM_ID=" + null +
- ";BOARD_ID=" + null +
- ";LOOP_NO=" + null +
- ";REPEATER_ID=" + null +
- ";DEVICE_ID=" + null +
- ";INOUT_TYPE=" + null +
- ";USE_FLAG=" + "Y");
- }
- catch
- {
- // UI를 갱신하라
- ui_renew = true;
- // 저장버튼 및 닫기버튼 사용하게...
- Delegate_UiButton_bad();
- // 프로젝트 수정
- _Data.ProJect_Save_Complete = false;
- // 버튼은 사용가능함
- _Data.Enable_Button = true;
- MessageBox.Show(_Text.ExceptionError1);
- return;
- }
- }
- }
- // 입력디바이스가 몇개 들어 있는지 조사해서 그만큼 "TB_MAP_PROCESS"에 저장한다
- if (Excel_Map.InDevices != _Text.Null)
- {
- string[] InDevice = Excel_Map.InDevices.Split(':');
- for (int i = 0; i < InDevice.Count(); i++)
- {
- // BOARD_ID, LOOP_NO, REPEATER_ID, DEVICE_ID
- string[] Value = InDevice[i].Split('-');
- //
- // 입력 디바이스 정보 저장
- //
- _Db.ADD("TB_MAP_PROCESS",
- "MAP_RECEIVER_ID=" + ReceiverID + // 현재 ReceiverID 저장
- ";MAP_NO=" + Excel_Map.Map_ID.Remove(0, 1) +
- ";MAP_TYPE=" + "I" +
- ";SEQ_NO=" + (i + 1) +
- ";PROCESS_TYPE=" + "D" +
- ";GROUP_ID=" + null +
- ";RECEIVER_ID=" + ReceiverID + // 현재 ReceiverID 저장 // 입력회로는 반드시 자기 수신기의 입력 회로이다
- ";COMM_ID=" + "1" +
- ";BOARD_ID=" + Int32.Parse(Value[1]) +
- ";LOOP_NO=" + Int32.Parse(Value[2]) +
- ";REPEATER_ID=" + Int32.Parse(Value[3]) +
- ";DEVICE_ID=" + Int32.Parse(Value[4]) +
- ";INOUT_TYPE=" + "I" +
- ";USE_FLAG=" + "Y");
- }
- }
- if (UiProgressBar_ExcelImport.Value <= UiProgressBar_ExcelImport.Maximum)
- Delegate_UiProgressBar(); //크로스 스레드 해결
- }
- }
- // UI를 갱신하라
- ui_renew = true;
- // 저장버튼 및 닫기버튼 사용하게...
- Delegate_UiButton_good();
- // 프로젝트 수정
- _Data.ProJect_Save_Complete = false;
- // 버튼은 사용가능함
- _Data.Enable_Button = true;
- }
- // IO보드 디바이스 추가
- public bool Add_IOBoard_Device()
- {
- foreach (_Code_IO_Board Code_IO_Board in _Data.LIST_CodeIOBoard)
- {
- // cyim 2017.01.12 모델별 엑셀임포트 오류 방지 버그 수정
- // 통신보드는 0번,15번 으로 구분해야한다
- // cyim 2017.01.23 예외처리 부분은 일단 제외한다
- // cyim 2016.12.22 모델별 엑셀임포트 오류 방지
- if (((_RECEIVER)_Data.HASH_RECEIVER[ReceiverID]).MODEL == "IFC3300")
- {
- if (Code_IO_Board.IOBOARD_COM_PORT == "1") // 엑셀 시트의 IO 보드 입출력표 내용중 통신보드 별도 추가건에 대해서는
- if (Code_IO_Board.IOBOARD_BOARD_ID != "0") // 반드시 0 이 들어가야한다 (다른 아이디는 허용안함)
- return false;
- }
- // cyim 2017.02.02 : IFC 3300 에서는 엑셀입출력표 제한을 걸지 않는다
- // 단, IFC3300 이하 모델에서는 IO 보드는 15번 보드는 무조건 강제로 사용하도록 한다
- if (((_RECEIVER)_Data.HASH_RECEIVER[ReceiverID]).MODEL != "IFC3300")
- {
- if (Code_IO_Board.IOBOARD_COM_PORT == "1") // 엑셀 시트의 IO 보드 입출력표 내용중 통신보드 별도 추가건에 대해서는
- if (Code_IO_Board.IOBOARD_BOARD_ID != "15") // 반드시 15 가 들어가야한다 (다른 아이디는 허용안함)
- return false;
- }
- // I/O 보드의 각 디바이스 아이디를 추가한다. 즉 TB_DEVICE 에 추가
- DB_ADD_IOBoard_Device(ReceiverID,
- Code_IO_Board.IOBOARD_COM_PORT,
- Code_IO_Board.IOBOARD_BOARD_ID,
- Code_IO_Board.IOBOARD_LOOP_NO,
- Code_IO_Board.IOBOARD_REPEATER_ID,
- Code_IO_Board.IOBOARD_DEVICE_ID,
- Code_IO_Board.IOBOARD_INOUT,
- Code_IO_Board.IOBOARD_NAME,
- "000000",
- "N");
- // 별도 펌프에 관련된 중계기를 추가한다. 즉 TB_REPEATER 에 추가
- if (Code_IO_Board.IOBOARD_ADDREPEATER_YN == "Y")
- {
- // 중계기 추가
- DB_ADD_Repeater(ReceiverID,
- Code_IO_Board.IOBOARD_COM_PORT,
- Code_IO_Board.IOBOARD_BOARD_ID,
- Code_IO_Board.IOBOARD_LOOP_NO,
- Code_IO_Board.IOBOARD_REPEATER_ID,
- Code_IO_Board.IOBOARD_ADDREPEATER_TYPE == "2*2" ? "1" : "2", // 중계기타입 1 : 2*2 , 2 : 4*4
- "중계기");
- }
- }
- return true;
- // cyim : 임시코드 (주석코드는 지우지 마십시오, 원본보관용입니다)
- //// I/O 추가
- //DB_ADD_IOBoard_Device(ReceiverID, "3", "15", "0", "0", "9", "I", "주펌프 스위치주의", "000000", "N");
- //DB_ADD_IOBoard_Device(ReceiverID, "3", "15", "0", "0", "10", "I", "보조펌프 스위치주의", "000000", "N");
- //DB_ADD_IOBoard_Device(ReceiverID, "3", "15", "0", "0", "11", "I", "충압펌프 스위치주의", "000000", "N");
- //DB_ADD_IOBoard_Device(ReceiverID, "3", "15", "0", "0", "12", "I", "주스프링클러 스위치주의", "000000", "N");
- //DB_ADD_IOBoard_Device(ReceiverID, "3", "15", "0", "0", "13", "I", "보조스프링클러 스위치주의", "000000", "N");
- //DB_ADD_IOBoard_Device(ReceiverID, "3", "15", "0", "0", "14", "I", "충압스프링클러 스위치주의", "000000", "N");
- //DB_ADD_IOBoard_Device(ReceiverID, "3", "15", "0", "0", "1", "I", "발신기", "000000", "N");
- //DB_ADD_IOBoard_Device(ReceiverID, "3", "15", "0", "0", "2", "I", "전화", "000000", "N");
- //DB_ADD_IOBoard_Device(ReceiverID, "3", "15", "0", "0", "3", "I", "교류전원", "000000", "N");
- //DB_ADD_IOBoard_Device(ReceiverID, "3", "15", "0", "0", "4", "I", "예비전원이상", "000000", "N");
- //DB_ADD_IOBoard_Device(ReceiverID, "3", "15", "0", "0", "1", "O", "표시등", "000000", "N");
- //DB_ADD_IOBoard_Device(ReceiverID, "3", "15", "0", "0", "2", "O", "유도등", "000000", "N");
- //DB_ADD_IOBoard_Device(ReceiverID, "3", "15", "0", "0", "3", "O", "전원릴레이", "000000", "N");
- //DB_ADD_IOBoard_Device(ReceiverID, "1", "15", "0", "1", "1", "I", "주펌프", "000000", "N");
- //DB_ADD_IOBoard_Device(ReceiverID, "1", "15", "0", "2", "1", "I", "보조펌프", "000000", "N");
- //DB_ADD_IOBoard_Device(ReceiverID, "1", "15", "0", "3", "1", "I", "충압펌프", "000000", "N");
- //DB_ADD_IOBoard_Device(ReceiverID, "1", "15", "0", "4", "1", "I", "주스프링클러", "000000", "N");
- //DB_ADD_IOBoard_Device(ReceiverID, "1", "15", "0", "5", "1", "I", "보조스프링클러", "000000", "N");
- //DB_ADD_IOBoard_Device(ReceiverID, "1", "15", "0", "6", "1", "I", "충압스프링클러", "000000", "N");
- //// 중계기 추가
- //DB_ADD_Repeater(ReceiverID, "1", "15", "0", "1", "2", "중계기");
- //DB_ADD_Repeater(ReceiverID, "1", "15", "0", "2", "2", "중계기");
- //DB_ADD_Repeater(ReceiverID, "1", "15", "0", "3", "1", "중계기");
- //DB_ADD_Repeater(ReceiverID, "1", "15", "0", "4", "2", "중계기");
- //DB_ADD_Repeater(ReceiverID, "1", "15", "0", "5", "2", "중계기");
- //DB_ADD_Repeater(ReceiverID, "1", "15", "0", "6", "1", "중계기");
- // cyim : 임시코드 (주석코드는 지우지 마십시오, 테스트용입니다)
- //DB_ADD_IOBoard_Device(ReceiverID, "3", "1", "0", "0", "1", "O", "표시등", "000000", "N");
- //DB_ADD_IOBoard_Device(ReceiverID, "3", "1", "0", "0", "2", "O", "유도등", "000000", "N");
- }
- // IO보드 디바이스 추가
- public void DB_ADD_IOBoard_Device(string RECEIVER_ID, string COMM_ID, string BOARD_ID, string LOOP_NO, string REPEATER_ID, string DEVICE_ID, string INOUT_TYPE, string DEVICE_NAME, string POSITION_CODE, string CUT_FLAG)
- {
- _Db.ADD("TB_DEVICE",
- "RECEIVER_ID=" + ReceiverID +
- ";COMM_ID=" + COMM_ID +
- ";BOARD_ID=" + BOARD_ID +
- ";LOOP_NO=" + LOOP_NO +
- ";REPEATER_ID=" + REPEATER_ID +
- ";DEVICE_ID=" + DEVICE_ID +
- ";INOUT_TYPE=" + INOUT_TYPE +
- ";DEVICE_NAME=" + DEVICE_NAME +
- ";POSITION_CODE=" + POSITION_CODE +
- ";CUT_FLAG=" + CUT_FLAG +
- ";UPDATE_TIME=" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
- }
- // 중계기 6개 추가
- public void DB_ADD_Repeater(string RECEIVER_ID, string COMM_ID, string BOARD_ID, string LOOP_NO, string REPEATER_ID, string REPEATER_TYPE, string REPEATER_NAME)
- {
- _Db.ADD("TB_REPEATER",
- "RECEIVER_ID=" + ReceiverID +
- ";COMM_ID=" + COMM_ID +
- ";BOARD_ID=" + BOARD_ID +
- ";LOOP_NO=" + LOOP_NO +
- ";REPEATER_ID=" + REPEATER_ID +
- ";REPEATER_TYPE=" + REPEATER_TYPE +
- ";REPEATER_NAME=" + REPEATER_NAME +
- ";CUT_FLAG=" + "N" +
- ";USE_FLAG=" + "Y" +
- ";POSITION_CODE=" + "000000" +
- ";UPDATE_TIME=" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
- }
- // 팝업에서 Yes, NO 에서 받은 이벤트 처리 (실제 엑셀연동 적용여부)
- public void _Event_PopupClose_SendMessage_Event(object sender, object etc)
- {
- // 대화 팝업 주체
- Form popup = (Form)sender;
- if (DialogPopup.Name == popup.Name && etc.ToString() == _Text.OK)
- {
- // UI 갱신 타이머 스타트
- Timer_Renew.Start();
- int ProgressBar_TotalCount = 0;
- // 저장버튼 및 닫기버튼 실행 중에는 사용 못하게
- UiButton_Apply.Enabled = false;
- UiButton_Close.Enabled = false;
- // 포인트(디바이스) 정보 임포팅
- if (Type == _Text.UI_TREE_POINT)
- {
- // 먼저 4개 테이블 삭제하고 데이터 Importing
- // TB_POSITION_CODE 테이블 모든 데이터 삭제
- // cyim 2013.06.14 이렇게 만약 엑셀연동할때마다 테이블을 삭제하고 마지막에 엑셀 연동한 데이타만 들어가므로 문제의 요지가 있다
- //if (_Data.LIST_XMLRECEIVER_ID.Count == 1) // 1개만 존재하는 경우 무조건 삭제한다
- // cyim 2016.07.11 : 네트워크 수신기도 무조건 삭제한다. 단, 1번수신기의엑셀,2번 수신기의 엑셀 내용중 코드탭의 건물,계단,층 정보는 동일해야한다
- // cyim 2016.07.12 : TB_POSITION_CODE 테이블 삭제하고 다시 생성하는 코드 원복, 확인결과 하나하나 중계기 입출력 포인트 별 개별적으로 위치코드가 추가된다
- if (_Data.LIST_XMLRECEIVER_ID.Count == 1)
- _Db.Execute(_Sql.Delete_Table("TB_POSITION_CODE", null));
- // TB_EVENT_TYPE 모든 데이타 삭제
- _Db.Execute(_Sql.Delete_Table("TB_EVENT_TYPE", null));
- // TB_DEVICE_TYPE 모든 데이타 삭제
- _Db.Execute(_Sql.Delete_Table("TB_DEVICE_TYPE", null));
- // TB_DEVICE 테이블 모든 데이터 삭제 (수신기 아이디별)
- _Db.Execute(_Sql.Delete_Table("TB_DEVICE", ReceiverID));
- // TB_REPEATER 테이블 모든 데이터 삭제 (수신기 아이디별)
- _Db.Execute(_Sql.Delete_Table("TB_REPEATER", ReceiverID));
- // TB_EMERGENCY_BROADCASTION 테이블 모든 데이터 삭제 (수신기 아이디별)
- _Db.Execute(_Sql.Delete_Table("TB_EMERGENCY_BROADCASTION", ReceiverID));
- //
- // 아날로그감지기용 테이블 2개가 없다면 새로 생성한다
- //
- // 중계기 타입은 아래와 같다, 아날로그 감지기를 위한 테이블은 총 4개이다. TB_DEVICE, TB_REPEATER, TB_DAYTIME, TB_ANALOG_DEVICE_2
- // '1' = A : 2X2
- // '2' = B : 4X4
- // '4' = C : 아날로그연감지기
- // '5' = D : 아날로그열감지기
- // TB_DAYTIME
- DataRowCollection DB_TABLE_TB_DAYTIME = _Db.ExecuteRead_SqlDataAdapter(_Sql.Table_Exist("TB_DAYTIME"));
- if (DB_TABLE_TB_DAYTIME != null && DB_TABLE_TB_DAYTIME.Count != 0)
- {
- // 존재하면 테이블 내용을 삭제
- _Db.Execute(_Sql.Delete_Table("TB_DAYTIME", null));
- }
- else
- {
- // 존재하지 않는 경우에는 테이블 신규 생성
- _Db.Execute(_Sql.Create_TB_DAYTIME());
- }
- // TB_ANALOG_DEVICE_2
- DataRowCollection DB_TABLE_TB_ANALOG_DEVICE_2 = _Db.ExecuteRead_SqlDataAdapter(_Sql.Table_Exist("TB_ANALOG_DEVICE_2"));
- if (DB_TABLE_TB_ANALOG_DEVICE_2 != null && DB_TABLE_TB_ANALOG_DEVICE_2.Count != 0)
- {
- // 존재하면 테이블 내용을 삭제
- _Db.Execute(_Sql.Delete_Table("TB_ANALOG_DEVICE_2", ReceiverID));
- }
- else
- {
- // 존재하지 않는 경우에는 테이블 신규 생성
- _Db.Execute(_Sql.Create_TB_ANALOG_DEVICE_2());
- }
- // ProgressBar Total 카운트 (3를 주는 이유는 포지션 테이블이 추가될때 1 증가, 그리드에 출력 올릴 때 1 증가, IO보드 디바이스 추가될때 1 증가)
- ProgressBar_TotalCount = 3 + 50; // 이 루틴은 상위 루틴이 오래걸려서 프로그레스바가 멈추는 것처럼 보일수도 있으므로 일단 프로그레스바 진행바 총 카운터를 50만큼 늘인것이다
- // ProgressBar의 Maximum값을 구하기 위해서
- foreach (_Excel_Sheet Excel_Sheet in _Data.List_ExcelPoint)
- {
- ProgressBar_TotalCount = ProgressBar_TotalCount + Excel_Sheet.List_Repeater.Count;
- }
- }
- else if (Type == _Text.UI_TREE_OPER_GROUP) // 그룹 정보 임포팅
- {
- // TB_GROUP 테이블 모든 데이터 삭제
- _Db.Execute(_Sql.Delete_Table("TB_GROUP", ReceiverID));
- //_Db.Execute(_Sql.Delete_Table("TB_GROUP_DEVICE", ReceiverID)); // 주석 처리(강과장님의 요구) - 힘들게 설정한 정보를 삭제하기 싫어서
- // 프로그레스바 계산
- // ProgressBar의 Maximum값을 구하기 위해서
- ProgressBar_TotalCount = _Data.List_ExcelGroup.Count;
- }
- else // 연동설정 정보 임포팅
- {
- // TB_MAP 테이블 모든 데이터 삭제
- _Db.Execute(_Sql.Delete_Table("TB_MAP", ReceiverID));
- _Db.Execute(_Sql.Delete_Table("TB_MAP_PROCESS", "MAP_RECEIVER_ID", ReceiverID, null)); // 네트워크 연동을 생각하여 삭제
- // 프로그레스바 계산
- // ProgressBar의 Maximum값을 구하기 위해서
- ProgressBar_TotalCount = _Data.List_ExcelMap.Count;
- }
- // ProgressBar의 Maximum값 저장
- UiProgressBar_ExcelImport.Maximum = ProgressBar_TotalCount;
- // UiProgressBar 초기값 셋팅
- UiProgressBar_ExcelImport.Value = 0;
- // 스레드 생성
- Thread WorkingThread = new Thread(new ThreadStart(Excel_Import));
- // 스레드시작
- WorkingThread.Start();
- }
- else
- _Data.Enable_Button = true;
- // 대화 팝업은 특별처리(이벤트 해제)
- _Event.PopupClose_SendMessage_Event -= new _Event.PopupClose_SendMessage_Handler(_Event_PopupClose_SendMessage_Event);
- }
- // UI 개신 타이머
- private void Timer_Renew_Tick(object sender, EventArgs e)
- {
- if (ui_renew == true)
- {
- if (Type == _Text.UI_TREE_POINT)
- {
- _Event.WorkViewPageName_SendMessage_Write(ReceiverID, Object_Type.POINT, null, null);
- }
- else if (Type == _Text.UI_TREE_OPER_GROUP) // 그룹 정보 임포팅
- {
- // 폼을 다시 갱신
- _Event.WorkViewPageName_SendMessage_Write(ReceiverID, Object_Type.OPER_GROUP, null, null);
- }
- else // 연동설정 정보 임포팅
- {
- // 폼을 다시 갱신
- _Event.WorkViewPageName_SendMessage_Write(ReceiverID, Object_Type.OPER_SET, null, null);
- }
- // 다시 변수 복귀
- ui_renew = false;
- // 타이머 스탑
- Timer_Renew.Stop();
- }
- }
- }
- }
|