package com.zky.para; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.HashMap; import com.zky.pub.DbConn; import com.zky.pub.HashFmlBuf; /** * @author dy * * 同步参数到各个参数实体Bean中 * */ public class SyncPara extends Thread { private Connection con = null; private ResultSet rs = null; private Statement st = null; private String sql = "select a.table_name,b.sortcolumn,b.sortorder,a.updatetime from td_s_tableinfo a,td_s_tableinfo_web b where upper(a.table_name) = upper(b.table_name)"; private String updateSql = null; private String table_name; private String class_name; private HashMap hm = new HashMap(); private int SleepTime = 60000; private HashMap table_hm = new HashMap(); /** * 构造函数 启动线程 * */ public SyncPara() { start(); } /** * 同步方法 */ private void sync() { try { System.gc(); con = (Connection) DbConn.getConn(); st = con.createStatement(); rs = st.executeQuery(sql); String updatetime; String sortColumn = ""; String sortOrder = ""; int i = 0; while (rs.next()) { table_name = rs.getString("TABLE_NAME").toUpperCase(); sortColumn = rs.getString("sortColumn"); sortOrder = rs.getString("sortOrder"); updatetime = (String) table_hm.get(table_name); if (updatetime != null && updatetime.equals(rs.getString("updatetime"))) { continue; } table_hm.put(table_name, rs.getString("updatetime")); i++; try { ParaTable p = new ParaTable(table_name, sortColumn, sortOrder); p.init(); hm.remove(table_name); hm.put(table_name, p); } catch (Exception e) { e.printStackTrace(); } } rs.close(); st.close(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (rs != null) rs.close(); if (st != null) st.close(); if (con != null) { con.close(); } } catch (Exception e) { } } } /** * 线程 休眠一段时间后检查参数是否有更新 */ public void run() { while (true) { try { sync(); Thread.sleep(SleepTime); } catch (Exception e) { e.printStackTrace(); } } } /** * 根据表名取出所对应的参数表 * @param tableName * @return */ public ParaTable getTable(String tableName) { ParaTable table = (ParaTable) hm.get(tableName.toUpperCase()); try { if (table == null) throw new Exception("表名“" + tableName + "”出错或该表不属于参数表!"); } catch (Exception e) { e.printStackTrace(); } return table; } /** * 根据表名、数据列、显示列、过滤列、过滤值来生成下拉框的内容 * @param TableName * @param DataColumn * @param DisplayColumn * @param FilterColumn * @param FilterValue * @return */ public String getSelectParaFilter(String TableName, String DataColumn, String DisplayColumn, String FilterColumn, String FilterValue) { HashFmlBuf buf = null; buf = getBuf(TableName); //根据显示列和数据列来生成一个HTML的代码 StringBuffer rtn = new StringBuffer(""); String ls_datacolumn = null, ls_displaycolumn = null; String ls_filtercolumn = ""; int li_count = 0; li_count = Integer.parseInt(buf.fget("ROWCOUNT", 0)); if (li_count == 0) { return null; } FilterColumn = FilterColumn.toUpperCase(); if (FilterColumn.startsWith("!")) { FilterColumn = FilterColumn.replaceFirst("!", ""); for (int i = 0; i < li_count; i++) { ls_filtercolumn = buf.fget(FilterColumn, i); if (ls_filtercolumn.equals(FilterValue)) continue; ls_datacolumn = buf.fget(DataColumn.toUpperCase(), i); ls_displaycolumn = buf.fget(DisplayColumn.toUpperCase(), i); rtn.append("\n"); } } else { for (int i = 0; i < li_count; i++) { ls_filtercolumn = buf.fget(FilterColumn, i); if (!ls_filtercolumn.equals(FilterValue)) continue; ls_datacolumn = buf.fget(DataColumn.toUpperCase(), i); ls_displaycolumn = buf.fget(DisplayColumn.toUpperCase(), i); rtn.append("\n"); } } return rtn.toString(); } //==================================================旧系统 /** * @param TableName * @param DataCol * @param DisplayCol * @return */ public ArrayList getParaList(String TableName, String DataCol, String DisplayCol) { return getFilterParaList(TableName, DataCol, DisplayCol, "", ""); } /** * @param TableName * @param DataCol * @param DisplayCol * @param FilterCol * @param FilterValue * @return */ public ArrayList getFilterParaList(String TableName, String DataCol, String DisplayCol, String FilterCol, String FilterValue) { ParaTable table = getTable(TableName); int iCount = table.getRowCount(); if (iCount == 0) { return null; } ArrayList list = new ArrayList(); String sDataCol = "", sDisplayCol = "", sFilterValue = ""; if (FilterCol.equals("")) { for (int i = 0; i < iCount; i++) { sDataCol = table.getColValue(DataCol.toUpperCase(), i); sDisplayCol = table.getColValue(DisplayCol.toUpperCase(), i); list.add(new Row(sDataCol, sDisplayCol)); } } else { for (int i = 0; i < iCount; i++) { sFilterValue = table.getColValue(FilterCol.toUpperCase(), i); if (FilterValue.equals(sFilterValue)) { sDataCol = table.getColValue(DataCol.toUpperCase(), i); sDisplayCol = table .getColValue(DisplayCol.toUpperCase(), i); list.add(new Row(sDataCol, sDisplayCol)); } } } return list; } /** * @param TableName * @param DataCol * @param DisplayCol * @param DataValue * @return */ public String getDesc(String TableName, String DataCol, String DisplayCol, String DataValue) { HashFmlBuf buf = getBuf(TableName); String Display = ""; int pos = buf.find(DataCol.toUpperCase(), DataValue); if (pos == -1) return Display; Display = buf.fget(DisplayCol.toUpperCase(), pos); return Display; } /** * 根据frameworkid过滤 * @param TableName * @param DataCol * @param DisplayCol * @param DataValue * @param Frameworkid * @return */ public String getDesc(String TableName, String DataCol, String DisplayCol, String DataValue, String Frameworkid) { HashFmlBuf buf = getBuf(TableName); int icount = Integer.parseInt(buf.fget("ROWCOUNT", 0)); String sframeworkid = "", svalue; for (int i = 0; i < icount; i++) { sframeworkid = buf.fget("FRAMEWORKID", i); if (sframeworkid == null) return getDesc(TableName, DataCol, DisplayCol, DataValue); if (sframeworkid.equals(Frameworkid)) { svalue = buf.fget(DataCol.toUpperCase(), i); if (svalue == null) return null; if (svalue.equals(DataValue)) { return buf.fget(DisplayCol.toUpperCase(), i); } } } return null; } /** * 通过传入的表名 获取该表对应的实例 ,然后返回该实例中的数据 * @param TableName * @return 返回一个HashFmlBuf中存放这参数表的数据 */ public HashFmlBuf getBuf(String TableName) { return getTable(TableName).getRows(); } /** * 根据表名、数据列、显示列、过滤列、过滤值、check框的名称、文字在框的左右标志来生成check框 * @param TableName * @param DataColumn * @param DisplayColumn * @param FilterColumn * @param FilterValue * @param CheckName * @param flag * @return */ public String getCheckParaFilter(String TableName, String DataColumn, String DisplayColumn, String FilterColumn, String FilterValue, String CheckName, String flag) { HashFmlBuf buf = null; buf = getBuf(TableName); //根据显示列和数据列来生成一个HTML的代码 String ls_rtn = "", ls_datacolumn = null, ls_displaycolumn = null; String ls_filtercolumn = "", ls_filtervalue = ""; int li_count = 0; String ls_left_rtn = "", ls_right_rtn = ""; li_count = Integer.parseInt(buf.fget("ROWCOUNT", 0)); if (li_count == 0) { return null; } for (int i = 0; i < li_count; i++) { ls_filtercolumn = buf.fget(FilterColumn.toUpperCase(), i); if (!ls_filtercolumn.equals(FilterValue)) continue; ls_datacolumn = buf.fget(DataColumn.toUpperCase(), i); ls_displaycolumn = buf.fget(DisplayColumn.toUpperCase(), i); ls_left_rtn = ls_left_rtn + ls_displaycolumn + ""; ls_right_rtn = ls_right_rtn + "" + ls_displaycolumn; } if (flag == "0") { return ls_left_rtn; } else { return ls_right_rtn; } } /** * * @param TableName * @param DataColumn * @param DisplayColumn * @return */ public String getSelectPara(String TableName, String DataColumn, String DisplayColumn) { HashFmlBuf buf = null; buf = getBuf(TableName); //根据显示列和数据列来生成一个HTML的代码 StringBuffer ls_rtn = new StringBuffer(""); String ls_datacolumn = null, ls_displaycolumn = null; int li_count = 0; li_count = Integer.parseInt(buf.fget("ROWCOUNT", 0)); if (li_count == 0) { return null; } for (int i = 0; i < li_count; i++) { ls_datacolumn = buf.fget(DataColumn.toUpperCase(), i); ls_displaycolumn = buf.fget(DisplayColumn.toUpperCase(), i); ls_rtn.append("\n"); } return ls_rtn.toString(); } public String getSelectPara(String TableName, String DataColumn, String DisplayColumn, String Frameworkid) { HashFmlBuf buf = null; buf = getBuf(TableName); //根据显示列和数据列来生成一个HTML的代码 StringBuffer ls_rtn = new StringBuffer(""); String ls_datacolumn = null, ls_displaycolumn = null, ls_frameworkid = null; int li_count = 0; li_count = Integer.parseInt(buf.fget("ROWCOUNT", 0)); if (li_count == 0) { return null; } for (int i = 0; i < li_count; i++) { ls_frameworkid = buf.fget("FRAMEWORKID", i); if (ls_frameworkid == null) return getSelectPara(TableName, DataColumn, DisplayColumn); ls_datacolumn = buf.fget(DataColumn.toUpperCase(), i); ls_displaycolumn = buf.fget(DisplayColumn.toUpperCase(), i); ls_rtn.append("\n"); } return ls_rtn.toString(); } /** *根据表名、数据列、显示列、默认值来设置下拉列表框的数据 * @param TableName * @param DataColumn * @param DisplayColumn * @param selvalue * @return */ public String getdefaultSelectPara(String TableName, String DataColumn, String DisplayColumn, String selvalue) { HashFmlBuf buf = null; buf = getBuf(TableName); //根据显示列和数据列来生成一个HTML的代码 String ls_rtn = "", ls_datacolumn = null, ls_displaycolumn = null; int li_count = 0; li_count = Integer.parseInt(buf.fget("ROWCOUNT", 0)); if (li_count == 0) { return null; } for (int i = 0; i < li_count; i++) { ls_datacolumn = buf.fget(DataColumn.toUpperCase(), i); ls_displaycolumn = buf.fget(DisplayColumn.toUpperCase(), i); if (selvalue.equals(ls_datacolumn)) { ls_rtn = ls_rtn + ""; } else { ls_rtn = ls_rtn + ""; } } return ls_rtn; } /** * 首先根据frameworkid过滤,再根据过滤列过滤 * @param TableName * @param DataColumn * @param DisplayColumn * @param FilterColumn * @param FilterValue * @param Frameworkid * @return */ public String getSelectParaFilter(String TableName, String DataColumn, String DisplayColumn, String FilterColumn, String FilterValue, String Frameworkid) { HashFmlBuf buf = null; buf = getBuf(TableName); //根据显示列和数据列来生成一个HTML的代码 String ls_rtn = "", ls_datacolumn = null, ls_displaycolumn = null, ls_frameworkid = null; String ls_filtercolumn = "", ls_filtervalue = ""; int li_count = 0; li_count = Integer.parseInt(buf.fget("ROWCOUNT", 0)); if (li_count == 0) { return null; } for (int i = 0; i < li_count; i++) { ls_frameworkid = buf.fget("FRAMEWORKID", i); if (ls_frameworkid == null) return getSelectParaFilter(TableName, DataColumn, DisplayColumn, FilterColumn, FilterValue); if (!ls_frameworkid.equals(Frameworkid)) continue; ls_filtercolumn = buf.fget(FilterColumn.toUpperCase(), i); if (!ls_filtercolumn.equals(FilterValue)) continue; ls_datacolumn = buf.fget(DataColumn.toUpperCase(), i); ls_displaycolumn = buf.fget(DisplayColumn.toUpperCase(), i); ls_rtn = ls_rtn + ""; } return ls_rtn; } /** * 首先根据frameworkid过滤,再根据过滤列过滤 * @param TableName * @param DataColumn * @param DisplayColumn * @param FilterColumn * @param FilterValue * @param Frameworkid * @param selvalue * @return */ public String getSelectParaFilter(String TableName, String DataColumn, String DisplayColumn, String FilterColumn, String FilterValue, String Frameworkid, String selvalue) { HashFmlBuf buf = null; buf = getBuf(TableName); //根据显示列和数据列来生成一个HTML的代码 String ls_rtn = "", ls_datacolumn = null, ls_displaycolumn = null, ls_frameworkid = null; String ls_filtercolumn = "", ls_filtervalue = ""; int li_count = 0; li_count = Integer.parseInt(buf.fget("ROWCOUNT", 0)); if (li_count == 0) { return null; } for (int i = 0; i < li_count; i++) { ls_frameworkid = buf.fget("FRAMEWORKID", i); if (ls_frameworkid == null) return getSelectParaFilter(TableName, DataColumn, DisplayColumn, FilterColumn, FilterValue); if (!ls_frameworkid.equals(Frameworkid)) continue; ls_filtercolumn = buf.fget(FilterColumn.toUpperCase(), i); if (!ls_filtercolumn.equals(FilterValue)) continue; ls_datacolumn = buf.fget(DataColumn.toUpperCase(), i); ls_displaycolumn = buf.fget(DisplayColumn.toUpperCase(), i); if (selvalue.equals(ls_datacolumn)) { ls_rtn = ls_rtn + ""; } else { ls_rtn = ls_rtn + ""; } } return ls_rtn; } /** * 首先根据Data_code过滤,再根据过滤列过滤 * @param TableName * @param DataColumn * @param DisplayColumn * @param FilterColumn * @param FilterValue * @param Data_code * @param selvalue * @return */ public String getSParaFilter(String TableName, String DataColumn, String DisplayColumn, String FilterColumn, String FilterValue, String Datacode, String selvalue) { HashFmlBuf buf = null; buf = getBuf(TableName); //根据显示列和数据列来生成一个HTML的代码 String ls_rtn = "", ls_datacolumn = null, ls_displaycolumn = null, ls_datacode = null; String ls_filtercolumn = "", ls_filtervalue = ""; int li_count = 0; li_count = Integer.parseInt(buf.fget("ROWCOUNT", 0)); if (li_count == 0) { return null; } for (int i = 0; i < li_count; i++) { ls_datacode = buf.fget("TYPE_CODE", i); if (ls_datacode == null) return getSelectParaFilter(TableName, DataColumn, DisplayColumn, FilterColumn, FilterValue); if (ls_datacode.equals(Datacode)) continue; ls_filtercolumn = buf.fget(FilterColumn.toUpperCase(), i); if (!ls_filtercolumn.equals(FilterValue)) continue; ls_datacolumn = buf.fget(DataColumn.toUpperCase(), i); ls_displaycolumn = buf.fget(DisplayColumn.toUpperCase(), i); if (selvalue.equals(ls_datacolumn)) { ls_rtn = ls_rtn + ""; } else { ls_rtn = ls_rtn + ""; } } return ls_rtn; } /** * * @param TableName 表的名字 * @param DataColumn 数据的实际值 * @param DisplayColumn 显示值 * @param CheckName checkbox的名字 * @param flag 表示显示在左边还是在右边,0:左边,1:右边 * @return */ public String getCheckPara(String TableName, String DataColumn, String DisplayColumn, String CheckName, String flag) { HashFmlBuf buf = null; buf = getBuf(TableName); //根据显示列和数据列来生成一个HTML的代码 String ls_left_rtn = "", ls_right_rtn = "", ls_datacolumn = null, ls_displaycolumn = null; int li_count = 0; li_count = Integer.parseInt(buf.fget("ROWCOUNT", 0)); if (li_count == 0) { return null; } for (int i = 0; i < li_count; i++) { ls_datacolumn = buf.fget(DataColumn.toUpperCase(), i); ls_displaycolumn = buf.fget(DisplayColumn.toUpperCase(), i); ls_left_rtn = ls_left_rtn + ls_displaycolumn + ""; ls_right_rtn = ls_right_rtn + "" + ls_displaycolumn; } if (flag == "0") { return ls_left_rtn; } else { return ls_right_rtn; } } /** * 根据表名、上层列名、数据列、显示列来生成一个javascript的数组 * @param TableName * @param UpColumn * @param DataColumn * @param DisplayColumn * @return */ public String getParaArray(String TableName, String UpColumn, String DataColumn, String DisplayColumn) { HashFmlBuf buf = getBuf(TableName); //根据显示列和数据列来生成一个HTML的代码 String ls_rtn = "", ls_datacolumn = null, ls_displaycolumn = null, ls_upcolumn = null, ls_temp = null; int li_count = 0; li_count = Integer.parseInt(buf.fget("ROWCOUNT", 0)); // if (li_count == 0) { // return null; // } ls_temp = new StringBuffer("var ").append(TableName.toUpperCase()) .append("_DEP = new Array();").toString(); ls_rtn = new StringBuffer(ls_rtn).append(ls_temp).toString(); ls_temp = new StringBuffer("var ").append(TableName.toUpperCase()) .append("_VALUE = new Array();").toString(); ls_rtn = new StringBuffer(ls_rtn).append(ls_temp).toString(); ls_temp = new StringBuffer("var ").append(TableName.toUpperCase()) .append("_TEXT = new Array();").toString(); ls_rtn = new StringBuffer(ls_rtn).append(ls_temp).toString(); for (int i = 0; i < li_count; i++) { ls_upcolumn = buf.fget(UpColumn.toUpperCase(), i); ls_datacolumn = buf.fget(DataColumn.toUpperCase(), i); ls_displaycolumn = buf.fget(DisplayColumn.toUpperCase(), i); ls_rtn = new StringBuffer(ls_rtn).append( TableName.toUpperCase() + "_DEP[" + Integer.toString(i) + "] = " + "'" + ls_upcolumn + "';").append( TableName.toUpperCase() + "_VALUE[" + Integer.toString(i) + "] = " + "'" + ls_datacolumn + "';").append( TableName.toUpperCase() + "_TEXT[" + Integer.toString(i) + "] = " + "'" + ls_displaycolumn + "';").toString(); } return ls_rtn; } /** * 根据frameworkid过滤 * @param TableName * @param UpColumn * @param DataColumn * @param DisplayColumn * @param Frameworkid * @return */ public String getParaArray(String TableName, String UpColumn, String DataColumn, String DisplayColumn, String Frameworkid) { HashFmlBuf buf = getBuf(TableName); //根据显示列和数据列来生成一个HTML的代码 String ls_rtn = "", ls_datacolumn = null, ls_displaycolumn = null, ls_upcolumn = null, ls_temp = null, ls_frameworkid = null; int li_count = 0; li_count = Integer.parseInt(buf.fget("ROWCOUNT", 0)); if (li_count == 0) { return null; } //表中没有frameworkid列 if (buf.fget("FRAMEWORKID", 0) == null) return getParaArray(TableName, UpColumn, DataColumn, DisplayColumn); ls_temp = new StringBuffer("var ").append(TableName.toUpperCase()) .append("_DEP = new Array();").toString(); ls_rtn = new StringBuffer(ls_rtn).append(ls_temp).toString(); ls_temp = new StringBuffer("var ").append(TableName.toUpperCase()) .append("_VALUE = new Array();").toString(); ls_rtn = new StringBuffer(ls_rtn).append(ls_temp).toString(); ls_temp = new StringBuffer("var ").append(TableName.toUpperCase()) .append("_TEXT = new Array();").toString(); ls_rtn = new StringBuffer(ls_rtn).append(ls_temp).toString(); for (int i = 0; i < li_count; i++) { ls_frameworkid = buf.fget("FRAMEWORKID", i); if (!ls_frameworkid.equals(Frameworkid)) continue; ls_upcolumn = buf.fget(UpColumn.toUpperCase(), i); ls_datacolumn = buf.fget(DataColumn.toUpperCase(), i); ls_displaycolumn = buf.fget(DisplayColumn.toUpperCase(), i); ls_rtn = new StringBuffer(ls_rtn).append( TableName.toUpperCase() + "_DEP[" + Integer.toString(i) + "] = " + "'" + ls_upcolumn + "';").append( TableName.toUpperCase() + "_VALUE[" + Integer.toString(i) + "] = " + "'" + ls_datacolumn + "';").append( TableName.toUpperCase() + "_TEXT[" + Integer.toString(i) + "] = " + "'" + ls_displaycolumn + "';").toString(); } return ls_rtn; } /** * 根据表名、上层列、数据列、显示列、过滤列、过滤值来生成javascript数组 * @param TableName * @param UpColumn * @param DataColumn * @param DisplayColumn * @param filtercolumn * @param filtervalue * @return */ public String getParaArrayFilter(String TableName, String UpColumn, String DataColumn, String DisplayColumn, String filtercolumn, String filtervalue) { HashFmlBuf buf = getBuf(TableName); //根据显示列和数据列来生成一个HTML的代码 String ls_rtn = "", ls_datacolumn = null, ls_displaycolumn = null, ls_upcolumn = null, ls_filter = null, ls_temp = null; int li_count = 0; li_count = Integer.parseInt(buf.fget("ROWCOUNT", 0)); if (li_count == 0) { return null; } ls_temp = new StringBuffer("var ").append(TableName.toUpperCase()) .append("_DEP = new Array();").toString(); ls_rtn = new StringBuffer(ls_rtn).append(ls_temp).toString(); ls_temp = new StringBuffer("var ").append(TableName.toUpperCase()) .append("_VALUE = new Array();").toString(); ls_rtn = new StringBuffer(ls_rtn).append(ls_temp).toString(); ls_temp = new StringBuffer("var ").append(TableName.toUpperCase()) .append("_TEXT = new Array();").toString(); ls_rtn = new StringBuffer(ls_rtn).append(ls_temp).toString(); int j = 0; for (int i = 0; i < li_count; i++) { ls_upcolumn = buf.fget(UpColumn.toUpperCase(), i); ls_datacolumn = buf.fget(DataColumn.toUpperCase(), i); ls_displaycolumn = buf.fget(DisplayColumn.toUpperCase(), i); ls_filter = buf.fget(filtercolumn.toUpperCase(), i); if (ls_filter != null && ls_filter.equals("")) { if (!ls_filter.equals(filtervalue)) continue; } ls_rtn = new StringBuffer(ls_rtn).append( TableName.toUpperCase() + "_DEP[" + Integer.toString(j) + "] = " + "'" + ls_upcolumn + "';").append( TableName.toUpperCase() + "_VALUE[" + Integer.toString(j) + "] = " + "'" + ls_datacolumn + "';").append( TableName.toUpperCase() + "_TEXT[" + Integer.toString(j) + "] = " + "'" + ls_displaycolumn + "';").toString(); j++; } return ls_rtn; } public String getDefByID(String ID, String TableName, String FldID, String FldDef) { HashFmlBuf buf = getBuf(TableName); int iCount = Integer.parseInt(buf.fget("ROWCOUNT", 0)); if (iCount == 0) return ""; for (int i = 0; i < iCount; i++) { if (buf.fget(FldID.toUpperCase(), i).equals(ID)) { return buf.fget(FldDef.toUpperCase(), i); } } return ""; } }