package xin.glue.ui.B.B01; import xin.glue.ui.B.B02.MutilConditionFind; import com.posdata.glue.biz.activity.PosActivity; import com.posdata.glue.biz.constants.PosBizControlConstants; import com.posdata.glue.context.PosContext; import com.posdata.glue.dao.PosGenericDao; import com.posdata.glue.dao.vo.PosParameter; import com.posdata.glue.dao.vo.PosRow; import com.posdata.glue.dao.vo.PosRowSet; /** * 查询成分现状(界面ID:UIB010020) * @author 梅贵平 * @date 2008-9-27 */ public class FindChemState extends PosActivity { public String runActivity(PosContext context) { ///ready PosGenericDao dao = this.getDao("mesdao"); MutilConditionFind mcf = new MutilConditionFind(); //用于判断查询客户、规格、厂内成分 String[] SelectedRadio = (String[])context.get("SelectedRadio"); String[] CUSTCD = (String[])context.get("CUSTCD");//客户参数号 String[] SSTLGRD = (String[])context.get("SSTLGRD");//标准钢号 String[] FSTLGRD = (String[])context.get("FSTLGRD");//厂内钢号 PosRowSet rowset = null;//存储最终查询结果 PosRowSet prs = null; //存储临时查询结果 String first = "";//“保存select的开头信息” String end = "";//保存select的结尾信息 String mid = "";//保存select的中间信息 String sql0 = "";//区分客户、厂内、规格信息 StringBuffer sql = new StringBuffer(2000); String qMark = "";//用于替代问号 PosParameter param = null; if(SelectedRadio != null) { if("1".equals(SelectedRadio[0]))//按客户参数号查询 { first = "SELECT CUST_SPEC_NO IDX,CUST_NM "; end = " FROM TBB01_CUST_INGR T,TBZ00_CUSTOMER T1 WHERE SUBSTR(T.CUST_SPEC_NO,1,6) = T1.CUST_CD AND SUBSTR(T.CUST_SPEC_NO,1,6) LIKE ? GROUP BY CUST_SPEC_NO,CUST_NM ORDER BY IDX"; sql0 = getSql1(); param = new PosParameter(); qMark = CUSTCD[0]+"%"; param.setWhereClauseParameter(0, qMark); prs= dao.find("UIB010020_05.SELECT", param); } if("2".equals(SelectedRadio[0]))//按标准号查询,模糊查询 { first = "SELECT SPEC_STL_GRD IDX , SPEC_ABBSYM , THK_MIN , THK_MAX"; end = " FROM TBB01_SPEC_INGR T WHERE T.SPEC_STL_GRD LIKE ? GROUP BY (SPEC_STL_GRD , SPEC_ABBSYM , THK_MIN , THK_MAX) ORDER BY IDX"; sql0 = getSql2(); param = new PosParameter(); qMark = SSTLGRD[0]+"%"; param.setWhereClauseParameter(0, qMark); prs= dao.find("UIB010020_04.SELECT", param); } if("3".equals(SelectedRadio[0]))//按厂内钢号查询 { first = "SELECT FAC_STL_GRD IDX, '热轧厂' PROCD"; end = " FROM TBB01_FAC_INGR T WHERE T.FAC_STL_GRD LIKE ? GROUP BY FAC_STL_GRD, '热轧厂' ORDER BY IDX"; sql0 = getSql3(); param = new PosParameter(); qMark = FSTLGRD[0]+"%"; param.setWhereClauseParameter(0, qMark); prs = dao.find("UIB010020_06.SELECT", param); } if("4".equals(SelectedRadio[0]))//按厂内钢号查询 { first = "SELECT TAFAC_STL_GRD IDX, '热轧厂' PROCD"; end = " FROM TBB01_TAFAC_INGR T WHERE T.TAFAC_STL_GRD LIKE ? GROUP BY TAFAC_STL_GRD, '热轧厂' ORDER BY IDX"; sql0 = getSql3(); param = new PosParameter(); qMark = FSTLGRD[0]+"%"; param.setWhereClauseParameter(0, qMark); prs = dao.find("UIB010020_07.SELECT", param); } }//if(SelectedRadio != null) END context.put("ChemNM", prs);//用于成分项目的动态生成 int i = 1; PosRow row = null; if(prs.count() > 0) { while(prs.hasNext()) { row = prs.next(); mid = sql0.replaceAll("[{]+[0]+[}]+", row.getAttribute("CHEM_CD").toString()); mid = mid.replaceAll("[{]+[1]+[}]+", new Integer(i++).toString()); sql = sql.append(mid); } } if(sql.length() > 0) { param = new PosParameter(); param.setWhereClauseParameter(0, qMark); rowset = dao.findByQueryStatement(first+sql+end, param); context.put("ChemResult" , rowset); } return PosBizControlConstants.SUCCESS; } public String getSql3()//厂内成分 { String sql = ", TO_NUMBER(MAX(CASE WHEN CHEM_CD = '{0}' THEN CHEM_AIM END) ) AIM{1} "+ ", TO_NUMBER(MAX(CASE WHEN CHEM_CD = '{0}' THEN CHEM_MIN END)) MIN{1} "+ ", TO_NUMBER(MAX(CASE WHEN CHEM_CD = '{0}' THEN CHEM_MAX END) ) MAX{1} , '{0}' CHEM_CD{1}"; return sql; } public String getSql1()//客户成分 { String sql = ", TO_NUMBER(MAX(CASE WHEN CHEM_CD = '{0}' THEN CHEM_MAX END) ) MAX{1} "+ ", TO_NUMBER(MAX(CASE WHEN CHEM_CD = '{0}' THEN CHEM_MIN END)) MIN{1} ,'{0}' CHEM_CD{1}"; return sql; } public String getSql2()//规格成分 { String sql = ", TO_NUMBER(MAX(CASE WHEN CHEM_CD = '{0}' THEN CHEM_MAX END)) MAX{1} "+ ", TO_NUMBER(MAX(CASE WHEN CHEM_CD = '{0}' THEN CHEM_MIN END)) MIN{1} ,'{0}' CHEM_CD{1}"; return sql; } }