SMS0010MF.cpp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "ITSDbF.h"
  6. #include "AppGlobalF.h"
  7. #include "CDSCodeF.h"
  8. #include "CDSNodeF.h"
  9. #include "CDSLinkF.h"
  10. #include "CDSServiceLinkF.h"
  11. #include "CDSRoadF.h"
  12. #pragma hdrstop
  13. #include "SMS0010MF.h"
  14. #include "ITSSEL2MF.h"
  15. #include "ITSSELAMF.h"
  16. //---------------------------------------------------------------------------
  17. #pragma package(smart_init)
  18. #pragma link "cxButtons"
  19. #pragma link "cxClasses"
  20. #pragma link "cxContainer"
  21. #pragma link "cxControls"
  22. #pragma link "cxCustomData"
  23. #pragma link "cxData"
  24. #pragma link "cxDataStorage"
  25. #pragma link "cxDropDownEdit"
  26. #pragma link "cxEdit"
  27. #pragma link "cxFilter"
  28. #pragma link "cxGraphics"
  29. #pragma link "cxGrid"
  30. #pragma link "cxGridCustomTableView"
  31. #pragma link "cxGridCustomView"
  32. #pragma link "cxGridLevel"
  33. #pragma link "cxGridTableView"
  34. #pragma link "cxGroupBox"
  35. #pragma link "cxLabel"
  36. #pragma link "cxLookAndFeelPainters"
  37. #pragma link "cxLookAndFeels"
  38. #pragma link "cxMaskEdit"
  39. #pragma link "cxSpinEdit"
  40. #pragma link "cxSplitter"
  41. #pragma link "cxStyles"
  42. #pragma link "cxTextEdit"
  43. #pragma link "cxTimeEdit"
  44. #pragma link "dxSkinBlack"
  45. #pragma link "dxSkinBlue"
  46. #pragma link "dxSkinCaramel"
  47. #pragma link "dxSkinCoffee"
  48. #pragma link "dxSkinDarkRoom"
  49. #pragma link "dxSkinDarkSide"
  50. #pragma link "dxSkinFoggy"
  51. #pragma link "dxSkinGlassOceans"
  52. #pragma link "dxSkiniMaginary"
  53. #pragma link "dxSkinLilian"
  54. #pragma link "dxSkinLiquidSky"
  55. #pragma link "dxSkinLondonLiquidSky"
  56. #pragma link "dxSkinMcSkin"
  57. #pragma link "dxSkinMoneyTwins"
  58. #pragma link "dxSkinOffice2007Black"
  59. #pragma link "dxSkinOffice2007Blue"
  60. #pragma link "dxSkinOffice2007Green"
  61. #pragma link "dxSkinOffice2007Pink"
  62. #pragma link "dxSkinOffice2007Silver"
  63. #pragma link "dxSkinOffice2010Black"
  64. #pragma link "dxSkinOffice2010Blue"
  65. #pragma link "dxSkinOffice2010Silver"
  66. #pragma link "dxSkinsCore"
  67. #pragma link "dxSkinscxPCPainter"
  68. #pragma link "dxSkinSeven"
  69. #pragma link "dxSkinSharp"
  70. #pragma link "dxSkinSilver"
  71. #pragma link "dxSkinStardust"
  72. #pragma link "cxCalc"
  73. #pragma link "cxButtonEdit"
  74. #pragma link "cxCheckBox"
  75. #pragma link "cxMemo"
  76. #pragma resource "*.dfm"
  77. TSMS0010M *SMS0010M = NULL;
  78. //---------------------------------------------------------------------------
  79. __fastcall TSMS0010M::TSMS0010M(TComponent* Owner)
  80. : TForm(Owner)
  81. {
  82. ITSSkin_Load(this);
  83. CMM_LoadForm(g_sFormsDir, this);
  84. FTitle = "SMS 문자발송";
  85. }
  86. //---------------------------------------------------------------------------
  87. /*
  88. * 닫기버튼 이나 x버튼 클릭시 공통으로 처리하는 로직이들어간다..
  89. * Form과 DataModule class를 delete시킨다.
  90. * arguments
  91. *
  92. * return
  93. * void
  94. */
  95. void __fastcall TSMS0010M::CommClose()
  96. {
  97. try
  98. {
  99. CMM_SaveForm(g_sFormsDir, this);
  100. }
  101. catch(...)
  102. {
  103. }
  104. }
  105. //---------------------------------------------------------------------------
  106. /*
  107. * form 초기화
  108. *
  109. * arguments
  110. *
  111. * return
  112. * void
  113. */
  114. void __fastcall TSMS0010M::FormInit()
  115. {
  116. memoSMS->Lines->Clear();
  117. }
  118. //---------------------------------------------------------------------------
  119. /*
  120. * Form을 보여줄때 호출되는 event 메서드이다.
  121. * arguments
  122. * Sender : event handler 객체
  123. * return
  124. * void
  125. */
  126. void __fastcall TSMS0010M::FormShow(TObject *Sender)
  127. {
  128. Refresh();
  129. FormInit();
  130. TmrShow->Enabled = true;
  131. }
  132. //---------------------------------------------------------------------------
  133. /*
  134. * Form이 Show되고 난 후 최초 1회 수행되는 타이머 이벤트
  135. * arguments
  136. * Sender : event handler 객체
  137. * return
  138. * void
  139. */
  140. void __fastcall TSMS0010M::TmrShowTimer(TObject *Sender)
  141. {
  142. TmrShow->Enabled = false;
  143. BtnSearchClick((TObject*)BtnSearch);
  144. }
  145. //---------------------------------------------------------------------------
  146. /*
  147. * Search 버튼 클릭 이벤트 핸들러
  148. * arguments
  149. * Sender : event handler 객체
  150. * return
  151. * void
  152. */
  153. void __fastcall TSMS0010M::BtnSearchClick(TObject *Sender)
  154. {
  155. RefreshData();
  156. }
  157. //---------------------------------------------------------------------------
  158. /*
  159. * Refresh Data Event Function
  160. * arguments
  161. *
  162. * return
  163. * void
  164. */
  165. void __fastcall TSMS0010M::RefreshData()
  166. {
  167. SelSmsUserList();
  168. }
  169. //---------------------------------------------------------------------------
  170. void __fastcall TSMS0010M::SelSmsUserList()
  171. {
  172. TSqlCursor sqlCrs;
  173. String sQry;
  174. TADOQuery *pADO = ADOQry;
  175. TcxGridTableView *pTvList = TvList1;
  176. TcxDataController *pGDC = pTvList->DataController;
  177. CMM_ClearGridTableView(pTvList);
  178. sQry = "SELECT A.SMS_USER_ID, \r\n"
  179. " A.SMS_USER_NM, \r\n"
  180. " A.SMS_USER_TEL, \r\n"
  181. " A.SMS_USER_EXPL, \r\n"
  182. " A.SMS_RPLY_TEL, \r\n"
  183. " A.RGST_DT \r\n"
  184. " FROM TB_SMS_USER A \r\n"
  185. " ORDER BY A.SMS_USER_ID \r\n";
  186. try
  187. {
  188. pADO->Connection = ITSDb_GetConnection();
  189. ITSDb_SQLText(pADO, sQry);
  190. ITSDb_SQLOpen(pADO);
  191. int nRow = 0;
  192. try
  193. {
  194. pTvList->BeginUpdate();
  195. pGDC->RecordCount = pADO->RecordCount;
  196. for( ; !pADO->Eof; pADO->Next(), nRow++)
  197. {
  198. pGDC->Values[nRow][ColumnSel->Index] = true;
  199. pGDC->Values[nRow][AColumn02->Index] = pADO->FieldByName("SMS_USER_ID")->AsString;
  200. pGDC->Values[nRow][AColumn03->Index] = pADO->FieldByName("SMS_USER_NM")->AsString;
  201. pGDC->Values[nRow][AColumn04->Index] = pADO->FieldByName("SMS_USER_TEL")->AsString;
  202. pGDC->Values[nRow][AColumn05->Index] = pADO->FieldByName("SMS_RPLY_TEL")->AsString;
  203. pGDC->Values[nRow][AColumn06->Index] = pADO->FieldByName("SMS_USER_EXPL")->AsString;
  204. //pGDC->Values[nRow][AColumn07->Index] = ITSUtil_StrToTime(pADO->FieldByName("RGST_DT")->AsString);
  205. }
  206. }
  207. __finally
  208. {
  209. if (pADO)
  210. {
  211. pADO->Close();
  212. }
  213. pTvList->EndUpdate();
  214. //LblRecords->Caption = FormatFloat("##,##0", pGDC->RecordCount) + " 건";
  215. }
  216. }
  217. catch(EDatabaseError &E)
  218. {
  219. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  220. throw Exception(String(E.ClassName()) + E.Message);
  221. }
  222. catch(...)
  223. {
  224. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  225. throw Exception("알수없는 오류가 발생하였습니다.");
  226. }
  227. }
  228. //---------------------------------------------------------------------------
  229. /*
  230. * Close 버튼 클릭 이벤트 핸들러
  231. * arguments
  232. * Sender : event handler 객체
  233. * return
  234. * void
  235. */
  236. void __fastcall TSMS0010M::BtnCloseClick(TObject *Sender)
  237. {
  238. Close();
  239. }
  240. //---------------------------------------------------------------------------
  241. void __fastcall TSMS0010M::FormClose(TObject *Sender, TCloseAction &Action)
  242. {
  243. CommClose();
  244. SMS0010M = NULL;
  245. Action = caFree;
  246. }
  247. //---------------------------------------------------------------------------
  248. bool __fastcall TSMS0010M::CheckField()
  249. {
  250. String sMsg = memoSMS->Lines->Text.Trim();
  251. if (sMsg == "")
  252. {
  253. Application->MessageBox(L"SMS 발송문자를 확인 하세요.", Caption.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  254. return false;
  255. }
  256. int nSelCount = CMM_GetCheckCount(TvList1, ColumnSel->Index);
  257. if (nSelCount == 0)
  258. {
  259. Application->MessageBox(L"SMS 발송대상자가 선택되지 않았습니다.\r\nSMS 발송대상자을 체크하여 선택하십시요.",
  260. Caption.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  261. return false;
  262. }
  263. return true;
  264. }
  265. //---------------------------------------------------------------------------
  266. bool __fastcall TSMS0010M::GetMsgNewId(int &ANewId)
  267. {
  268. String sQry;
  269. TADOQuery *pADO = NULL;
  270. ANewId = 0;
  271. sQry = "SELECT NVL(MAX(SMS_SEQ), 0) + 1 AS NEWID \r\n"
  272. " FROM TB_SMS_SEND_PNST \r\n";
  273. try
  274. {
  275. try
  276. {
  277. pADO = new TADOQuery(NULL);
  278. pADO->Close();
  279. pADO->Connection = ITSDb_GetConnection();
  280. pADO->SQL->Clear();
  281. pADO->SQL->Text = sQry;
  282. pADO->Open();
  283. ANewId = pADO->FieldByName("NEWID")->AsInteger;
  284. return true;
  285. }
  286. catch(EDatabaseError &E)
  287. {
  288. throw Exception(String(E.ClassName()) + E.Message);
  289. }
  290. catch(Exception &exception)
  291. {
  292. throw Exception(String(exception.ClassName()) + exception.Message);
  293. }
  294. catch(...)
  295. {
  296. throw Exception("알수없는 DB 오류가 발생하였습니다.");
  297. }
  298. }
  299. __finally
  300. {
  301. if (pADO)
  302. {
  303. pADO->Close();
  304. delete pADO;
  305. }
  306. }
  307. return false;
  308. }
  309. //---------------------------------------------------------------------------
  310. void __fastcall TSMS0010M::SaveSmsSendMsg(TADOConnection *ADbCon/*=NULL*/, bool ALocal/*=true*/)
  311. {
  312. if (!ADbCon) ADbCon = ITSDb_GetConnection();
  313. TADOQuery *pADO = NULL;
  314. String sQry;
  315. String sSendMsg = memoSMS->Lines->Text.Trim();
  316. int nNewId = 0;
  317. try
  318. {
  319. if (ALocal)
  320. {
  321. if (!GetMsgNewId(nNewId))
  322. {
  323. return;
  324. }
  325. }
  326. if (ALocal)
  327. {
  328. sQry = "INSERT INTO TB_SMS_SEND_PNST(SMS_SEQ, \r\n"
  329. " SEND_TEL, \r\n"
  330. " RPLY_TEL, \r\n"
  331. " SEND_MSG, \r\n"
  332. " SMS_CRTN_DT) \r\n"
  333. " VALUES(:p01, \r\n"
  334. " :p02, \r\n"
  335. " :p03, \r\n"
  336. " :p04, \r\n"
  337. " TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS')) \r\n";
  338. }
  339. else
  340. {
  341. sQry = "INSERT INTO EM_TRAN(TRAN_PR, \r\n"
  342. " TRAN_PHONE, \r\n"
  343. " TRAN_CALLBACK, \r\n"
  344. " TRAN_STATUS, \r\n"
  345. " TRAN_DATE, \r\n"
  346. " TRAN_MSG, \r\n"
  347. " TRAN_TYPE) \r\n"
  348. " VALUES(EM_TRAN_PR.NEXTVAL, \r\n"
  349. " :p02, \r\n"
  350. " :p03, \r\n"
  351. " '1', \r\n"
  352. " SYSDATE, \r\n"
  353. " :p04, \r\n"
  354. " 4 ) \r\n";
  355. }
  356. TvList1->BeginUpdate();
  357. try
  358. {
  359. pADO = new TADOQuery(NULL);
  360. pADO->Close();
  361. pADO->Connection = ADbCon;
  362. ITSDb_SQLText(pADO, sQry);
  363. ADbCon->BeginTrans();
  364. int nRowCnt = TvList1->ViewData->RecordCount;
  365. for (int ii = 0; ii < nRowCnt; ii++)
  366. {
  367. TcxCustomGridRow* ARow = TvList1->ViewData->Rows[ii];
  368. if (((bool)ARow->Values[ColumnSel->Index]))
  369. {
  370. String sCallTel = ARow->Values[AColumn04->Index];
  371. String sBackTel = ARow->Values[AColumn05->Index];
  372. if (ALocal)
  373. {
  374. ITSDb_SQLBind(pADO, "p01", String(nNewId++));
  375. }
  376. ITSDb_SQLBind(pADO, "p02", sCallTel);
  377. ITSDb_SQLBind(pADO, "p03", sBackTel);
  378. ITSDb_SQLBind(pADO, "p04", sSendMsg);
  379. ITSDb_SQLExec(pADO);
  380. }
  381. }
  382. ADbCon->CommitTrans();
  383. Application->MessageBox(L"선택하신 SMS 발송대상자에게 SMS 메시지 전송을 정상적으로 요청하였습니다.",
  384. Caption.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  385. }
  386. catch(EDatabaseError &E)
  387. {
  388. ADbCon->RollbackTrans();
  389. ShowMessage(String(E.ClassName()) + E.Message);
  390. }
  391. catch(Exception &exception)
  392. {
  393. ADbCon->RollbackTrans();
  394. ShowMessage(String(exception.ClassName()) + exception.Message);
  395. }
  396. catch(...)
  397. {
  398. ADbCon->RollbackTrans();
  399. ShowMessage("데이터 작업 중에 알수없는 DB 오류가 발생하였습니다.");
  400. }
  401. }
  402. __finally
  403. {
  404. if (pADO)
  405. {
  406. pADO->Close();
  407. delete pADO;
  408. }
  409. TvList1->EndUpdate();
  410. }
  411. }
  412. //---------------------------------------------------------------------------
  413. void __fastcall TSMS0010M::BtnOperatorInputClick(TObject *Sender)
  414. {
  415. if (!CheckField()) return;
  416. if (Application->MessageBox(L"SMS 메시지를 전송 하시겠습니까?", L"SMS 메시지 전송", MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  417. bool bRemote = false;
  418. TADOConnection *pConnection = NULL;
  419. String sDbConnString;
  420. if (bRemote)
  421. {
  422. #if 0
  423. sDbConnString = "";
  424. sDbConnString += "Provider=" + g_AppCfg.smsdb.sProvider;
  425. sDbConnString += ";Password=" + g_AppCfg.smsdb.sPassword;
  426. sDbConnString += ";Persist Security Info=True";
  427. sDbConnString += ";User ID=" + g_AppCfg.smsdb.sUserName;
  428. sDbConnString += ";Data Source=" + g_AppCfg.smsdb.sServerName;
  429. #endif
  430. }
  431. try
  432. {
  433. if (bRemote)
  434. {
  435. pConnection = new TADOConnection(NULL);
  436. if (!DbConnect(pConnection, sDbConnString))
  437. {
  438. Application->MessageBox(L"SMS 데이터베이스와 연결에 실패하였습니다.",
  439. L"SMS 데이터베이스 연결 실패", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  440. return;
  441. }
  442. SaveSmsSendMsg(pConnection, false);
  443. }
  444. else
  445. {
  446. SaveSmsSendMsg();
  447. }
  448. }
  449. __finally
  450. {
  451. if (bRemote)
  452. {
  453. DbClose(pConnection);
  454. delete pConnection;
  455. pConnection = NULL;
  456. }
  457. }
  458. }
  459. //---------------------------------------------------------------------------
  460. bool __fastcall TSMS0010M::DbConnect(TADOConnection *AConnection, String AConnString)
  461. {
  462. if (!AConnection) return false;
  463. try
  464. {
  465. AConnection->ConnectionString = AConnString;
  466. AConnection->KeepConnection = true;
  467. AConnection->LoginPrompt = false;
  468. AConnection->Open();
  469. }
  470. catch(EDatabaseError &E)
  471. {
  472. ShowMessage(E.Message);
  473. return false;
  474. }
  475. catch (Exception &e)
  476. {
  477. ShowMessage(e.Message);
  478. return false;
  479. }
  480. catch (...)
  481. {
  482. ShowMessage("데이터베이스 연결실패-알수없는 오류");
  483. return false;
  484. }
  485. return true;
  486. }
  487. //---------------------------------------------------------------------------
  488. void __fastcall TSMS0010M::DbClose(TADOConnection *AConnection)
  489. {
  490. if (!AConnection) return;
  491. if (AConnection->Connected)
  492. {
  493. AConnection->Close();
  494. }
  495. }
  496. //---------------------------------------------------------------------------
  497. void __fastcall TSMS0010M::TvList1MouseMove(TObject *Sender, TShiftState Shift, int X,
  498. int Y)
  499. {
  500. try
  501. {
  502. TcxGridSite *ASite = (TcxGridSite *)Sender;
  503. //Screen->Cursor = crDefault;
  504. //TcxCustomGridHitTest *AHitTest = tvSel->GetHitTest(X, Y);
  505. TcxCustomGridHitTest *AHitTest = dynamic_cast<TcxGridRecordHitTest*>(ASite->ViewInfo->GetHitTest(X, Y));
  506. if (dynamic_cast<TcxGridRecordHitTest*>(ASite->ViewInfo->GetHitTest(X, Y)))
  507. {
  508. int ARow = ((TcxGridRecordCellHitTest*)AHitTest)->GridRecord->Index;
  509. if (((TcxGridRecordCellHitTest*)AHitTest)->Item == NULL) return;
  510. int ACol = ((TcxGridRecordCellHitTest*)AHitTest)->Item->Index;
  511. if (ACol == ColumnSel->Index &&
  512. ARow < ASite->GridView->DataController->RecordCount-1)
  513. {
  514. Screen->Cursor = crHandPoint;
  515. }
  516. }
  517. else
  518. {
  519. Screen->Cursor = crDefault;
  520. }
  521. }
  522. catch(...)
  523. {
  524. }
  525. }
  526. //---------------------------------------------------------------------------
  527. void __fastcall TSMS0010M::BtnAllSelectClick(TObject *Sender)
  528. {
  529. TcxButton *pBtn = (TcxButton*)Sender;
  530. CMM_CheckAllListItem(TvList1, ColumnSel->Index, pBtn->Tag);
  531. }
  532. //---------------------------------------------------------------------------
  533. void __fastcall TSMS0010M::BtnCnfmCancelClick(TObject *Sender)
  534. {
  535. memoSMS->Lines->Clear();
  536. }
  537. //---------------------------------------------------------------------------