智能提示含查詢多列(html+JS+handler+ HttpRemoting)二、Remoting代碼

来源:https://www.cnblogs.com/Tcwangyu/archive/2018/04/12/8810468.html
-Advertisement-
Play Games

1 /// <summary> 2 /// 智能查詢類型 3 /// </summary> 4 5 public enum QueryType : byte 6 { 7 /// <summary> 8 /// 發貨方聯繫人信息 9 /// </summary> 10 [DataMappingAttr ...


  1  /// <summary>
  2     /// 智能查詢類型
  3     /// </summary>
  4 
  5     public enum QueryType : byte
  6     {
  7         /// <summary>
  8         /// 發貨方聯繫人信息
  9         /// </summary>
 10         [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")]
 11         CustomerShipperInfo = 10
 12     }
 13 
 14     /// <summary>
 15     /// 智能查詢欄位常量
 16     /// </summary>
 17 
 18     public enum QueryTypeKey
 19     {
 20 
 21         #region 發貨方信息相關
 22         /// <summary>
 23         /// 發貨方信息:發貨方
 24         /// </summary>
 25         [DataMapping("T.V_SHIPPER_NAME")]
 26         發貨方_發貨方 = 19,
 27         /// <summary>
 28         /// 發貨方信息:聯繫人
 29         /// </summary>
 30         [DataMapping("T2.V_LINK_MAN")]
 31         發貨方_聯繫人 = 20,
 32         /// <summary>
 33         /// 發貨方信息手機
 34         /// </summary>
 35         [DataMapping("T2.V_MOBILE")]
 36         發貨方_手機 = 21,
 37         /// <summary>
 38         /// 發貨方_單位
 39         /// </summary>
 40         [DataMapping("T2.V_UNIT")]
 41         發貨方_單位 = 22,
 42         /// <summary>
 43         /// 發貨方_電話
 44         /// </summary>
 45         [DataMapping("T2.V_TEL")]
 46         發貨方_電話 = 23,
 47         /// <summary>
 48         /// 發貨方_地址
 49         /// </summary>
 50         [DataMapping("T2.V_ADDRESS")]
 51         發貨方_地址 = 24
 52         #endregion
 53     }
 54 
 55     /// <summary>
 56     /// 搜索模板
 57     /// </summary>
 58     [Serializable]
 59     public class QueryCondition
 60     {
 61         /// <summary>
 62         /// 搜索關鍵字
 63         /// </summary>
 64         public string SearchContext { set; get; }
 65         /// <summary>
 66         /// 搜索輸出列表頭
 67         /// </summary>
 68         public List<QueryTypeKey> OutColumns { set; get; }
 69         ///// <summary>
 70         ///// 輸出數據
 71         ///// </summary>
 72         //public string[,] OutData { set; get; }
 73         /// <summary>
 74         /// 排序欄位
 75         /// </summary>
 76         public QueryTypeKey SortKey { set; get; }
 77         /// <summary>
 78         /// 搜索類型
 79         /// </summary>
 80         public QueryType QueryType { set; get; }
 81         /// <summary>
 82         /// 搜索站點代碼
 83         /// </summary>
 84         public string StationCode { set; get; }
 85         /// <summary>
 86         /// 站點名稱
 87         /// </summary>
 88         public string StationName { set; get; }
 89 
 90         /// <summary>
 91         /// 參數類別
 92         /// </summary>
 93         public string ParamType { set; get; }
 94         
 95         /// <summary>
 96         /// 擴展參數
 97         /// </summary>
 98         public object ExtParam { set; get; }
 99 
100         /// <summary>
101         /// 省代碼
102         /// </summary>
103         public string Province { set; get; }
104         /// <summary>
105         /// 公司ID
106         /// </summary>
107         public string CorpId { set; get; }
108     }
QueryType實體類
  1    /// <summary>
  2     /// 智能查詢服務
  3     /// </summary>
  4     public class IntellQueryService : MarshalByRefObject, IIntellQuery
  5     {
  6 
  7         /// <summary>
  8         /// 業務A集合
  9         /// </summary>
 10         private static IList<QueryType> cropFilterList = new List<QueryType>() {
 11              QueryType.Provice_City,
 12              QueryType.ProviceCityName
 13         };
 14         /// <summary>
 15         /// 智能查詢相關
 16         /// </summary>
 17         /// <param name="condition"></param>
 18         /// <param name="outData"></param>
 19         /// <param name="err"></param>
 20         /// <returns></returns>
 21         public bool Query(QueryCondition condition, ref string[,] outData, ref string err)
 22         {
 23             try
 24             {
 25               if (null == condition)
 26                 {
 27                     err = "condition不能為空!";
 28                     return false;
 29                 }
 30                 if (null == condition.OutColumns)
 31                 {
 32                     err = "outColumns不能為空!";
 33                     return false;
 34                 }
 35                 if (0 == condition.OutColumns.Count)
 36                 {
 37                     err = "outColumns不能為空!";
 38                     return false;
 39                 }
 40                 if (condition.QueryType == QueryType.TransiCropInfo)
 41                 {
 42                     var dtInt = GetInterQuery(condition, 1);
 43                     outData = new string[dtInt.Rows.Count, dtInt.Columns.Count];
 44                     for (var i = 0; i < dtInt.Rows.Count; i++)
 45                     {
 46                         for (var j = 0; j < dtInt.Columns.Count; j++)
 47                         {
 48                             outData[i, j] = dtInt.Rows[i].IsNull(j) ? "" : Convert.ToString(dtInt.Rows[i][j]);
 49                         }
 50                     }
 51                     return true;
 52                 }
 53 
 54                 var sql = GetQuerySQL(condition);
 55                 var dt = Glob.Singleton.OracleOperation.GetDataTableBySql(sql, ref err);
 56                 if (null == dt)
 57                 {
 58                     return false;
 59                 }
 60                 var cCount = condition.OutColumns.Count + 1;
 61                 outData = new string[dt.Rows.Count, cCount];
 62                 for (var i = 0; i < dt.Rows.Count; i++)
 63                 {
 64                     for (var j = 0; j < cCount; j++)
 65                     {
 66                         outData[i, j] = dt.Rows[i].IsNull(j) ? "" : Convert.ToString(dt.Rows[i][j]);
 67                     }
 68                 }
 69                 return true;
 70             }
 71             catch (Exception ex)
 72             {
 73                 err = ex.ToString();
 74                 return false;
 75             }
 76         }
 77         /// <summary>
 78         /// 智能查詢相關
 79         /// </summary>
 80         /// <param name="queryType">查詢歸屬</param>
 81         /// <param name="searchContext">搜索關鍵字</param>
 82         /// <param name="outColumns">返回列頭</param>
 83         /// <param name="outData">返回數據</param>
 84         /// <param name="sortKey">排序列</param>
 85         /// <param name="outErrMsg">出錯輸出</param>
 86         /// <returns></returns>
 87         public bool Query(QueryType queryType, string searchContext, List<QueryTypeKey> outColumns,
 88             ref string[,] outData, QueryTypeKey sortKey, ref string outErrMsg)
 89         {
 90             if (null == outColumns)
 91             {
 92                 outErrMsg = "outColumns不能為空!";
 93                 return false;
 94             }
 95             if (0 == outColumns.Count)
 96             {
 97                 outErrMsg = "outColumns不能為空!";
 98                 return false;
 99             }
100 
101             var sql = GetQuerySQL(new QueryCondition()
102             {
103                 QueryType = queryType,
104                 OutColumns = outColumns,
105                 SearchContext = searchContext.FormatSQLValue(),
106                 SortKey = sortKey
107             });
108             var dt = Singleton.OracleOperation.GetDataTableBySql(sql, ref outErrMsg);
109             outData = new string[dt.Rows.Count, outColumns.Count + 1];
110             for (var i = 0; i < dt.Rows.Count; i++)
111             {
112                 for (var j = 0; j < outColumns.Count; j++)
113                 {
114                     outData[i, j] = dt.Rows[i].IsNull(j) ? "" : Convert.ToString(dt.Rows[i][j]);
115                 }
116             }
117             return true;
118         }
119         private string GetQuerySQL(QueryCondition qc)
120         {
121             var queryType = qc.QueryType;
122             var outColumns = qc.OutColumns;
123             var searchContext = qc.SearchContext.FormatSQLValue();
124             var sortKey = qc.SortKey;
125             var qtks = Enum.GetNames(typeof(QueryTypeKey));
126             var sb = new StringBuilder();
127             sb.Append("SELECT ");
128             foreach (var ty in outColumns)
129             {
130                 foreach (var qs in qtks)
131                 {
132                     if (ty.ToString() == qs)
133                     {
134                         var at = EnumHelper.GetAttribute(ty);
135                         sb.AppendFormat("{0},", at.Name);
136                     }
137                 }
138             }
139             sb.AppendFormat("{0},", EnumHelper.GetAttribute(queryType).Id);
140             sb.Remove(sb.Length - 1, 1);
141             sb.AppendFormat(" FROM {0}", string.Format("{0} WHERE  ( {1} like '%{2}%'",
142                 EnumHelper.GetAttribute(queryType).Name,
143                 EnumHelper.GetAttribute(queryType).SearchKeyColumn
144                 , searchContext));
145             var des = EnumHelper.GetAttribute(queryType).Description;
146             if (!string.IsNullOrEmpty(des))
147             {
148                 var arr = des.Split(',');
149                 foreach (var d in arr)
150                 {
151                     sb.AppendFormat(" OR {0} like '%{1}%' ", d, searchContext);
152                 }
153                 sb.AppendFormat(" ) ");
154             }
155             else
156             {
157                 sb.AppendFormat(") ");
158             }
159 
160             switch (queryType)
161             {
162                 case QueryType.CustomerReceiverInfo:
163                     {
164                         if (null != qc.ExtParam)
165                         {
166                             var json = qc.ExtParam;
167                             var intellCustomer = JsonHelper.DeserializeJsonToObject<IntellCustomer>(json.ToString());
168                             if (null != intellCustomer)
169                             {
170                                 if (!string.IsNullOrEmpty(intellCustomer.ShipperId))
171                                 {
172                                     sb.AppendFormat(@" AND T.C_SHIPPER_ID={0}", intellCustomer.ShipperId.StringParseDBNULL());
173                                 }
174                                 if (!string.IsNullOrEmpty(intellCustomer.SendSiteName))
175                                 {
176                                     sb.AppendFormat(@" AND T.V_STATION_NAME={0}", intellCustomer.SendSiteName.StringParseDBNULL());
177                                 }
178                                 if (!string.IsNullOrEmpty(intellCustomer.ArriveSiteName))
179                                 {
180                                     sb.AppendFormat(@" AND T2.V_STATION_NAME={0}", intellCustomer.ArriveSiteName.StringParseDBNULL());
181                                 }
182                             }
183                         }
184                     }
185                     break;
186                 case QueryType.LKUserInfo:
187                     {
188 
189                     }
190                     break;
191             }
192             if (!string.IsNullOrEmpty(qc.ParamType))
193             {
194                 sb.AppendFormat(" AND T.N_PARAM_TYPE={0} ", qc.ParamType.StringParseDBNULL());
195             }
196             if (!string.IsNullOrEmpty(qc.StationCode))
197             {
198                 sb.AppendFormat(" AND T.N_STATION_CODE={0} ", qc.StationCode.StringParseDBNULL());
199             }
200             if (!string.IsNullOrEmpty(qc.StationName))
201             {
202                 sb.AppendFormat(" AND T.V_STATION_Name={0} ", qc.StationName.StringParseDBNULL());
203             }
204             if (!string.IsNullOrEmpty(qc.Province))
205             {
206                 sb.AppendFormat(" AND {0}={1} ", EnumHelper.GetAttribute(queryType).AttachedCondition, qc.Province.Substring(0, 2).StringParseDBNULL());
207             }
208             if (!cropFilterList.Contains(qc.QueryType))
209             {
210                 if (!string.IsNullOrEmpty(qc.CorpId))
211                 {
212                     sb.AppendFormat(" AND T.C_CORP_ID={0} ", qc.CorpId.StringParseDBNULL());
213                 }
214             }
215             //TC-優化一下
216             if (!string.IsNullOrEmpty(sortKey.ToString()) && sortKey.ToString() != "0")
217             {
218                 if (qtks.All(qs => sortKey.ToString() != qs))
219                     return sb.ToString();
220                 var at = EnumHelper.GetAttribute(sortKey);
221                 sb.AppendFormat("ORDER BY {0} ", at.Name);
222             }
223             return sb.ToString();
224         }
225         private DataTable GetInterQuery(QueryCondition qc, int type)
226         {
227             var sbCropInfo = new StringBuilder();
228             sbCropInfo.AppendFormat(@"select V_CORP_NAME,V_CORP_MOBILE,'' AS V_STATION_TEL,'' AS V_STATION_NAME,1 AS cType, c_corp_id ID
229   from T_CORP_INFO");
230             if (!string.IsNullOrEmpty(qc.SearchContext))
231             {
232                 sbCropInfo.AppendFormat(@" WHERE V_CORP_NAME like '%{0}%'", qc.SearchContext.Filter());
233             }
234             var dtCropInfo = Singleton.OracleOperation.GetDataTableBySql(sbCropInfo.ToString());
235             if (null == dtCropInfo)
236                 dtCropInfo = new DataTable();
237 
238             var sbParamCropInfo = new StringBuilder();
239             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
240           from T_PARAM_CORP_INFO T
241           LEFT JOIN T_PARAM_CORP_STATION_INFO T2
242             ON T.C_PARAM_ID = T2.C_PARAM_ID");
243 
244             if (!string.IsNullOrEmpty(qc.SearchContext))
245             {
246                 sbParamCropInfo.AppendFormat(@" WHERE (T.V_UNIT_MNEM like '%{0}%' OR T.V_UNIT_NAME like '%{0}%') ", qc.SearchContext.Filter());
247             }
248             if (!string.IsNullOrEmpty(qc.StationCode))
249             {
250                 sbParamCropInfo.AppendFormat(@" AND T2.V_STATION_NAME = {0}", qc.StationName.Filter().StringParseDBNULL());
251             }
252             if (!string.IsNullOrEmpty(qc.CorpId))
253             {
254                 sbParamCropInfo.AppendFormat(@" AND T.C_CORP_ID={0}", qc.CorpId.StringParseDBNULL());
255             }
256             var dtParamCropInfo = Singleton.OracleOperation.GetDataTableBySql(sbParamCropInfo.ToString());
257             if (null == dtParamCropInfo)
258                 dtParamCropInfo = new DataTable();
259             DataTable dt = new DataTable();
260             dt.Columns.Add("V_CORP_NAME");
261             dt.Columns.Add("V_UNIT_TEL");
262             dt.Columns.Add("V_STATION_NAME");
263             dt.Columns.Add("V_STATION_TEL");
264             dt.Columns.Add("cType");
265             dt.Columns.Add("Id");
266             //TC-優化一下
267             dt = FillTableData(dt, dtCropInfo.Rows);
268             return FillTableData(dt, dtParamCropInfo.Rows);
269         }
270 
271         /// <summary>
272         /// 填充表數據
273         /// </summary>
274         /// <param name="fillDataTable"></param>
275         /// <param name="dataRow"></param>
276         private DataTable FillTableData(DataTable fillDataTable, DataRowCollection dataRow)
277         {
278             foreach (DataRow dr in dataRow)
279             {
280                 DataRow drNew = fillDataTable.NewRow();
281                 drNew["V_CORP_NAME"] = dr[0];
282                 drNew["V_UNIT_TEL"] = dr[1];
283                 drNew["V_STATION_NAME"] = dr[2];
284                 drNew["V_STATION_TEL"] = dr[3];
285                 drNew["cType"] = dr[4];
286                 drNew["Id"] = dr[5];
287                 fillDataTable.Rows.Add(drNew);
288             }
289             return fillDataTable;
290         }
291     }
智能查詢具體實現DB方法

此時,智能提示已正常結束


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • C++的 bitset 在 bitset 頭文件中,它是一種類似數組的結構,它的每一個元素只能是0或1,每個元素僅用1bit空間。 下麵是具體用法 構造函數 bitset常用構造函數有四種,如下 註意: 用字元串構造時,字元串只能包含 '0' 或 '1' ,否則會拋出異常。 構造時,需在<>中表明b ...
  • 寫入文本文件 1. 關聯讀入的文件,使用Reader 和 FileReader 2. 關聯寫出的文件,使用Writer和 FileWriter 3. 創建緩衝 char數組,用於接收讀取到的文本信息 4. 將文本讀入到 緩衝數組(buff)中 5. 輸出讀取到的文本信息 6. 寫出讀取到的文件 7. ...
  • 練習 4.12: 流行的web漫畫服務xkcd也提供了JSON介面。例如,一個 https://xkcd.com/571/info.0.json 請求將返回一個很多人喜愛的571編號的詳細描述。 下載每個鏈接(只下載一次)然後創建一個離線索引。編寫一個xkcd工具,使用這些離線索引,列印和命令行輸入 ...
  • 在Kotlin中 使用js 函數 ...
  • 在一對多或者多對多的時候。如果通過一的一方取獲得多的一方的數據。除了第一次查詢表的數據以外。每獲得一條多的一方的數據就查詢一次。 如:通過學生表的記錄查詢成績表的記錄。 一個學生就查詢一次,50個學生就查詢50次。 如果需要查詢50個學生的成績,需要查詢資料庫的次數為 第一次查詢學生的記錄+50次查 ...
  • 概述 UWP Community Toolkit Extensions 中有一個為可視元素提供的擴展 - VisualExtensions,本篇我們結合代碼詳細講解 VisualExtensions 的實現。 VisualExtensions 為可視元素提供了一種簡單的在 XAML 中修改通用屬性的 ...
  • 搭建Spring: 3、演示IOC操作,在Service中調用Dao中的方法 UserDao.java package com.zzb.www.dao public class UserDao{ public void add(){ System.out.println("dao........") ...
  • 我們只知道靜態成員的用法,比如調用一個靜態方法要用類名去點出來,比如Math.Max(),但是為什麼是這樣調用呢?為什麼靜態構造函數不能有訪問修飾符?為什麼靜態構造函數沒有參數?靜態函數的執行時間又是什麼時候?為什麼? 在面向對象中,萬物皆對象。其中就有一種對象叫作類型對象,類型對象就是我們創建一個 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...