예제 #1
0
        public JsonResult SaveQueryData(string Data)
        {
            var entities      = FormulaHelper.GetEntities <DocConstEntities>();
            var userInfo      = FormulaHelper.GetUserInfo();
            var userQueryInfo = entities.Set <S_UserAdvanceQueryInfo>().FirstOrDefault(d => d.UserID == userInfo.UserID);

            if (userQueryInfo == null)
            {
                userQueryInfo            = new S_UserAdvanceQueryInfo();
                userQueryInfo.ID         = FormulaHelper.CreateGuid();
                userQueryInfo.UserID     = userInfo.UserID;
                userQueryInfo.CreateDate = DateTime.Now;
                entities.Set <S_UserAdvanceQueryInfo>().Add(userQueryInfo);
            }
            userQueryInfo.QueryData  = Data;
            userQueryInfo.ModifyDate = DateTime.Now;
            entities.SaveChanges();
            return(Json(""));
        }
예제 #2
0
        public JsonResult GetList(QueryBuilder qb)
        {
            var QueryType = this.Request["QueryType"].ToString();
            var ConfigID  = this.Request["ConfigID"].ToString();
            var SpaceID   = this.Request["SpaceID"].ToString();
            var QueryList = this.Request["AdvanceQueryList"].ToString();
            List <Dictionary <string, object> > queryList = JsonHelper.ToList(QueryList);
            List <Dictionary <string, object> > attrList  = JsonHelper.ToList("");//结果字段对应的属性列表
            var enumService = FormulaHelper.GetService <IEnumService>();

            #region 拼查询sql
            string fileFields   = string.Empty;
            string resultFileds = string.Empty;
            string nodeStr      = string.Empty;
            string resultSql    = string.Empty;
            if (QueryType == "File")
            {
                var nodeConfig = this.Space.S_DOC_File.FirstOrDefault(d => d.ID == ConfigID);
                if (nodeConfig == null)
                {
                    throw new Formula.Exceptions.BusinessException("未能找ID为【" + ConfigID + "】查询结果定义对象");
                }

                resultSql = "select main.*{0} from S_FileInfo main {1} where ConfigID='" + ConfigID + "' and State='" + DocState.Published.ToString() + "' ";
                attrList  = FormulaHelper.CollectionToListDic(nodeConfig.S_DOC_FileAttr);
            }
            else if (QueryType == "Node")
            {
                var nodeConfig = this.Space.S_DOC_Node.FirstOrDefault(d => d.ID == ConfigID);
                if (nodeConfig == null)
                {
                    throw new Formula.Exceptions.BusinessException("未能找ID为【" + ConfigID + "】查询结果定义对象");
                }
                resultSql = "select main.*{0} from S_NodeInfo main {1} where ConfigID='" + ConfigID + "' and State='" + DocState.Published.ToString() + "' ";
                attrList  = FormulaHelper.CollectionToListDic(nodeConfig.S_DOC_NodeAttr);
            }
            else
            {
                throw new Formula.Exceptions.BusinessException("未定义查询类型【" + QueryType + "】");
            }

            //查询条件作为查询对象属性
            string typeSql     = string.Empty;
            var    types       = queryList.Select(a => a.GetValue("TypeValue")).Distinct().ToList();//编目节点
            string relateField = QueryType == "File" ? "FullNodeID" : "FullPathID";
            foreach (var type in types)
            {
                var _queryList = queryList.Where(a => a.GetValue("TypeValue") == type).ToList();
                var name       = _queryList.FirstOrDefault().GetValue("Type");

                string sql       = " left join (select ID{2} from S_NodeInfo where ConfigID='{0}' and State='{4}' ) {1} on charindex({1}.ID,main.{3},1)>0 ";
                string attrField = string.Empty;
                foreach (var queryItem in _queryList)
                {
                    var value = queryItem.GetValue("Value");
                    var af    = queryItem.GetValue("AttrField");
                    var group = queryItem.GetValue("Group");
                    if (string.IsNullOrEmpty(value))
                    {
                        continue;
                    }
                    string fieldStr = af;
                    if (ConfigID != type)
                    {
                        fieldStr   = name + "_" + af;
                        attrField += "," + af + " as " + fieldStr; //属性名
                        //结果列表字段
                        resultFileds += "," + fieldStr;            //属性名
                    }
                }
                if (!string.IsNullOrEmpty(attrField))
                {
                    sql = string.Format(sql, type, name, attrField, relateField, DocState.Published.ToString());
                    //查询条件 是 查询结果自身的属性
                    typeSql += sql;
                }
            }

            resultSql = string.Format(resultSql, resultFileds, typeSql);
            #endregion

            #region 拼结果列字段
            //枚举key列表
            List <Dictionary <string, object> > enumList = JsonHelper.ToList("");
            //查询列表字段
            List <Dictionary <string, object> > columnList = JsonHelper.ToList("");
            var listCofig            = this.Space.S_DOC_ListConfig.FirstOrDefault(d => d.RelationID == ConfigID);
            var gridColumnDetailList = listCofig.S_DOC_ListConfigDetail.Where(d => d.Dispaly == "True").OrderBy(d => d.DetailSort).ToList();
            columnList.Add(new Dictionary <string, object>()
            {
                { "type", "checkcolumn" }
            });                                                                            //选择列
            //columnList.Add(new Dictionary<string, object>() { { "type", "indexcolumn" } });//序号
            columnList.Add(new Dictionary <string, object>()
            {
                { "header", "" }, { "field", "View" }, { "width", "70" }
                , { "align", "center" }, { "headerAlign", "center" }
            });                                                      //查看
            string attrFieldStr = "FileAttrField";
            if (QueryType != "File")
            {
                attrFieldStr = "AttrField";
            }

            foreach (var item in gridColumnDetailList)
            {
                var attrDic = attrList.FirstOrDefault(a => a.GetValue(attrFieldStr) == item.AttrField);
                if (attrDic == null)
                {
                    continue;
                }
                var column = new Dictionary <string, object>();
                column.Add("header", item.AttrName);
                column.Add("field", item.AttrField);
                column.Add("name", item.AttrField);
                column.Add("width", Convert.ToInt32(item.Width));
                column.Add("allowSort", Convert.ToBoolean(item.AllowSort));
                //if (Convert.ToBoolean(item.AllowSort))
                //    column.Add("sortField", item.AttrField);
                column.Add("align", item.Align);
                column.Add("headerAlign", "center");
                var dataType = attrDic.GetValue("DataType");
                if (dataType == AttrDataType.DateTime.ToString())
                {
                    column.Add("dataType", "date");
                    column.Add("dateFormat", "yyyy-MM-dd");
                }
                //处理枚举
                var isEnum = attrDic.GetValue("IsEnum");
                if (isEnum == TrueOrFalse.True.ToString())
                {
                    var enumKey  = attrDic.GetValue("EnumKey");
                    var enumName = enumKey.Split('.').Last();
                    var enumJson = enumService.GetEnumJson(enumKey);

                    column.Add("renderer", "onEnumRender");
                    enumList.Add(new Dictionary <string, object>()
                    {
                        { "Field", item.AttrField },
                        { "EnumKey", enumKey },
                        { "EnumName", enumName },
                        { "EnumData", string.Format("var {0} = {1};", enumName, enumJson) }
                    });
                }
                columnList.Add(column);
            }


            #endregion

            DocInstance.Logic.DocInstanceHepler.QueryBuilderExtend(qb, ConfigID, queryList);

            DataTable dt = this.InstanceDB.ExecuteDataTable(resultSql, qb);
            Dictionary <string, object> result = new Dictionary <string, object>();
            result.SetValue("data", dt);
            result.SetValue("total", qb.TotolCount);
            result.SetValue("columns", columnList);
            result.SetValue("enums", enumList);

            #region 保存查询数据

            var userDic = new Dictionary <string, object>();
            userDic.Add("QueryType", QueryType);
            userDic.Add("QueryNode", ConfigID);
            userDic.Add("List", queryList);
            var entities      = FormulaHelper.GetEntities <DocConstEntities>();
            var userInfo      = FormulaHelper.GetUserInfo();
            var userQueryInfo = entities.Set <S_UserAdvanceQueryInfo>().FirstOrDefault(d => d.UserID == userInfo.UserID);
            if (userQueryInfo == null)
            {
                userQueryInfo            = new S_UserAdvanceQueryInfo();
                userQueryInfo.ID         = FormulaHelper.CreateGuid();
                userQueryInfo.UserID     = userInfo.UserID;
                userQueryInfo.CreateDate = DateTime.Now;
                entities.Set <S_UserAdvanceQueryInfo>().Add(userQueryInfo);
            }
            userQueryInfo.QueryData  = JsonHelper.ToJson <Dictionary <string, object> >(userDic);
            userQueryInfo.ModifyDate = DateTime.Now;
            entities.SaveChanges();

            #endregion

            return(Json(result));
        }