using StringHelper = SimpleTool.StringHelper;
namespace SimpleAdmin.System;
///
///
///
public class GenBasicService : DbRepository, IGenbasicService
{
private readonly ILogger _logger;
private readonly IViewEngine _viewEngine;
private readonly IGenConfigService _genConfigService;
private readonly IMenuService _menuService;
private readonly IButtonService _buttonService;
private readonly ISysRoleService _roleService;
private readonly string _sqlDir = "Sql";
private readonly string _backendDir = "Backend";
private readonly string _frontDir = "Frontend";
private const string _interfaceDir = "interface";
private const string _modulesDir = "modules";
private const string _indexTs = "index.ts";
public GenBasicService(ILogger logger,
IViewEngine viewEngine,
IGenConfigService genConfigService,
IMenuService menuService,
IButtonService buttonService, ISysRoleService roleService)
{
_logger = logger;
_viewEngine = viewEngine;
_genConfigService = genConfigService;
_menuService = menuService;
_buttonService = buttonService;
_roleService = roleService;
}
///
public async Task> Page(BasePageInput input)
{
var query = Context.Queryable()
.OrderByIF(!string.IsNullOrEmpty(input.SortField), $"{input.SortField} {input.SortOrder}")//排序
.OrderBy(it => it.SortCode, OrderByType.Desc)//默认排序
.OrderBy(it => it.CreateTime, OrderByType.Desc)//默认排序
.Mapper(it =>
{
it.FuncList = it.Functions.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList();//功能集合转为列表
});
var pageInfo = await query.ToPagedListAsync(input.PageNum, input.PageSize);//分页
return pageInfo;
}
///
public List GetTables(bool isAll = false)
{
if (isAll)
return SqlSugarUtils.GetTablesByAttribute();
return SqlSugarUtils.GetTablesByAttribute();
}
///
public List GetAssemblies()
{
var names = new List();//结果集
var excludeList = new List
{
"Web.Entry", "Core", "Cache", "SqlSugar", "Plugin.Core", "Plugin.Aop"
};//排除的程序集
//获取所有程序集名称
var assemblies = App.Assemblies
.Where(it => !it.FullName.StartsWith("MoYu"))
.Select(it => it.FullName).ToList();
assemblies.ForEach(it =>
{
var name = it.Split(",")[0];//根据逗号分割取第一个
//根据.分割获取最后两个
var projectName = string.Join(".", name.Split(".").Skip(1).ToList());
if (!excludeList.Contains(projectName))//去掉排除的程序集
{
names.Add(name);
}
});
return names;
}
///
public async Task Add(GenBasicAddInput input)
{
var entity = input.Adapt();//输入参数转实体
entity.Functions = string.Join(",", input.FuncList);//功能集合
var tableColumns = SqlSugarUtils.GetTableColumns(input.ConfigId, input.DbTable);//获取表的字段信息
var genConfigs = new List();//代码生成配置字段集合
//遍历字段
var sortCode = 0;
//遍历字段
tableColumns.ForEach(it =>
{
#region 判断是否想显示
var yesOrNo = GenConst.Yes;
if (it.IsPrimaryKey || SqlSugarUtils.IsCommonColumn(it.ColumnName))//如果是主键或者是公共字段则不显示
yesOrNo = GenConst.No;
else
yesOrNo = GenConst.Yes;
#endregion 判断是否想显示
//添加到字段集合
genConfigs.Add(new GenConfig
{
IsPrimaryKey = it.IsPrimaryKey ? GenConst.Yes : GenConst.No,
FieldName = it.ColumnName,
FieldType = it.DataType,
FieldNetType = SqlSugarUtils.ConvertDataType(it.DataType),
FieldRemark = it.ColumnDescription ?? it.ColumnName,
EffectType = EffTypeConst.INPUT,
Width = 100,
WhetherTable = yesOrNo,
WhetherAddUpdate = yesOrNo,
WhetherImportExport = yesOrNo,
WhetherResizable = GenConst.No,
WhetherRequired = GenConst.No,
WhetherRetract = GenConst.No,
QueryWhether = GenConst.No,
SortCode = yesOrNo == GenConst.No ? 99 : sortCode//如果是公共字段就排最后
});
sortCode++;
});
var index = 0;
genConfigs = genConfigs.OrderBy(it => it.SortCode).ToList();//排序
genConfigs.ForEach(it =>
{
it.FieldIndex = index;
index++;
});
if (!genConfigs.Any(it => it.IsPrimaryKey == GenConst.Yes))//判断是否有主键
{
throw Oops.Bah("要生成的表必须有主键");
}
//事务
var result = await Tenant.UseTranAsync(async () =>
{
entity = await InsertReturnEntityAsync(entity);//输入参数转实体并插入
genConfigs.ForEach(it => { it.BasicId = entity.Id; });//遍历字段赋值基础Id
await Context.Insertable(genConfigs).ExecuteCommandAsync();
});
if (!result.IsSuccess)//如果失败了
{
//写日志
_logger.LogError(result.ErrorMessage, result.ErrorException);
throw Oops.Oh(ErrorCodeEnum.A0003);
}
return entity;
}
///
public async Task Delete(BaseIdListInput input)
{
//获取所有ID
var ids = input.Ids.ToList();
if (ids.Count > 0)
{
//事务
var result = await Tenant.UseTranAsync(async () =>
{
await DeleteByIdsAsync(ids.Cast