BaseProvider.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Configuration;
  7. using System.Threading.Tasks;
  8. using Dapper;
  9. using MySql.Data.MySqlClient;
  10. using Winsoft.GOV.Framework.Model;
  11. namespace Winsoft.GOV.Framework.Provider
  12. {
  13. public abstract class BaseProvider<T>
  14. {
  15. #region instance
  16. protected County _county;
  17. private static object lockObj = new object();
  18. protected static void CreateInstance<K>(ref K singleInstance) where K : BaseProvider<T>, new()
  19. {
  20. if (singleInstance == null)
  21. {
  22. lock (lockObj)
  23. {
  24. if (singleInstance == null)
  25. {
  26. singleInstance = new K();
  27. }
  28. }
  29. }
  30. }
  31. #endregion
  32. #region connection
  33. protected string connectionString;
  34. public BaseProvider(County county)
  35. {
  36. _county = county;
  37. connectionString = "gov_" + _county.ToString();
  38. }
  39. /// <summary>
  40. /// </summary>
  41. /// <param name="connectionStr"></param>
  42. /// <returns></returns>
  43. protected IDbConnection GetDbConnection()
  44. {
  45. string connectionStr = ConfigurationManager.ConnectionStrings[connectionString].ConnectionString;
  46. var connection = new MySqlConnection
  47. {
  48. ConnectionString = connectionStr
  49. };
  50. connection.Open();
  51. return connection;
  52. }
  53. protected string BuildTotalSQL(string sql)
  54. {
  55. var selectCount = new StringBuilder("SELECT COUNT(1) from (");
  56. return
  57. selectCount.Append(sql + ") as t")
  58. .ToString();
  59. }
  60. /// <summary>
  61. /// </summary>
  62. /// <param name="total"></param>
  63. /// <param name="sql"></param>
  64. /// <param name="pageIndex">内部索引从0开始,页码从1开始</param>
  65. /// <code>
  66. /// if (pageIndex - 1 >= 0)
  67. /// {
  68. /// pageIndex = pageIndex - 1;
  69. /// }
  70. /// </code>
  71. /// <param name="pageSize"></param>
  72. /// <param name="param"></param>
  73. /// <param name="areaCode"></param>
  74. /// <returns></returns>
  75. protected PagedResult<T> GetPagedList(string sql, int pageIndex, int pageSize, object param = null)
  76. {
  77. long total = 0;
  78. if (pageIndex < 0)
  79. {
  80. pageIndex = 0;
  81. }
  82. if (pageSize <= 0)
  83. {
  84. pageSize = 20;
  85. }
  86. using (IDbConnection connection = GetDbConnection())
  87. {
  88. string totalSql = BuildTotalSQL(sql);
  89. total = connection.Query<long>(totalSql, param).FirstOrDefault();
  90. var list = connection.Query<T>(String.Format(sql + " limit {0},{1}", pageIndex * pageSize, pageSize), param);
  91. return new PagedResult<T>()
  92. {
  93. Data = list,
  94. Index = pageIndex,
  95. Size = pageSize,
  96. Total = total
  97. };
  98. }
  99. }
  100. protected IEnumerable<T> GetItemList(string sql, int itemIndex, int pageSize, object param = null)
  101. {
  102. if (itemIndex < 0)
  103. {
  104. itemIndex = 0;
  105. }
  106. if (pageSize <= 0)
  107. {
  108. pageSize = 20;
  109. }
  110. using (IDbConnection connection = GetDbConnection())
  111. {
  112. var list = connection.Query<T>(String.Format(sql + " limit {0},{1}", itemIndex, pageSize), param);
  113. return list;
  114. }
  115. }
  116. #endregion
  117. }
  118. }