Exemple #1
0
        /// <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);
                }
            }
        }
Exemple #2
0
        /// <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]);
                    }
                }
            }
        }
Exemple #3
0
        /// <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);
        }
Exemple #4
0
        /// <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);//保存筛选
                    }
                }
            }
        }
Exemple #5
0
        /// <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
        }