using Abp.Configuration;
using Abp.Dependency;
using Abp.UI;
using VberZero.Configuration;
using VberZero.Settings;
using VberZero.Tools.StringModel;
namespace VberZero.DomainService.AppGuids;
public class AppGuidManager : VzDomainServiceBase, IAppGuidManager, ISingletonDependency
{
public AppGuidManager(ISettingManager settingManager, RecordIdManager riManager, IWebHostEnvironment env)
{
_settingManager = settingManager;
_riManager = riManager;
_configuration = env.GetAppConfiguration();
}
private readonly IConfigurationRoot _configuration;
private readonly ISettingManager _settingManager;
private readonly RecordIdManager _riManager;
///
/// 获取下一记录ID
///
///
///
public string GetNextRecordId(int type)
{
var id = GetGuidFromFile(AppGuidType.DataLib);
return FormatterRecordId(id, type);
}
///
/// 获取下一记录ID
///
///
///
public async Task GetNextRecordIdAsync(int type)
{
var id = await GetGuidFromFileAsync(AppGuidType.DataLib);
return FormatterRecordId(id, type);
}
public int GetRecordIdType(string no)
{
var pre = GetIdPrefix();
var typeIntStr = no.Substring(pre.Length, 3);
if (int.TryParse(typeIntStr, out int typeInt))
{
return typeInt;
}
return default;
}
///
/// 格式化Id
///
///
///
///
private string FormatterRecordId(int id, int type)
{
if (id == 0)
{
throw new UserFriendlyException("获取RecordId失败");
}
string prefix = GetIdPrefix();
return $"{prefix}{type.ToInt().LeftPad(3)}{id.LeftPad(9)}";
}
///
/// 获取前缀
///
///
private string GetIdPrefix()
{
string str = _settingManager.GetSettingValue(VzSettingNames.RecordIdPrefix);
if (str.Empty())
{
str = _configuration["RecordId:Prefix"] ?? "VB";
}
return str;
}
///
/// 从文件获取自定义Guid
///
///
///
public int GetGuidFromFile(AppGuidType type)
{
int guid = _riManager.GetNextRecordId(type);
return guid;
}
///
/// 从文件获取自定义Guid
///
///
///
public Task GetGuidFromFileAsync(AppGuidType type)
{
int guid = _riManager.GetNextRecordId(type);
return Task.FromResult(guid);
}
#region 从DB获取自定义Guid
/////
///// 获取自定义Guid
/////
/////
/////
//public int GetAppGuid(AppGuidType type)
//{
// var sqlParams = new object[3];
// sqlParams[0] = new SqlParameter("@idtype", (int)type);
// sqlParams[1] = new SqlParameter("@nextid", SqlDbType.Int) { Direction = ParameterDirection.Output };
// sqlParams[2] = new SqlParameter("@maxid", SqlDbType.Int) { Direction = ParameterDirection.Output };
// SqlManager.Execute(@"exec [dbo].[Sp_AppGuid] @idtype,@nextid out,@maxid out", sqlParams);
// int guid = (int)((SqlParameter)sqlParams[2]).Value;
// return guid;
//}
/////
///// 获取自定义Guid
/////
/////
/////
//public async Task GetAppGuidAsync(AppGuidType type)
//{
// var sqlParams = new object[3];
// sqlParams[0] = new SqlParameter("@idtype", (int)type);
// sqlParams[1] = new SqlParameter("@nextid", SqlDbType.Int) { Direction = ParameterDirection.Output };
// sqlParams[2] = new SqlParameter("@maxid", SqlDbType.Int) { Direction = ParameterDirection.Output };
// await SqlManager.ExecuteAsync(@"exec [dbo].[Sp_AppGuid] @idtype,@nextid out,@maxid out", sqlParams);
// int guid = (int)((SqlParameter)sqlParams[2]).Value;
// return guid;
//}
#endregion 从DB获取自定义Guid
}