| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326 |
- package UIB.UIB03.ZBS;
- import java.util.ArrayList;
- import java.util.HashMap;
- import org.springframework.jdbc.support.rowset.SqlRowSet;
- import org.springframework.jdbc.support.rowset.SqlRowSetMetaData;
- import CoreFS.SA06.CoreReturnObject;
- import UIB.COM.XmlSqlParsersFactory;
- public class RowSetConverter
- {
- /**
- * @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(SqlRowSet srs , String qcTp) throws Exception
- {
- ArrayList list = new ArrayList();//生成的DataRowList放入ArrayList中
- CoreReturnObject cro = new CoreReturnObject();
- DataRowList drl = null;
- while(srs.next())
- {
- if(srs.isFirst())//第一行数据存放
- {
- drl = new DataRowList();
- list.add(drl);
- setDataRowList(drl , srs , true , qcTp,false);
- continue;
- }
- //若已经存放过数据,并且当前行的第一列的值与drl数组的最后一个的value值相同,则继续存放
- if(srs.getString(1).equals(drl.getValue(0)))
- {
- setDataRowList(drl , srs , false , qcTp,true);
- }
- else
- {
- drl = new DataRowList();
- list.add(drl);
- setDataRowList(drl, srs ,true , qcTp,false);
- }
- }
- // 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 , SqlRowSet srs , boolean flag , String qcTp,boolean jh)
- {
- 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(int i = 1; i <= columnCount; i++)
- {
- columnName = rsmd.getColumnName(i);
- columnValue = srs.getString(columnName);
- if(columnName.equals(QltyCodeDef.ROW_FLAG) && flag)
- drl.put(columnName, columnValue);
- else if(columnName.equals(QltyCodeDef.CHEM_CD))//元素名
- chemCD = srs.getString(columnName);
- else if(columnName.equals(QltyCodeDef.CHEM_VAL))//元素值
- chemVal = srs.getString(columnName);
- else if(columnName.equals(QltyCodeDef.COMP_YN))//是否为复合元素
- compYn = srs.getString(columnName);
- else if(flag)
- drl.put(columnName, columnValue);
- }
- drl.put(chemCD, chemVal , compYn);
- }
- else if(qcTp.equals(QltyCodeDef.QLTY_CD))//材质
- {
- String key = "";//材质名称,或者钢卷的字段名等
- String value = "";//材质值,或者钢卷号的值
- String smallName = "";//小中文名
- String bigName = "";//大中文名
- String extCode = "";//扩展码
-
- String tem = "";//温度
- String dir = "";//方向
- String size = "";//位置
- String temname = "";//位置
- String temval = "";//位置
- //SQL中的字段名最好也按照该顺序排列
- for(int i = 1; i <= columnCount ; i++)
- {
- columnName = rsmd.getColumnName(i);
- columnValue = srs.getString(columnName);
- if(columnName.equals(QltyCodeDef.ROW_FLAG) && flag)
- drl.put(columnName, columnValue);
- else if( columnName.equals(QltyCodeDef.QLTY_CD)) //材质代码
- key = columnValue;
- else if( columnName.equals(QltyCodeDef.QLTY_VAL_WK) )//材质值
- value = columnValue;
- else if( columnName.equals(QltyCodeDef.SMALL_NAME) )//小中文名
- smallName = columnValue;
- else if( columnName.equals(QltyCodeDef.BIG_NAME) )//大中文名
- bigName = columnValue;
- else if( columnName.equals(QltyCodeDef.MS_EXT_CODE) )//扩展码
- extCode = columnValue;
- else if(columnName.equals(QltyCodeDef.ZE_TP) )//中英文区分
- {
- if("E".equals(columnValue))//若为英
- {
- tem = QltyCodeDef.MS_QLTY_TEM_NM_E;
- dir = QltyCodeDef.MS_QLTY_DIR_NM_E;
- size = QltyCodeDef.MS_QLTY_SIZE_NM_E;
- }
- else
- {
- tem = QltyCodeDef.MS_QLTY_TEM_NM;
- dir = QltyCodeDef.MS_QLTY_DIR_NM;
- size = QltyCodeDef.MS_QLTY_SIZE_NM;
- }
- }
- ///位置方向,SQL中的MS_QLTY_DIR必须在QLTY_SEQ前面,因为QLTY_SEQ中break。
- else if( columnName.equals(QltyCodeDef.MS_QLTY_DIR) )
- {
- //若检测项目为拉力,拉力的位置方向主键用MS_QLTY_DIRTE表示
- if(key.indexOf(QltyCodeDef.YS_CD) != -1 || key.indexOf(QltyCodeDef.TE_CD) != -1
- || key.indexOf(QltyCodeDef.EL_CD) != -1 || key.indexOf(QltyCodeDef.RP_CD) != -1 || key.indexOf(QltyCodeDef.YR_CD) != -1)
- if(drl.keyExist(QltyCodeDef.MS_QLTY_DIR+QltyCodeDef.LL_CD ))//若拉力的位置方向已存在
- {
- if(srs.getString(QltyCodeDef.QLTY_CD).indexOf(QltyCodeDef.TE_CD) != -1)//取抗拉强度的方向做为试验方向
- drl.set(columnName+QltyCodeDef.LL_CD, srs.getString(QltyCodeDef.MS_QLTY_DIR), dir, bigName, QltyCodeDef.EXT_DIR_CODE);
- }
- else//若拉力的位置方向不存在
- {
- drl.put(columnName+QltyCodeDef.LL_CD, srs.getString(QltyCodeDef.MS_QLTY_DIR), dir, bigName, QltyCodeDef.EXT_DIR_CODE);
- }
- //如检测项目为冲击
- else if(key.indexOf(QltyCodeDef.IM_CD) != -1 && srs.getString(QltyCodeDef.QLTY_SEQ).equals(QltyCodeDef.QLTY_SEQ_1) )//冲击
- {
- if(!drl.keyExist(QltyCodeDef.MS_QLTY_DIR+QltyCodeDef.IM_CD))//如不存在冲击的位置方向值
- {
- drl.put(columnName+QltyCodeDef.IM_CD, srs.getString(QltyCodeDef.MS_QLTY_DIR) , dir , bigName , QltyCodeDef.EXT_DIR_CODE);
- }
- }
- // //落锤
- // else if(key.indexOf(QltyCodeDef.DW_CD) != -1 && srs.getString(QltyCodeDef.QLTY_SEQ).equals(QltyCodeDef.QLTY_SEQ_1) )//;落锤
- // {
- // if(!drl.keyExist(QltyCodeDef.MS_QLTY_DIR+QltyCodeDef.DW_CD))//如不存在落锤的位置方向值
- // {
- // drl.put(columnName+QltyCodeDef.DW_CD, srs.getString(QltyCodeDef.MS_QLTY_DIR) , dir , bigName , QltyCodeDef.EXT_DIR_CODE);
- // }
- // }
- }
- ///温度
- else if( columnName.equals(QltyCodeDef.MS_QLTY_TEM) )
- {
- //若检测项目为拉力,拉力的温度主键用MS_QLTY_TEMRP表示
- if(key.indexOf(QltyCodeDef.YS_CD) != -1 || key.indexOf(QltyCodeDef.TE_CD) != -1
- || key.indexOf(QltyCodeDef.EL_CD) != -1 || key.indexOf(QltyCodeDef.RP_CD) != -1 || key.indexOf(QltyCodeDef.YR_CD) != -1)
- if(drl.keyExist(QltyCodeDef.MS_QLTY_TEM+QltyCodeDef.LL_CD ))//若拉力的温度已存在
- {
- if(QltyCodeDef.LL_CD.indexOf(srs.getString(QltyCodeDef.QLTY_CD)) != -1)//取抗拉强度的方向做为试验方向
- drl.set(columnName+QltyCodeDef.LL_CD, srs.getString(QltyCodeDef.MS_QLTY_TEM), tem, bigName, QltyCodeDef.EXT_TEM_CODE);
- }
- else//若拉力的温度不存在
- {
- drl.put(columnName+QltyCodeDef.LL_CD, srs.getString(QltyCodeDef.MS_QLTY_TEM), tem, bigName, QltyCodeDef.EXT_TEM_CODE);
- }
- //若检测项目为冲击
- else if(key.indexOf(QltyCodeDef.IM_CD) != -1 && srs.getString(QltyCodeDef.QLTY_SEQ).equals(QltyCodeDef.QLTY_SEQ_1) )
- {
- if(!drl.keyExist(QltyCodeDef.MS_QLTY_TEM+QltyCodeDef.IM_CD))//若冲击的温度不存在
- {
- drl.put(columnName+QltyCodeDef.IM_CD, srs.getString(QltyCodeDef.MS_QLTY_TEM) , tem , bigName , QltyCodeDef.EXT_TEM_CODE);
- }
- }
- //落锤
- else if(key.indexOf(QltyCodeDef.DW_CD) != -1 && srs.getString(QltyCodeDef.QLTY_SEQ).equals(QltyCodeDef.QLTY_SEQ_1) )
- {
- if(!drl.keyExist(QltyCodeDef.MS_QLTY_TEM+QltyCodeDef.DW_CD))//若落锤的温度不存在
- {
- drl.put(columnName+QltyCodeDef.DW_CD, srs.getString(QltyCodeDef.MS_QLTY_TEM) , tem , bigName , QltyCodeDef.EXT_TEM_CODE);
- }
- }
- }
- ///试样尺寸
- else if( columnName.equals(QltyCodeDef.MS_QLTY_SIZE) )
- {
- if(key.indexOf(QltyCodeDef.IM_CD) != -1 && srs.getString(QltyCodeDef.QLTY_SEQ).equals(QltyCodeDef.QLTY_SEQ_1) )
- {
- if(!drl.keyExist(QltyCodeDef.MS_QLTY_SIZE+QltyCodeDef.IM_CD))//若冲击的温度不存在
- {
- drl.put(columnName+QltyCodeDef.IM_CD, srs.getString(QltyCodeDef.MS_QLTY_SIZE) , size , bigName , QltyCodeDef.EXT_SIZ_CODE);
- }
- }
- // else if(key.indexOf(QltyCodeDef.DW_CD) != -1 && srs.getString(QltyCodeDef.QLTY_SEQ).equals(QltyCodeDef.QLTY_SEQ_1) )
- // {
- // if(!drl.keyExist(QltyCodeDef.MS_QLTY_SIZE+QltyCodeDef.DW_CD))//若冲击的温度不存在
- // {
- // drl.put(columnName+QltyCodeDef.DW_CD, srs.getString(QltyCodeDef.MS_QLTY_SIZE) , size , bigName , QltyCodeDef.EXT_SIZ_CODE);
- // }
- // }
- }
- ///解决REWORK表中数据的问题
- else if( columnName.equals(QltyCodeDef.QLTY_SEQ) && columnValue != null)
- {
- drl.put(key+columnValue, srs.getString(QltyCodeDef.QLTY_SEQ_VAL), smallName, bigName, columnValue);
- if(columnValue.equals(QltyCodeDef.QLTY_SEQ_3))
- drl.put(key, srs.getString(QltyCodeDef.QLTY_VAL_WK) , smallName , bigName , srs.getString(QltyCodeDef.MS_EXT_CODE));
- break;//因为对该行来说只存储实绩值,没有其他任何要求,所以可以进行break
- }
- else if(flag)
- drl.put(columnName, columnValue);
- // else if(jh&& columnName.equals(QltyCodeDef.SMP_CUT_LOC))
- // {
- // temname=columnName;
- // temval=columnValue;
- // }
- if(i == columnCount)
- {
- drl.put(key, value , smallName , bigName , extCode);//不可以像成分一样放在外面,因为冲击的第一行A1被PUT后,若put在外面,会在上面break后,在外面put,主键会重复
- }
- // if(i == columnCount&&jh)
- // {
- // drl.put(key, value , smallName , bigName , extCode);//不可以像成分一样放在外面,因为冲击的第一行A1被PUT后,若put在外面,会在上面break后,在外面put,主键会重复
- // drl.put(temname, temval , "交货状态", "交货状态" , temval);
- // }
- //
- }
- }
- }
- /**
- * 补充拉力项目。针对拉力的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, "");
- }
- }
- }
- }
|