智能提示含查询多列(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,只要输入“李”,系统自然会提示一些姓李的员工,这样方便用户 ...
随机推荐
- codeforces|CF13C Sequence
大概的题意就是每次可以对一个数加一或者减一,然后用最小的代价使得原序列变成不下降的序列. 因为是最小的代价,所以到最后的序列中的每个数字肯定在原先的序列中出现过.(大家可以想一下到底是为什么,或者简单 ...
- 忘记Oracle用户名和密码
方法一: 看看是不是Oracle服务器没有打开 打开cmd,输入sqlplus /nolog,回车---->进入sqlplus; 输入“conn /as sysdba”:以超级管理员的方式连接数 ...
- linux命令之系统管理命令(下)
1.chkconfig:管理开机服务 该命令为linux系统中的系统服务管理工具,可以查询和更新不同的运行等级下系统服务的启动状态. 选项 说明 --list(常用) 显示不同运行级别下服务的启动状态 ...
- python设计模式-适配器
定义: 将一个接口转换为客户希望的另一个接口,该模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 适配器模式又叫变压器模式,也叫包装模式(Wrapper),它的核心思想是将一个对象经过包装 ...
- 设置和获取html、文本和值
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- win10安装express遇到的问题。
昨天在centos上成功安装了express,今天想在win10上面装一个,死活安装不了 express可以正常安装,但是每次安装express-generator的时候一直报错 659 silly ...
- 数学 CF1068B LCM
CF1068B LCM 给定一个正整数\(b (1\leq b \leq 10^{10})\). 把一个正整数a从1枚举到\(10^{18}\),求有多少种不同的\(\large \frac{[a,b ...
- [转载]Flip an image in UIImageView using UIView transitionWithView
View animations on the iPhone are wonderful. Used properly they will delight your users and help you ...
- css属性详解和浮动
一.CSS属性组成和作用 属性:属性值 1)每个css样式都必须由两部分组成:选择符和声明 注:声明又包括属性和属性值 2)css属性:属性是指定选择符具有的属性,他是css的核心,css2共有150 ...
- 串口通信n
1.USART_Init(参数1,参数2) 串口配置步骤 1.串口时钟使能,GPIO使能 2.串口复位 3.端口模式设置GPIO_Init() 4.串口参数初始化USART_Init() 5,使能串口 ...