You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

120 lines
5.0 KiB

using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ReZero.SuperAPI
{
public partial class MethodApi
{
public object AddOrUpdateEntityColumninfos(string columns)
{
try
{
List<ZeroEntityColumnInfo> zeroEntityColumns = App.Db.Utilities.DeserializeObject<List<ZeroEntityColumnInfo>>(columns);
var tableId = zeroEntityColumns.GroupBy(it => it.TableId).Select(it => it.Key).Single();
EntityGeneratorManager.RemoveTypeCacheByTypeId(tableId);
var tableInfo = App.Db.Queryable<ZeroEntityInfo>().Where(it => it.Id == tableId).Single();
this.CheckTableInfo(tableInfo);
App.Db.Deleteable<ZeroEntityColumnInfo>().Where(it => it.TableId == tableId).ExecuteCommand();
var newColumns = ConvetSaveColumn(zeroEntityColumns).ToArray();
this.CheckColumns(newColumns);
App.Db.Insertable(newColumns).ExecuteReturnSnowflakeId();
tableInfo.ColumnCount = newColumns.Length;
App.Db.Updateable(tableInfo).UpdateColumns(it => new { it.ColumnCount }).ExecuteCommand();
CacheManager<ZeroEntityInfo>.Instance.ClearCache();
return true;
}
catch (Exception ex)
{
return ex.Message;
}
}
private void CheckColumns(ZeroEntityColumnInfo[] newColumns)
{
if (IsRepeatColumn(newColumns))
{
throw new Exception(TextHandler.GetCommonText("列名重复", "Column name repeat"));
}
foreach (var item in newColumns)
{
if (item.IsPrimarykey && item.IsNullable)
{
throw new Exception(TextHandler.GetCommonText("主键不能为null", "Primary key cannot be null"));
}
}
}
private static bool IsRepeatColumn(ZeroEntityColumnInfo[] newColumns)
{
return newColumns
.Where(it => it.PropertyName != null)
.GroupBy(it => it.PropertyName?.ToLower()).Any(it => it.Count() > 1) ||
newColumns
.Where(it => it.DbColumnName != null)
.GroupBy(it => it.DbColumnName?.ToLower())
.Any(it => it.Count() > 1);
}
private List<ZeroEntityColumnInfo> ConvetSaveColumn(List<ZeroEntityColumnInfo> zeroEntityColumns)
{
var newColumns = zeroEntityColumns;
foreach (var item in newColumns)
{
CheckTtem(item);
}
if (!newColumns.Any())
{
throw new Exception(DefaultResult());
}
if (newColumns.Any(it => it.IsIdentity && it.PropertyType == NativeType.String))
{
throw new Exception(TextHandler.GetCommonText("字符串类型不能设置自增", "String type cannot be set to auto-increment"));
}
if (newColumns.Any(it => it.IsIdentity)&& newColumns.Count()==1)
{
throw new Exception(TextHandler.GetCommonText("存在自增表里面至少2个字段", "If self-increment columns exist: Requires 2 columns"));
}
return newColumns;
}
private void CheckTableInfo(ZeroEntityInfo tableInfo)
{
if (tableInfo == null)
{
throw new Exception(DefaultResult());
}
else if (!PubMethod.CheckIsPropertyName(tableInfo.ClassName!))
{
throw new Exception(TextHandler.GetCommonText("【 实体名错误 " + tableInfo.ClassName! + "】开头必须是字母并且不能有特殊字符", "[ Class name" + tableInfo.ClassName! + "] must start with a letter and cannot have special characters"));
}
else if (tableInfo.IsInitialized)
{
throw new Exception((TextHandler.GetCommonText("系统表不能修改", "The system table cannot be modified")));
}
}
private void CheckTtem(ZeroEntityColumnInfo? item)
{
if (string.IsNullOrEmpty(item!.DbColumnName))
{
item.DbColumnName = item.PropertyName;
}
if (string.IsNullOrEmpty(item?.PropertyName ?? ""))
{
throw new Exception(TextHandler.GetCommonText("属性不能为空", "PropertyName is required"));
}
if (!PubMethod.CheckIsPropertyName(item?.PropertyName ?? ""))
{
throw new Exception(TextHandler.GetCommonText("【" + item!.PropertyName + "】开头必须是字母并且不能有特殊字符", "[" + item!.PropertyName + "] must start with a letter and cannot have special characters"));
}
}
private string DefaultResult()
{
return TextHandler.GetCommonText("不能保存", "Cannot save");
}
}
}