/// <summary> /// 根据人员类型(委托人,承运人,收货人)和业务类型(进口,出口。。)生成查询条件 /// 在"参数备案_人员单位"中有一列是Role,为此客户对应的数据库角色名。 /// 例如,用户admin属于角色(货代角色1,收货人角色2),则990001(货代1)Role=货代角色1。当用admin登录后,可按照货代1查询 /// </summary> /// <param name="人员类型"></param> /// <param name="业务类型"></param> /// <returns></returns> public static ISearchExpression GetConstraitByRole(人员类型 人员类型, 业务类型 业务类型) { if (System.Web.HttpContext.Current.User.Identity == null) { return(null); } string name = System.Web.HttpContext.Current.User.Identity.Name; //name = "100000"; string[] roles; using (var pm = new Feng.UserManager.ProviderManager()) { roles = pm.DefaultProvider.CreateUserManager().GetRoles(System.Web.Security.Membership.ApplicationName, name); } System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand("SELECT * FROM 参数备案_人员单位 WHERE Role IN ("); if (roles.Length == 0) { return(null); } for (int i = 0; i < roles.Length; ++i) { string paraNameI = "@Role" + i.ToString(); cmd.CommandText += paraNameI; if (i != roles.Length - 1) { cmd.CommandText += ","; } cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter(paraNameI, roles[i])); } cmd.CommandText += ')'; System.Data.DataTable dt = Feng.Data.DbHelper.Instance.ExecuteDataTable(cmd); //for (int i = 0; i < roles.Length; ++i) //{ // string paraNameI = "'" + roles[i].ToString() + "'"; // cmd.CommandText += paraNameI; // if (i != roles.Length - 1) // { // cmd.CommandText += ","; // } //} //cmd.CommandText += ')'; //System.Data.DataTable dt = DBManager.GetDateTable(cmd); Dictionary <人员类型, string> dict = new Dictionary <人员类型, string> { { 人员类型.委托人, "委托人" }, { 人员类型.承运人, "承运人" }, { 人员类型.收货人, "收货人" } }; ISearchExpression se = null; foreach (System.Data.DataRow row in dt.Rows) { if (!row["业务类型"].ToString().Contains(((int)业务类型).ToString("00") + ",")) { continue; } if (!row["角色用途"].ToString().Contains(((int)人员类型).ToString("00") + ",")) { continue; } ISearchExpression sse = null;// SearchExpression.Eq("ClientId", row["ClientId"].ToString()); if (人员类型 != 人员类型.货代) { sse = SearchExpression.Eq(dict[人员类型], row["编号"]); // SearchExpression.And(sse, SearchExpression.Eq(dict[人员类型], row["编号"])); } if (se == null) { se = sse; } else { if (sse != null) { se = SearchExpression.Or(se, sse); } } } return(se); }
/// <summary> /// 根据人员类型(委托人,承运人,收货人)和业务类型(进口,出口。。)生成查询条件 /// 在"参数备案_人员单位"中有一列是Role,为此客户对应的数据库角色名。 /// 例如,用户admin属于角色(货代角色1,收货人角色2),则990001(货代1)Role=货代角色1。当用admin登录后,可按照货代1查询 /// </summary> /// <param name="人员类型"></param> /// <param name="业务类型"></param> /// <returns></returns> public static ISearchExpression GetConstraitByRole(人员类型 人员类型, 业务类型 业务类型) { if (System.Web.HttpContext.Current.User.Identity == null) return null; string name = System.Web.HttpContext.Current.User.Identity.Name; //name = "100000"; string[] roles; using (var pm = new Feng.UserManager.ProviderManager()) { roles = pm.DefaultProvider.CreateUserManager().GetRoles(System.Web.Security.Membership.ApplicationName, name); } System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand("SELECT * FROM 参数备案_人员单位 WHERE Role IN ("); if (roles.Length == 0) return null; for (int i = 0; i < roles.Length; ++i) { string paraNameI = "@Role" + i.ToString(); cmd.CommandText += paraNameI; if (i != roles.Length - 1) { cmd.CommandText += ","; } cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter(paraNameI, roles[i])); } cmd.CommandText += ')'; System.Data.DataTable dt = Feng.Data.DbHelper.Instance.ExecuteDataTable(cmd); //for (int i = 0; i < roles.Length; ++i) //{ // string paraNameI = "'" + roles[i].ToString() + "'"; // cmd.CommandText += paraNameI; // if (i != roles.Length - 1) // { // cmd.CommandText += ","; // } //} //cmd.CommandText += ')'; //System.Data.DataTable dt = DBManager.GetDateTable(cmd); Dictionary<人员类型, string> dict = new Dictionary<人员类型, string> { { 人员类型.委托人, "委托人" }, { 人员类型.承运人, "承运人" }, { 人员类型.收货人, "收货人" }}; ISearchExpression se = null; foreach (System.Data.DataRow row in dt.Rows) { if (!row["业务类型"].ToString().Contains(((int)业务类型).ToString("00") + ",")) continue; if (!row["角色用途"].ToString().Contains(((int)人员类型).ToString("00") + ",")) continue; ISearchExpression sse = null;// SearchExpression.Eq("ClientId", row["ClientId"].ToString()); if (人员类型 != 人员类型.货代) { sse = SearchExpression.Eq(dict[人员类型], row["编号"]); // SearchExpression.And(sse, SearchExpression.Eq(dict[人员类型], row["编号"])); } if (se == null) { se = sse; } else { if (sse != null) { se = SearchExpression.Or(se, sse); } } } return se; }