package UIB.UIB03.ZBS; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.HashMap; import java.util.Map; import org.springframework.jdbc.support.rowset.SqlRowSet; import org.springframework.jdbc.support.rowset.SqlRowSetMetaData; import CoreFS.SA06.CoreReturnObject; import UIB.COM.XmlSqlParsersFactory; public class MapConverter { /** * @desc 表头转换 * @param srs 查询出来的表头信息 * @return */ public HashMap getHeadMap(SqlRowSet srs) { HashMap map = new HashMap(); SqlRowSetMetaData rsmd = srs.getMetaData(); int count = rsmd.getColumnCount(); String columnName = "";//列名 if(srs.next()) { for(int i = 1; i <= count ; i++) { columnName = rsmd.getColumnName(i); map.put(columnName, srs.getString(columnName)); } } return map; } /** * @desc 多行、同一卷的信息生成为一个DataRowList * @param sqlID * @return * @throws Exception */ public ArrayList getDataRowList(List srs , String qcTp) throws Exception { ArrayList list = new ArrayList();//生成的DataRowList放入ArrayList中 CoreReturnObject cro = new CoreReturnObject(); DataRowList drl = null; Iterator it = srs.iterator(); Map ordMap = new HashMap(); int i=0; String columnValue =null; while (it.hasNext()) { ordMap = (Map) it.next(); for (Iterator iter = ordMap.entrySet().iterator(); iter.hasNext();) { Map.Entry entry = (Map.Entry) iter.next(); String columnName = (String)entry.getKey(); Object ob = entry.getValue(); columnValue = ob.toString(); break; /*if(!iter.hasNext()) { System.out.println(columnName+"--------------------------------"); }*/ } if(i==0) { drl = new DataRowList(); list.add(drl); setDataRowList(drl , ordMap , true , qcTp); } else if(columnValue.equals(drl.getValue(0))) { setDataRowList(drl , ordMap , false , qcTp); } else { drl = new DataRowList(); list.add(drl); setDataRowList(drl, ordMap ,true , qcTp); } i++; } /* while(srs.next()) { if(srs.isFirst())//第一行数据存放 { drl = new DataRowList(); list.add(drl); setDataRowList(drl , ordMap , true , qcTp); continue; } //若已经存放过数据,并且当前行的第一列的值与drl数组的最后一个的value值相同,则继续存放 if(srs.getString(1).equals(drl.getValue(0))) { setDataRowList(drl , ordMap , false , qcTp); } else { drl = new DataRowList(); list.add(drl); setDataRowList(drl, ordMap ,true , qcTp); } }*/ // for(int i = 0; i < list.size() ; i++)//由于index是从0开始的,所以需要等号 // { // DataRowList dx = (DataRowList)list.get(i); // dx.print(); // System.out.println("###############################################################"); // } return list; } /** * @desc 查询结果单行转换为DataRowList * @param columnCount 总列数 * @param srs 查询出来数据的集合 * @param flag 钢卷号等信息是否需要存储进来 * @param qcTp q(QLTY)、c(CHEM)成分与材质区分 * @return */ private void setDataRowList(DataRowList drl , Map ordMap , boolean flag , String qcTp) { //SqlRowSetMetaData rsmd = srs.getMetaData(); //int columnCount = rsmd.getColumnCount();//总列数 String columnName = "";//列名 String columnValue = "";//列值 if(qcTp.equals(QltyCodeDef.CHEM_CD))//成分 { String chemCD = "";//元素名 String chemVal = "";//元素值 String compYn = "";//元素类型(复合元素与单一元素) for (Iterator iter = ordMap.entrySet().iterator(); iter.hasNext();) { Map.Entry entry = (Map.Entry) iter.next(); columnName = (String)entry.getKey(); Object ob = entry.getValue(); columnValue = ob.toString(); if(columnName.equals(QltyCodeDef.ROW_FLAG) && flag) drl.put(columnName, columnValue); else if(columnName.equals(QltyCodeDef.CHEM_CD))//元素名 chemCD = columnValue; else if(columnName.equals(QltyCodeDef.CHEM_VAL))//元素值 chemVal = columnValue; else if(columnName.equals(QltyCodeDef.COMP_YN))//是否为复合元素 compYn = columnValue; else if(flag) drl.put(columnName, columnValue); } drl.put(chemCD, chemVal , compYn); } } /** * 补充拉力项目。针对拉力的check,主要检查5大项是否均已存在,若小于4大项则增加缺少的项,不一定要5个全部存在 */ public static void replenishPullItem(DataRowList drl) { int index= 0;//为0则不补录项,因为没有拉力要求 int endLoc = 0;//性能项目在DataRowList中结束的位置 String[]qltyCD = new String[5];//保存代码 String[]qltyNm = new String[5];//保存名称 StringBuffer sBuffer = new StringBuffer(); for(int i = drl.size()-1; i > 0; i--) { if( QltyCodeDef.TENSILE_TEST.equals(drl.getBigName(i) ))//若大名称为QltyCodeDef.TENSILE_TEST { if(endLoc==0) endLoc = i;//确定性能结束的位置 sBuffer.append(drl.getKey(i)+",");//主键以“key1,key2,key3”的字符串形式存放 } }//for end if( sBuffer.toString().indexOf(QltyCodeDef.YS_CD) == -1)//屈服 { qltyCD[index] = QltyCodeDef.YS_CD; qltyNm[index++] = QltyCodeDef.YS_NM; } if( sBuffer.toString().indexOf(QltyCodeDef.TE_CD) == -1)//抗拉 { qltyCD[index] = QltyCodeDef.TE_CD; qltyNm[index++] = QltyCodeDef.TE_NM; } if( sBuffer.toString().indexOf(QltyCodeDef.EL_CD) == -1)//伸长 { qltyCD[index] = QltyCodeDef.TE_CD; qltyNm[index++] = QltyCodeDef.TE_NM; } if( sBuffer.toString().indexOf(QltyCodeDef.RP_CD) == -1)// { qltyCD[index] = QltyCodeDef.RP_CD; qltyNm[index++] = QltyCodeDef.RP_NM; } if( sBuffer.toString().indexOf(QltyCodeDef.YR_CD) == -1)// { qltyCD[index] = QltyCodeDef.YR_CD; qltyNm[index++] = QltyCodeDef.YR_NM; } if(index >0 && index < 4) //有拉力项目,且小于4项则增加 { endLoc = endLoc+1;//从检验项目的后面一个开始插入 for(int i = 0; i < index ;i++) { drl.add(endLoc+i, qltyCD[i], "", qltyNm[i], QltyCodeDef.TENSILE_TEST, ""); } } } }