Exemple #1
0
        private static string AppendListSql(Pagination page, AdminCredential admin, DBDatabase db, string sql)
        {
            Sys_Entity entity = db.FirstOrDefault <Sys_Entity>(new Sql("SELECT * FROM Sys_Entity WHERE ID=" + page.eid));

            if (sql.IndexOf(entity.Name + ".ID") == -1)
            {
                sql = sql.Replace("SELECT", "SELECT " + entity.Name + ".ID AS " + entity.Name + "$ID,");
            }
            if (sql.IndexOf(entity.Name + ".Name") == -1)
            {
                sql = sql.Replace("SELECT", "SELECT " + entity.Name + ".Name AS " + entity.Name + "$Name,");
            }
            if (sql.IndexOf(entity.Name + ".OwnerID") == -1)
            {
                sql = sql.Replace("SELECT", "SELECT " + entity.Name + ".OwnerID AS " + entity.Name + "$OwnerID,");
            }
            //Where条件
            if (!string.IsNullOrEmpty(page.WhereSql))
            {
                if (sql.IndexOf("WHERE") != -1)
                {
                    sql += " AND ";
                }
                else
                {
                    sql += " WHERE ";
                }
                sql += page.WhereSql;
            }
            if (page.IsSearch)
            {
                page.Page = 1;
            }
            //关键字
            sql = AppendSqlForKeyWord(page.KeyWord, page.eid.Value, db, sql);
            //权限过滤
            if (entity.IsEnableDataAuthorize)
            {
                sql = AppendSqlForAuth(page, admin, sql, entity.Name);
            }
            //Tab
            if (page.pid.HasValue)
            {
                sql = AppendSqlForTab(page, db, sql, entity.Name);
            }
            //统计数据
            if (entity.IsEnableSumData)
            {
                CacheHelper.Single.TrySave($"{page.vid}-{admin.ID}-sumdata-sql", GetSumDataSql(entity.ID, db, sql));
            }
            //排序
            var orderSql = GetOrderSql(page, db, entity.Name);

            sql += orderSql;
            //表单分页
            CacheHelper.Single.TrySave($"{page.vid}-{admin.ID}-formpage-sql", GetFormPageSql(entity.Name, orderSql));
            CacheHelper.Single.TrySave($"{page.vid}-{admin.ID}-list-sql", sql);
            return(sql);
        }
Exemple #2
0
        /// <summary>
        /// 保存视图
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="view_request"></param>
        /// <returns></returns>
        public ItemResult <int> SaveView(ViewSaveEntity entity, Sys_View view_request, List <ViewFieldModel> field_list)
        {
            int ViewID            = 0;
            ItemResult <int> item = new ItemResult <int>();
            Sql           _sql    = new Sql();
            StringBuilder strb    = new StringBuilder();
            var           db      = CreateDao();
            bool          isKeepConnectionAlive = db.KeepConnectionAlive;

            try
            {
                // 检查此前是否已经保持连接存活状态,如果没有,则进行设置
                if (!isKeepConnectionAlive)
                {
                    // 保持连接存活状态
                    db.KeepConnectionAlive = true;
                }
                // 开始事务
                db.BeginTransaction();

                //要显示的列
                var _fieldsql = new Sql();
                _fieldsql.Select("RelationEntity,EntityName,Name,FieldSql,JoinTableName,OnSql,Field,Title,Template,HeaderAttributes,Attributes,HeaderTemplate,Width,Columns_Type,Columns_Format")
                .From("Sys_Field").Where("EntityID=" + entity.EntityID + " AND IsColumnShow=1");

                var           sql      = new Sql();
                StringBuilder strb_sql = new StringBuilder();
                #region 构建视图

                List <string>     field      = new List <string>();
                List <JoinEntity> joinEntity = new List <JoinEntity>();
                foreach (var itemq in field_list)
                {
                    if (!string.IsNullOrEmpty(itemq.FieldSql))
                    {
                        field.Add(itemq.FieldSql);
                    }

                    //列表外键弹框模版对应的Sql语句
                    if (itemq.FieldType == EnumFieldType.关联其他表.ToString() && !string.IsNullOrEmpty(itemq.TemplateSql))
                    {
                        field.Add(itemq.TemplateSql);
                    }

                    //列表选项集显示值对应的Value值
                    if (itemq.FieldType == EnumFieldType.两个选项.ToString() || itemq.FieldType == EnumFieldType.项集.ToString())
                    {
                        field.Add(itemq.FieldSql.Replace(".Name", ".Value").Replace("$Name", "$Value"));
                    }

                    //列表外键显示值对应的ID值
                    if (itemq.FieldType == EnumFieldType.关联其他表.ToString())
                    {
                        field.Add(itemq.FieldSql.Replace(".Name", ".ID").Replace("$Name", "$ID"));
                    }

                    //外键表
                    if (joinEntity.Where(e => e.JoinTableName == itemq.JoinTableName).Count() == 0 && !string.IsNullOrEmpty(itemq.JoinTableName))
                    {
                        joinEntity.Add(new JoinEntity()
                        {
                            JoinTableName = itemq.JoinTableName, OnSql = itemq.OnSql
                        });
                    }

                    //格式处理
                    if (itemq.FieldType == "时间")
                    {
                        itemq.Filterable = new Filterable()
                        {
                            ui = "datetimepicker"
                        };
                        itemq.Format       = "{0:yyyy-MM-dd HH:mm}";
                        itemq.Columns_Type = "date";
                    }
                }
                foreach (var itemq in entity.Relationentity)
                {
                    if (joinEntity.Where(e => e.JoinTableName == itemq.JoinTableName).Count() == 0 && !string.IsNullOrEmpty(itemq.JoinTableName))
                    {
                        joinEntity.Add(new JoinEntity()
                        {
                            JoinTableName = itemq.JoinTableName, OnSql = itemq.OnSql
                        });
                    }
                }
                strb_sql.AppendFormat("SELECT {0} FROM {1}", string.Join(",", field), entity.EntityName);
                foreach (var e in joinEntity)
                {
                    strb_sql.AppendFormat(" LEFT JOIN {0} ON {1}", e.JoinTableName, e.OnSql);
                }
                if (!string.IsNullOrEmpty(entity.FilterSql))
                {
                    strb_sql.AppendFormat(" WHERE {0}", entity.FilterSql);
                }
                string viewname = string.Format("View_{0}_{1}_{2}", entity.EntityName, view_request.OwnerID, DateTime.Now.ToString("yyyyMMddhhmmssffff"));
                #endregion

                #region 编辑视图表
                if (view_request.ID == 0)
                {
                    Sys_View view = new Sys_View()
                    {
                        CreateTime = DateTime.Now,
                        UpdateTime = DateTime.Now,
                        EntityID   = entity.EntityID,
                        Name       = viewname,
                        OwnerID    = view_request.OwnerID,
                        FieldList  = JsonConvert.SerializeObject(field_list),//EntityFieldsToViewFields(field_list)
                        Sql        = strb_sql.ToString(),
                        Title      = view_request.Title,
                        Remark     = view_request.Remark,
                        Express    = entity.Express,
                        IsMenu     = view_request.IsMenu,
                        Sort       = view_request.Sort.Replace("$", "."),
                        Type       = string.IsNullOrEmpty(view_request.Type) ? "自定义视图" : view_request.Type
                    };
                    ViewID = Convert.ToInt32(db.Insert(view));
                }
                else
                {
                    var      view_list = db.Query <Sys_View>(new Sql(string.Format("SELECT * FROM Sys_View WHERE ID={0}", view_request.ID))).ToList();
                    Sys_View view      = view_list.FirstOrDefault();
                    view.Sql        = strb_sql.ToString();
                    view.UpdateTime = DateTime.Now;
                    view.Title      = view_request.Title;
                    view.Remark     = view_request.Remark;
                    view.IsMenu     = view_request.IsMenu;
                    view.Express    = entity.Express;
                    view.Sort       = view_request.Sort.Replace("$", ".");
                    view.FieldList  = JsonConvert.SerializeObject(field_list);
                    if (!string.IsNullOrEmpty(view_request.Type))
                    {
                        view.Type = view_request.Type;
                    }
                    db.Update(view);
                    ViewID = view_request.ID;
                }
                #endregion

                db.Execute("DELETE FROM Sys_menu WHERE ViewID=@0", ViewID);
                if (view_request.IsMenu.HasValue && view_request.IsMenu.Value)
                {
                    Sys_Entity ventity = db.FirstOrDefault <Sys_Entity>("SELECT top 1 AreaName,ControllerName FROM dbo.Sys_entity WHERE ID=@0", entity.EntityID);
                    var        menuid  = base.Insert <Sys_Menu>(new Sys_Menu()
                    {
                        Icon            = "icon-glass",
                        MenuName        = view_request.Title,
                        ViewID          = ViewID,
                        AccessOperation = "0,1,2,3,4,5,6,8,9,",
                        ParentID        = 11029,
                        MenuUrl         = string.Format("/{0}/{1}/List?v={2}", ventity.AreaName, ventity.ControllerName, ViewID),
                    });
                }

                // 完成事务
                db.CompleteTransaction();
                item.Success = true;
                item.Data    = ViewID;
            }
            catch (Exception)
            {
                item.Success = false;
                // 中断事务
                db.AbortTransaction();
            }
            finally
            {
                // 检查此前是否已经保持连接存活状态,如果没有,则关闭数据库连接
                if (!isKeepConnectionAlive)
                {
                    // 关闭连接存活状态
                    db.KeepConnectionAlive = false;
                    // 关闭数据库连接
                    db.CloseSharedConnection();
                }
            }
            return(item);
        }