智能提示含查询多列(html+JS+handler+ HttpRemoting)二、Remoting代码
/// <summary>
/// 智能查询类型
/// </summary> public enum QueryType : byte
{
/// <summary>
/// 发货方联系人信息
/// </summary>
[DataMappingAttribute("T_PARAM_SHIPPER T LEFT JOIN T_PARAM_SHIPPER_LINK_INFO T2 ON T2.C_SHIPPER_ID=T.C_SHIPPER_ID", "", "T.V_SHIPPER_NAME", "T.C_SHIPPER_ID Id")]
CustomerShipperInfo =
} /// <summary>
/// 智能查询字段常量
/// </summary> public enum QueryTypeKey
{ #region 发货方信息相关
/// <summary>
/// 发货方信息:发货方
/// </summary>
[DataMapping("T.V_SHIPPER_NAME")]
发货方_发货方 = ,
/// <summary>
/// 发货方信息:联系人
/// </summary>
[DataMapping("T2.V_LINK_MAN")]
发货方_联系人 = ,
/// <summary>
/// 发货方信息手机
/// </summary>
[DataMapping("T2.V_MOBILE")]
发货方_手机 = ,
/// <summary>
/// 发货方_单位
/// </summary>
[DataMapping("T2.V_UNIT")]
发货方_单位 = ,
/// <summary>
/// 发货方_电话
/// </summary>
[DataMapping("T2.V_TEL")]
发货方_电话 = ,
/// <summary>
/// 发货方_地址
/// </summary>
[DataMapping("T2.V_ADDRESS")]
发货方_地址 =
#endregion
} /// <summary>
/// 搜索模板
/// </summary>
[Serializable]
public class QueryCondition
{
/// <summary>
/// 搜索关键字
/// </summary>
public string SearchContext { set; get; }
/// <summary>
/// 搜索输出列表头
/// </summary>
public List<QueryTypeKey> OutColumns { set; get; }
///// <summary>
///// 输出数据
///// </summary>
//public string[,] OutData { set; get; }
/// <summary>
/// 排序字段
/// </summary>
public QueryTypeKey SortKey { set; get; }
/// <summary>
/// 搜索类型
/// </summary>
public QueryType QueryType { set; get; }
/// <summary>
/// 搜索站点代码
/// </summary>
public string StationCode { set; get; }
/// <summary>
/// 站点名称
/// </summary>
public string StationName { set; get; } /// <summary>
/// 参数类别
/// </summary>
public string ParamType { set; get; } /// <summary>
/// 扩展参数
/// </summary>
public object ExtParam { set; get; } /// <summary>
/// 省代码
/// </summary>
public string Province { set; get; }
/// <summary>
/// 公司ID
/// </summary>
public string CorpId { set; get; }
}
QueryType实体类
/// <summary>
/// 智能查询服务
/// </summary>
public class IntellQueryService : MarshalByRefObject, IIntellQuery
{ /// <summary>
/// 业务A集合
/// </summary>
private static IList<QueryType> cropFilterList = new List<QueryType>() {
QueryType.Provice_City,
QueryType.ProviceCityName
};
/// <summary>
/// 智能查询相关
/// </summary>
/// <param name="condition"></param>
/// <param name="outData"></param>
/// <param name="err"></param>
/// <returns></returns>
public bool Query(QueryCondition condition, ref string[,] outData, ref string err)
{
try
{
if (null == condition)
{
err = "condition不能为空!";
return false;
}
if (null == condition.OutColumns)
{
err = "outColumns不能为空!";
return false;
}
if ( == condition.OutColumns.Count)
{
err = "outColumns不能为空!";
return false;
}
if (condition.QueryType == QueryType.TransiCropInfo)
{
var dtInt = GetInterQuery(condition, );
outData = new string[dtInt.Rows.Count, dtInt.Columns.Count];
for (var i = ; i < dtInt.Rows.Count; i++)
{
for (var j = ; j < dtInt.Columns.Count; j++)
{
outData[i, j] = dtInt.Rows[i].IsNull(j) ? "" : Convert.ToString(dtInt.Rows[i][j]);
}
}
return true;
} var sql = GetQuerySQL(condition);
var dt = Glob.Singleton.OracleOperation.GetDataTableBySql(sql, ref err);
if (null == dt)
{
return false;
}
var cCount = condition.OutColumns.Count + ;
outData = new string[dt.Rows.Count, cCount];
for (var i = ; i < dt.Rows.Count; i++)
{
for (var j = ; j < cCount; j++)
{
outData[i, j] = dt.Rows[i].IsNull(j) ? "" : Convert.ToString(dt.Rows[i][j]);
}
}
return true;
}
catch (Exception ex)
{
err = ex.ToString();
return false;
}
}
/// <summary>
/// 智能查询相关
/// </summary>
/// <param name="queryType">查询归属</param>
/// <param name="searchContext">搜索关键字</param>
/// <param name="outColumns">返回列头</param>
/// <param name="outData">返回数据</param>
/// <param name="sortKey">排序列</param>
/// <param name="outErrMsg">出错输出</param>
/// <returns></returns>
public bool Query(QueryType queryType, string searchContext, List<QueryTypeKey> outColumns,
ref string[,] outData, QueryTypeKey sortKey, ref string outErrMsg)
{
if (null == outColumns)
{
outErrMsg = "outColumns不能为空!";
return false;
}
if ( == outColumns.Count)
{
outErrMsg = "outColumns不能为空!";
return false;
} var sql = GetQuerySQL(new QueryCondition()
{
QueryType = queryType,
OutColumns = outColumns,
SearchContext = searchContext.FormatSQLValue(),
SortKey = sortKey
});
var dt = Singleton.OracleOperation.GetDataTableBySql(sql, ref outErrMsg);
outData = new string[dt.Rows.Count, outColumns.Count + ];
for (var i = ; i < dt.Rows.Count; i++)
{
for (var j = ; j < outColumns.Count; j++)
{
outData[i, j] = dt.Rows[i].IsNull(j) ? "" : Convert.ToString(dt.Rows[i][j]);
}
}
return true;
}
private string GetQuerySQL(QueryCondition qc)
{
var queryType = qc.QueryType;
var outColumns = qc.OutColumns;
var searchContext = qc.SearchContext.FormatSQLValue();
var sortKey = qc.SortKey;
var qtks = Enum.GetNames(typeof(QueryTypeKey));
var sb = new StringBuilder();
sb.Append("SELECT ");
foreach (var ty in outColumns)
{
foreach (var qs in qtks)
{
if (ty.ToString() == qs)
{
var at = EnumHelper.GetAttribute(ty);
sb.AppendFormat("{0},", at.Name);
}
}
}
sb.AppendFormat("{0},", EnumHelper.GetAttribute(queryType).Id);
sb.Remove(sb.Length - , );
sb.AppendFormat(" FROM {0}", string.Format("{0} WHERE ( {1} like '%{2}%'",
EnumHelper.GetAttribute(queryType).Name,
EnumHelper.GetAttribute(queryType).SearchKeyColumn
, searchContext));
var des = EnumHelper.GetAttribute(queryType).Description;
if (!string.IsNullOrEmpty(des))
{
var arr = des.Split(',');
foreach (var d in arr)
{
sb.AppendFormat(" OR {0} like '%{1}%' ", d, searchContext);
}
sb.AppendFormat(" ) ");
}
else
{
sb.AppendFormat(") ");
} switch (queryType)
{
case QueryType.CustomerReceiverInfo:
{
if (null != qc.ExtParam)
{
var json = qc.ExtParam;
var intellCustomer = JsonHelper.DeserializeJsonToObject<IntellCustomer>(json.ToString());
if (null != intellCustomer)
{
if (!string.IsNullOrEmpty(intellCustomer.ShipperId))
{
sb.AppendFormat(@" AND T.C_SHIPPER_ID={0}", intellCustomer.ShipperId.StringParseDBNULL());
}
if (!string.IsNullOrEmpty(intellCustomer.SendSiteName))
{
sb.AppendFormat(@" AND T.V_STATION_NAME={0}", intellCustomer.SendSiteName.StringParseDBNULL());
}
if (!string.IsNullOrEmpty(intellCustomer.ArriveSiteName))
{
sb.AppendFormat(@" AND T2.V_STATION_NAME={0}", intellCustomer.ArriveSiteName.StringParseDBNULL());
}
}
}
}
break;
case QueryType.LKUserInfo:
{ }
break;
}
if (!string.IsNullOrEmpty(qc.ParamType))
{
sb.AppendFormat(" AND T.N_PARAM_TYPE={0} ", qc.ParamType.StringParseDBNULL());
}
if (!string.IsNullOrEmpty(qc.StationCode))
{
sb.AppendFormat(" AND T.N_STATION_CODE={0} ", qc.StationCode.StringParseDBNULL());
}
if (!string.IsNullOrEmpty(qc.StationName))
{
sb.AppendFormat(" AND T.V_STATION_Name={0} ", qc.StationName.StringParseDBNULL());
}
if (!string.IsNullOrEmpty(qc.Province))
{
sb.AppendFormat(" AND {0}={1} ", EnumHelper.GetAttribute(queryType).AttachedCondition, qc.Province.Substring(, ).StringParseDBNULL());
}
if (!cropFilterList.Contains(qc.QueryType))
{
if (!string.IsNullOrEmpty(qc.CorpId))
{
sb.AppendFormat(" AND T.C_CORP_ID={0} ", qc.CorpId.StringParseDBNULL());
}
}
//TC-优化一下
if (!string.IsNullOrEmpty(sortKey.ToString()) && sortKey.ToString() != "")
{
if (qtks.All(qs => sortKey.ToString() != qs))
return sb.ToString();
var at = EnumHelper.GetAttribute(sortKey);
sb.AppendFormat("ORDER BY {0} ", at.Name);
}
return sb.ToString();
}
private DataTable GetInterQuery(QueryCondition qc, int type)
{
var sbCropInfo = new StringBuilder();
sbCropInfo.AppendFormat(@"select V_CORP_NAME,V_CORP_MOBILE,'' AS V_STATION_TEL,'' AS V_STATION_NAME,1 AS cType, c_corp_id ID
from T_CORP_INFO");
if (!string.IsNullOrEmpty(qc.SearchContext))
{
sbCropInfo.AppendFormat(@" WHERE V_CORP_NAME like '%{0}%'", qc.SearchContext.Filter());
}
var dtCropInfo = Singleton.OracleOperation.GetDataTableBySql(sbCropInfo.ToString());
if (null == dtCropInfo)
dtCropInfo = new DataTable(); var sbParamCropInfo = new StringBuilder();
sbParamCropInfo.AppendFormat(@"select T.V_UNIT_NAME AS V_CORP_NAME,T.V_UNIT_TEL,T2.V_STATION_NAME,T2.V_STATION_TEL, 2 cType, T.c_param_id ID
from T_PARAM_CORP_INFO T
LEFT JOIN T_PARAM_CORP_STATION_INFO T2
ON T.C_PARAM_ID = T2.C_PARAM_ID"); if (!string.IsNullOrEmpty(qc.SearchContext))
{
sbParamCropInfo.AppendFormat(@" WHERE (T.V_UNIT_MNEM like '%{0}%' OR T.V_UNIT_NAME like '%{0}%') ", qc.SearchContext.Filter());
}
if (!string.IsNullOrEmpty(qc.StationCode))
{
sbParamCropInfo.AppendFormat(@" AND T2.V_STATION_NAME = {0}", qc.StationName.Filter().StringParseDBNULL());
}
if (!string.IsNullOrEmpty(qc.CorpId))
{
sbParamCropInfo.AppendFormat(@" AND T.C_CORP_ID={0}", qc.CorpId.StringParseDBNULL());
}
var dtParamCropInfo = Singleton.OracleOperation.GetDataTableBySql(sbParamCropInfo.ToString());
if (null == dtParamCropInfo)
dtParamCropInfo = new DataTable();
DataTable dt = new DataTable();
dt.Columns.Add("V_CORP_NAME");
dt.Columns.Add("V_UNIT_TEL");
dt.Columns.Add("V_STATION_NAME");
dt.Columns.Add("V_STATION_TEL");
dt.Columns.Add("cType");
dt.Columns.Add("Id");
//TC-优化一下
dt = FillTableData(dt, dtCropInfo.Rows);
return FillTableData(dt, dtParamCropInfo.Rows);
} /// <summary>
/// 填充表数据
/// </summary>
/// <param name="fillDataTable"></param>
/// <param name="dataRow"></param>
private DataTable FillTableData(DataTable fillDataTable, DataRowCollection dataRow)
{
foreach (DataRow dr in dataRow)
{
DataRow drNew = fillDataTable.NewRow();
drNew["V_CORP_NAME"] = dr[];
drNew["V_UNIT_TEL"] = dr[];
drNew["V_STATION_NAME"] = dr[];
drNew["V_STATION_TEL"] = dr[];
drNew["cType"] = dr[];
drNew["Id"] = dr[];
fillDataTable.Rows.Add(drNew);
}
return fillDataTable;
}
}
智能查询具体实现DB方法
此时,智能提示已正常结束
智能提示含查询多列(html+JS+handler+ HttpRemoting)二、Remoting代码的更多相关文章
- 智能提示含查询多列(html+JS+handler+ HttpRemoting)一、html示列 加 JS加 请求 Handler
<html> <head> </head> <body> <form id="recordform" name="r ...
- 在VS2012中实现Ext JS的智能提示
Visual Studio 2012太强大了,居然能自己会去提取Ext JS的类的属性和方法,从而实现只能提示.下面就来介绍一下实现这个功能. 在Visual Studio 2012中随便创建一个We ...
- 在VS2012中实现Ext JS的智能提示太简单了
Visual Studio 2012太强大了,居然能自己会去提取Ext JS的类的属性和方法,从而实现只能提示.下面就来介绍一下实现这个功能. 在Visual Studio 2012中随便创建一个We ...
- SQL Prompt——SQL智能提示插件
数据库是大家在项目开发中肯定会用到的,C#项目用的最多的就是微软自家的SQL Server了.不可否认,微软的Visual Studio开发平台很好用,很直观的体现就是智能提示.敲几个字符,相关的信息 ...
- Eclipse安装插件支持jQuery智能提示
Eclipse安装插件支持jQuery智能提示 最近工作中用到jQuery插件,需要安装eclipse插件才能支持jQuery智能提示,在网上搜索了一下,常用的有三个插件支持jQuery的智能提示:1 ...
- clickhouse智能提示编辑器
对于经常写sql的人来说智能提示是非常重要的,这个非常影响写sql的效率和心情. 这里说的智能提示不仅仅是关键字(select等)的智能提示,还得要做到表字段的智能提示. 例如: 下面是mysql的智 ...
- VsCode使用之HTML 中 CSS Class 智能提示
HTML 中 CSS Class 智能提示 安装插件:HTML CSS Support 设置中添加以下代码: "editor.parameterHints": true, &quo ...
- 使用jsonp跨域调用百度js实现搜索框智能提示,并实现鼠标和键盘对弹出框里候选词的操作【附源码】
项目中常常用到搜索,特别是导航类的网站.自己做关键字搜索不太现实,直接调用百度的是最好的选择.使用jquery.ajax的jsonp方法可以异域调用到百度的js并拿到返回值,当然$.getScript ...
- 福利到~分享一个基于jquery的智能提示控件intellSeach.js
一.需求 我们经常会遇到[站内搜索]的需求,为了提高用户体验,我们希望能做到像百度那样的即时智能提示.例如:某公司人事管理系统,想搜索李XX,只要输入“李”,系统自然会提示一些姓李的员工,这样方便用户 ...
随机推荐
- Mysql内置功能《三》视图
一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...
- Mysql数据操作《二》单表查询
单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 关键字的执行 ...
- css3边角旋转
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- “全栈2019”Java第六章:注释
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- vue.js 知识点(二)
关于vue看到有很多的知识点和react有很多相近的地方,比如说路由还有一些简单的运用,但是又有一些不同,比如格式.还有写法的一些不同! 所以在这里我总结一下关于vue 关于路由的一些运用: 路由: ...
- mysqli扩展库应用---程序范例
通过mysqli扩展库对用户表user1进行增删改查操作,用户表user1结构如下: 1,建立数据库操作类库mysqliTool.class.php,代码如下: <?php class mysq ...
- LINUX主机通过域名访问网络失败
故障现象: 用telnet IP+端口的方式测试正常,能够访问: 通过telnet域名+端口方式,提示:未知的名称或服务(Name or service not known). 测试百度的网络地址,p ...
- POJO和Javabean的区别:
pojo:存粹java类,不继承,不实现.(不受限制的java类),多用于指数据库的映射对象javaBean:可复用组件,由容器(tomcat)创建,因此应具有无参构造器,不能跨进程访问,通常要无方法 ...
- Python中的range和xrange区别
range 函数说明:range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列. range示例: >>> r ...
- Flask基础应用
一. Python 现阶段三大主流Web框架 Django Tornado Flask 对比 Django: 优点: 大而全,组件非常全面. 缺点: 太大,加载太大,浪费资源. Flask: 优点: ...