using APT.BaseData.Domain.ApiModel; using APT.BaseData.Domain.Entities; using APT.BaseData.Domain.Entities.FM; using APT.BaseData.Domain.Enums; using APT.BaseData.Domain.IServices; using APT.BaseData.Domain.IServices.EX; using APT.Infrastructure.Api; using APT.Infrastructure.Api.Redis; using APT.Infrastructure.Core; using APT.Infrastructure.Core.Refctor; using APT.Utility; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace APT.PF.WebApiControllers.Api.PF { [APT.Infrastructure.Api.RootOrg] [Route("api/PF/Form")] public class FormController : AuthorizeApiController { /// /// 查询 /// /// /// [HttpPost, Route("Entities")] public JsonActionResult> Entities([FromBody] KeywordFilter filter) { return WitEntities(null, filter); } /// /// 查询 /// /// /// /// [HttpPost, Route("OrderEntities")] public JsonActionResult> OrderEntities([FromBody] KeywordFilter filter) { return WitOrderEntities(null, filter); } /// /// 查询 /// /// /// [HttpPost, Route("Paged")] public PagedActionResult Paged([FromBody] KeywordPageFilter pageFilter) { return WitPaged(null, pageFilter); } /// /// 查询 /// /// /// [HttpPost, Route("OrderPaged")] public PagedActionResult OrderPaged([FromBody] KeywordPageFilter pageFilter) { pageFilter.FilterGroup.Rules.Add(new FilterRule() { Field = "PLATFORM_CATEGORY", Operate = FilterOperate.Equal, Value = 0 }); return WitOrderPaged(null, pageFilter); } /// /// 查询 /// /// /// [HttpPost, Route("NWOrderPaged")] public PagedActionResult NWOrderPaged([FromBody] KeywordPageFilter pageFilter) { pageFilter.FilterGroup.Rules.Add(new FilterRule() { Field = "PLATFORM_CATEGORY", Operate = FilterOperate.Equal, Value = 1 }); return WitOrderPaged(null, pageFilter); } /// /// 删除 /// /// /// [HttpGet, Route("Delete")] public JsonActionResult Delete(string id) { return SafeExecute(() => { //var formService = APT.Infrastructure.Api.ServiceLocator.Instance.GetService(); //formService.CreateFormConfigVersion(PFFormConfigVersionEnum.Form, id); var edit = this.GetEntity(i => i.PAGE_FORM_ID == new Guid(id)); var table = this.GetEntity(i => i.PAGE_FORM_ID == new Guid(id)); var tree = this.GetEntity(i => i.PAGE_FORM_ID == new Guid(id)); var chart = this.GetEntity(i => i.PAGE_FORM_ID == new Guid(id)); var custom = this.GetEntity(i => i.PAGE_FORM_ID == new Guid(id)); var tableIds = new List(); if (edit != null) tableIds.Add(edit.ID); if (table != null) tableIds.Add(table.ID); if (tree != null) tableIds.Add(tree.ID); if (chart != null) tableIds.Add(chart.ID); if (custom != null) tableIds.Add(custom.ID); this.UnifiedCommit(() => { this.DeleteEntityNoCommit(i => tableIds.Contains(i.PAGE_TABLE_ID ?? Guid.Empty)); this.DeleteEntityNoCommit(i => tableIds.Contains(i.PAGE_EDIT_ID)); this.DeleteEntityNoCommit(i => tableIds.Contains(i.PAGE_TREE_ID)); this.DeleteEntityNoCommit(i => tableIds.Contains(i.PAGE_ID ?? Guid.Empty)); this.DeleteEntityNoCommit(i => i.PAGE_FORM_ID == new Guid(id)); this.DeleteEntityNoCommit(i => i.PAGE_FORM_ID == new Guid(id)); this.DeleteEntityNoCommit(i => i.PAGE_FORM_ID == new Guid(id)); this.DeleteEntityNoCommit(i => i.PAGE_FORM_ID == new Guid(id)); this.DeleteEntityNoCommit(i => i.PAGE_FORM_ID == new Guid(id)); this.DeleteEntityNoCommit(i => i.PAGE_FORM_ID == new Guid(id)); this.DeleteEntityNoCommit(i => i.PAGE_FORM_ID == new Guid(id)); this.DeleteEntityNoCommit(i => i.PERMISSION_FORM_ID == new Guid(id)); this.TreeDeleteEntity(i => i.MENU_FORM_ID == new Guid(id)); this.DeleteEntityNoCommit(id); }); return true; }); } /// /// 更新 /// /// /// [HttpPost, Route("Update")] public JsonActionResult Update([FromBody] T_PF_FORM entity) { return SafeExecute(() => { this.UpdateEntity(entity); //var formService = APT.Infrastructure.Api.ServiceLocator.Instance.GetService(); //formService.CreateFormConfigVersion(PFFormConfigVersionEnum.Form, entity.ID.ToString()); return true; }); } /// /// 更新 /// /// /// [HttpPost, Route("FullUpdate")] public JsonActionResult FullUpdate([FromBody] T_PF_FORM entity) { return SafeExecute(() => { var charts = entity.Nav_HomeCharts; var statistics = entity.Nav_HomeStatistics; var rankings = entity.Nav_HomeRankings; var hmis = entity.Nav_HomeHmis; entity.Nav_HomeCharts = null; entity.Nav_HomeStatistics = null; entity.Nav_HomeRankings = null; entity.Nav_HomeHmis = null; UnifiedCommit(() => { if (charts != null) this.BantchSaveEntityNoCommit(charts); if (statistics != null) this.BantchSaveEntityNoCommit(statistics); if (rankings != null) this.BantchSaveEntityNoCommit(rankings); if (hmis != null) this.BantchSaveEntityNoCommit(hmis); this.UpdateEntityNoCommit(entity); }); return true; }); } /// /// 更新 /// /// /// [HttpPost, Route("NWUpdate")] public JsonActionResult NWUpdate([FromBody] T_PF_FORM entity) { return SafeExecute(() => { entity.PLATFORM_CATEGORY = 1; this.UpdateEntity(entity); //var formService = APT.Infrastructure.Api.ServiceLocator.Instance.GetService(); //formService.CreateFormConfigVersion(PFFormConfigVersionEnum.Form, entity.ID.ToString()); return true; }); } /// /// 批量删除 /// /// /// [HttpGet, Route("BatchDelete")] public JsonActionResult BatchDelete(string ids) { return SafeExecute(() => { //var formService = APT.Infrastructure.Api.ServiceLocator.Instance.GetService(); //formService.CreateFormConfigVersion(PFFormConfigVersionEnum.Form, ids); var arrays = string.IsNullOrEmpty(ids) ? null : ids.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(i => new Guid(i)).ToArray(); BaseFilter filter = new BaseFilter(); filter.SelectField = new string[] { "ID" }; filter.IgnoreOrgRule = true; if (arrays != null && arrays.Length > 0) { var edit = this.GetEntities(i => arrays.Contains(i.PAGE_FORM_ID ?? Guid.Empty), filter) .Select(i => i.ID).ToArray(); var table = this.GetEntities(i => arrays.Contains(i.PAGE_FORM_ID ?? Guid.Empty), filter) .Select(i => i.ID).ToArray(); var tree = this.GetEntities(i => arrays.Contains(i.PAGE_FORM_ID ?? Guid.Empty), filter) .Select(i => i.ID).ToArray(); var chart = this.GetEntities(i => arrays.Contains(i.PAGE_FORM_ID ?? Guid.Empty), filter) .Select(i => i.ID).ToArray(); var custom = this.GetEntities(i => arrays.Contains(i.PAGE_FORM_ID ?? Guid.Empty), filter) .Select(i => i.ID).ToArray(); var tableIds = new List(); if (edit != null) tableIds.AddRange(edit); if (table != null) tableIds.AddRange(table); if (tree != null) tableIds.AddRange(tree); if (chart != null) tableIds.AddRange(chart); if (custom != null) tableIds.AddRange(custom); //自定义条件删除 this.UnifiedCommit(() => { this.DeleteEntityNoCommit(i => tableIds.Contains(i.PAGE_TABLE_ID ?? Guid.Empty)); this.DeleteEntityNoCommit(i => tableIds.Contains(i.PAGE_EDIT_ID)); this.DeleteEntityNoCommit(i => tableIds.Contains(i.PAGE_TREE_ID)); this.DeleteEntityNoCommit(i => tableIds.Contains(i.PAGE_ID ?? Guid.Empty)); this.DeleteEntityNoCommit(i => arrays.Contains(i.PAGE_FORM_ID ?? Guid.Empty)); this.DeleteEntityNoCommit(i => arrays.Contains(i.PAGE_FORM_ID ?? Guid.Empty)); this.DeleteEntityNoCommit(i => arrays.Contains(i.PAGE_FORM_ID ?? Guid.Empty)); this.DeleteEntityNoCommit(i => arrays.Contains(i.PAGE_FORM_ID ?? Guid.Empty)); this.DeleteEntityNoCommit(i => arrays.Contains(i.PAGE_FORM_ID ?? Guid.Empty)); this.DeleteEntityNoCommit(i => arrays.Contains(i.PAGE_FORM_ID ?? Guid.Empty)); this.DeleteEntityNoCommit(i => arrays.Contains(i.PAGE_FORM_ID ?? Guid.Empty)); this.DeleteEntityNoCommit(i => arrays.Contains(i.PERMISSION_FORM_ID ?? Guid.Empty)); this.DeleteEntityNoCommit(i => tableIds.Contains(i.PAGE_EDIT_ID ?? Guid.Empty)); this.DeleteEntityNoCommit(i => tableIds.Contains(i.PAGE_EDIT_ID)); this.DeleteEntityNoCommit(i => tableIds.Contains(i.Nav_Column.PAGE_TABLE_ID ?? Guid.Empty)); this.DeleteEntityNoCommit(i => tableIds.Contains(i.PAGE_TABLE_ID)); this.DeleteEntityNoCommit(i => arrays.Contains(i.PERMISSION_FORM_ID ?? Guid.Empty)); this.TreeDeleteEntityNoCommit(i => arrays.Contains(i.MENU_FORM_ID ?? Guid.Empty)); this.TreeDeleteEntityNoCommit(i => arrays.Contains(i.MENU_FORM_ID ?? Guid.Empty)); this.TreeDeleteEntityNoCommit(i => arrays.Contains(i.MENU_FORM_ID ?? Guid.Empty)); this.DeleteEntityNoCommit(i => tableIds.Contains(i.PAGE_TABLE_ID)); this.DeleteEntityNoCommit(i => arrays.Contains(i.ID)); this.DeleteEntityNoCommit(i => tableIds.Contains(i.PAGE_TABLE_ID)); this.DeleteEntityNoCommit(i => tableIds.Contains(i.Nav_Column.PAGE_TABLE_ID ?? Guid.Empty)); this.DeleteEntityNoCommit(i => tableIds.Contains(i.PAGE_TABLE_ID)); this.DeleteEntityNoCommit(i => tableIds.Contains(i.PAGE_EDIT_ID)); this.DeleteEntityNoCommit(i => tableIds.Contains(i.Nav_EditColumn.PAGE_EDIT_ID)); this.DeleteEntityNoCommit(i => tableIds.Contains(i.Nav_EditColumn.PAGE_EDIT_ID)); this.DeleteEntityNoCommit(i => arrays.Contains(i.PAGE_FORM_ID)); this.DeleteEntityNoCommit(i => arrays.Contains(i.Nav_UserCCQuery.PAGE_FORM_ID)); this.DeleteEntityNoCommit(i => arrays.Contains(i.Nav_UserCCQuery.PAGE_FORM_ID)); this.DeleteEntityNoCommit(i => tableIds.Contains(i.PAGE_TABLE_ID)); this.DeleteEntityNoCommit(i => tableIds.Contains(i.Nav_UserCCTable.PAGE_TABLE_ID)); this.DeleteEntityNoCommit(i => tableIds.Contains(i.PAGE_EDIT_ID ?? Guid.Empty)); this.DeleteEntityNoCommit(i => tableIds.Contains(i.Nav_EditColumnFillMap.PAGE_EDIT_ID ?? Guid.Empty)); this.DeleteEntityNoCommit(i => tableIds.Contains(i.Nav_Btn.PAGE_ID ?? Guid.Empty)); this.DeleteEntityNoCommit(i => tableIds.Contains(i.Nav_Column.PAGE_TABLE_ID ?? Guid.Empty)); this.DeleteEntityNoCommit(i => arrays.Contains(i.FrmId ?? Guid.Empty)); this.DeleteEntityNoCommit(i => arrays.Contains(i.FlowInstance.FrmId ?? Guid.Empty)); this.DeleteEntityNoCommit(i => arrays.Contains(i.FlowInstance.FrmId ?? Guid.Empty)); this.DeleteEntityNoCommit(i => arrays.Contains(i.FrmId ?? Guid.Empty)); this.DeleteEntityNoCommit(i => arrays.Contains(i.LOG_FORM_ID ?? Guid.Empty)); }); } return true; }); } /// /// 获得单条实体数据 /// /// /// [HttpPost, Route("Get")] public JsonActionResult Get([FromBody] KeywordFilter filter) { return WitEntity(null, filter); } /// /// 获得单条实体数据 /// /// /// [HttpPost, Route("GetRedis")] public JsonActionResult GetRedis([FromBody] KeywordFilter filter) { return SafeExecute(() => { var file = filter.FilterGroup.Rules.FirstOrDefault(i => i.Field == "ID"); var key = file.Value.ToString(); return this.GetEntityByRedis(key, filter.OrgId ?? Guid.Empty); }); } /// /// 获得单条实体数据 /// /// /// [HttpGet, Route("GetByRedis")] public async Task> GetByRedis(string key, Guid orgid) { return await SafeExecuteAsync(async () => { //var redisManager = APT.Infrastructure.Api.ServiceLocator.Instance.GetService(); // if (CsRedisManager.KeyExists(RedisCacheKey.HardWareCheck)) //{ // var value = CsRedisManager.GetClient().Get(RedisCacheKey.HardWareCheck); // if (value==null||value == "True") // { //var filter = new BaseFilter(orgid); //filter.SelectField = new string[] {"ID", "CODE" , "NAME", "NAME_ACRONYM", "FORM_TYPE", "URI", // "CUSTOM_PARAMS", "TABLE_NAME","IS_IGNORE_PERMISSION","" }; //Guid id; //if (Guid.TryParse(key,out id)) //{ // return this.GetEntity(i => i.ID == id, filter); //} //else //{ // return this.GetEntity(i => i.CODE == key, filter); //} return this.GetEntityByRedis(key, orgid); // } //} //this.ThrowError("020000");5 //return null; }); } /// /// 依据表单ID获取更新表单配置语法 /// /// /// [HttpPost, Route("GetSqlsByFormId")] public JsonActionResult GetSqlsByFormId([FromBody] KeywordFilter filter) { return SafeExecute(() => { StringBuilder sb = new StringBuilder(); string formIdStr = filter.Keyword; int databaseType = LibUtils.ToInt(filter.Parameter1);//数据库类型 string dstOrgId = filter.Parameter2; decimal dstFormConfigVersion = LibUtils.ToDecimal(filter.Parameter3); int sqlType = LibUtils.ToInt(filter.Parameter4);//语法类型 DateTime? startTime = LibUtils.ToDateTime(filter.Parameter5);//开始时间 bool isInitOrg = LibUtils.ToBoolean(filter.Parameter6);//是否初始化 PFFormConfigSqlTypeEnum formConfigSqlType = (PFFormConfigSqlTypeEnum)LibUtils.ToInt(filter.Parameter7);//结果类型 string databaseConnStr = LibUtils.ToString(filter.Parameter8);//外部同步数据库连接字符串 bool isContinueExc = LibUtils.ToBoolean(filter.Parameter9);//继续执行 var databaseTypeEnum = databaseType == 0 ? DataBaseType.SQL : (DataBaseType)databaseType; var fromType = LibUtils.ToInt(filter.Parameter10);//导出类型(表单|菜单|跑批导出) var formCodes = filter.Parameter11; if (formConfigSqlType == PFFormConfigSqlTypeEnum.连接数据库执行) { if (string.IsNullOrEmpty(databaseConnStr)) throw new Exception("请设置连接字符串"); if (sqlType == 0) throw new Exception("不支持插入和更新的语法类型"); } var formIds = string.IsNullOrEmpty(formIdStr) ? new List() : formIdStr.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(t => new Guid(t)).ToList(); #region wyw 表单编号 采用添加到列表选择的实现方式 if (!string.IsNullOrEmpty(formCodes)) { var listFormCodes = formCodes.Split('|', StringSplitOptions.RemoveEmptyEntries).ToList(); var listForms = GetEntities(e => listFormCodes.Contains(e.CODE), null); if (listForms == null || listFormCodes.Count != listForms.Count()) { throw new Exception("请检查表单编号(表单编号不能重复、编号必须存在)"); } else { foreach (var item in listForms) { formIds.Add(item.ID); } } } #endregion var formService = APT.Infrastructure.Api.ServiceLocator.Instance.GetService(); var list = formService.GetSqlsByFormId(filter.OrgId.Value, formIds, dstOrgId, dstFormConfigVersion, databaseType == 0 ? DataBaseType.SQL : (DataBaseType)databaseType, sqlType, startTime, isInitOrg, fromType); if (isInitOrg) { List tempList = new List(); var org = this.GetEntity(filter.OrgId.ToString()); formService.GetSqlByObject(databaseTypeEnum, org, tempList, dstOrgId, sqlType); if (list != null && list.Any()) tempList.AddRange(list); #region 添加用户角色、菜单、编码规则 var users = this.GetEntities(t => t.CODE.Contains("Admin") || t.CODE.Contains("System"), new BaseFilter(filter.OrgId, FilterOrgTypeEnum.仅本组织)).ToList(); users.ForEach(t => { formService.GetSqlByObject(databaseTypeEnum, t, tempList, dstOrgId, sqlType); }); var roles = this.GetEntities(t => t.ROLE_TYPE == 99, new BaseFilter(filter.OrgId, FilterOrgTypeEnum.仅本组织)).ToList(); roles.ForEach(t => { formService.GetSqlByObject(databaseTypeEnum, t, tempList, dstOrgId, sqlType); }); var userIds = users.Select(t => t.ID).ToList(); var roleIds = roles.Select(t => t.ID).ToList(); var userBelongRoles = this.GetEntities(t => userIds.Contains(t.USER_ID) && roleIds.Contains(t.BELONG_ROLE_ID), new BaseFilter(filter.OrgId, FilterOrgTypeEnum.仅本组织)).ToList(); userBelongRoles.ForEach(t => { formService.GetSqlByObject(databaseTypeEnum, t, tempList, dstOrgId, sqlType); }); var baseConfigs = this.GetEntities(null, new BaseFilter(filter.OrgId, FilterOrgTypeEnum.仅本组织)).ToList(); baseConfigs.ForEach(t => { formService.GetSqlByObject(databaseTypeEnum, t, tempList, dstOrgId, sqlType); }); var menus = this.GetEntities(null, new BaseFilter(filter.OrgId, FilterOrgTypeEnum.仅本组织)).ToList(); menus.ForEach(t => { formService.GetSqlByObject(databaseTypeEnum, t, tempList, dstOrgId, sqlType); }); var appMenus = this.GetEntities(null, new BaseFilter(filter.OrgId, FilterOrgTypeEnum.仅本组织)).ToList(); appMenus.ForEach(t => { formService.GetSqlByObject(databaseTypeEnum, t, tempList, dstOrgId, sqlType); }); var clientMenus = this.GetEntities(null, new BaseFilter(filter.OrgId, FilterOrgTypeEnum.仅本组织)).ToList(); clientMenus.ForEach(t => { formService.GetSqlByObject(databaseTypeEnum, t, tempList, dstOrgId, sqlType); }); var codeRules = this.GetEntities(null, new BaseFilter(filter.OrgId, FilterOrgTypeEnum.仅本组织)).ToList(); codeRules.ForEach(t => { formService.GetSqlByObject(databaseTypeEnum, t, tempList, dstOrgId, sqlType); }); #endregion list = tempList; } if (list != null && list.Any()) { if (formConfigSqlType == PFFormConfigSqlTypeEnum.获取语法 || formConfigSqlType == PFFormConfigSqlTypeEnum.下载语法文件) { var tmpDatabaseType = databaseType == 0 ? DataBaseType.SQL : (DataBaseType)databaseType; if (tmpDatabaseType == DataBaseType.Oracle && sqlType == 0 && formConfigSqlType == PFFormConfigSqlTypeEnum.获取语法) sb.Append("begin"); list.ForEach(t => { sb.AppendLine(t); }); if (tmpDatabaseType == DataBaseType.Oracle && sqlType == 0 && formConfigSqlType == PFFormConfigSqlTypeEnum.获取语法) sb.Append("end;"); if (formConfigSqlType == PFFormConfigSqlTypeEnum.下载语法文件) { T_PF_FILE file = new T_PF_FILE(); file.FILE_NAME = "config_" + DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss") + ".sql"; file.FILE_TYPE = "application/octet-stream"; file.FILE_DATA = System.Text.Encoding.UTF8.GetBytes(sb.ToString()); file.ORG_ID = filter.OrgId; file.IS_TEMPORARY_FILE = true; this.AddEntity(file); return "PF/File/GetFile?id=" + file.ID; } return sb.ToString(); } else if (formConfigSqlType == PFFormConfigSqlTypeEnum.连接数据库执行) { StringBuilder stringBuilder = new StringBuilder(); bool isError = false; foreach (var sql in list) { if (isError && !isContinueExc) break; var sqls = sql.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); if (!sqls.Any()) continue; try { this.ExecuteNonQueryByConn(databaseTypeEnum, databaseConnStr, System.Data.CommandType.Text, sqls[0], null); } catch (Exception ex) { stringBuilder.AppendLine("执行语法" + sql + "发生错误,详情 :" + ex.Message); isError = true; } } if (stringBuilder.Length > 0) return stringBuilder.ToString(); return "执行成功"; } } return string.Empty; }); } /// /// 依据实体名获取更新语法 /// /// /// [HttpPost, Route("GetSqlsByEntityName")] public JsonActionResult GetSqlsByEntityName([FromBody] KeywordFilter filter) { return SafeExecute(() => { StringBuilder sb = new StringBuilder(); if (string.IsNullOrEmpty(filter.Keyword)) throw new Exception("请选择实体表"); int databaseType = string.IsNullOrEmpty(filter.Parameter1) ? 0 : LibUtils.ToInt(filter.Parameter1);//数据库类型 string dstOrgId = filter.Parameter2; int sqlType = LibUtils.ToInt(filter.Parameter3);//语法类型 var formService = APT.Infrastructure.Api.ServiceLocator.Instance.GetService(); var list = formService.GetSqlByEntity(databaseType == 0 ? DataBaseType.SQL : (DataBaseType)databaseType, filter.OrgId.Value, filter.Keyword, dstOrgId, sqlType); if (list != null && list.Any()) { var tmpDatabaseType = databaseType == 0 ? DataBaseType.SQL : (DataBaseType)databaseType; if (tmpDatabaseType == DataBaseType.Oracle && sqlType == 0) sb.Append("begin"); list.ForEach(t => { sb.AppendLine(t); }); if (tmpDatabaseType == DataBaseType.Oracle && sqlType == 0) sb.Append("end;"); } return sb.ToString(); }); } /// /// 初始化组织 /// /// /// [HttpPost, Route("ClearFromRedis")] public JsonActionResult ClearFormRedis([FromBody] KeywordFilter filter) { return SafeExecute(() => { var keyCodeList = new List() { "T_FM_ENUM_ITEM_","T_FM_ROLE_","T_FM_ROLE_MENU_PERM_","T_FM_ROLE_GROUP","T_FM_ROLE_GROUP_BELONG_ROLE_","T_FM_ROLE_MENU_PERM_", "T_PF_BTN_","T_PF_COLUMN_","T_PF_EDIT_COLUMN_","T_PF_FORM_","T_PF_MENU_","T_PF_PAGE_EDIT_","T_PF_PAGE_TABLE_","T_PF_PARAM_ITEM_", "T_PF_PARAM_SCHEME_","T_PF_QUERY_","opt_grouplist_","opt_list_","sort_","PAGE_EDIT_","PAGE_TABLE_","PAGE_TREE_", "TABLE_PAGE_TABLES_","TABLE_USER_CONFIG_","USER_CUSTOM_CONFIG_","SEARCH_CONFIG_","{T_PF_FORM}" }; //过滤 //"FM201_", 待办结束时间配置 List delKeys = new List(); CSRedis.CSRedisClient redisClient = CsRedisManager.GetClient(); foreach (var keyCode in keyCodeList) { var keys = redisClient.Keys("*" + keyCode + "*"); if (keys != null && keys.Any()) delKeys.AddRange(keys); } if (delKeys.Any()) CsRedisManager.GetClient().Del(delKeys.ToArray()); //var redisManage = APT.Infrastructure.Api.ServiceLocator.Instance.GetService(); //var partenKeys = CsRedisManager.GetClient().Keys("T_FM_ENUM_ITEM_*"); //var listKeys = redisManage.GetAllCacheKeys(); //var keyCodeList = new List() { //"T_FM_ENUM_ITEM_","T_FM_ROLE_","T_FM_ROLE_MENU_PERM_","T_FM_ROLE_GROUP","T_FM_ROLE_GROUP_BELONG_ROLE_","T_FM_ROLE_MENU_PERM_", //"T_PF_BTN_","T_PF_COLUMN_","T_PF_EDIT_COLUMN_","T_PF_FORM_","T_PF_MENU_","T_PF_PAGE_EDIT_","T_PF_PAGE_TABLE_","T_PF_PARAM_ITEM_", //"T_PF_PARAM_SCHEME_","T_PF_QUERY_","opt_grouplist_","opt_list_","sort_","PAGE_EDIT_","PAGE_TABLE_","PAGE_TREE_", //"TABLE_PAGE_TABLES_","TABLE_USER_CONFIG_","USER_CUSTOM_CONFIG_","SEARCH_CONFIG_","{T_PF_FORM}" //}; ////过滤 //"FM201_", 待办结束时间配置 //List delKeys = new List(); //foreach (var keyCode in keyCodeList) //{ // var keys = listKeys.Where(i => i.StartsWith(keyCode)); // delKeys.AddRange(keys); //} //if (delKeys.Any()) // CsRedisManager.GetClient().Del(delKeys.ToArray()); return true; }); } /// /// 初始化组织 /// /// /// [HttpPost, Route("InitOrgBySrcOrg")] public JsonActionResult InitOrgBySrcOrg([FromBody] KeywordFilter filter) { return SafeExecute(() => { string destOrgCode = filter.Keyword;//目标组织编号 string destOrgName = filter.Parameter1;//目标组织名称 var org = this.GetEntity(filter.OrgId.ToString()); var formService = APT.Infrastructure.Api.ServiceLocator.Instance.GetService(); formService.InitOrgBySrcOrg(org.CODE, destOrgCode, destOrgName); return true; }); } private void DoSysBaseConfig(Guid srcOrgId, List destOrgIds) { List orgIds = new List(); orgIds.Add(srcOrgId); orgIds.AddRange(destOrgIds); var baseConfigs = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcBaseConfig = baseConfigs.FirstOrDefault(t => t.ORG_ID == srcOrgId); if (srcBaseConfig != null) { List addBaseConfigs = new List(); destOrgIds.ForEach(t => { var destBaseConfig = baseConfigs.FirstOrDefault(t1 => t1.ORG_ID == t); if (destBaseConfig != null) return; var destOrg = this.GetEntity(t.ToString()); destBaseConfig = new T_FM_BASE_CONFIG(); var code = destBaseConfig.CODE; var name = destBaseConfig.NAME; var logo = destBaseConfig.LOGO_ID; CopyUtils.CopyObject(destBaseConfig, srcBaseConfig); destBaseConfig.ORG_ID = t; destBaseConfig.CODE = code; destBaseConfig.NAME = name; destBaseConfig.LOGO_ID = logo; addBaseConfigs.Add(destBaseConfig); }); if (addBaseConfigs.Any()) this.BantchAddEntity(addBaseConfigs); } } /// /// 初始化组织 /// /// /// [HttpPost, Route("SynchFormConfigByOrg")] public JsonActionResult SynchFormConfigByOrg([FromBody] KeywordFilter filter) { return SafeExecute(() => { string srcOrgId = filter.Keyword;//来源组织ID string destOrgIdStr = filter.Parameter1;//目标组织ID列表 DateTime? startTime = LibUtils.ToDateTime(filter.Parameter2); bool isInit = LibUtils.ToBoolean(filter.Parameter3); if (string.IsNullOrEmpty(srcOrgId)) throw new Exception("来源组织不允许为空"); if (string.IsNullOrEmpty(destOrgIdStr)) throw new Exception("目标组织列表不允许为空"); if (!isInit && startTime == null) throw new Exception("请填写开始时间"); var destOrgIds = destOrgIdStr.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(t => new Guid(t)).ToList(); var formService = APT.Infrastructure.Api.ServiceLocator.Instance.GetService(); if (isInit) { List users = new List(); List roles = new List(); List userRoles = new List(); var destOrgs = this.GetEntities(t => destOrgIds.Contains(t.ID), new BaseFilter()).ToList(); foreach (var destOrg in destOrgs) { var isExistUser = this.GetEntities(t => t.ORG_ID == destOrg.ID, new BaseFilter()).Any(); if (!isExistUser) { T_FM_USER user = new T_FM_USER(); user.CODE = destOrg.CODE + "Admin"; user.NAME = destOrg.CODE + "Admin"; user.ORG_ID = destOrg.ID; user.PASSWORD = "E10ADC3949BA59ABBE56E057F20F883E";//默认密码为123456 users.Add(user); T_FM_USER sysUser = new T_FM_USER(); sysUser.CODE = destOrg.CODE + "System"; sysUser.NAME = destOrg.CODE + "System"; sysUser.ORG_ID = destOrg.ID; sysUser.PASSWORD = "E10ADC3949BA59ABBE56E057F20F883E";//默认密码为123456 users.Add(sysUser); T_FM_ROLE role = new T_FM_ROLE(); role.CODE = destOrg.CODE + "Admin"; role.NAME = destOrg.CODE + "Admin"; role.ORG_ID = destOrg.ID; role.ROLE_TYPE = (int)FMRoleTypeEnum.管理角色; role.PLATFORM_TYPE = (int)PFPlatTypeEnum.后台; roles.Add(role); T_FM_ROLE clientRole = new T_FM_ROLE(); clientRole.CODE = destOrg.CODE + "ClientAdmin"; clientRole.NAME = destOrg.CODE + "ClientAdmin"; clientRole.ORG_ID = destOrg.ID; clientRole.ROLE_TYPE = (int)FMRoleTypeEnum.管理角色; clientRole.PLATFORM_TYPE = (int)PFPlatTypeEnum.客户端; roles.Add(clientRole); T_FM_ROLE appRole = new T_FM_ROLE(); appRole.CODE = destOrg.CODE + "AppAdmin"; appRole.NAME = destOrg.CODE + "AppAdmin"; appRole.ORG_ID = destOrg.ID; appRole.ROLE_TYPE = (int)FMRoleTypeEnum.管理角色; appRole.PLATFORM_TYPE = (int)PFPlatTypeEnum.APP; roles.Add(appRole); T_FM_USER_BELONG_ROLE userRole = new T_FM_USER_BELONG_ROLE(); userRole.USER_ID = user.ID; userRole.BELONG_ROLE_ID = role.ID; userRole.ORG_ID = destOrg.ID; userRoles.Add(userRole); userRole = new T_FM_USER_BELONG_ROLE(); userRole.USER_ID = user.ID; userRole.BELONG_ROLE_ID = clientRole.ID; userRole.ORG_ID = destOrg.ID; userRoles.Add(userRole); userRole = new T_FM_USER_BELONG_ROLE(); userRole.USER_ID = user.ID; userRole.BELONG_ROLE_ID = appRole.ID; userRole.ORG_ID = destOrg.ID; userRoles.Add(userRole); } } UnifiedCommit(() => { if (users.Any()) this.BantchAddEntityNoCommit(users); if (roles.Any()) this.BantchAddEntityNoCommit(roles); if (userRoles.Any()) this.BantchAddEntityNoCommit(userRoles); }); formService.InitOrgByOrg(new Guid(srcOrgId), destOrgIds, startTime); } else formService.SynchFormConfigByOrg(new Guid(srcOrgId), destOrgIds, startTime); this.DoSysBaseConfig(new Guid(srcOrgId), destOrgIds); return true; }); } /// /// 执行语法并且获取执行结果 /// /// /// [HttpPost, Route("ExcuteSqlAndGetResult")] public JsonActionResult ExcuteSqlAndGetResult([FromBody] KeywordFilter filter) { return SafeExecute(() => { if (string.IsNullOrEmpty(filter.Keyword)) throw new Exception("语法不允许为空"); var formService = APT.Infrastructure.Api.ServiceLocator.Instance.GetService(); return formService.ExcuteSqlAndGetResult(filter.Keyword); }); } /// /// 依据表名称初始化表单配置 /// /// /// [HttpPost, Route("InitFormConfigByName")] public JsonActionResult InitFormConfigByName([FromBody] KeywordFilter filter) { return SafeExecute(() => { var tableName = filter.Keyword; var userId = LibUtils.ToGuid(filter.Parameter1); var configType = (PFInitFormConfigTypeEnum)LibUtils.ToInt(filter.Parameter2); var menuParentId = LibUtils.ToGuid(filter.Parameter3); var menuName = LibUtils.ToString(filter.Parameter4); string menuIcon = LibUtils.ToString(filter.Parameter5); bool isAddSend = false; if (!string.IsNullOrEmpty(filter.Parameter6)) { try { isAddSend = Convert.ToBoolean(filter.Parameter6); } catch { isAddSend = false; } } var entityOperateService = APT.Infrastructure.Api.ServiceLocator.Instance.GetService(); entityOperateService.InitFormConfigByName(filter.OrgId.Value, tableName, userId, configType, menuParentId, menuName, menuIcon, isAddSend); return true; }); } [HttpPost, Route("ChangeNum")] public JsonActionResult ChangeNum([FromBody] KeywordFilter filter) { return SafeExecute(() => { if (string.IsNullOrEmpty(filter.Parameter1) || string.IsNullOrEmpty(filter.Parameter2) || string.IsNullOrEmpty(filter.Parameter3) || string.IsNullOrEmpty(filter.Keyword)) this.ThrowError("020005"); Type type = ReflectHelper.FindTypeInCurrentDomain(filter.Keyword); if (type == null) this.ThrowError("020006", filter.Keyword); string param1 = filter.Parameter1; string param2 = filter.Parameter2; var methodInfo = this.GetType().GetMethod("GetObjEntity", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Static); var entity1 = methodInfo.MakeGenericMethod(new Type[] { type }).Invoke(this, new object[] { param1 }); var entity2 = methodInfo.MakeGenericMethod(new Type[] { type }).Invoke(this, new object[] { param2 }); if (entity1 == null || entity2 == null) this.ThrowError("020007"); string sortField = filter.Parameter3; if (sortField == "ID" || sortField == "CREATE_TIME" || sortField == "MODIFY_TIME" || sortField.IndexOf('.') > 0) this.ThrowError("020008", sortField); var prop = type.GetProperty(sortField); if (prop == null) this.ThrowError("020009", sortField); var entity1Value = prop.GetValue(entity1); var entity2Value = prop.GetValue(entity2); prop.SetValue(entity1, entity2Value); prop.SetValue(entity2, entity1Value); var methodUpdate = this.GetType().GetMethod("UpdateObjEntity", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Static); methodUpdate.MakeGenericMethod(new Type[] { type }).Invoke(this, new object[] { entity1, sortField }); methodUpdate.MakeGenericMethod(new Type[] { type }).Invoke(this, new object[] { entity2, sortField }); return true; }); } private T GetObjEntity(string id) where T : MesEntityBase, new() { return this.GetEntity(id); } private bool UpdateObjEntity(T entity, string updateField) where T : MesEntityBase, new() { return this.UpdateEntity(entity, updateField); } } }