diff --git a/OpenAuth.App/AuthStrategies/AuthStrategyContext.cs b/OpenAuth.App/AuthStrategies/AuthStrategyContext.cs
index c96cd17f..ad79ce67 100644
--- a/OpenAuth.App/AuthStrategies/AuthStrategyContext.cs
+++ b/OpenAuth.App/AuthStrategies/AuthStrategyContext.cs
@@ -15,6 +15,7 @@
//
// ***********************************************************************
+using System;
using System.Collections.Generic;
using Infrastructure;
using OpenAuth.App.Response;
@@ -62,11 +63,26 @@ namespace OpenAuth.App
{
get { return _strategy.Orgs; }
}
-
+ ///
+ /// 获取角色可以访问的字段信息,只是单纯的获取数据库
+ ///
+ ///
+ ///
+ [Obsolete("请使用GetTableColumns代替")]
public List GetProperties(string moduleCode)
{
return _strategy.GetProperties(moduleCode);
}
+
+ ///
+ /// 获取角色可以访问的字段信息
+ ///
+ ///
+ ///
+ public List GetTableColumns(string moduleCode)
+ {
+ return _strategy.GetTableColumns(moduleCode);
+ }
}
diff --git a/OpenAuth.App/AuthStrategies/NormalAuthStrategy.cs b/OpenAuth.App/AuthStrategies/NormalAuthStrategy.cs
index dad26d38..106a9a9d 100644
--- a/OpenAuth.App/AuthStrategies/NormalAuthStrategy.cs
+++ b/OpenAuth.App/AuthStrategies/NormalAuthStrategy.cs
@@ -141,6 +141,24 @@ namespace OpenAuth.App
return allprops.Where(u => props.Contains(u.Key)).ToList();
}
+ public List GetTableColumns(string moduleCode)
+ {
+ var allprops = UnitWork.Find(u => u.TableName.ToLower() == moduleCode.ToLower());
+
+ //如果是系统模块,直接返回所有字段。防止开发者把模块配置成系统模块,还在外层调用loginContext.GetProperties("xxxx");
+ bool? isSysModule = UnitWork.FirstOrDefault(u => u.Code == moduleCode)?.IsSys;
+ if (isSysModule!= null && isSysModule.Value)
+ {
+ return allprops.ToList();
+ }
+
+ var props =UnitWork.Find(u =>
+ u.Key == Define.ROLEDATAPROPERTY && _userRoleIds.Contains(u.FirstId) && u.SecondId == moduleCode)
+ .Select(u => u.ThirdId);
+
+ return allprops.Where(u => props.Contains(u.ColumnName)).ToList();
+ }
+
//用户角色
public NormalAuthStrategy(IUnitWork unitWork, IRepository repository, DbExtension dbExtension) : base(unitWork, repository,null)
diff --git a/OpenAuth.App/AuthStrategies/SystemAuthStrategy.cs b/OpenAuth.App/AuthStrategies/SystemAuthStrategy.cs
index c0a3165b..05f637ef 100644
--- a/OpenAuth.App/AuthStrategies/SystemAuthStrategy.cs
+++ b/OpenAuth.App/AuthStrategies/SystemAuthStrategy.cs
@@ -97,6 +97,11 @@ namespace OpenAuth.App
return _dbExtension.GetProperties(moduleCode);
}
+ public List GetTableColumns(string moduleCode)
+ {
+ return UnitWork.Find(u => u.TableName.ToLower() == moduleCode.ToLower()).ToList();
+ }
+
public SystemAuthStrategy(IUnitWork unitWork, IRepository repository, DbExtension dbExtension) : base(unitWork, repository, null)
{
diff --git a/OpenAuth.App/Base/TableData.cs b/OpenAuth.App/Base/TableData.cs
index 63f6e171..ef814b70 100644
--- a/OpenAuth.App/Base/TableData.cs
+++ b/OpenAuth.App/Base/TableData.cs
@@ -12,8 +12,10 @@
// layui datatable数据返回
// ***********************************************************************
+using System;
using System.Collections.Generic;
using Infrastructure;
+using OpenAuth.Repository.Domain;
namespace OpenAuth.App.Response
{
@@ -37,9 +39,16 @@ namespace OpenAuth.App.Response
public int count { get; set; }
///
- /// 返回的列表头信息
+ /// 返回的列表头信息(已过时,请使用columnFields代替)
///
+ [Obsolete("请使用ColumnFields以获得更丰富的配置信息")]
public List columnHeaders;
+
+ ///
+ /// 返回的表格列定义
+ /// 该属性基于代码生成使用的列定义
+ ///
+ public List columnFields;
///
/// 数据内容
@@ -51,6 +60,7 @@ namespace OpenAuth.App.Response
code = 200;
msg = "加载成功";
columnHeaders = new List();
+ columnFields = new List();
}
}
}
\ No newline at end of file
diff --git a/OpenAuth.App/BuilderTable/BuilderTableApp.cs b/OpenAuth.App/BuilderTable/BuilderTableApp.cs
index 4d445044..0a595a42 100644
--- a/OpenAuth.App/BuilderTable/BuilderTableApp.cs
+++ b/OpenAuth.App/BuilderTable/BuilderTableApp.cs
@@ -117,16 +117,35 @@ namespace OpenAuth.App
throw new Exception("命名空间不能为空");
}
- var columns = _dbExtension.GetDbTableStructure(req.TableName);
- if (!columns.Any())
- {
- throw new Exception($"未能找到{req.TableName}表结构定义");
- }
+ var obj = AddTableAndColumns(req.MapTo());
- var obj = req.MapTo();
+ //创建子表
+ if (!string.IsNullOrEmpty(req.DetailTableName))
+ {
+ AddTableAndColumns(new BuilderTable
+ {
+ TableName = req.DetailTableName,
+ ParentTableId = obj.Id,
+ Namespace = "OpenAuth.Repository.Domain",
+ ModuleName = req.DetailTableName,
+ Folder = req.Folder,
+ TypeId = req.TypeId,
+ TypeName = req.TypeName
+ });
+ }
+
+ UnitWork.Save();
+ return obj.Id;
+ }
+
+ ///
+ /// 添加表结构及字段结构记录
+ ///
+ private BuilderTable AddTableAndColumns(BuilderTable obj)
+ {
if (string.IsNullOrEmpty(obj.ClassName)) obj.ClassName = obj.TableName;
if (string.IsNullOrEmpty(obj.ModuleCode)) obj.ModuleCode = obj.TableName;
-
+
//todo:补充或调整自己需要的字段
obj.CreateTime = DateTime.Now;
var user = _auth.GetCurrentUser().User;
@@ -134,6 +153,11 @@ namespace OpenAuth.App
obj.CreateUserName = user.Name;
UnitWork.Add(obj);
+ var columns = _dbExtension.GetDbTableStructure(obj.TableName);
+ if (!columns.Any())
+ {
+ throw new Exception($"未能找到{obj.TableName}表结构定义");
+ }
foreach (var column in columns)
{
var builderColumn = new BuilderTableColumn
@@ -160,8 +184,7 @@ namespace OpenAuth.App
UnitWork.Add(builderColumn);
}
- UnitWork.Save();
- return obj.Id;
+ return obj;
}
public void Update(AddOrUpdateBuilderTableReq obj)
@@ -181,6 +204,8 @@ namespace OpenAuth.App
Options = obj.Options,
TypeId = obj.TypeId,
TypeName = obj.TypeName,
+ IsDynamicHeader = obj.IsDynamicHeader,
+ ForeignKey = obj.ForeignKey,
UpdateTime = DateTime.Now,
UpdateUserId = user.Id,
UpdateUserName = user.Name
diff --git a/OpenAuth.App/BuilderTable/Request/AddOrUpdateBuilderTableReq.cs b/OpenAuth.App/BuilderTable/Request/AddOrUpdateBuilderTableReq.cs
index baa39c61..94f79a00 100644
--- a/OpenAuth.App/BuilderTable/Request/AddOrUpdateBuilderTableReq.cs
+++ b/OpenAuth.App/BuilderTable/Request/AddOrUpdateBuilderTableReq.cs
@@ -74,5 +74,16 @@ namespace OpenAuth.App.Request
/// 分类名称
///
public string TypeName { get; set; }
+
+ ///
+ /// 是否动态加载表头信息
+ ///
+ public bool IsDynamicHeader { get; set; }
+
+
+ ///
+ /// 子表外键
+ ///
+ public string ForeignKey { get; set; }
}
}
\ No newline at end of file
diff --git a/OpenAuth.App/DbExtension.cs b/OpenAuth.App/DbExtension.cs
index 46392a79..a53331cd 100644
--- a/OpenAuth.App/DbExtension.cs
+++ b/OpenAuth.App/DbExtension.cs
@@ -114,17 +114,79 @@ namespace OpenAuth.App
{
return GetMySqlStructure(tableName);
}
- else
+ else if (dbtype == Define.DBTYPE_SQLSERVER)
{
return GetSqlServerStructure(tableName);
}
+ else
+ {
+ return GetOracleStructure(tableName);
+ }
}
-
+
+ ///
+ /// 获取Oracle表结构
+ ///
+ private IList GetOracleStructure(string tableName)
+ {
+ var sql = $@"
+select utc.column_name as COLUMNNAME,
+ utc.data_type COLUMNTYPE,
+ utc.data_length MaxLength,
+ CASE utc.nullable WHEN 'N' THEN 0 ELSE 1 END IsNull,
+ utc.data_default DEFAULTVAL,
+ ucc.comments ""COMMENT"",
+ UTC.table_name TABLENAME,
+ CASE UTC.COLUMN_NAME
+ WHEN (select col.column_name
+ from user_constraints con,
+ user_cons_columns col
+ where con.constraint_name = col.constraint_name
+ and con.constraint_type = 'P'
+ and col.table_name = '{ tableName}') THEN 1
+ ELSE 0 END AS IsKey,
+ CASE
+ WHEN data_type IN ('BIT', 'BOOL') THEN
+ 'bool'
+ WHEN data_type in ('SMALLINT') THEN 'short'
+ WHEN data_type in ('TINYINT') THEN 'bool'
+ WHEN data_type IN ('NUMBER', 'CHAR', 'INT', 'Year') THEN
+ 'int'
+ WHEN data_type in ('BIGINT') THEN
+ 'bigint'
+ WHEN data_type IN ('FLOAT', 'DOUBLE', 'DECIMAL') THEN
+ 'decimal'
+ WHEN data_type IN
+ ('CHAR', 'VARCHAR', 'TINY TEXT', 'TEXT', 'MEDIUMTEXT', 'LONGTEXT', 'TINYBLOB', 'BLOB',
+ 'MEDIUMBLOB', 'LONGBLOB', 'Time') THEN
+ 'string'
+ WHEN data_type IN ('Date', 'DateTime', 'TIMESTAMP(6)') THEN
+ 'DateTime'
+ ELSE 'string'
+ END AS EntityType
+ from user_tab_columns utc,
+ user_col_comments ucc
+ where utc.table_name = ucc.table_name
+ and utc.column_name = ucc.column_name
+ and utc.table_name = '{ tableName}'
+ order by column_id; ";
+
+ foreach (var context in _contexts)
+ {
+ var columns = context.Query().FromSqlRaw(sql);
+ var columnList = columns?.ToList();
+ if (columnList != null && columnList.Any())
+ {
+ return columnList;
+ }
+ }
+
+ return new List();
+ }
+
///
/// 获取Mysql表结构信息
///
- ///
- ///
private IList GetMySqlStructure(string tableName)
{
var sql = $@"SELECT DISTINCT
diff --git a/OpenAuth.App/FlowInstance/Response/FlowVerificationResp.cs b/OpenAuth.App/FlowInstance/Response/FlowVerificationResp.cs
index c54c9869..00a0527d 100644
--- a/OpenAuth.App/FlowInstance/Response/FlowVerificationResp.cs
+++ b/OpenAuth.App/FlowInstance/Response/FlowVerificationResp.cs
@@ -17,7 +17,15 @@ namespace OpenAuth.App.Response
///
public string FrmHtml
{
- get { return FormUtil.GetHtml(this.FrmContentData, this.FrmContentParse, this.FrmData, "",this.CanWriteFormItemIds); }
+ get
+ {
+ if (this.FrmType != 0) //只有开原版动态表单才需要转换
+ {
+ return string.Empty;
+ }
+
+ return FormUtil.GetHtml(this.FrmContentData, this.FrmContentParse, this.FrmData, "",this.CanWriteFormItemIds);
+ }
}
///
diff --git a/OpenAuth.App/Interface/IAuthStrategy.cs b/OpenAuth.App/Interface/IAuthStrategy.cs
index 94e5952c..9177240b 100644
--- a/OpenAuth.App/Interface/IAuthStrategy.cs
+++ b/OpenAuth.App/Interface/IAuthStrategy.cs
@@ -15,6 +15,7 @@
// ***********************************************************************
+using System;
using System.Collections.Generic;
using Infrastructure;
using OpenAuth.App.Response;
@@ -44,7 +45,15 @@ namespace OpenAuth.App
///
///
///
+ [Obsolete("请使用GetTableColumns代替")]
List GetProperties(string moduleCode);
+ ///
+ /// 获取角色可以访问的字段信息
+ ///
+ ///
+ ///
+ List GetTableColumns(string moduleCode);
+
}
}
\ No newline at end of file
diff --git a/OpenAuth.App/WmsInbound/WmsInboundOrderDtblApp.cs b/OpenAuth.App/WmsInbound/WmsInboundOrderDtblApp.cs
index 80f8c8e2..58c5345a 100644
--- a/OpenAuth.App/WmsInbound/WmsInboundOrderDtblApp.cs
+++ b/OpenAuth.App/WmsInbound/WmsInboundOrderDtblApp.cs
@@ -29,10 +29,11 @@ namespace OpenAuth.App
throw new CommonException("登录已过期", Define.INVALID_TOKEN);
}
- //todo:普通账号如何分配明细的字段????先写死😰
-
- var properties = _dbExtension.GetProperties("WmsInboundOrderDtbl");
-
+ var properties = loginContext.GetTableColumns("WmsInboundOrderDtbl");
+ if (properties == null || properties.Count == 0)
+ {
+ throw new Exception("请在代码生成界面配置WmsInboundOrderDtbl表的字段属性");
+ }
var result = new TableData();
var objs = UnitWork.Find(null);
if (!string.IsNullOrEmpty(request.InboundOrderId))
@@ -45,8 +46,8 @@ namespace OpenAuth.App
objs = objs.Where(u => u.GoodsId.Contains(request.key));
}
- var propertyStr = string.Join(',', properties.Select(u => u.Key));
- result.columnHeaders = properties;
+ var propertyStr = string.Join(',', properties.Select(u => u.ColumnName));
+ result.columnFields = properties;
result.data = objs.OrderBy(u => u.Id)
.Skip((request.page - 1) * request.limit)
.Take(request.limit).Select($"new ({propertyStr})");
diff --git a/OpenAuth.App/WmsInbound/WmsInboundOrderTblApp.cs b/OpenAuth.App/WmsInbound/WmsInboundOrderTblApp.cs
index 88edc936..0b4e3b7b 100644
--- a/OpenAuth.App/WmsInbound/WmsInboundOrderTblApp.cs
+++ b/OpenAuth.App/WmsInbound/WmsInboundOrderTblApp.cs
@@ -29,22 +29,28 @@ namespace OpenAuth.App
}
var properties = loginContext.GetProperties("WmsInboundOrderTbl");
-
if (properties == null || properties.Count == 0)
{
throw new Exception("当前登录用户没有访问该模块字段的权限,请联系管理员配置");
}
-
-
+
+ var columns = loginContext.GetTableColumns("WmsInboundOrderTbl");
+ if (columns == null || columns.Count == 0)
+ {
+ throw new Exception("请在代码生成界面配置WmsInboundOrderTbl表的字段属性");
+ }
+
var result = new TableData();
+
+ result.columnHeaders = properties;
+ result.columnFields = columns;
+
var objs = GetDataPrivilege("u");
if (!string.IsNullOrEmpty(request.key))
{
objs = objs.Where(u => u.Id.Contains(request.key));
}
-
var propertyStr = string.Join(',', properties.Select(u => u.Key));
- result.columnHeaders = properties;
result.data = objs.OrderBy(u => u.Id)
.Skip((request.page - 1) * request.limit)
.Take(request.limit).Select($"new ({propertyStr})");
diff --git a/OpenAuth.Repository/Domain/BuilderTable.cs b/OpenAuth.Repository/Domain/BuilderTable.cs
index 25204304..79461dc4 100644
--- a/OpenAuth.Repository/Domain/BuilderTable.cs
+++ b/OpenAuth.Repository/Domain/BuilderTable.cs
@@ -138,5 +138,24 @@ namespace OpenAuth.Repository.Domain
///
[Description("创建人姓名")]
public string CreateUserName { get; set; }
+
+ ///
+ /// 是否动态加载表头信息
+ ///
+ [Description("是否动态加载表头信息")]
+ public bool IsDynamicHeader { get; set; }
+
+
+ ///
+ /// 字表外键
+ ///
+ [Description("字表外键")]
+ public string ForeignKey { get; set; }
+
+ ///
+ /// 主表ID,如果为空表示为主表
+ ///
+ [Description("主表ID,如果为空表示为主表")]
+ public string ParentTableId { get; set; }
}
}
\ No newline at end of file