AppGuidManager.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. using System;
  2. using System.Configuration;
  3. using System.Threading.Tasks;
  4. using Abp.Configuration;
  5. using Abp.Dependency;
  6. using Abp.UI;
  7. using IwbZero.ToolCommon.StringModel;
  8. using ContractService.BaseInfo;
  9. using ContractService.CommonManager.Sqls;
  10. using ContractService.Configuration;
  11. namespace ContractService.CommonManager.AppGuids
  12. {
  13. public class AppGuidManager : IAppGuidManager, ISingletonDependency
  14. {
  15. public AppGuidManager(ISettingManager settingManager)
  16. {
  17. SettingManager = settingManager;
  18. SqlManager = NullSqlManager.Instance;
  19. }
  20. public ISqlManager SqlManager { get; set; }
  21. private ISettingManager SettingManager { get; }
  22. /// <summary>
  23. /// 获取下一记录ID
  24. /// </summary>
  25. /// <param name="type"></param>
  26. /// <returns></returns>
  27. public string GetNextRecordId(DataLibType type)
  28. {
  29. var id = GetGuidFromFile(AppGuidType.DataLib);
  30. return FormatterRecordId(id, type);
  31. }
  32. /// <summary>
  33. /// 获取下一记录ID
  34. /// </summary>
  35. /// <param name="type"></param>
  36. /// <returns></returns>
  37. public async Task<string> GetNextRecordIdAsync(DataLibType type)
  38. {
  39. var id = await GetGuidFromFileAsync(AppGuidType.DataLib);
  40. return FormatterRecordId(id, type);
  41. }
  42. public DataLibType GetRecordIdType(string no)
  43. {
  44. var pre = GetIdPrefix();
  45. var typeIntStr= no.Substring(pre.Length, 3);
  46. if (int.TryParse(typeIntStr, out int typeInt))
  47. {
  48. return (DataLibType) typeInt;
  49. }
  50. return DataLibType.Default;
  51. }
  52. /// <summary>
  53. /// 格式化Id
  54. /// </summary>
  55. /// <param name="id"></param>
  56. /// <param name="type"></param>
  57. /// <returns></returns>
  58. private string FormatterRecordId(int id, DataLibType type)
  59. {
  60. if (id == 0)
  61. {
  62. throw new UserFriendlyException("获取RecordId失败");
  63. }
  64. string prefix = GetIdPrefix();
  65. return $"{prefix}{type.ToInt().LeftPad(3)}{id.LeftPad(9)}";
  66. }
  67. /// <summary>
  68. /// 获取前缀
  69. /// </summary>
  70. /// <returns></returns>
  71. private string GetIdPrefix()
  72. {
  73. string str = SettingManager.GetSettingValue(IwbSettingNames.RecordIdPrefix);
  74. if (str.Empty())
  75. {
  76. str = ConfigurationManager.AppSettings["ContractService.RecordId.Prefix"] ?? "JY";
  77. }
  78. return str;
  79. }
  80. /// <summary>
  81. /// 从文件获取自定义Guid
  82. /// </summary>
  83. /// <param name="type"></param>
  84. /// <returns></returns>
  85. public int GetGuidFromFile(AppGuidType type)
  86. {
  87. int guid = RecordIdManager.GetNextRecordId(type);
  88. return guid;
  89. }
  90. /// <summary>
  91. /// 从文件获取自定义Guid
  92. /// </summary>
  93. /// <param name="type"></param>
  94. /// <returns></returns>
  95. public Task<int> GetGuidFromFileAsync(AppGuidType type)
  96. {
  97. int guid = RecordIdManager.GetNextRecordId(type);
  98. return Task.FromResult(guid);
  99. }
  100. #region 从DB获取自定义Guid
  101. ///// <summary>
  102. ///// 获取自定义Guid
  103. ///// </summary>
  104. ///// <param name="type"></param>
  105. ///// <returns></returns>
  106. //public int GetAppGuid(AppGuidType type)
  107. //{
  108. // var sqlParams = new object[3];
  109. // sqlParams[0] = new SqlParameter("@idtype", (int)type);
  110. // sqlParams[1] = new SqlParameter("@nextid", SqlDbType.Int) { Direction = ParameterDirection.Output };
  111. // sqlParams[2] = new SqlParameter("@maxid", SqlDbType.Int) { Direction = ParameterDirection.Output };
  112. // SqlManager.Execute(@"exec [dbo].[Sp_AppGuid] @idtype,@nextid out,@maxid out", sqlParams);
  113. // int guid = (int)((SqlParameter)sqlParams[2]).Value;
  114. // return guid;
  115. //}
  116. ///// <summary>
  117. ///// 获取自定义Guid
  118. ///// </summary>
  119. ///// <param name="type"></param>
  120. ///// <returns></returns>
  121. //public async Task<int> GetAppGuidAsync(AppGuidType type)
  122. //{
  123. // var sqlParams = new object[3];
  124. // sqlParams[0] = new SqlParameter("@idtype", (int)type);
  125. // sqlParams[1] = new SqlParameter("@nextid", SqlDbType.Int) { Direction = ParameterDirection.Output };
  126. // sqlParams[2] = new SqlParameter("@maxid", SqlDbType.Int) { Direction = ParameterDirection.Output };
  127. // await SqlManager.ExecuteAsync(@"exec [dbo].[Sp_AppGuid] @idtype,@nextid out,@maxid out", sqlParams);
  128. // int guid = (int)((SqlParameter)sqlParams[2]).Value;
  129. // return guid;
  130. //}
  131. #endregion
  132. }
  133. }