systemDataAccess.cs 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using Oracle.ManagedDataAccess.Client;
  6. using System.Data;
  7. namespace ResfullApi.Models
  8. {
  9. public class systemDataAccess
  10. {
  11. public systemDataAccess()
  12. {
  13. }
  14. public static DataSet SYS_GET_SERVICE_BY_ID(string v_SV_ID)
  15. {
  16. string str;
  17. str = "";
  18. str = "api_pkg.SYS_GET_SERVICE_BY_ID";
  19. OracleParameter[] parms;
  20. parms = new OracleParameter[]
  21. {
  22. new OracleParameter("v_sv_id", OracleDbType.NVarchar2),
  23. new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
  24. };
  25. parms[0].Value = v_SV_ID;
  26. return DataAccess.getDataFromProcedure(str, "", parms);
  27. }
  28. public static DataSet SYS_PUSH_USSD_DETAIL_GET_LIST(
  29. string v_users, string v_campaignId, string v_serviceId, string v_msisdn, string v_sendStatus, string v_isSuccess,
  30. string v_fromDate, string v_toDate, string v_order, string v_rowsOnPage, string v_seqPage)
  31. {
  32. DataSet ds = new DataSet();
  33. OracleConnection dbConnection = DataAccess.getPoolingConnection();
  34. try
  35. {
  36. dbConnection.Open();
  37. int rowsOnPage = int.TryParse(v_rowsOnPage, out int r) ? r : 50;
  38. int seqPage = int.TryParse(v_seqPage, out int s) ? s : 1;
  39. string baseSql = @"SELECT PUD.ID, PUD.REQUEST_ID, PUD.CAMPAIGN_ID, CAMP.NAME AS CAMPAIGN_NAME, PUD.SERVICE_ID, PUD.MSISDN,
  40. PUD.SEND_TIME, PUD.SEND_STATUS, PUD.TOTAL_STEP, PUD.IS_STEP_1, PUD.STEP_1_TIME,
  41. PUD.IS_STEP_2, PUD.STEP_2_TIME, PUD.ERROR_CODE, PUD.IS_SUCCESS, PUD.INSERT_TIME, PUD.LAST_UPDATE
  42. FROM PUSH_USSD_DETAIL PUD
  43. LEFT JOIN CAMPAIGN CAMP ON PUD.CAMPAIGN_ID = CAMP.ID
  44. WHERE 1=1";
  45. string where = "";
  46. if (!string.IsNullOrEmpty(v_campaignId) && v_campaignId != "-1")
  47. {
  48. where += " AND PUD.CAMPAIGN_ID = :v_campaignId";
  49. }
  50. if (!string.IsNullOrEmpty(v_serviceId) && v_serviceId != "-1")
  51. {
  52. where += " AND PUD.SERVICE_ID = :v_serviceId";
  53. }
  54. if (!string.IsNullOrEmpty(v_msisdn) && v_msisdn != "-1")
  55. {
  56. where += " AND PUD.MSISDN = :v_msisdn";
  57. }
  58. if (!string.IsNullOrEmpty(v_sendStatus) && v_sendStatus != "-1")
  59. {
  60. where += " AND PUD.SEND_STATUS = :v_sendStatus";
  61. }
  62. if (!string.IsNullOrEmpty(v_isSuccess) && v_isSuccess != "-1")
  63. {
  64. where += " AND PUD.IS_SUCCESS = :v_isSuccess";
  65. }
  66. if (!string.IsNullOrEmpty(v_fromDate) && v_fromDate != "-1")
  67. {
  68. where += " AND TRUNC(PUD.SEND_TIME) >= TRUNC(TO_DATE(:v_fromDate, 'DD/MM/YYYY'))";
  69. }
  70. if (!string.IsNullOrEmpty(v_toDate) && v_toDate != "-1")
  71. {
  72. where += " AND TRUNC(PUD.SEND_TIME) <= TRUNC(TO_DATE(:v_toDate, 'DD/MM/YYYY'))";
  73. }
  74. string orderBy = " ORDER BY PUD.SEND_TIME " + (v_order == "asc" ? "ASC" : "DESC") + ", PUD.ID " + (v_order == "asc" ? "ASC" : "DESC");
  75. string countSql = "SELECT COUNT(*) FROM (" + baseSql + where + ")";
  76. OracleCommand countCmd = new OracleCommand(countSql, dbConnection);
  77. if (!string.IsNullOrEmpty(v_campaignId) && v_campaignId != "-1") countCmd.Parameters.Add(":v_campaignId", OracleDbType.NVarchar2).Value = v_campaignId;
  78. if (!string.IsNullOrEmpty(v_serviceId) && v_serviceId != "-1") countCmd.Parameters.Add(":v_serviceId", OracleDbType.NVarchar2).Value = v_serviceId;
  79. if (!string.IsNullOrEmpty(v_msisdn) && v_msisdn != "-1") countCmd.Parameters.Add(":v_msisdn", OracleDbType.NVarchar2).Value = v_msisdn;
  80. if (!string.IsNullOrEmpty(v_sendStatus) && v_sendStatus != "-1") countCmd.Parameters.Add(":v_sendStatus", OracleDbType.NVarchar2).Value = v_sendStatus;
  81. if (!string.IsNullOrEmpty(v_isSuccess) && v_isSuccess != "-1") countCmd.Parameters.Add(":v_isSuccess", OracleDbType.NVarchar2).Value = v_isSuccess;
  82. if (!string.IsNullOrEmpty(v_fromDate) && v_fromDate != "-1") countCmd.Parameters.Add(":v_fromDate", OracleDbType.NVarchar2).Value = v_fromDate;
  83. if (!string.IsNullOrEmpty(v_toDate) && v_toDate != "-1") countCmd.Parameters.Add(":v_toDate", OracleDbType.NVarchar2).Value = v_toDate;
  84. int totalRows = Convert.ToInt32(countCmd.ExecuteScalar());
  85. int minRow = (seqPage - 1) * rowsOnPage;
  86. string dataSql = string.Format(@"SELECT * FROM (
  87. SELECT A.*, ROWNUM rnum FROM ({0}{1}{2}) A WHERE ROWNUM <= {3}
  88. ) WHERE rnum > {4}", baseSql, where, orderBy, minRow + rowsOnPage, minRow);
  89. OracleCommand dataCmd = new OracleCommand(dataSql, dbConnection);
  90. if (!string.IsNullOrEmpty(v_campaignId) && v_campaignId != "-1") dataCmd.Parameters.Add(":v_campaignId", OracleDbType.NVarchar2).Value = v_campaignId;
  91. if (!string.IsNullOrEmpty(v_serviceId) && v_serviceId != "-1") dataCmd.Parameters.Add(":v_serviceId", OracleDbType.NVarchar2).Value = v_serviceId;
  92. if (!string.IsNullOrEmpty(v_msisdn) && v_msisdn != "-1") dataCmd.Parameters.Add(":v_msisdn", OracleDbType.NVarchar2).Value = v_msisdn;
  93. if (!string.IsNullOrEmpty(v_sendStatus) && v_sendStatus != "-1") dataCmd.Parameters.Add(":v_sendStatus", OracleDbType.NVarchar2).Value = v_sendStatus;
  94. if (!string.IsNullOrEmpty(v_isSuccess) && v_isSuccess != "-1") dataCmd.Parameters.Add(":v_isSuccess", OracleDbType.NVarchar2).Value = v_isSuccess;
  95. if (!string.IsNullOrEmpty(v_fromDate) && v_fromDate != "-1") dataCmd.Parameters.Add(":v_fromDate", OracleDbType.NVarchar2).Value = v_fromDate;
  96. if (!string.IsNullOrEmpty(v_toDate) && v_toDate != "-1") dataCmd.Parameters.Add(":v_toDate", OracleDbType.NVarchar2).Value = v_toDate;
  97. OracleDataAdapter da = new OracleDataAdapter(dataCmd);
  98. da.Fill(ds);
  99. // Append page info
  100. DataTable meta = new DataTable("META");
  101. meta.Columns.Add("TOTAL_PAGE");
  102. meta.Columns.Add("ROW_ON_PAGE");
  103. meta.Columns.Add("SEQ_PAGE");
  104. var rowMeta = meta.NewRow();
  105. rowMeta["TOTAL_PAGE"] = Math.Ceiling((double)totalRows / rowsOnPage).ToString();
  106. rowMeta["ROW_ON_PAGE"] = rowsOnPage.ToString();
  107. rowMeta["SEQ_PAGE"] = seqPage.ToString();
  108. meta.Rows.Add(rowMeta);
  109. ds.Tables.Add(meta);
  110. }
  111. catch (Exception ex)
  112. {
  113. throw ex;
  114. }
  115. finally
  116. {
  117. dbConnection.Close();
  118. }
  119. return ds;
  120. }
  121. public static DataSet SYS_UPDATE_LOG_CHARGE(string msisdn, string sv_id, string money, string cmd_code, string cmd_msg, string err_code, string err_msg, string isRenew)
  122. {
  123. string str;
  124. str = "";
  125. str = "api_pkg.SYS_UPDATE_LOG_CHARGE";
  126. OracleParameter[] parms;
  127. parms = new OracleParameter[]
  128. {
  129. new OracleParameter("v_msisdn", OracleDbType.NVarchar2),
  130. new OracleParameter("v_sv_id", OracleDbType.NVarchar2),
  131. new OracleParameter("v_money", OracleDbType.NVarchar2),
  132. new OracleParameter("v_cmd_code", OracleDbType.NVarchar2),
  133. new OracleParameter("v_cmd_msg", OracleDbType.NVarchar2),
  134. new OracleParameter("v_err_code", OracleDbType.NVarchar2),
  135. new OracleParameter("v_err_msg", OracleDbType.NVarchar2),
  136. new OracleParameter("v_isrenew", OracleDbType.NVarchar2),
  137. new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
  138. };
  139. parms[0].Value = msisdn;
  140. parms[2].Value = sv_id;
  141. parms[3].Value = money;
  142. parms[4].Value = cmd_code;
  143. parms[5].Value = cmd_msg;
  144. parms[6].Value = err_code;
  145. parms[7].Value = err_msg;
  146. parms[8].Value = isRenew;
  147. return DataAccess.getDataFromProcedure(str, "", parms);
  148. }
  149. public static DataSet SYS_REPORT_COUNT_DAILY_GET_LIST(string v_users, string v_id, string v_reportDate, string v_campaignId, string v_serviceId, string v_fromDate, string v_toDate, string v_order, string v_rowsOnPage, string v_seqPage)
  150. {
  151. DataSet ds = new DataSet();
  152. OracleConnection dbConnection = DataAccess.getPoolingConnection();
  153. try
  154. {
  155. dbConnection.Open();
  156. // Parse pagination parameters
  157. int rowsOnPage = int.TryParse(v_rowsOnPage, out int r) ? r : 10;
  158. int seqPage = int.TryParse(v_seqPage, out int s) ? s : 1;
  159. // Build base query for counting total records
  160. string countSql = @"SELECT COUNT(*) FROM REPORT_COUNT_DAILY rcd
  161. LEFT JOIN B_CAMPAIGN c ON rcd.CAMPAIGN_ID = c.ID
  162. LEFT JOIN B_CAMPAIGN_ADD ca ON c.ID = ca.CAMPAIGN_ID AND rcd.SERVICE_ID = ca.SERVICE_ADD_ID AND ca.IS_DELETE = 0
  163. LEFT JOIN B_SERVICE s ON (ca.SERVICE_ADD_ID = s.ID OR (ca.SERVICE_ADD_ID IS NULL AND rcd.SERVICE_ID = s.ID))
  164. WHERE 1=1";
  165. string dataSql = @"SELECT rcd.ID, rcd.REPORT_DATE, rcd.CAMPAIGN_ID, c.NAME AS CAMPAIGN_NAME,
  166. c.PRIORITY, c.IS_DEFAULT, c.IS_MYSERVICE, c.ADD_TYPE,
  167. rcd.SERVICE_ID, s.NAME AS SERVICE_NAME,
  168. rcd.COUNT_SEND_1, rcd.COUNT_SUCCESS_1, rcd.COUNT_FAIL_1, rcd.COUNT_PRESS_1,
  169. rcd.COUNT_SEND_2, rcd.COUNT_PRESS_2,
  170. rcd.COUNT_REG_SUCCESS, rcd.COUNT_REG_FAIL, rcd.INSERT_TIME
  171. FROM REPORT_COUNT_DAILY rcd
  172. LEFT JOIN B_CAMPAIGN c ON rcd.CAMPAIGN_ID = c.ID
  173. LEFT JOIN B_CAMPAIGN_ADD ca ON c.ID = ca.CAMPAIGN_ID AND rcd.SERVICE_ID = ca.SERVICE_ADD_ID AND ca.IS_DELETE = 0
  174. LEFT JOIN B_SERVICE s ON (ca.SERVICE_ADD_ID = s.ID OR (ca.SERVICE_ADD_ID IS NULL AND rcd.SERVICE_ID = s.ID))
  175. WHERE 1=1";
  176. // Add filters
  177. if (v_id != null && v_id != "-1")
  178. {
  179. countSql += " AND rcd.ID = :v_id";
  180. dataSql += " AND rcd.ID = :v_id";
  181. }
  182. if (v_reportDate != null && v_reportDate != "-1")
  183. {
  184. countSql += " AND TRUNC(rcd.REPORT_DATE) = TRUNC(TO_DATE(:v_reportDate, 'DD/MM/YYYY'))";
  185. dataSql += " AND TRUNC(rcd.REPORT_DATE) = TRUNC(TO_DATE(:v_reportDate, 'DD/MM/YYYY'))";
  186. }
  187. if (v_campaignId != null && v_campaignId != "-1")
  188. {
  189. countSql += " AND rcd.CAMPAIGN_ID = :v_campaignId";
  190. dataSql += " AND rcd.CAMPAIGN_ID = :v_campaignId";
  191. }
  192. if (v_serviceId != null && v_serviceId != "-1")
  193. {
  194. countSql += " AND rcd.SERVICE_ID = :v_serviceId";
  195. dataSql += " AND rcd.SERVICE_ID = :v_serviceId";
  196. }
  197. if (v_fromDate != null && v_fromDate != "-1")
  198. {
  199. countSql += " AND TRUNC(rcd.REPORT_DATE) >= TRUNC(TO_DATE(:v_fromDate, 'DD/MM/YYYY'))";
  200. dataSql += " AND TRUNC(rcd.REPORT_DATE) >= TRUNC(TO_DATE(:v_fromDate, 'DD/MM/YYYY'))";
  201. }
  202. if (v_toDate != null && v_toDate != "-1")
  203. {
  204. countSql += " AND TRUNC(rcd.REPORT_DATE) <= TRUNC(TO_DATE(:v_toDate, 'DD/MM/YYYY'))";
  205. dataSql += " AND TRUNC(rcd.REPORT_DATE) <= TRUNC(TO_DATE(:v_toDate, 'DD/MM/YYYY'))";
  206. }
  207. // Add ordering
  208. dataSql += " ORDER BY rcd.REPORT_DATE " + (v_order == "desc" ? "DESC" : "ASC") + ", rcd.ID " + (v_order == "desc" ? "DESC" : "ASC");
  209. // Calculate pagination
  210. OracleCommand countCmd = new OracleCommand(countSql, dbConnection);
  211. countCmd.CommandType = CommandType.Text;
  212. if (v_id != null && v_id != "-1")
  213. {
  214. countCmd.Parameters.Add(":v_id", OracleDbType.NVarchar2).Value = v_id;
  215. }
  216. if (v_reportDate != null && v_reportDate != "-1")
  217. {
  218. countCmd.Parameters.Add(":v_reportDate", OracleDbType.NVarchar2).Value = v_reportDate;
  219. }
  220. if (v_campaignId != null && v_campaignId != "-1")
  221. {
  222. countCmd.Parameters.Add(":v_campaignId", OracleDbType.NVarchar2).Value = v_campaignId;
  223. }
  224. if (v_serviceId != null && v_serviceId != "-1")
  225. {
  226. countCmd.Parameters.Add(":v_serviceId", OracleDbType.NVarchar2).Value = v_serviceId;
  227. }
  228. if (v_fromDate != null && v_fromDate != "-1")
  229. {
  230. countCmd.Parameters.Add(":v_fromDate", OracleDbType.NVarchar2).Value = v_fromDate;
  231. }
  232. if (v_toDate != null && v_toDate != "-1")
  233. {
  234. countCmd.Parameters.Add(":v_toDate", OracleDbType.NVarchar2).Value = v_toDate;
  235. }
  236. int totalRows = Convert.ToInt32(countCmd.ExecuteScalar());
  237. int totalPage = (int)Math.Ceiling((double)totalRows / rowsOnPage);
  238. // Get paginated data
  239. int minRow = (seqPage - 1) * rowsOnPage;
  240. dataSql = string.Format(@"SELECT * FROM (
  241. SELECT A.*, ROWNUM rnum FROM ({0}) A WHERE ROWNUM <= {1}
  242. ) WHERE rnum > {2}", dataSql, minRow + rowsOnPage, minRow);
  243. OracleCommand dataCmd = new OracleCommand(dataSql, dbConnection);
  244. dataCmd.CommandType = CommandType.Text;
  245. if (v_id != null && v_id != "-1")
  246. {
  247. dataCmd.Parameters.Add(":v_id", OracleDbType.NVarchar2).Value = v_id;
  248. }
  249. if (v_reportDate != null && v_reportDate != "-1")
  250. {
  251. dataCmd.Parameters.Add(":v_reportDate", OracleDbType.NVarchar2).Value = v_reportDate;
  252. }
  253. if (v_campaignId != null && v_campaignId != "-1")
  254. {
  255. dataCmd.Parameters.Add(":v_campaignId", OracleDbType.NVarchar2).Value = v_campaignId;
  256. }
  257. if (v_serviceId != null && v_serviceId != "-1")
  258. {
  259. dataCmd.Parameters.Add(":v_serviceId", OracleDbType.NVarchar2).Value = v_serviceId;
  260. }
  261. if (v_fromDate != null && v_fromDate != "-1")
  262. {
  263. dataCmd.Parameters.Add(":v_fromDate", OracleDbType.NVarchar2).Value = v_fromDate;
  264. }
  265. if (v_toDate != null && v_toDate != "-1")
  266. {
  267. dataCmd.Parameters.Add(":v_toDate", OracleDbType.NVarchar2).Value = v_toDate;
  268. }
  269. OracleDataAdapter dataAdapter = new OracleDataAdapter(dataCmd);
  270. dataAdapter.Fill(ds);
  271. // Add pagination metadata to each row
  272. if (ds.Tables.Count > 0)
  273. {
  274. if (ds.Tables[0].Columns.Contains("ROW_ON_PAGE"))
  275. {
  276. ds.Tables[0].Columns.Remove("ROW_ON_PAGE");
  277. }
  278. if (ds.Tables[0].Columns.Contains("SEQ_PAGE"))
  279. {
  280. ds.Tables[0].Columns.Remove("SEQ_PAGE");
  281. }
  282. if (ds.Tables[0].Columns.Contains("TOTAL_PAGE"))
  283. {
  284. ds.Tables[0].Columns.Remove("TOTAL_PAGE");
  285. }
  286. ds.Tables[0].Columns.Add("ROW_ON_PAGE", typeof(string));
  287. ds.Tables[0].Columns.Add("SEQ_PAGE", typeof(string));
  288. ds.Tables[0].Columns.Add("TOTAL_PAGE", typeof(string));
  289. ds.Tables[0].Columns.Add("STATUS", typeof(string));
  290. ds.Tables[0].Columns.Add("MSG", typeof(string));
  291. foreach (DataRow row in ds.Tables[0].Rows)
  292. {
  293. row["ROW_ON_PAGE"] = rowsOnPage.ToString();
  294. row["SEQ_PAGE"] = seqPage.ToString();
  295. row["TOTAL_PAGE"] = totalPage.ToString();
  296. row["STATUS"] = "0";
  297. row["MSG"] = "Success";
  298. }
  299. }
  300. }
  301. catch (OracleException ex)
  302. {
  303. throw ex;
  304. }
  305. catch (Exception ex)
  306. {
  307. throw ex;
  308. }
  309. finally
  310. {
  311. dbConnection.Close();
  312. }
  313. return ds;
  314. }
  315. public static DataSet SYS_REPORT_ERROR_DAILY_GET_LIST(string v_users, string v_reportDate, string v_campaignId, string v_serviceId)
  316. {
  317. DataSet ds = new DataSet();
  318. OracleConnection dbConnection = DataAccess.getPoolingConnection();
  319. try
  320. {
  321. dbConnection.Open();
  322. string dataSql = @"SELECT ID, REPORT_DATE, CAMPAIGN_ID, SERVICE_ID, ERROR_CODE, COUNT_NUM, INSERT_TIME
  323. FROM REPORT_ERROR_DAILY
  324. WHERE 1=1";
  325. // Add filters based on foreign keys
  326. if (v_reportDate != null && v_reportDate != "-1" && !string.IsNullOrEmpty(v_reportDate))
  327. {
  328. dataSql += " AND TRUNC(REPORT_DATE) = TRUNC(TO_DATE(:v_reportDate, 'DD/MM/YYYY'))";
  329. }
  330. if (v_campaignId != null && v_campaignId != "-1" && !string.IsNullOrEmpty(v_campaignId))
  331. {
  332. dataSql += " AND CAMPAIGN_ID = :v_campaignId";
  333. }
  334. if (v_serviceId != null && v_serviceId != "-1" && !string.IsNullOrEmpty(v_serviceId))
  335. {
  336. dataSql += " AND SERVICE_ID = :v_serviceId";
  337. }
  338. // Order by error code
  339. dataSql += " ORDER BY ERROR_CODE, ID";
  340. OracleCommand dataCmd = new OracleCommand(dataSql, dbConnection);
  341. dataCmd.CommandType = CommandType.Text;
  342. if (v_reportDate != null && v_reportDate != "-1" && !string.IsNullOrEmpty(v_reportDate))
  343. {
  344. dataCmd.Parameters.Add(":v_reportDate", OracleDbType.NVarchar2).Value = v_reportDate;
  345. }
  346. if (v_campaignId != null && v_campaignId != "-1" && !string.IsNullOrEmpty(v_campaignId))
  347. {
  348. dataCmd.Parameters.Add(":v_campaignId", OracleDbType.NVarchar2).Value = v_campaignId;
  349. }
  350. if (v_serviceId != null && v_serviceId != "-1" && !string.IsNullOrEmpty(v_serviceId))
  351. {
  352. dataCmd.Parameters.Add(":v_serviceId", OracleDbType.NVarchar2).Value = v_serviceId;
  353. }
  354. OracleDataAdapter dataAdapter = new OracleDataAdapter(dataCmd);
  355. dataAdapter.Fill(ds);
  356. // Add status columns
  357. if (ds.Tables.Count > 0)
  358. {
  359. ds.Tables[0].Columns.Add("STATUS", typeof(string));
  360. ds.Tables[0].Columns.Add("MSG", typeof(string));
  361. foreach (DataRow row in ds.Tables[0].Rows)
  362. {
  363. row["STATUS"] = "0";
  364. row["MSG"] = "Success";
  365. }
  366. }
  367. }
  368. catch (OracleException ex)
  369. {
  370. throw ex;
  371. }
  372. catch (Exception ex)
  373. {
  374. throw ex;
  375. }
  376. finally
  377. {
  378. dbConnection.Close();
  379. }
  380. return ds;
  381. }
  382. }
  383. }