/// <summary> /// 保存多表头信息 /// 覆盖式保存多表头信息(先删除再添加) /// </summary> /// <param name="tbReport"></param> /// <param name="tbReportId"></param> private void SaveRpTopList(TbReportModel tbReport, long tbReportId) { if (tbReport.FieldTopListJson != null && tbReport.FieldTopListJson.Length > 0) { var oldTopList = _tbReportFieldTopRepository.GetAllList(p => p.TbReportId == tbReportId); //循环删除原多表头信息 for (int i = 0; i < oldTopList.Count; i++) { var top = oldTopList[i]; _tbReportFieldTopRepository.Delete(top); } //CurrentUnitOfWork.SaveChanges(); //循环添加多表头信息(从顶端到末梢递归添加) var topList = JSON.EncodeToEntity <List <TbReportFieldTopModel> >(tbReport.FieldTopListJson); if (topList != null && topList.Count > 0) { foreach (var top in topList) { if (string.IsNullOrEmpty(top.ParentName))//当父级为空时 { //递归保存顶级节点及其子节点 RecursionSaveTopField(null, tbReportId, top, topList); } } } } else//如果在数据库中存在多表头的信息则删除 { var fieldList = JSON.EncodeToEntity <List <TbReportFieldModel> >(tbReport.FieldListJson); if (fieldList != null && fieldList.Count > 0) { var fdCodes = fieldList.Select(p => p.FieldCode); //删除字段的topID var fdList = _tbReportFieldRepository.GetAllList(p => p.TbReportId == tbReportId && !fdCodes.Contains(p.FieldCode)); foreach (var fd in fdList) { if (fd.TbReportFieldTopId != null) { fd.TbReportFieldTopId = null; //修改字段的表头ID _tbReportFieldRepository.Update(fd); //保存修改 } } } var oldTopList = _tbReportFieldTopRepository.GetAllList(p => p.TbReportId == tbReportId); //循环删除原多表头信息 for (int i = 0; i < oldTopList.Count; i++) { var top = oldTopList[i]; _tbReportFieldTopRepository.Delete(top); } } }
/// <summary> /// 保存列信息 /// </summary> /// <param name="tbReport"></param> /// <param name="reportId"></param> /// <param name="tbReportId"></param> private void SaveRpFieldList(TbReportModel tbReport, long reportId, long tbReportId) { if (tbReport.FieldListJson != null && tbReport.FieldListJson.Length > 0) { var fieldList = JSON.EncodeToEntity <List <TbReportFieldModel> >(tbReport.FieldListJson); if (fieldList != null && fieldList.Count > 0) { //循环添加或修改字段信息 for (var i = 0; i < fieldList.Count; i++) //foreach (var field in fieldList) { var field = fieldList[i]; var fd = AutoMapper.Mapper.Map <TbReportField>(field); //修改已有字段信息 var hasFd = _tbReportFieldRepository.FirstOrDefault(p => p.FieldCode == field.FieldCode && p.TbReportId == tbReportId); if (hasFd != null) { hasFd.FieldName = field.FieldName; hasFd.DataType = field.DataType; hasFd.IsOrder = field.IsOrder; hasFd.IsShow = field.IsShow; hasFd.Width = field.Width; hasFd.IsSearch = field.IsSearch; hasFd.IsFrozen = field.IsFrozen; hasFd.Align = field.Align; hasFd.OrderNum = (field.OrderNum == 0 || field.OrderNum == null) ? (i + 1) : field.OrderNum; hasFd.Remark = field.Remark; hasFd.Width = field.Width; _tbReportFieldRepository.Update(hasFd);//修改 } else//新增未有的字段 { fd.ReportId = reportId; fd.TbReportId = tbReportId; _tbReportFieldRepository.Insert(fd);//新增 } } } //循环从表中删除未在新字段列表中找到的字段 var fdCodes = fieldList.Select(k => k.FieldCode); var fdList = _tbReportFieldRepository.GetAllList(p => p.TbReportId == tbReportId && !fdCodes.Contains(p.FieldCode)).ToList();//找到未在信息列表中的字段 if (fdList != null && fdList.Count > 0) { for (int i = fdList.Count - 1; i >= 0; i--) { _tbReportFieldRepository.Delete(fdList[i]); } } } }
/// <summary> /// 根据主报表ID获取表格报表列表 /// </summary> /// <param name="reportId">主reportId</param> /// <param name="checkRole">是否验证用户权限</param> /// <param name="moduleId">模块页ID</param> /// <returns></returns> public IList <TbReportModel> GetTbReportList(long reportId, long moduleId, bool checkRole) { var entList = _tbReportRepository.GetAllList(p => p.ReportId == reportId); if (entList != null & entList.Count > 0) { var tbReportList = new List <TbReportModel>(); //循环表格表格,取出其配置信息 foreach (var ent in entList) { TbReportModel tb = GetTbReport(ent.Id, moduleId, checkRole); tbReportList.Add(tb); } return(tbReportList); } return(null); }
/// <summary> /// 保存筛选条件信息 /// 将未设置筛选的字段一起保存(未设置的字段IsSearch = false) /// </summary> /// <param name="tbReport"></param> /// <param name="tbReportId"></param> private void SaveRpFilterList(TbReportModel tbReport, long tbReportId) { //新增或修改筛选 if (tbReport.FilterListJson != null && tbReport.FilterListJson.Length > 0) { //保存说明:无差别式保存.然后在报表解析时去差别处理 //tbReport.FilterListJson返回的所有字段+自定义筛选的内容 var ftList = JSON.EncodeToEntity <List <ReportFilterModel> >(tbReport.FilterListJson); //原筛选项 var oldFtList = _reportFilterRepository.GetAllList(p => p.TbReportId == tbReportId); //获得新的字段 var fdCodes = ftList.Select(p => p.FieldCode); //未在新字段的(应被删的) var delFtList = oldFtList.Where(p => p.FieldCode != null && !fdCodes.Contains(p.FieldCode)).ToList(); //批量修改原筛选全部fasle if (oldFtList != null && oldFtList.Count > 0) { for (int j = oldFtList.Count - 1; j >= 0; j--) { var ft = oldFtList[j]; if (delFtList.Contains(ft)) { _reportFilterRepository.Delete(ft); } else { ft.IsSearch = false; _reportFilterRepository.Update(ft); } } //CurrentUnitOfWork.SaveChanges(); } //批量添加或修改筛选信息 if (ftList != null && ftList.Count > 0) { for (int i = 0; i < ftList.Count; i++) { var ft = ftList[i]; ReportFilter curFt = new ReportFilter(); if (ft.IsCustom)//自定筛选 { if (ft.Id != 0) { curFt = oldFtList.FirstOrDefault(p => p.Id == ft.Id); } else { curFt = oldFtList.FirstOrDefault(p => p.FieldParam == ft.FieldParam);//根据参数名判断 } } else { curFt = oldFtList.FirstOrDefault(p => p.FieldCode == ft.FieldCode);//根据字段编码判断 } curFt = AutoMapper.Mapper.Map(ft, curFt); curFt.TbReportId = tbReportId; _reportFilterRepository.InsertOrUpdate(curFt);//保存筛选 } } } }
/// <summary> /// 保存事件信息(外置),同时向模版事件表中添加内置事件信息 /// </summary> /// <param name="tbReport"></param> /// <param name="reportId"></param> /// <param name="tbReportId"></param> /// <param name="code"></param> private void SaveRpEventList(TbReportModel tbReport, long reportId, long tbReportId, string code) { //表格解析地址 var analysis = _analysisRepository.FirstOrDefault(p => p.Url == "Report/TbReport"); #region 外置事件保存 if (tbReport.OutEventListJson != null && tbReport.OutEventListJson.Length > 0) { //当前事件列表 var eventList = JSON.EncodeToEntity <List <TbReportOutEventModel> >(tbReport.OutEventListJson); //var nullEventL = eventList.Where(p => string.IsNullOrEmpty(p.DisplayName) || string.IsNullOrEmpty(p.Url)); eventList.RemoveAll(p => string.IsNullOrEmpty(p.DisplayName) || string.IsNullOrEmpty(p.Url));//移除空事件 //原事件列表 var oldEventList = _tbReportOutEventRepository.GetAllList(p => p.TbReportId == tbReportId); //循环从表中删除未在新事件列表中的事件及事件参数 //同时,删除在解析表中的模块事件和事件赋权信息 foreach (var ev in oldEventList) { if (!eventList.Select(p => p.Id).Contains(ev.Id)) { _tbReportOutEventRepository.Delete(ev);//删除事件 //循环删除事件的参数列表 var parList = _paramRepository.GetAllList(p => p.TbReportOutEventId == ev.Id); if (parList.Any()) { foreach (var par in parList) { _paramRepository.Delete(par);//删除一个事件参数 } } if (analysis != null) { //删除事件解析表事件及赋权信息 _moduleManager.DeleteEvent(analysis.Id, code, ev.Id); } } } //循环修改或新增事件 if (eventList.Any()) { foreach (var ev in eventList) { TbReportOutEvent even = new TbReportOutEvent(); var oldEv = oldEventList.FirstOrDefault(p => p.Id == ev.Id); if (oldEv != null) { even = oldEv; } even = AutoMapper.Mapper.Map(ev, even); even.TbReportId = tbReportId; //新增或修改事件信息 var eventId = _tbReportOutEventRepository.InsertOrUpdateAndGetId(even); //修改已在解析事件表中的事件信息(url) //更新EM_MODULE_EVENT(url) if (oldEv != null) { string lambda = "p=>p.SourceTableId==" + oldEv.Id + " && p.SourceTable==\"EM_TB_REPORT_OUTEVENT\" && p.Code==\"" + code + "\""; Expression <Func <ModuleEvent, bool> > exp = StringToLambda.LambdaParser.Parse <Func <ModuleEvent, bool> >(lambda); var mdEvList = _moduleManager.GetModuleEventList(exp); if (mdEvList != null && mdEvList.Count > 0) { var mdev = mdEvList[0]; mdev.Url = ev.Url; mdev.EventFrom = "外置"; mdev.EventName = ev.DisplayName; mdev.EventType = ev.EventType; _moduleManager.SaveModuleEvent(mdev); } else { //保存事件至EM_MODULE_EVENT ModuleEvent mdEv = new ModuleEvent { AnalysisId = analysis.Id, Code = code, EventName = ev.DisplayName, EventType = ev.EventType, SourceTable = "EM_TB_REPORT_OUTEVENT", SourceTableId = eventId, EventFrom = "外置", Url = ev.Url//链接 }; _moduleManager.SaveEvent(mdEv); } } if (ev.Id == 0)//新增事件到解析事件表 { //保存事件至EM_MODULE_EVENT ModuleEvent mdEv = new ModuleEvent { AnalysisId = analysis.Id, Code = code, EventName = ev.DisplayName, EventType = ev.EventType, SourceTable = "EM_TB_REPORT_OUTEVENT", SourceTableId = eventId, EventFrom = "外置", Url = ev.Url//链接 }; _moduleManager.SaveEvent(mdEv); } #region 覆盖式更新事件参数列表(先删除再添加) //删除参数列表 var parList = _paramRepository.GetAllList(p => p.TbReportOutEventId == eventId); if (parList.Any()) { foreach (var par in parList) { _paramRepository.Delete(par); } } //保存事件的参数列表 if (ev.ParamListJson != null && ev.ParamListJson.Length > 0) { var paramList = JSON.EncodeToEntity <List <ParamModel> >(ev.ParamListJson); foreach (var param in paramList) { var pm = AutoMapper.Mapper.Map <Param>(param); pm.Id = 0; //新增方式插入 pm.TbReportOutEventId = eventId; //事件ID _paramRepository.InsertOrUpdate(pm); //保存参数 } } #endregion } } } #endregion #region 内置事件保存 //内置事件列表 var inEvList = _inEventRepository.GetAllList(p => p.ReportType == tbReport.ReportType).ToList(); var inEvIds = inEvList.Select(p => p.Id); string inlambda = "p=>p.Code==\"" + code + "\" && p.EventFrom==\"内置\" && p.SourceTable==\"EM_INEVENT\" &&p.AnalysisId==" + analysis.Id; Expression <Func <ModuleEvent, bool> > exp1 = StringToLambda.LambdaParser.Parse <Func <ModuleEvent, bool> >(inlambda); var mdInEvList = _moduleManager.GetModuleEventList(exp1); if (mdInEvList != null && mdInEvList.Count > 0) { //删除不在内置事件列表中的模版事件 var delInEvList = mdInEvList.Where(p => !inEvIds.Contains(p.SourceTableId)).ToList(); if (delInEvList != null && delInEvList.Count > 0) { foreach (var inEv in delInEvList) { if (analysis != null) { //删除事件解析表事件及赋权信息 _moduleManager.DeleteEvent(analysis.Id, code, inEv.SourceTableId); } } } //查找没有添加的内置事件List var insertInEvList = inEvList.Where(p => !mdInEvList.Select(k => k.SourceTableId).Contains(p.Id)); if (insertInEvList != null && insertInEvList.Count() > 0) { //循环添加内置事件 foreach (var inev in insertInEvList) { ModuleEvent mdEv = new ModuleEvent { AnalysisId = analysis.Id, Code = code, EventName = inev.DisplayName, EventFrom = "内置", SourceTable = "EM_INEVENT", SourceTableId = inev.Id, }; _moduleManager.SaveEvent(mdEv); } } } else//未找到时,添加内置事件 { if (inEvList != null && inEvList.Count > 0) { foreach (var inEv in inEvList) { //保存事件至EM_MODULE_EVENT ModuleEvent mdEv = new ModuleEvent { AnalysisId = analysis.Id, Code = code, EventName = inEv.DisplayName, EventFrom = "内置", SourceTable = "EM_INEVENT", SourceTableId = inEv.Id }; _moduleManager.SaveEvent(mdEv); } } } #endregion }