Files
tnb.server/common/Tnb.Common/Security/CodeGenHelper.cs
2023-05-16 15:21:04 +08:00

271 lines
9.9 KiB
C#

using JNPF.Common.Const;
using JNPF.Common.Extension;
using JNPF.DependencyInjection;
using SqlSugar;
namespace JNPF.Common.Security;
/// <summary>
/// 代码生成帮助类.
/// </summary>
[SuppressSniffer]
public static class CodeGenHelper
{
public static string ConvertDataType(string dataType)
{
switch (dataType.ToLower())
{
case "text":
case "varchar":
case "char":
case "nvarchar":
case "nchar":
case "timestamp":
case "string":
return "string?";
case "int":
case "smallint":
return "int?";
case "tinyint":
return "byte?";
case "bigint":
// sqlite数据库
case "integer":
return "long";
case "bit":
return "bool";
case "money":
case "smallmoney":
case "numeric":
case "decimal":
return "decimal?";
case "real":
return "Single?";
case "datetime":
case "datetime2":
case "smalldatetime":
case "date":
return "DateTime?";
case "float":
return "double?";
case "image":
case "binary":
case "varbinary":
return "byte[]";
case "uniqueidentifier":
return "Guid";
default:
return "object";
}
}
/// <summary>
/// 数据类型转显示类型.
/// </summary>
/// <param name="dataType"></param>
/// <returns></returns>
public static string DataTypeToEff(string dataType)
{
if (string.IsNullOrEmpty(dataType)) return string.Empty;
return dataType switch
{
"string" => "input",
"int" => "inputnumber",
"long" => "input",
"float" => "input",
"double" => "input",
"decimal" => "input",
"bool" => "switch",
"Guid" => "input",
"DateTime" => "datepicker",
_ => "input",
};
}
/// <summary>
/// 是否通用字段.
/// </summary>
/// <param name="columnName"></param>
/// <returns></returns>
public static bool IsCommonColumn(string columnName)
{
var columnList = new List<string>()
{
"CreatedTime", "UpdatedTime", "CreatedUserId", "CreatedUserName", "UpdatedUserId", "UpdatedUserName", "IsDeleted"
};
return columnList.Contains(columnName);
}
/// <summary>
/// 数据列表生成分组表格.
/// </summary>
/// <param name="realList">数据列表.</param>
/// <param name="groupField">分组字段名.</param>
/// <param name="groupShowField">分组显示字段名.</param>
/// <returns></returns>
public static List<Dictionary<string, object>> GetGroupList(List<Dictionary<string, object>> realList, string groupField, string groupShowField)
{
if (realList.Any())
{
var fList = realList.FirstOrDefault().Select(x => x.Key).ToList();
var prop = fList.Where(x => x.Equals(groupShowField)).FirstOrDefault();
// 分组数据
Dictionary<string, List<Dictionary<string, object>>> groupDic = new Dictionary<string, List<Dictionary<string, object>>>();
foreach (var item in realList)
{
if (item.ContainsKey(groupField))
{
var groupDicKey = item[groupField] is null ? string.Empty : item[groupField].ToString();
if (!groupDic.ContainsKey(groupDicKey)) groupDic.Add(groupDicKey, new List<Dictionary<string, object>>()); // 初始化
item.Remove(groupField);
groupDic[groupDicKey].Add(item);
}
else
{
var groupDicKey = "null";
if (!groupDic.ContainsKey(groupDicKey)) groupDic.Add(groupDicKey, new List<Dictionary<string, object>>()); // 初始化
groupDic[groupDicKey].Add(item);
}
}
List<Dictionary<string, object>> realGroupDic = new List<Dictionary<string, object>>();
foreach (var item in groupDic)
{
Dictionary<string, object> dataMap = new Dictionary<string, object>();
dataMap.Add("top", true);
dataMap.Add("id", SnowflakeIdHelper.NextId());
dataMap.Add("children", item.Value);
if (!string.IsNullOrWhiteSpace(prop)) dataMap.Add(prop, item.Key);
else dataMap.Add(groupField, item.Key);
realGroupDic.Add(dataMap);
}
return realGroupDic;
}
else
{
return new List<Dictionary<string, object>>();
}
}
/// <summary>
/// 获取排序真实字段.
/// </summary>
/// <param name="sort">排序字段.</param>
/// <param name="replaceContent">取代内容.</param>
/// <param name="entityInfo">实体信息.</param>
/// <param name="tableType">表类型 0-主表,1-子表,2-副表.</param>
/// <returns></returns>
public static string GetSortRealField(string sort, string replaceContent, EntityInfo entityInfo, int tableType)
{
var field = string.Empty;
switch (tableType)
{
case 1:
if (sort.Contains(replaceContent))
{
field = entityInfo.Columns.Find(it => it.PropertyName.Equals(sort.Replace(replaceContent, "").ToUpperCase()))?.DbColumnName;
}
break;
case 2:
if (sort.Contains("_jnpf_"))
{
var queryField = sort.Replace("_jnpf_", "@").Split('@')[1];
field = entityInfo.Columns.Find(it => it.PropertyName.Equals(queryField.ToUpperCase()))?.DbColumnName;
}
break;
default:
field = entityInfo.Columns.Find(it => it.PropertyName.Equals(sort.ToUpperCase()))?.DbColumnName;
break;
}
return string.IsNullOrEmpty(field) ? "" : field;
}
/// <summary>
/// 代码生成导出模板.
/// </summary>
/// <param name="jnpfKey">控件Key.</param>
/// <param name="multiple">是否多选.</param>
/// <param name="label">标题.</param>
/// <param name="format">时间格式化.</param>
/// <param name="level">等级.</param>
/// <returns></returns>
public static Dictionary<string, string> CodeGenTemplate(string jnpfKey, bool multiple, string label, string format, int level)
{
Dictionary<string, string> result = new Dictionary<string, string>();
switch (jnpfKey)
{
case JnpfKeyConst.CREATEUSER:
case JnpfKeyConst.MODIFYUSER:
case JnpfKeyConst.CREATETIME:
case JnpfKeyConst.MODIFYTIME:
case JnpfKeyConst.CURRORGANIZE:
case JnpfKeyConst.CURRPOSITION:
case JnpfKeyConst.CURRDEPT:
case JnpfKeyConst.BILLRULE:
result.Add(label, "系统自动生成");
break;
case JnpfKeyConst.COMSELECT:
result.Add(label, multiple ? "例:引迈信息/产品部,引迈信息/技术部" : "例:引迈信息/技术部");
break;
case JnpfKeyConst.DEPSELECT:
result.Add(label, multiple ? "例:产品部/部门编码,技术部/部门编码" : "例:技术部/部门编码");
break;
case JnpfKeyConst.POSSELECT:
result.Add(label, multiple ? "例:技术经理/岗位编码,技术员/岗位编码" : "例:技术员/岗位编码");
break;
case JnpfKeyConst.USERSELECT:
result.Add(label, multiple ? "例:张三/账号,李四/账号" : "例:张三/账号");
break;
case JnpfKeyConst.USERSSELECT:
result.Add(label, multiple ? "例:引迈信息/产品部,产品部/部门编码,技术经理/岗位编码,研发人员/角色编码,A分组/分组编码,张三/账号" : "例:李四/账号");
break;
case JnpfKeyConst.ROLESELECT:
result.Add(label, multiple ? "例:研发人员/角色编码,测试人员/角色编码" : "例:研发人员/角色编码");
break;
case JnpfKeyConst.GROUPSELECT:
result.Add(label, multiple ? "例:A分组/分组编码,B分组/分组编码" : "例:A分组/分组编码");
break;
case JnpfKeyConst.DATE:
result.Add(label, string.Format("例:{0}", format));
break;
case JnpfKeyConst.TIME:
result.Add(label, "例: HH:mm:ss");
break;
case JnpfKeyConst.ADDRESS:
switch (level)
{
case 0:
result.Add(label, multiple ? "例:福建省,广东省" : "例:福建省");
break;
case 1:
result.Add(label, multiple ? "例:福建省/莆田市,广东省/广州市" : "例:福建省/莆田市");
break;
case 2:
result.Add(label, multiple ? "例:福建省/莆田市/城厢区,广东省/广州市/荔湾区" : "例:福建省/莆田市/城厢区");
break;
case 3:
result.Add(label, multiple ? "例:福建省/莆田市/城厢区/霞林街道,广东省/广州市/荔湾区/沙面街道" : "例:福建省/莆田市/城厢区/霞林街道");
break;
}
break;
default:
result.Add(label, string.Empty);
break;
}
return result;
}
}