要實現模糊搜索的功能,及在模糊搜索框內輸入要查詢的信息,會在用戶基礎信息欄顯示模糊搜索的結果

以用戶名模糊搜索為例

頁面上實現點擊回車鍵即可進行搜索的功能
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<script type="text/javascript">
<!--
//按回車鍵提交表單信息
document.onkeydown = function(e){
if(!e) e = window.event;//火狐中是 window.event
if((e.keyCode || e.which) == 13){
var obtnSearch=document.getElementById("xqSelect")
obtnSearch.focus();//讓另一個控件獲得焦點就等於讓文本輸入框失去焦點
// obtnSearch.click();
}
}
var actionPath = $('#actionPath').val();
var path = $('#path').val();
var businessType = $('#businessType').val();
if(!businessType)
{
businessType="userType";
}
var jspPath = path+"webPage/sf_tree/infodata.jsp?businessType="+businessType+"&type=";
// alert(actionPath);
//alert(path);
//alert(jspPath);
userTree(jspPath,actionPath,path);
//-->
</script>
················································
<tr>
<td>
<input type="text" id="txtNebulosity" name="txtNebulosity" size="25" style="height:60px;" /><br/>
<td>
</tr>
<tr>
<td>
<input type="button" id="nebulosity" name="nebulosity" value="模糊搜索" onclick="nebulosityQuery();" />
<td>
</tr>
·····
在sf_leftQuery_js里編寫模糊搜索的方法
/* 模糊搜索 @parm:queryId 點擊查詢DOM id */ function nebulosityQuery(queryId) { var cdbh = window.parent.$('#cdbh').val(); var nebulositySearch = function () { var cardNo = $("#cardNo").val(); var codeNebulosity = $("#codeNebulosity").val(); var nameNebulosity = $("#nameNebulosity").val(); var addrNebulosity = $("#addrNebulosity").val(); var cardNoNote = $("#cardNo").attr("noteval"); var codeNote = $("#codeNebulosity").attr("noteval"); var nameNote = $("#nameNebulosity").attr("noteval"); var addrNote = $("#addrNebulosity").attr("noteval"); $("#" + queryId).datagrid({ queryParams : { "queryVo.firstRequest" : false, //"queryVo.nebulosity":$("#txtNebulosity").val(), "queryVo.codeNebulosity" : codeNebulosity == codeNote ? "" : codeNebulosity, "queryVo.nameNebulosity" : nameNebulosity == nameNote ? "" : nameNebulosity, "queryVo.addrNebulosity" : addrNebulosity == addrNote ? "" : addrNebulosity, "queryVo.yhkh" : cardNo == cardNoNote ? "" : cardNo, "treeUtil.fgs" : "", "queryVo.cdbh":cdbh, } }); } $("#nebulosity").click(nebulositySearch); $('#txtNebulosity').keypress(function (event) { onPressEnter(event, nebulositySearch); }); }
搜索的實現是依靠准確的sql查詢語句來實現,以下為dao層創建查詢sql語句的方法
private Object[] getSql(BDXCPageContext context, QueryVo queryVo) { String condition = "yh.xq||yh.yyhbm||yh.yhbm||yh.yhmc||yh.yhbh||yh.fgs||yh.qy||yh.fwz||yh.dz||yh.rlz||yh.yhkh||yh.gnzt||yh.lxdh||yh.jtdh||yh.qtdh||yh.sfzh||yh.kzfs||yh.cnfs||yh.yhlb"; List list = new ArrayList(); // 基礎hql StringBuilder baseHql = new StringBuilder(); // 基礎sql StringBuilder baseSql = new StringBuilder(); baseHql.append("from SfJmyhT yh where zf=0 "); baseSql.append(" select distinct yh.rowid rd,yh.yhbm,yh.dz from sf_jmyh_t yh left join sf_jmmj_t mj on yh.yhbh = mj.yhbh inner join (") .append("select xqqx.mc xq, rlzqx.mc rlz,fwzqx.mc fwz, qyqx.mc qy,fgsqx.mc fgs, xqqx.yhlx, xqqx.sjqx from sf_sjqx_t xqqx ") .append("inner join sf_sjqx_t rlzqx on xqqx.sjbh = rlzqx.bh and xqqx.sjlx = 5 ") .append("inner join sf_sjqx_t fwzqx on rlzqx.sjbh = fwzqx.bh and rlzqx.sjlx = 4 ") .append("inner join sf_sjqx_t qyqx on fwzqx.sjbh = qyqx.bh and fwzqx.sjlx = 3 ") .append("inner join sf_sjqx_t fgsqx on qyqx.sjbh = fgsqx.bh and qyqx.sjlx = 2) qx ") .append("on yh.fgs = qx.fgs and yh.qy = qx.qy and yh.fwz = qx.fwz and yh.rlz = qx.rlz and yh.xq = qx.xq where yh.zf = 0"); // 條件 StringBuilder whereSql = new StringBuilder(); //jsfs 為0代表全部查詢 if(!BDXCUtil.objectIsEmpety(queryVo.getJsfs())&&queryVo.getJsfs().equals("0")){ //只查詢二部制 }else if (!BDXCUtil.objectIsEmpety(queryVo.getJsfs())&&queryVo.getJsfs().equals("二部制結算")) { whereSql.append(" and mj.jsfs = ?"); list.add(queryVo.getJsfs()); //查詢計量結算之外的兩種情況 }else{ whereSql.append(" and mj.jsfs != ?"); list.add("計量結算"); } // 分公司 if (!BDXCUtil.objectIsEmpety(queryVo.getFgs())) { whereSql.append(" and yh.fgs= ?"); list.add(queryVo.getFgs()); } // 區域 if (!BDXCUtil.objectIsEmpety(queryVo.getQy())) { whereSql.append(" and yh.qy= ?"); list.add(queryVo.getQy()); } // 服務站 if (!BDXCUtil.objectIsEmpety(queryVo.getFwz())) { whereSql.append(" and yh.fwz= ?"); list.add(queryVo.getFwz()); } // 熱源 if (!BDXCUtil.objectIsEmpety(queryVo.getRy())) { whereSql.append(" and yh.ry= ?'"); list.add(queryVo.getRy()); } // 換熱站 if (!BDXCUtil.objectIsEmpety(queryVo.getRlz())) { whereSql.append(" and yh.rlz= ?"); list.add(queryVo.getRlz()); } // 小區 if (!BDXCUtil.objectIsEmpety(queryVo.getXq())) { whereSql.append(" and yh.xq= ?"); list.add(queryVo.getXq()); } // 用戶卡號 if (!BDXCUtil.objectIsEmpety(queryVo.getYhkh())) { whereSql.append(" and yh.yhkh= ?"); list.add(queryVo.getYhkh()); } // 用戶編碼 if (!BDXCUtil.objectIsEmpety(queryVo.getYhbm())) { whereSql.append(" and yh.yhbm= ?"); list.add(queryVo.getYhbm()); } // 用戶編號 if (!BDXCUtil.objectIsEmpety(queryVo.getYhbh())) { whereSql.append(" and yh.yhbh= ?"); list.add(queryVo.getYhbh()); } // if (!BDXCUtil.objectIsEmpety(queryVo.getYhmc())) { // whereSql.append(" and yh.yhmc like ?"); // list.add("%" + queryVo.getYhmc() + "%"); // } // 用戶名稱 調整為精確查詢 if (!BDXCUtil.objectIsEmpety(queryVo.getYhmc())) { whereSql.append(" and (yh.yhmc=? or yh.cap_yhmc= ?)"); list.add(queryVo.getYhmc().toUpperCase()); list.add(queryVo.getYhmc().toUpperCase()); } // 合同編號 if (!BDXCUtil.objectIsEmpety(queryVo.getHtbh())) { whereSql.append(" and yh.htbh= ?"); list.add(queryVo.getHtbh()); } // 樓號 if (!BDXCUtil.objectIsEmpety(queryVo.getLh())) { whereSql.append(" and yh.lh= ?"); list.add(queryVo.getLh()); } // 單元號 if (!BDXCUtil.objectIsEmpety(queryVo.getDyh())) { whereSql.append(" and yh.dyh= ?"); list.add(queryVo.getDyh()); } //樓層 if (!BDXCUtil.objectIsEmpety(queryVo.getCs())) { whereSql.append(" and yh.cs= ?"); list.add(queryVo.getCs()); } //室號 if (!BDXCUtil.objectIsEmpety(queryVo.getSh())) { whereSql.append(" and yh.sh= ?"); list.add(queryVo.getSh()); } // 層數 // if (!BDXCUtil.objectIsEmpety(queryVo.getCs())) { // whereSql.append(" and yh.cs= ?"); // list.add(new Integer(queryVo.getCs())); // } // 地址 if (!BDXCUtil.objectIsEmpety(queryVo.getDz())) { whereSql.append(" and yh.dz like ?"); list.add("%" + queryVo.getDz() + "%"); } //單位名稱 if (!BDXCUtil.objectIsEmpety(queryVo.getDwmc())) { whereSql.append(" and yh.dwmc like ?"); list.add("%" + queryVo.getDwmc() + "%"); } // 供暖狀態 if (!BDXCUtil.objectIsEmpety(queryVo.getGnzt())) { //散戶入網模塊 只顯示未裝用戶 由於鏈接中傳參不可用中文,所以用字符代替 if(!queryVo.getGnzt().equalsIgnoreCase("0")){ whereSql.append(" and yh.gnzt= ?"); list.add(queryVo.getGnzt()); }else{ whereSql.append(" and (yh.gnzt= ? or yh.gnzt = ?)"); list.add("未裝"); list.add("未供"); } } // 收費員 if (!BDXCUtil.objectIsEmpety(queryVo.getSfy())) { whereSql.append(" and yh.sfy= ?"); list.add(queryVo.getSfy()); } // 用戶類別 if (!BDXCUtil.objectIsEmpety(queryVo.getYhlb())) { whereSql.append(" and yh.yhlb= ?"); list.add(queryVo.getYhlb()); } // 收費類別 if (!BDXCUtil.objectIsEmpety(queryVo.getSflb())) { whereSql.append(" and yh.sflb= ?"); list.add(queryVo.getSflb()); } // 最小收費面積 if (queryVo.getMinNum() != null) { whereSql.append(" and yh.sfmj >= ? "); list.add(queryVo.getMinNum()); } // 最大收費面積 if (queryVo.getMaxNum() != null && queryVo.getMaxNum() != 0) { whereSql.append(" and yh.sfmj <= ?"); list.add(queryVo.getMaxNum()); } // 拆網用戶 if (!BDXCUtil.objectIsEmpety(queryVo.getCwyh())) { whereSql.append(" and yh.gnzt not in (?)"); list.add(queryVo.getCwyh()); } // 鎖閉閥 if ("lockValveType".equals(queryVo.getBusinessType())) { whereSql.append(" and yh.sfazsbf = ?"); list.add("是"); } //根據系統菜單判斷是單位還是居民用戶 if(!BDXCUtil.objectIsEmpety(queryVo.getCdbh())){ if("137".equals(queryVo.getCdbh())){ whereSql.append(" and yh.yhlb<>'單位' "); } if("503".equals(queryVo.getCdbh())){ whereSql.append(" and yh.yhlb='單位' "); } } // 角色編號 whereSql.append(" and qx.sjqx like ? "); list.add("%'" + queryVo.getJsbh() + "'%"); String nebulosity = queryVo.getNebulosity(); if (!BDXCUtil.objectIsEmpety(queryVo.getNebulosity())) { String[] nebs = nebulosity.replaceAll(" ", " ").split(" "); for (int i = 0; i < nebs.length; i++) { whereSql.append(" and instr(").append(condition).append(",?,1,1) > 0"); list.add(nebs[i].trim()); } } String codeNebulosity = queryVo.getCodeNebulosity(); if (!BDXCUtil.objectIsEmpety(codeNebulosity)) { String[] nebs = codeNebulosity.replaceAll(" ", " ").split(" "); whereSql.append(" and ( "); for (int i = 0; i < nebs.length; i++) { if(i!=0) whereSql.append(" and "); whereSql.append(" instr(").append(condition).append(",?,1,1) > 0"); list.add(nebs[i].trim()); } whereSql.append(" ) "); } String nameNebulosity = queryVo.getNameNebulosity(); if (!BDXCUtil.objectIsEmpety(nameNebulosity)) { whereSql.append(" and instr(").append("YHMC").append(",?,1,1) > 0"); list.add(nameNebulosity.trim()); } String addrNebulosity = queryVo.getAddrNebulosity(); if (!BDXCUtil.objectIsEmpety(addrNebulosity)) { whereSql.append(" and instr(").append("DZ").append(",?,1,1) > 0"); list.add(addrNebulosity.trim()); } String cardNo = queryVo.getYhkh(); if (!BDXCUtil.objectIsEmpety(cardNo)) { whereSql.append(" and instr(yhkh,?,1,1) > 0"); list.add(cardNo.trim()); } // 排序sql StringBuilder orderSql = new StringBuilder(); orderSql.append(" order by yh.yhbm, yh.yhbh"); StringBuilder order = new StringBuilder(); order.append(" order by yh.yhbm,yh.dz"); // hql( =baseSql +whereSql +orderSql) StringBuilder hql = new StringBuilder(); hql.append(baseHql.toString()).append(whereSql.toString()).append(orderSql.toString()); // sql StringBuilder sql = new StringBuilder(); sql.append("select yhbh,yhbm,yhmc,dz,jzmj,symj,cgmj,sfmj,gnzt,yhlb,yhzt,fgs,qy,fwz,rlz,xq, ry,lh,dyh,cs,sh,mp,yhkh,") .append("sfzh,jtdh,lxdh,qtdh,sfazsbf,rwbm,to_char(rwrq,'yyyy-MM-dd') rwrq,to_char(ksgnrq,'yyyy-MM-dd') ksgnrq,") .append("czy,kzfs,sfy,sfyxyhjf,sfyxyhcx,sfdbh,sfyxsf,byxsfyy,sfyxtg,byxtgyy,sfebz,fwwz,fwcx,hth,zdyx1,bz,grxz,ryxz,yyhbm,sfswhf,gnfs,sflntg ") .append("from sf_jmyh_t yh where rowid in(select distinct rd from (select distinct rd,rownum rn from (" + baseSql.toString() + whereSql.toString() + order.toString() + " ) where rownum <= ?) where rn > ? ) ").append(orderSql.toString()); // 查詢記錄數sql StringBuilder countSql = new StringBuilder(); countSql.append("select count(distinct rd) num from (").append(baseSql.toString()).append(whereSql.toString()).append(")"); // 查詢合計sql StringBuilder sumSql = new StringBuilder(); sumSql.append("select sum(jzmj) JZMJ,sum(symj) SYMJ,sum(cgmj) CGMJ,sum(sfmj) SFMJ,count(1) NUM from sf_jmyh_t where rowid in (").append(baseSql.toString()).append(whereSql.toString()).append(")"); Object[] sqls = new Object[6]; sqls[0] = list; sqls[1] = hql.toString(); sqls[2] = sql.toString(); sqls[3] = countSql.toString(); sqls[4] = sumSql.toString(); sqls[5] = baseSql.toString(); return sqls; }
當執行模糊搜索控制台輸出sql語句(這里為方便閱讀做了一下分割)
select yhbh,yhbm,yhmc,dz,jzmj,symj,cgmj,sfmj,gnzt,yhlb,yhzt,fgs,qy,fwz,rlz,xq, ry,lh,dyh,cs,sh,mp,yhkh,sfzh,jtdh,lxdh,qtdh,sfazsbf,rwbm,to_char(rwrq,'yyyy-MM-dd') rwrq,to_char(ksgnrq,'yyyy-MM-dd') ksgnrq,czy,kzfs,sfy,sfyxyhjf,sfyxyhcx,sfdbh,sfyxsf,byxsfyy,sfyxtg,byxtgyy,sfebz,fwwz,fwcx,hth,zdyx1,bz,grxz,ryxz,yyhbm,sfswhf,gnfs,sflntg from sf_jmyh_t yh where rowid in(select distinct rd from ( select distinct rd,rownum rn from ( select distinct yh.rowid rd,yh.yhbm,yh.dz from sf_jmyh_t yh left join sf_jmmj_t mj on yh.yhbh = mj.yhbh inner join (select xqqx.mc xq, rlzqx.mc rlz,fwzqx.mc fwz, qyqx.mc qy,fgsqx.mc fgs, xqqx.yhlx, xqqx.sjqx from sf_sjqx_t xqqx inner join sf_sjqx_t rlzqx on xqqx.sjbh = rlzqx.bh and xqqx.sjlx = 5 inner join sf_sjqx_t fwzqx on rlzqx.sjbh = fwzqx.bh and rlzqx.sjlx = 4 inner join sf_sjqx_t qyqx on fwzqx.sjbh = qyqx.bh and fwzqx.sjlx = 3 inner join sf_sjqx_t fgsqx on qyqx.sjbh = fgsqx.bh and qyqx.sjlx = 2) qx on yh.fgs = qx.fgs and yh.qy = qx.qy and yh.fwz = qx.fwz and yh.rlz = qx.rlz and yh.xq = qx.xq where yh.zf = 0 and yh.yhlb<>'單位' and qx.sjqx like ? order by yh.yhbm,yh.dz ) where rownum <= ?) where rn > ? ) order by yh.yhbm, yh.yhbh
