271 lines
9.9 KiB
C#
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) ? null : 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;
|
|
}
|
|
} |