示例#1
0
        private static void BuildJoinCondition(SqlQuery query, SqlQueryJoin join, QueryConditionDef condition, DocDef docDef, SqlQueryCondition parentCondition, IDataContext dataContext)
        {
            if (condition.Condition != ConditionOperation.Include && condition.Condition != ConditionOperation.Exp)
            {
                var leftPart  = BuildConditionPart(query, condition.Left, dataContext);
                var rightPart = BuildConditionPart(query, condition.Right, dataContext);
                join.Conditions.Add(new SqlQueryCondition(condition.Operation, leftPart, condition.Condition, rightPart));
            }
            else if (condition.Condition == ConditionOperation.Include && condition.Conditions != null && condition.Conditions.Count > 0)
            {
                var attrDef = String.IsNullOrEmpty(condition.AttributeName)
                                  ? docDef.Attributes.First(a => a.Id == condition.AttributeId)
                                  : docDef.Attributes.First(
                    a => String.Equals(a.Name, condition.AttributeName, StringComparison.OrdinalIgnoreCase));
                query.JoinSource(query.FindSourceByDocDef(docDef), attrDef.DocDefType.Id, SqlSourceJoinType.Inner, attrDef.Id);

                foreach (var child in condition.Conditions)
                {
                    BuildJoinCondition(query, join, child, attrDef.DocDefType.Id, parentCondition, dataContext);
                }
            }
            else if (condition.Condition == ConditionOperation.Exp && condition.Conditions != null)
            {
                var exp = new SqlQueryCondition(null, condition.Operation, Guid.Empty, ConditionOperation.Exp, null);

                foreach (var child in condition.Conditions)
                {
                    BuildJoinCondition(query, join, child, docDef, exp, dataContext);
                }
            }
        }
示例#2
0
    public static string UpdatePassword(string oldpwd, string newpwd, int userid)
    {
        SHA256CryptoServiceProvider sha256crypto = new SHA256CryptoServiceProvider();

        oldpwd = CommonMethods.Decrypt(oldpwd);
        byte[] b = sha256crypto.ComputeHash(Encoding.UTF8.GetBytes(oldpwd));
        oldpwd = CommonMethods.BytesToHexString(b);
        SqlQueryCondition sqlcondition1 = new SqlQueryCondition(UserField.Id, SqlQueryConditionOperator.Equal, userid);
        SqlQueryCondition sqlcondition2 = new SqlQueryCondition(UserField.Password, SqlQueryConditionOperator.Equal, oldpwd);

        if (UserDAO.Select(new UserField[] { UserField.Id },
                           new SqlQueryCondition(new SqlQueryCondition[] { sqlcondition1, sqlcondition2 }, SqlQueryLogicalOperator.And)).Length == 0) //学号不存在或者状态码或密码不正确
        {
            return("原密码不正确!");
        }
        else
        {
            newpwd = CommonMethods.Decrypt(newpwd);
            if (newpwd.Length < 8 || newpwd.Length > 16)
            {
                return("新密码长度不符合要求!");
            }
            b      = sha256crypto.ComputeHash(Encoding.UTF8.GetBytes(newpwd));
            newpwd = CommonMethods.BytesToHexString(b);
            UserDAO.Update(new UserField[] { UserField.Password }, new object[] { newpwd }, sqlcondition1);
            UserLogDAO.Insert(userid, "updpwd{}");
            return("true");
        }
    }
示例#3
0
    public static string SignOut(string sno, string sequence, string remark)
    {
        if (!ScheduleField.Sequence.TestValue(sequence) || !ScheduleField.SignOutRemark.TestValue(remark))
        {
            return("数据格式或长度错误 请联系管理员!");
        }
        DateTime nowtime = DateTime.Now;

        SqlQueryCondition[] sqlconditions1 = new SqlQueryCondition[] {
            new SqlQueryCondition(UserField.StudentNmber, SqlQueryConditionOperator.Equal, sno),
            new SqlQueryCondition(UserField.Status, SqlQueryConditionOperator.Equal, 1)
        };
        object[,] user = UserDAO.Select(new UserField[] { UserField.Id, UserField.Name }, new SqlQueryCondition(sqlconditions1, SqlQueryLogicalOperator.And));
        if (user.Length == 0)
        {
            return("未找到该用户的信息,请检查学号是否填写正确!");
        }
        SqlQueryCondition[] sqlconditions2 = new SqlQueryCondition[] {
            new SqlQueryCondition(ScheduleField.Date, SqlQueryConditionOperator.Equal, nowtime),
            new SqlQueryCondition(ScheduleField.Sequence, SqlQueryConditionOperator.Equal, sequence),
            new SqlQueryCondition(ScheduleField.Attendant, SqlQueryConditionOperator.Equal, user[0, 0])
        };
        object[,] schedule = ScheduleDAO.Select(new ScheduleField[] { ScheduleField.Id, ScheduleField.SignInTime, ScheduleField.SignOutTime },
                                                new SqlQueryCondition(sqlconditions2, SqlQueryLogicalOperator.And));
        if (schedule.Length == 0)
        {
            return("未找到你的值班信息,请检查班次是否错误!");
        }
        if (schedule[0, 1] == DBNull.Value)
        {
            return("你还未进行入站签到,请先入站签到!");
        }
        if (schedule[0, 2] != DBNull.Value)
        {
            return("你已对此班签出!");
        }
        if (nowtime.TimeOfDay < dutytimes[sequence].EndTime - aheadtime)
        {
            return("此时签出太早了,请晚点再来!");
        }
        if (nowtime.TimeOfDay > dutytimes[sequence].EndTime + gracetime)
        {
            return("你来晚了,签出时间已过!");
        }
        ScheduleDAO.Update(new ScheduleField[] { ScheduleField.SignOutTime, ScheduleField.SignOutRemark }, new object[] { nowtime.TimeOfDay, remark },
                           new SqlQueryCondition(ScheduleField.Id, SqlQueryConditionOperator.Equal, schedule[0, 0]));
        UserLogDAO.Insert((int)user[0, 0], "signout{" + sequence + '\r' + remark + "}");
        return("true\n" + user[0, 1].ToString() + " 第" + sequence + "班 " + nowtime.ToLongTimeString() + "签出");
    }
示例#4
0
 public static string DeleteTimetable(string timetableid, int userid)
 {
     if (!TimetableField.Id.TestValue(timetableid))
     {
         return("");
     }
     SqlQueryCondition[] sqlconditions = new SqlQueryCondition[] {
         new SqlQueryCondition(TimetableField.Id, SqlQueryConditionOperator.Equal, timetableid),
         new SqlQueryCondition(TimetableField.Status, SqlQueryConditionOperator.NotEqual, 1),
         new SqlQueryCondition(TimetableField.Owner, SqlQueryConditionOperator.Equal, userid)     //加入此条件防止非法更改他人课表
     };
     TimetableDAO.Delete(new SqlQueryCondition(sqlconditions, SqlQueryLogicalOperator.And));
     UserLogDAO.Insert(userid, "deltb{" + timetableid + "}");
     return("true");
 }
示例#5
0
        public SqlQueryCondition AddCondition(ExpressionOperation operation, SqlQuerySource source1, string attrDefName1, ConditionOperation condition, SqlQuerySource source2, string attrDefName2, SqlQueryCondition parentCondition = null)
        {
            var item = new SqlQueryCondition(operation, source1, attrDefName1, condition, source2, attrDefName2);

            if (parentCondition == null)
            {
                Conditions.Add(item);
            }
            else
            {
                parentCondition.Conditions.Add(item);
            }

            return(item);
        }
示例#6
0
        public SqlQueryCondition AddCondition(ExpressionOperation operation, SqlQuerySource source, string attrDefName, ConditionOperation condition, object value, SqlQueryCondition parentCondition = null)
        {
            var item = new SqlQueryCondition(source, operation, attrDefName, condition, value);

            if (parentCondition == null)
            {
                Conditions.Add(item);
            }
            else
            {
                parentCondition.Conditions.Add(item);
            }

            return(item);
        }
示例#7
0
 public static string UpdateTimetableData(string timetableid, string newdata, int userid)
 {
     if (!TimetableField.Id.TestValue(timetableid) || !TimetableField.Data.TestValue(newdata))
     {
         return("数据错误 请联系管理员!");
     }
     SqlQueryCondition[] sqlconditions = new SqlQueryCondition[] {
         new SqlQueryCondition(TimetableField.Owner, SqlQueryConditionOperator.Equal, userid),     //加入此条件防止非法更改他人课表
         new SqlQueryCondition(TimetableField.Id, SqlQueryConditionOperator.Equal, timetableid)
     };
     TimetableDAO.Update(new TimetableField[] { TimetableField.Data }, new object[] { newdata },
                         new SqlQueryCondition(sqlconditions, SqlQueryLogicalOperator.And));
     UserLogDAO.Insert(userid, "updtb{" + timetableid + "}");
     return("true");
 }
示例#8
0
 public static object[,] GetTimetableData(string timetableid, int userid)
 {
     if (!TimetableField.Id.TestValue(timetableid))
     {
         return new object[, ] {
                    { "" }
         }
     }
     ;
     SqlQueryCondition[] sqlconditions = new SqlQueryCondition[] {
         new SqlQueryCondition(TimetableField.Id, SqlQueryConditionOperator.Equal, timetableid),
         new SqlQueryCondition(TimetableField.Owner, SqlQueryConditionOperator.Equal, userid)     //加入此条件防止非法查看他人课表
     };
     UserLogDAO.Insert(userid, "gettbdat{" + timetableid + "}");
     return(TimetableDAO.Select(new TimetableField[] { TimetableField.Data }, new SqlQueryCondition(sqlconditions, SqlQueryLogicalOperator.And)));
 }
示例#9
0
 public static string AddTimetable(string timetablename, string data, int userid)
 {
     if (!TimetableField.Name.TestValue(timetablename) || !TimetableField.Data.TestValue(data))
     {
         return("数据错误 请联系管理员!");
     }
     SqlQueryCondition[] sqlconditions = new SqlQueryCondition[] {
         new SqlQueryCondition(TimetableField.Owner, SqlQueryConditionOperator.Equal, userid),
         new SqlQueryCondition(TimetableField.Name, SqlQueryConditionOperator.Equal, timetablename)
     };
     if (TimetableDAO.Select(new TimetableField[] { TimetableField.Id }, new SqlQueryCondition(sqlconditions, SqlQueryLogicalOperator.And)).Length != 0)
     {
         return("课表名重复!");
     }
     else
     {
         UserLogDAO.Insert(userid, "addtb{" + timetablename + "}");
         return("true:" + TimetableDAO.Insert(timetablename, userid, data)); //加上id一起返回
     }
 }
示例#10
0
    public static string ActiveTimetable(string timetableid, int userid)
    {
        if (!TimetableField.Id.TestValue(timetableid))
        {
            return("");
        }
        SqlQueryCondition sqlcondition1 = new SqlQueryCondition(TimetableField.Id, SqlQueryConditionOperator.Equal, timetableid);
        SqlQueryCondition sqlcondition2 = new SqlQueryCondition(TimetableField.Status, SqlQueryConditionOperator.Equal, 1);
        SqlQueryCondition sqlcondition3 = new SqlQueryCondition(TimetableField.Owner, SqlQueryConditionOperator.Equal, userid); //加入此条件防止非法更改他人课表

        if (TimetableDAO.Select(new TimetableField[] { TimetableField.Id },
                                new SqlQueryCondition(new SqlQueryCondition[] { sqlcondition1, sqlcondition3 }, SqlQueryLogicalOperator.And)).Length != 0)
        {
            TimetableDAO.Update(new TimetableField[] { TimetableField.Status }, new object[] { 0 },
                                new SqlQueryCondition(new SqlQueryCondition[] { sqlcondition2, sqlcondition3 }, SqlQueryLogicalOperator.And));
            TimetableDAO.Update(new TimetableField[] { TimetableField.Status }, new object[] { 1 },
                                new SqlQueryCondition(new SqlQueryCondition[] { sqlcondition1 }, SqlQueryLogicalOperator.And));
        }
        UserLogDAO.Insert(userid, "acttb{" + timetableid + "}");
        return("true");
    }
示例#11
0
    public static string RenameTimetable(string timetableid, string newname, int userid)
    {
        if (!TimetableField.Id.TestValue(timetableid) || !TimetableField.Name.TestValue(newname))
        {
            return("数据错误 请联系管理员!");
        }
        SqlQueryCondition sqlcondition1 = new SqlQueryCondition(TimetableField.Owner, SqlQueryConditionOperator.Equal, userid); //加入此条件防止非法更改他人课表
        SqlQueryCondition sqlcondition2 = new SqlQueryCondition(TimetableField.Id, SqlQueryConditionOperator.Equal, timetableid);
        SqlQueryCondition sqlcondition3 = new SqlQueryCondition(TimetableField.Name, SqlQueryConditionOperator.Equal, newname);

        if (TimetableDAO.Select(new TimetableField[] { TimetableField.Id },
                                new SqlQueryCondition(new SqlQueryCondition[] { sqlcondition1, sqlcondition3 }, SqlQueryLogicalOperator.And)).Length != 0)
        {
            return("课表名重复!");
        }
        else
        {
            TimetableDAO.Update(new TimetableField[] { TimetableField.Name }, new object[] { newname },
                                new SqlQueryCondition(new SqlQueryCondition[] { sqlcondition1, sqlcondition2 }, SqlQueryLogicalOperator.And));
            UserLogDAO.Insert(userid, "rntb{" + timetableid + '\r' + newname + "}");
            return("true");
        }
    }
示例#12
0
        private static void BuildJoinCondition(SqlQuery query, SqlQueryJoin join, QueryConditionDef condition, Guid docDefId, SqlQueryCondition parentCondition, IDataContext dataContext)
        {
            // using (var defRepo = new DocDefRepository(dataContext))
            var defRepo = query.Provider.Get <IDocDefRepository>();
            {
                var docDef = defRepo.DocDefById(docDefId);

                BuildJoinCondition(query, join, condition, docDef, parentCondition, dataContext);
            }
        }
示例#13
0
        private static void BuildCondition(SqlQuery query, ReportDef report, ReportConditionItemDef item, SqlQueryCondition parentCondition, IDictionary <Guid, SqlQuerySource> mapper, bool isHaving)
        {
            var condition = item as ReportConditionDef;

            if (condition != null)
            {
                var source           = mapper[condition.LeftAttribute.SourceId];
                var reportSource     = report.GetSourceDef(condition.LeftAttribute.SourceId);
                var reportSourceAttr = reportSource.Attributes != null
                    ? reportSource.Attributes.FirstOrDefault(a => a.Id == condition.LeftAttribute.AttributeId)
                    : null;

                var attr = reportSourceAttr == null?source.GetAttribute(condition.LeftAttribute.AttributeId) : source.GetAttribute(reportSourceAttr.Ident);

                var attrRef  = new SqlQuerySourceAttributeRef(source, attr);
                var leftPart = new SqlQueryConditionPart();
                leftPart.Attributes.Add(attrRef);

                var rightPart = BuildConditionPart(query, report, condition, mapper);

                if (parentCondition != null)
                {
                    parentCondition.Conditions.Add(new SqlQueryCondition(item.Operation, leftPart,
                                                                         CompareOperationConverter.CompareToCondition(condition.Condition), rightPart));
                }
                else if (isHaving)
                {
                    query.HavingConditions.Add(new SqlQueryCondition(item.Operation, leftPart,
                                                                     CompareOperationConverter.CompareToCondition(condition.Condition),
                                                                     rightPart));
                }
                else
                {
                    query.Conditions.Add(new SqlQueryCondition(item.Operation, leftPart,
                                                               CompareOperationConverter.CompareToCondition(condition.Condition),
                                                               rightPart));
                }
            }
            else
            {
                var expCondition = item as ReportExpConditionDef;
                if (expCondition != null && expCondition.Conditions != null)
                {
                    var exp = query.AddExpCondition(item.Operation, parentCondition);

                    foreach (var child in expCondition.Conditions)
                    {
                        BuildCondition(query, report, child, exp, mapper, isHaving);
                    }
                }
            }
        }
示例#14
0
        public override SqlBuilder BuildSql(ICollection <SqlQuerySourceAttribute> attrs,
                                            ICollection <SqlQueryCondition> conditions, bool isMain = false)
        {
            var builder = new SqlBuilder();

            var tableMap = Mapper != null?Mapper.Find(Source.Id) : null;

            var needToJoinDocument = isMain || (tableMap != null && NeedToJoinDocument(tableMap));

            var withOption        = WithNoLock ? "WITH(NOLOCK)" : "";
            var fromAlias         = tableMap != null ? "t" : "d";
            var orgAlias          = (tableMap != null && !needToJoinDocument) ? "t" : "d";
            var createdAlias      = (tableMap != null && tableMap.FindIdentField("Created") != null) ? "t" : "d";
            var modifiedAlias     = (tableMap != null && tableMap.FindIdentField("Last_Modified") != null) ? "t" : "d";
            var userAlias         = (tableMap != null && tableMap.FindIdentField("User_Id") != null) ? "t" : "d";
            var defAlias          = (tableMap != null && tableMap.FindIdentField("Def_Id") != null) ? "t" : "d";
            var tableMapToDocJoin = tableMap != null && tableMap.IsVirtual ? "LEFT OUTER" : "INNER";
            var from = tableMap == null
                ? "Documents d " + withOption
                : needToJoinDocument
                    ? String.Format("{0} {1} JOIN Documents d {2} ON t.Id = d.Id", GetTableMapSql(tableMap, "t", withOption), tableMapToDocJoin, withOption)
                    : String.Format("{0}", GetTableMapSql(tableMap, "t", withOption));

//                                 ? String.Format("[{0}] t {1} INNER JOIN Documents d {1} ON t.Id = d.Id", tableMap.TableName, withOption)
//                                 : String.Format("[{0}] t {1}", tableMap.TableName, withOption);
//            var from = "Documents d";
            var orgRestriction = "";

//            if (WithNoLock) from += " " + withOption;

            if (UserId != Guid.Empty && !Source.IsPublic)
            {
                /*using (*/
                //var userRepo = new UserRepository(DataContext);/*)*/
                {
/*                    var userInfo = userRepo.GetUserInfo(UserId);
 *
 *                  from += " inner join Organizations o WITH(NOLOCK) on o.Id = d.Organization_Id";
 *                  orgRestriction = String.Format(SourceOrgRestrictCondition, userInfo.OrgUnitTypeId,
 *                                                 userInfo.OrganizationId, withOption);*/
                    var userOrgs = new List <Guid>(_userRepo.GetUserAccessOrgs(UserId));
                    if (userOrgs.Count > 0)
                    {
                        foreach (var orgId in userOrgs)
                        {
                            if (orgRestriction.Length > 0)
                            {
                                orgRestriction += ", ";
                            }
                            orgRestriction += String.Format("'{0}'", orgId);
                        }

                        orgRestriction =
                            String.Format(
                                userOrgs.Count == 1 ? "{0}.Organization_Id = {1}" : "{0}.Organization_Id IN ({1})",
                                orgAlias, orgRestriction);
                    }
                }
            }
            builder.SetFrom(from);

            builder.AddSelect(fromAlias + ".Id");
            var usedConditions      = new List <SqlQueryCondition>();
            var attrIndexDictionary = new Dictionary <SqlQuerySourceAttribute, int>();
            var no = 1;

            if (attrs != null && Attributes != null)
            {
                foreach (var attr in attrs)
                {
                    var i = no;
                    if (!Attributes.Contains(attr))
                    {
                        continue;
                    }

                    if (attrIndexDictionary.ContainsKey(attr))
                    {
                        continue;
                    }

                    attrIndexDictionary.Add(attr, i);

                    var attributeConditions =
                        new List <SqlQueryCondition>(GetQuerySourceAttributeConditions(attr, conditions));
                    var attrConditionStr = SqlQueryCondition.BuildConditions(attributeConditions, "[{0}{1}].[{2}]");
                    var hasCondition     = HasQuerySourceAttributeConditions(attr, conditions);

                    var sb        = new ScriptStringBuilder();
                    var attribute = attr;
                    if (attr.Def != null)
                    {
                        var attrTableField = tableMap != null
                                                 ? tableMap.FindField(attribute.Def.Id) /*tableMap.Fields.FirstOrDefault(
                                                                                         * f => f.AttrDefId == attribute.Def.Id)*/
                                                 : null;

                        var attrDef = attr.Def;
                        if (attrDef.Type.Id == (short)CissaDataType.DocList)
                        {
                            if (String.IsNullOrEmpty(attrConditionStr))
                            {
                                builder.AddJoin(
                                    SqlSourceJoinType.LeftOuter,
                                    String.Format(SourceInnerJoinDocListAttr2, attrDef.Id, i, withOption, String.Empty));
                            }
                            else
                            {
                                builder.AddJoin(
                                    SqlSourceJoinType.Inner,
                                    String.Format(SourceInnerJoinDocListAttr2, attr.Def.Id, i, withOption,
                                                  String.Format(" and " + attrConditionStr, "dla", i, "Value")));
                            }

                            sb.AppendFormat("[dla{0}].[Value] as [{1}]", i, attr.AliasName);
                        }
                        else if (attrDef.Type.Id == (short)CissaDataType.Blob)
                        {
                            var tableName = attr.GetAttrDefTableName();

                            sb.AppendFormat("[a{0}].[File_Name] as [{1}]", i, attr.AliasName);

                            if (String.IsNullOrEmpty(attrConditionStr))
                            {
                                builder.AddJoin(
                                    SqlSourceJoinType.LeftOuter,
                                    String.Format(
                                        "{0} a{1} {2} on (a{1}.Document_Id = {4}.Id and a{1}.Def_Id = '{3}' and a{1}.Expired = '99991231')",
                                        tableName, i, withOption, attr.Def.Id, fromAlias));
                            }
                            else
                            {
                                var valueFieldName = attr.Def.Type.Id == (short)CissaDataType.Text ? "Upper_" : "";
                                builder.AddJoin(
                                    SqlSourceJoinType.Inner,
                                    String.Format(
                                        "{0} a{1} {2} on (a{1}.Document_Id = {5}.Id and a{1}.Def_Id = '{3}' and a{1}.Expired = '99991231' and {4})",
                                        tableName, i, withOption, attr.Def.Id,
                                        String.Format(attrConditionStr, "a", i, valueFieldName + "Value"), fromAlias));
                            }
                        }
                        else if (attrDef.Type.Id == (short)CissaDataType.OrganizationOfDocument)
                        {
                            if (String.IsNullOrEmpty(attrConditionStr))
                            {
                                sb.AppendFormat("(select od{0}.Full_Name", i);
                                sb.AppendFormat(
                                    " from Organizations o{0} {1} inner join Object_Defs od{0} {1} on od{0}.Id = o{0}.Id\n",
                                    i,
                                    withOption);
                                sb.AppendFormat(" where o{0}.Id = {2}.Organization_Id) as [{1}]", i,
                                                attr.AliasName, orgAlias);
                            }
                            else
                            {
                                sb.AppendFormat("[od{0}].[Full_Name] as [{1}]", i, attr.AliasName);
                                builder.AddJoin(
                                    SqlSourceJoinType.Inner,
                                    String.Format("Organizations o{0} {1} on o{0}.[Id] = {2}.Organization_Id", i,
                                                  withOption, orgAlias));
                                builder.AddJoin(
                                    SqlSourceJoinType.Inner,
                                    String.Format("Object_Defs od{0} {1} on (od{0}.[Id] = o{0}.[Id] and {2})", i,
                                                  withOption,
                                                  String.Format(attrConditionStr, "od", i, "Full_Name")));
                            }
                        }

                        /*
                         *                  else if (attrDef.Type.Id == (short)CissaDataType.AuthorOfDocument)
                         *                  {
                         *                      sb.AppendFormat("(select top 1 od{0}.Full_Name from Workers w{0} ", i);
                         *                      sb.AppendFormat("inner join Object_Defs od{0} on od{0}.Id = w{0}.Id ", i);
                         *                      sb.AppendFormat(
                         *                          " where o{0}.Id = d.Organization_Id) as [{1}]",
                         *                          i, attr.AliasName);
                         *                  }
                         *                  else if (attrDef.Type.Id == (short)CissaDataType.Organization)
                         *                  {
                         *                      var tableName = attr.GetAttrDefTableName();
                         *                      sb.AppendFormat("(select top 1 od{0}.Value from {1} oa{0} \n", i, tableName);
                         * //                            sb.AppendFormat(" inner join Organizations o{0} on o{0}.Id = oa{0}.Value\n", i);
                         * //                            sb.AppendFormat(" inner join Object_Defs od{0} on od{0}.Id = o{0}.Id\n", i);
                         *                      sb.AppendFormat(
                         *                          " where oa{0}.Document_Id = d.Id and oa{0}.Def_Id = '{1}' and oa{0}.Expired = convert(date, '31/12/9999', 103)) as [{2}]",
                         *                          i, attrDef.Id, attr.AliasName);
                         *                  }
                         *                  else if (attrDef.Type.Id == (short)CissaDataType.DocumentState)
                         *                  {
                         *                      var tableName = attr.GetAttrDefTableName();
                         *                      sb.AppendFormat("(select top 1 od{0}.Full_Name from {1} da{0} \n", i, tableName);
                         *                      sb.AppendFormat(" inner join Document_State_Types dst{0} on dst{0}.Id = da{0}.Value\n", i);
                         *                      sb.AppendFormat(" inner join Object_Defs od{0} on od{0}.Id = dst{0}.Id\n", i);
                         *                      sb.AppendFormat(
                         *                          " where da{0}.Document_Id = d.Id and da{0}.Def_Id = '{1}' and da{0}.Expired = convert(date, '31/12/9999', 103)) as [{2}]",
                         *                          i, attrDef.Id, attr.AliasName);
                         *                  }
                         */
                        else
                        {
                            var tableName = attr.GetAttrDefTableName();

                            if (attrTableField != null)
                            {
                                if (attrTableField.Type.HasFlag(AttributeFieldType.View))
                                {
                                    sb.AppendFormat("[{0}].[{1}] as [{2}]", fromAlias, attrTableField.FieldName,
                                                    attr.AliasName);
                                }
                                else
                                {
                                    sb.AppendFormat(
                                        "(select [a{0}].[Value] from [{1}] [a{0}] {2}\n" +
                                        "where [a{0}].Document_Id = {3}.Id and [a{0}].Def_Id = '{4}' and [a{0}].Expired = '99991231') as [{5}]",
                                        i, tableName, withOption, fromAlias, attr.Def.Id, attr.AliasName);
                                }


                                if (!String.IsNullOrEmpty(attrConditionStr))
                                {
                                    if (attrTableField.Type.HasFlag(AttributeFieldType.Search))
                                    {
                                        builder.AddCondition(ExpressionOperation.And,
                                                             String.Format(attrConditionStr, fromAlias, String.Empty,
                                                                           attrTableField.FieldName));
                                    }
                                    else
                                    {
                                        var valueFieldName = attr.Def.Type.Id == (short)CissaDataType.Text ? "Upper_" : "";
                                        builder.AddJoin(
                                            SqlSourceJoinType.Inner,
                                            String.Format(
                                                "{0} a{1} {2} on (a{1}.Document_Id = {5}.Id and a{1}.Def_Id = '{3}' and a{1}.Expired = '99991231' and {4})",
                                                tableName, i, withOption, attr.Def.Id,
                                                String.Format(attrConditionStr, "a", i, valueFieldName + "Value"), fromAlias));
                                    }
                                }
                            }
                            else
                            {
                                sb.AppendFormat("[a{0}].[Value] as [{1}]", i, attr.AliasName);

                                if (String.IsNullOrEmpty(attrConditionStr))
                                {
                                    builder.AddJoin(
                                        SqlSourceJoinType.LeftOuter,
                                        String.Format(
                                            "{0} a{1} {2} on (a{1}.Document_Id = {4}.Id and a{1}.Def_Id = '{3}' and a{1}.Expired = '99991231')",
                                            tableName, i, withOption, attr.Def.Id, fromAlias));
                                }
                                else
                                {
                                    var valueFieldName = attr.Def.Type.Id == (short)CissaDataType.Text ? "Upper_" : "";
                                    builder.AddJoin(
                                        SqlSourceJoinType.Inner,
                                        String.Format(
                                            "{0} a{1} {2} on (a{1}.Document_Id = {5}.Id and a{1}.Def_Id = '{3}' and a{1}.Expired = '99991231' and {4})",
                                            tableName, i, withOption, attr.Def.Id,
                                            String.Format(attrConditionStr, "a", i, valueFieldName + "Value"), fromAlias));
                                }
                            }
                        }
                    }
                    else if (attr.Ident == SystemIdent.State || attr.Ident == SystemIdent.InState)
                    {
                        var stateTableField = tableMap != null?tableMap.FindIdentField("State") : null;

                        if (stateTableField != null)
                        {
                            sb.AppendFormat("[{0}].[State] as [{1}]", fromAlias, attr.AliasName);
                            if (!String.IsNullOrEmpty(attrConditionStr))
                            {
                                builder.AddCondition(ExpressionOperation.And,
                                                     String.Format(attrConditionStr, fromAlias, String.Empty,
                                                                   stateTableField.FieldName));
                            }
                        }
                        else
                        {
                            sb.AppendFormat("[ds{0}].[State_Type_Id] as [{1}]", i, attr.AliasName);
                            if (String.IsNullOrEmpty(attrConditionStr))
                            {
                                //sb.AppendFormat("(select ds{0}.State_Type_Id from Document_States ds{0} {1}\n", i,
                                //    withOption);
                                //sb.AppendFormat(
                                //    " where ds{0}.Document_Id = {2}.Id and ds{0}.Expired = '99991231') as [{1}]",
                                //    i, attr.AliasName, fromAlias);
                                builder.AddJoin(
                                    SqlSourceJoinType.LeftOuter,
                                    String.Format(
                                        "[Document_States] ds{0} {1} on (ds{0}.Document_Id = {2}.Id and ds{0}.Expired = '99991231')",
                                        i, withOption, fromAlias));
                            }
                            else
                            {
                                builder.AddJoin(
                                    SqlSourceJoinType.Inner,
                                    String.Format(
                                        "[Document_States] ds{0} {1} on (ds{0}.Document_Id = {3}.Id and ds{0}.Expired = '99991231' and {2})",
                                        i, withOption,
                                        String.Format(attrConditionStr, "ds", i, "State_Type_Id"), fromAlias));
                            }
                        }
                    }
                    else if (attr.Ident == SystemIdent.StateDate)
                    {
                        if (String.IsNullOrEmpty(attrConditionStr))
                        {
                            sb.AppendFormat("(select ds{0}.Created from Document_States ds{0} {1}\n", i, withOption);
                            sb.AppendFormat(
                                " where ds{0}.Document_Id = {2}.Id and ds{0}.Expired = '99991231') as [{1}]",
                                i, attr.AliasName, fromAlias);
                        }
                        else
                        {
                            sb.AppendFormat("[ds{0}].[Created] as [{1}]", i, attr.AliasName);
                            builder.AddJoin(
                                SqlSourceJoinType.Inner,
                                String.Format(
                                    "[Document_States] ds{0} {1} on (ds{0}.Document_Id = {3}.Id and ds{0}.Expired = '99991231' and {2})",
                                    i, withOption,
                                    String.Format(attrConditionStr, "ds", i, "Created"), fromAlias));
                        }
                    }
                    else if (attr.Ident == SystemIdent.Id)
                    {
                        sb.AppendFormat("{0}.Id as [{1}]", fromAlias, attr.AliasName);
                        if (!String.IsNullOrEmpty(attrConditionStr))
                        {
                            builder.AddCondition(ExpressionOperation.And,
                                                 String.Format(attrConditionStr, fromAlias, String.Empty, "Id"));
                        }
                    }
                    else if (attr.Ident == SystemIdent.OrgId)
                    {
                        sb.AppendFormat("{0}.Organization_Id as [{1}]", orgAlias, attr.AliasName);
                        if (!String.IsNullOrEmpty(attrConditionStr))
                        {
                            builder.AddCondition(ExpressionOperation.And,
                                                 String.Format(attrConditionStr, orgAlias, "", "Organization_Id"));
                        }
                    }
                    else if (attr.Ident == SystemIdent.Created)
                    {
                        sb.AppendFormat("{0}.Created as [{1}]", createdAlias, attr.AliasName);
                        if (!String.IsNullOrEmpty(attrConditionStr))
                        {
                            builder.AddCondition(ExpressionOperation.And,
                                                 String.Format(attrConditionStr, createdAlias, "", "Created"));
                        }
                    }
                    else if (attr.Ident == SystemIdent.Modified)
                    {
                        sb.AppendFormat("{0}.Last_Modified as [{1}]", modifiedAlias, attr.AliasName);
                        if (!String.IsNullOrEmpty(attrConditionStr))
                        {
                            builder.AddCondition(ExpressionOperation.And,
                                                 String.Format(attrConditionStr, modifiedAlias, "", "Last_Modified"));
                        }
                    }
                    else if (attr.Ident == SystemIdent.UserId || attr.Ident == SystemIdent.UserName)
                    {
                        sb.AppendFormat("{0}.UserId as [{1}]", userAlias, attr.AliasName);
                        if (!String.IsNullOrEmpty(attrConditionStr))
                        {
                            builder.AddCondition(ExpressionOperation.And,
                                                 String.Format(attrConditionStr, userAlias, "", "UserId"));
                        }
                    }
                    else if (attr.Ident == SystemIdent.DefId)
                    {
                        sb.AppendFormat("{0}.Def_Id as [{1}]", defAlias, attr.AliasName);
                        if (!String.IsNullOrEmpty(attrConditionStr))
                        {
                            builder.AddCondition(ExpressionOperation.And,
                                                 String.Format(attrConditionStr, defAlias, "", "Def_Id"));
                        }
                    }

                    /*else if (attr.Ident == SystemIdent.UserName)
                     * {
                     *  if (String.IsNullOrEmpty(attrConditionStr))
                     *  {
                     *      sb.AppendFormat("(select w{0}.User_Name from Workers w{0} {1}\n", i, withOption);
                     *      sb.AppendFormat(" where w{0}.Id = {2}.UserId) as [{1}]", i, attr.AliasName, userAlias);
                     *  }
                     *  else
                     *  {
                     *      sb.AppendFormat("[w{0}].[User_Name] as [{1}]", i, attr.AliasName);
                     *      builder.AddJoin(
                     *          SqlSourceJoinType.Inner,
                     *          String.Format("Workers w{0} {1} on (w{0}.Id = {3}.UserId and {2})", i, withOption,
                     *                        String.Format(attrConditionStr, "w", i, "User_Name"), userAlias));
                     *  }
                     * }*/
                    else if (attr.Ident == SystemIdent.OrgCode)
                    {
                        if (String.IsNullOrEmpty(attrConditionStr))
                        {
                            sb.AppendFormat("(select o{0}.Code from Organizations o{0} {1}\n", i, withOption);
                            sb.AppendFormat(" where o{0}.Id = {2}.Organization_Id) as [{1}]", i,
                                            attr.AliasName, orgAlias);
                        }
                        else
                        {
                            sb.AppendFormat("[o{0}].[Code] as [{1}]", i, attr.AliasName);
                            builder.AddJoin(
                                SqlSourceJoinType.Inner,
                                String.Format("Organizations o{0} {1} on (o{0}.Id = {3}.Organization_Id and {2})", i, withOption,
                                              String.Format(attrConditionStr, "o", i, "Code"), orgAlias));
                        }
                    }
                    else if (attr.Ident == SystemIdent.OrgName)
                    {
                        if (String.IsNullOrEmpty(attrConditionStr))
                        {
                            sb.AppendFormat(
                                "(select od{0}.Full_Name\n" +
                                " from Organizations o{0} {1} inner join Object_Defs od{0} {1} on od{0}.Id = o{0}.Id\n",
                                i, withOption);
                            sb.AppendFormat(" where o{0}.Id = {2}.Organization_Id) as [{1}]", i,
                                            attr.AliasName, orgAlias);
                        }
                        else
                        {
                            sb.AppendFormat("[od{0}].[Full_Name] as [{1}]", i, attr.AliasName);
                            builder.AddJoin(
                                SqlSourceJoinType.Inner,
                                String.Format("Organizations o{0} {1} on o{0}.[Id] = {2}.Organization_Id", i,
                                              withOption, orgAlias));
                            builder.AddJoin(
                                SqlSourceJoinType.Inner,
                                String.Format("Object_Defs od{0} {1} on od{0}.[Id] = o{0}.[Id] and {2}", i,
                                              withOption,
                                              String.Format(attrConditionStr, "od", i, "Full_Name")));
                        }
                    }
                    else
                    {
                        throw new ApplicationException("Не известный атрибут в условии запроса!");
                    }

                    no++;
                    builder.AddSelect(sb);
                    usedConditions.AddRange(attributeConditions);
                }
            }
            //if (builder.Select == null || builder.Select.Count == 0) builder.AddSelect("d.Id");

            if (tableMap == null)
            {
                var descendants = new List <Guid>(_docDefRepo.GetDocDefDescendant(Source.Id));
                if (descendants.Count < 2)
                {
                    builder.AddCondition(ExpressionOperation.And,
                                         String.Format("{0}.Def_Id = '{1}'", fromAlias, Source.Id));
                }
                else
                {
                    var s = String.Empty;
                    foreach (var defId in descendants)
                    {
                        if (!String.IsNullOrEmpty(s))
                        {
                            s += ",";
                        }
                        s += String.Format("'{0}'", defId);
                    }
                    builder.AddCondition(ExpressionOperation.And, String.Format("{0}.Def_Id IN ({1})", fromAlias, s));
                }
            }
            if (!String.IsNullOrEmpty(orgRestriction))
            {
                builder.AddCondition(ExpressionOperation.And, orgRestriction);
            }
            if (isMain || (needToJoinDocument && (tableMap == null || !tableMap.IsVirtual)))
            {
                builder.AddCondition(ExpressionOperation.And, "([d].[Deleted] is null OR [d].[Deleted] = 0)");
            }

            BuildConditions(builder, conditions, attrIndexDictionary, tableMap, needToJoinDocument, usedConditions);

            return(builder);
        }
示例#15
0
        private static void BuildCondition(SqlQuery query, QueryConditionDef condition, DocDef docDef, SqlQueryCondition parentCondition)
        {
            if (condition.Condition != ConditionOperation.Include && condition.Condition != ConditionOperation.Exp)
            {
                if (condition.SubQueryDef != null)
                {
                    var subQuery = Build(query.DataContext, condition.SubQueryDef);
                    if (String.IsNullOrEmpty(condition.AttributeName))
                    {
                        query.AddCondition(condition.Operation, docDef, condition.AttributeId, condition.Condition,
                                           subQuery, condition.SubQueryAttribute, parentCondition);
                    }
                    else
                    {
                        query.AddCondition(condition.Operation, docDef, condition.AttributeName, condition.Condition,
                                           subQuery, condition.SubQueryAttribute, parentCondition);
                    }
                }
                else
                if (String.IsNullOrEmpty(condition.AttributeName))
                {
                    query.AddCondition(condition.Operation, docDef, condition.AttributeId, condition.Condition, condition.Values, parentCondition);
                }
                else
                {
                    query.AddCondition(condition.Operation, docDef, condition.AttributeName, condition.Condition,
                                       condition.Values, parentCondition);
                }
            }
            else if (condition.Condition == ConditionOperation.Include && condition.Conditions != null && condition.Conditions.Count > 0)
            {
                var attrDef = String.IsNullOrEmpty(condition.AttributeName)
                                  ? docDef.Attributes.First(a => a.Id == condition.AttributeId)
                                  : docDef.Attributes.First(
                    a => String.Equals(a.Name, condition.AttributeName, StringComparison.OrdinalIgnoreCase));
                query.JoinSource(query.FindSourceByDocDef(docDef), attrDef.DocDefType.Id, SqlSourceJoinType.Inner, attrDef.Id);

                foreach (var child in condition.Conditions)
                {
                    BuildCondition(query, child, attrDef.DocDefType.Id, parentCondition);
                }
            }
            else if (condition.Condition == ConditionOperation.Exp && condition.Conditions != null)
            {
                var exp = query.AddExpCondition(condition.Operation, parentCondition);

                foreach (var child in condition.Conditions)
                {
                    BuildCondition(query, child, docDef, exp);
                }
            }
        }
示例#16
0
    public static string UpdateUserInfo(Dictionary <string, string> info, out object[,] newinfo, int userid)
    {
        List <UserField> fieldlist = new List <UserField>(7);
        List <object>    valuelist = new List <object>(7);
        List <string>    changes = new List <string>(7);
        string           s = "", msg;

        if (info.ContainsKey("birthday"))
        {
            if (info["birthday"].Length != 0)
            {
                DateTime date;
                if (DateTime.TryParse(info["birthday"], out date))
                {
                    fieldlist.Add(UserField.Birthday);
                    valuelist.Add(date.ToString("yyyy-MM-dd"));
                    changes.Add("生日:" + date.ToString("yyyy-MM-dd"));
                }
                else
                {
                    s += "生日信息错误 不是一个日期\n";
                }
            }
            else
            {
                fieldlist.Add(UserField.Birthday);
                valuelist.Add(null);
                changes.Add("生日:(空)");
            }
        }
        if (info.ContainsKey("qq"))
        {
            if (UserField.QQ.TestValue(info["qq"], out msg))
            {
                fieldlist.Add(UserField.QQ);
                valuelist.Add(info["qq"]);
                changes.Add("QQ:" + info["qq"]);
            }
            else
            {
                s += "QQ信息错误 " + msg + '\n';
            }
        }
        if (info.ContainsKey("wechat"))
        {
            if (UserField.WeChat.TestValue(info["wechat"], out msg))
            {
                fieldlist.Add(UserField.WeChat);
                valuelist.Add(info["wechat"]);
                changes.Add("微信:" + info["wechat"]);
            }
            else
            {
                s += "微信信息错误 " + msg + '\n';
            }
        }
        if (info.ContainsKey("phone"))
        {
            if (UserField.PhoneNumber.TestValue(info["phone"], out msg))
            {
                fieldlist.Add(UserField.PhoneNumber);
                valuelist.Add(info["phone"]);
                changes.Add("电话号码:" + info["phone"]);
            }
            else
            {
                s += "电话号码信息错误 " + msg + '\n';
            }
        }
        if (info.ContainsKey("dormitory"))
        {
            if (UserField.Dormitory.TestValue(info["dormitory"], out msg))
            {
                fieldlist.Add(UserField.Dormitory);
                valuelist.Add(info["dormitory"]);
                changes.Add("宿舍:" + info["dormitory"]);
            }
            else
            {
                s += "宿舍信息错误 " + msg + '\n';
            }
        }
        if (info.ContainsKey("address"))
        {
            if (UserField.Address.TestValue(info["address"], out msg))
            {
                fieldlist.Add(UserField.Address);
                valuelist.Add(info["address"]);
                changes.Add("家庭住址:" + info["address"]);
            }
            else
            {
                s += "家庭住址信息错误 " + msg + '\n';
            }
        }
        if (info.ContainsKey("idcard"))
        {
            if (UserField.IdCardNumber.TestValue(info["idcard"], out msg))
            {
                fieldlist.Add(UserField.IdCardNumber);
                valuelist.Add(info["idcard"]);
                changes.Add("身份证号:" + info["idcard"]);
            }
            else
            {
                s += "身份证号信息错误 " + msg + '\n';
            }
        }
        SqlQueryCondition sqlcondition = new SqlQueryCondition(UserField.Id, SqlQueryConditionOperator.Equal, userid);

        if (fieldlist.Count == 0)
        {
            s = "没有符合要求的数据!";
        }
        else
        {
            UserDAO.Update(fieldlist.ToArray(), valuelist.ToArray(), sqlcondition);
            string loginfo  = changes[0];
            bool   overflow = false;
            for (int i = 1; i < changes.Count; i++)
            {
                if (loginfo.Length + changes[i].Length <= UserLogField.Event.SqlDataLength - 14)
                {
                    loginfo += '\t' + changes[i];
                }
                else
                {
                    overflow = true;
                }
            }
            if (overflow)
            {
                loginfo += "\t...";
            }
            UserLogDAO.Insert(userid, "updinfo{" + loginfo + "}");
            if (s.Length != 0)
            {
                s = "true:" + s;
            }
            else
            {
                s = "true";
            }
        }
        newinfo = UserDAO.Select(UserField.OtherFields, sqlcondition);
        return(s);
    }
示例#17
0
        protected static void FillConditionSources(ICollection <SqlQuerySource> sources, SqlQueryCondition condition)
        {
            if (condition.Condition == ConditionOperation.Include || condition.Condition == ConditionOperation.Exp)
            {
                if (condition.Conditions == null || condition.Conditions.Count == 0)
                {
                    return;
                }

                foreach (var subCondition in condition.Conditions)
                {
                    FillConditionSources(sources, subCondition);
                }

                return;
            }

            //            if (condition.SubQuery == null)
            foreach (var attrRef in condition.Left.Attributes)
            {
                if (!sources.Contains(attrRef.Source))
                {
                    sources.Add(attrRef.Source);
                }
            }
            if (condition.Right.IsAttribute)
            {
                foreach (var attrRef in condition.Right.Attributes)
                {
                    if (!sources.Contains(attrRef.Source))
                    {
                        sources.Add(attrRef.Source);
                    }
                }
            }
        }
示例#18
0
 internal string BuildConditions()
 {
     return(SqlQueryCondition.BuildConditions(Conditions));
 }