智能提示含查询多列(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,只要输入“李”,系统自然会提示一些姓李的员工,这样方便用户 ...
随机推荐
- GPU大百科全书 第二章 凝固生命的光栅化
光栅化——死神来了…… 前言:在上一期的GPU大百科全书里,我们目睹了可爱的香草从抽象世界走向现实,从方程还原成实体的全过程.可以说香草活了,因为几何单元,我们赋予了她完整的灵魂. 如果你正在为G ...
- 1.IPtable基础命令总结
iptables概念 规则查询 #查看对应表中的所有规则 iptables -t 表名 -L #查看表的指定链中的规则 iptables -t 表名 -L 链名 #查看对应表中的所有规则, -v显示跟 ...
- [USACO17DEC]Standing Out from the Herd(广义后缀自动机)
题意 定义一个字符串的「独特值」为只属于该字符串的本质不同的非空子串的个数.如 "amy" 与 “tommy” 两个串,只属于 "amy" 的本质不同的子串为 ...
- Chart.js入门教程
Chart.js是一个简单.面向对象.为设计者和开发者准备的图表绘制工具库. 相信大部分人都一样,看到一大筐用文本或者表格形式呈现的数据就头疼.因为这种呈现方式也太无聊了吧...而且这对于我们处理原始 ...
- c调用 lua 栈操作
转自https://www.cnblogs.com/ringofthec/archive/2010/10/22/lua.html 打算记录一些lua_api, 可能会觉得lua文档中已经说的很清楚了, ...
- POJ1591 M*A*S*H (JAVA)
这水题,真的坑 测试数据最后有空行,如果用sc.hasNextLine()判断,会RE 要改为sc.hasNext() 搞了我一上午,烦死 import java.util.*; public cla ...
- np.random.normal()
高斯分布(Gaussian Distribution)的概率密度函数(probability density function): \[ f(x)=\frac1{\sqrt{2\pi}\sigma}\ ...
- Kettle配合Windows执行计划实现定时实行作业
一般作业做好后需要做成定时任务,Kettle可以借助Windows的执行计划来完成.那么可以通过写批处理的方式让执行计划来调用. 其中Kitchen和Pan都可以做定时执行,一个是针对作业,一个是针对 ...
- 编写第一个Go程序
编码格式 Go语言源码文件编码格式必须是 UTF-8 格式,否则会导致编译器出错. 结束语句 在 Go 程序中,一行代表一个语句结束.每个语句不需要像其它语言一样以分号 ";"结尾 ...
- 2019年华南理工大学程序设计竞赛(春季赛) K Parco_Love_String(后缀自动机)找两个串的相同字串有多少
https://ac.nowcoder.com/acm/contest/625/K 题意: 给出Q 个询问 i , 求 s[0..i-1] 与 s[i...len-1] 有多少相同的字串 分析: 给出 ...