using Admin.NET.Core;
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.Extras.Admin.NET.Entity;
using Furion.FriendlyException;
using Mapster;
using Microsoft.AspNetCore.Http.Metadata;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
namespace Admin.NET.Application
{
///
/// 代码生成详细配置服务
///
[ApiDescriptionSettings(Name = "CodeGenConfig", Order = 100)]
[Route("api")]
public class SysCodeGenerateConfigService : ICodeGenConfigService, IDynamicApiController, ITransient
{
private readonly IRepository _sysLowCodeRep; // 代码生成器仓储
private readonly IRepository _sysCodeGenRep; // 代码生成器仓储
private readonly IRepository _sysCodeGenConfigRep; // 代码生成详细配置仓储
///
/// 构造函数
///
///
///
///
public SysCodeGenerateConfigService(IRepository sysCodeGenConfigRep, IRepository sysCodeGenRep
, IRepository sysLowCodeRep
)
{
_sysLowCodeRep = sysLowCodeRep;
_sysCodeGenConfigRep = sysCodeGenConfigRep;
_sysCodeGenRep = sysCodeGenRep;
}
///
/// 代码生成详细配置列表
///
///
///
[HttpGet("sysCodeGenerateConfig/list")]
public async Task> List([FromQuery] CodeGenConfig input)
{
var result = await _sysCodeGenConfigRep.DetachedEntities
.Where(u => u.CodeGenId == input.CodeGenId && u.WhetherCommon != YesOrNot.Y.ToString())
.ProjectToType()
.Distinct()
.ToListAsync();
var codeGen = await _sysCodeGenRep.FirstOrDefaultAsync(x => x.Id == input.CodeGenId);
var codeGenOutput = codeGen.Adapt();
result.ForEach(x => x.CodeGen = codeGenOutput);
return result;
}
///
/// 更新
///
///
///
[HttpPost("sysCodeGenerateConfig/edit")]
public async Task Update(List inputList)
{
if (inputList == null || inputList.Count < 1) return;
var list = inputList.Adapt>();
CodeGenHelper.ValidateCodeGenConfig(list);
await _sysCodeGenConfigRep.UpdateAsync(list);
}
///
/// 详情
///
///
///
[HttpGet("·/detail")]
public async Task Detail([FromQuery] CodeGenConfig input)
{
return await _sysCodeGenConfigRep.FirstOrDefaultAsync(u => u.Id == input.Id);
}
///
/// 批量增加
///
///
///
[NonAction]
public async Task DelAndAddList(List tableColumnOuputList, SysCodeGen codeGenerate)
{
if (tableColumnOuputList == null) return;
var list = new List();
List list_LowCode = new List();
if (codeGenerate != null && codeGenerate.LowCodeId > 0 && _sysLowCodeRep.Where(x => x.SysLowCodeId == codeGenerate.LowCodeId).Any())
{
list_LowCode = _sysLowCodeRep.Where(x => x.SysLowCodeId == codeGenerate.LowCodeId).ToList();
}
foreach (var tableColumn in tableColumnOuputList)
{
var codeGenConfig = new SysCodeGenConfig();
var YesOrNo = YesOrNot.Y.ToString();
if (Convert.ToBoolean(tableColumn.ColumnKey))
{
YesOrNo = YesOrNot.N.ToString();
}
if (CodeGenUtil.IsCommonColumn(tableColumn.ColumnName))
{
codeGenConfig.WhetherCommon = YesOrNot.Y.ToString();
YesOrNo = YesOrNot.N.ToString();
}
else
{
codeGenConfig.WhetherCommon = YesOrNot.N.ToString();
}
codeGenConfig.CodeGenId = codeGenerate.Id;
codeGenConfig.ColumnName = tableColumn.ColumnName;
codeGenConfig.ColumnComment = tableColumn.ColumnComment;
codeGenConfig.NetType = CodeGenUtil.ConvertDataType(tableColumn.DataType);
codeGenConfig.DtoNetType = list_LowCode.Where(x => x.FieldName == tableColumn.ColumnName).Select(x => x.DtoTypeName).FirstOrDefault();
if (string.IsNullOrEmpty(codeGenConfig.DtoNetType)) codeGenConfig.DtoNetType = codeGenConfig.NetType;
codeGenConfig.WhetherRetract = YesOrNot.N.ToString();
codeGenConfig.WhetherRequired = tableColumn.IsNullable ? YesOrNot.N.ToString() : YesOrNot.Y.ToString();
codeGenConfig.QueryWhether = YesOrNo;
if (codeGenConfig.WhetherRequired == YesOrNot.Y.ToString())
{//必填字段必须配置增改。
codeGenConfig.WhetherAddUpdate = YesOrNot.Y.ToString();
if (codeGenConfig.ColumnName.ToLower() == "id")
{
codeGenConfig.WhetherAddUpdate = YesOrNot.N.ToString();
}
}
else
{//字段不必填
//ly-0419 生成新建 编辑页面 创建人 修改人创建时间 修改时间 也自动生成,需要去掉
if (codeGenConfig.ColumnName == "CreatedTime" || codeGenConfig.ColumnName == "UpdatedTime"
|| codeGenConfig.ColumnName == "CreatedUserName" || codeGenConfig.ColumnName == "UpdatedUserName")
{
codeGenConfig.WhetherAddUpdate = YesOrNot.N.ToString();
}
else
{
codeGenConfig.WhetherAddUpdate = YesOrNo;
}
}
codeGenConfig.WhetherTable = YesOrNo;
codeGenConfig.WhetherOrderBy = YesOrNo;
//是否联合主键 update by liuwq 20240418
codeGenConfig.WhetherUnionKey = YesOrNot.N.ToString();
codeGenConfig.ColumnKey = tableColumn.ColumnKey;
codeGenConfig.DataType = tableColumn.DataType;
codeGenConfig.EffectType = CodeGenUtil.DataTypeToEff(codeGenConfig.NetType);
codeGenConfig.QueryType = QueryTypeConst.等于; // QueryTypeEnum.eq.ToString();
if (codeGenConfig.DtoNetType.ToLower() == "datetime".ToLower() || codeGenConfig.DtoNetType.ToLower() == "DateTimeOffset".ToLower())
{
codeGenConfig.QueryType = QueryTypeConst.介于;
}
codeGenConfig.ShowTitleMinWidth = tableColumn.ShowTitleMinWidth;
list.Add(codeGenConfig);
}
_sysCodeGenConfigRep.Context.DeleteRange(x => x.CodeGenId == codeGenerate.Id);
await _sysCodeGenConfigRep.InsertAsync(list);
}
///
/// 增加
///
///
///
[NonAction]
public async Task Add(CodeGenConfig input)
{
var codeGenConfig = input.Adapt();
await codeGenConfig.InsertAsync();
}
///
/// 删除
///
///
///
[NonAction]
public async Task Delete(long codeGenId)
{
var codeGenConfigList = await _sysCodeGenConfigRep.Where(u => u.CodeGenId == codeGenId).ToListAsync();
await _sysCodeGenConfigRep.DeleteAsync(codeGenConfigList);
}
}
}