From 7917fa4748948a82259265c0a7904f20db9eb3cd Mon Sep 17 00:00:00 2001 From: frank <frank@ximple.com.tw> Date: Wed, 24 Aug 2016 10:52:36 +0800 Subject: [PATCH] 增加轉檔程式 --- xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DMMSNddrtUpdateJob.java | 205 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 202 insertions(+), 3 deletions(-) diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DMMSNddrtUpdateJob.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DMMSNddrtUpdateJob.java index 54ccb15..f205455 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DMMSNddrtUpdateJob.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DMMSNddrtUpdateJob.java @@ -35,7 +35,13 @@ import org.quartz.JobDetail; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; import java.io.*; import java.math.BigDecimal; import java.net.MalformedURLException; @@ -530,6 +536,134 @@ } + private void doJob2(Connection postsql, String[] info) throws SQLException + { + String ufid=""; + String county=""; + String district=""; + String neighbor=""; + String department=""; + String c0=""; + String c1=""; + String roadname=""; + HashMap<ArrayList<String>, String> ufidMap = new HashMap<ArrayList<String>, String>(); + + List<String> arraySQLValsForTyphoon= new ArrayList<String>(); + boolean bActiveCheckDBSchedule=true; + + + if(!jobOnLine(postsql, "nddcanton")&& bActiveCheckDBSchedule) + { + return; + } + ufidMap = hashmapUfid(postsql); + + String[] strTableList=new String []{ "1","2" }; + String strOnlineTableNum=jobOnlineStatus(postsql, "typhoon_version"); + // String strNextTableNum=""; + String tableCurr=strTableList[strTableList.length-1]; + String tableNext="";//strTableList[strTableList.length-1] ; + + for (int i=0;i<strTableList.length;i++){ + tableNext=tableCurr; + tableCurr=strTableList[i]; + if(strTableList[i].equals( strOnlineTableNum)) + { + break; + } + + } + String strStep0SQLNDD_rt="truncate table ndd.typhoon_road"+tableNext; + String[] xmls= getNDDStrings(info, "NDSExt.xml") ; + logger.info(String.format("total %d file(s)",xmls.length)); + + for(int iRow=0;iRow<xmls.length;iRow++) + { + arraySQLValsForTyphoon.clear(); + try { + Document doc =loadXMLFromString(xmls[0]); + NodeList vndsdbsList = doc.getElementsByTagName("VNDSDBS"); + // System.out.println("itemNode id : " + itemNode); + if (vndsdbsList != null && vndsdbsList .getLength() > 0) { + Node itemNode = vndsdbsList.item(0); + org.w3c.dom.Element elementNode = (org.w3c.dom.Element) itemNode; + org.w3c.dom.NodeList itemList = elementNode.getElementsByTagName("ITEM"); + if (itemList != null && itemList .getLength() > 0) { + for (int itemIdx = 0; itemIdx < itemList.getLength(); itemIdx++) { + Node nNode = itemList.item(itemIdx); + if (nNode.getNodeType() == Node.ELEMENT_NODE) { + org.w3c.dom.Element elementItem = (org.w3c.dom.Element) nNode; + if (elementItem.getElementsByTagName("VNCDR_CITYNAME").item(0)!= null){ + county = elementItem.getElementsByTagName("VNCDR_CITYNAME").item(0).getTextContent(); + district = elementItem.getElementsByTagName("VNCDR_TOWNNAME").item(0).getTextContent(); + neighbor = elementItem.getElementsByTagName("VNCDR_VILNAME").item(0).getTextContent(); + ufid=transformufid(ufidMap,county,district,neighbor); + department = elementItem.getElementsByTagName("VNCDR_DEP_ID").item(0).getTextContent(); + org.w3c.dom.NodeList item2List = elementItem.getElementsByTagName("VNCDR_SUBITEMS"); + + if (item2List != null && item2List.getLength() > 0) { + Node item2Node = item2List.item(0); + org.w3c.dom.Element element2Node = (org.w3c.dom.Element) item2Node; + org.w3c.dom.NodeList item3List = element2Node.getElementsByTagName("ITEM"); + if (item3List != null && item3List.getLength() > 0) { + for (int vncdrIdx = 0; vncdrIdx < item3List.getLength(); vncdrIdx++) { + Node n2Node = item3List.item(vncdrIdx); + if (n2Node.getNodeType() == n2Node.ELEMENT_NODE) { + org.w3c.dom.Element element2Item = (org.w3c.dom.Element) n2Node; + c0 = element2Item.getElementsByTagName("VNCDR_SUB_STOP_CUST_NO").item(0).getTextContent(); + c1 = element2Item.getElementsByTagName("VNCDR_SUB_ALL_STOP").item(0).getTextContent(); + roadname = element2Item.getElementsByTagName("VNCDR_SUB_ROADNAME").item(0).getTextContent(); + arraySQLValsForTyphoon.add(String.format("%s,'%s','%s','%s','%s'", ufid, department, c0, c1, roadname)); + } + } + } + } + } + } + + } + } + + + } + } catch (Exception e) { + e.printStackTrace(); + } + //!! + String strStep1SQLNDD_rt="insert into ndd.typhoon_road"+tableNext+ " (ufid,dept_id,c0,c1,roadname)"; + + sqlExec(postsql,strStep0SQLNDD_rt,new String[]{}); + + for(int j=0;j<arraySQLValsForTyphoon.size();j++) + { + sqlExec(postsql,strStep1SQLNDD_rt+ + String.format(" values(%s )",arraySQLValsForTyphoon.get(j)),new String[]{} + ); + } + + String strStep2SQLNDD_rt="CREATE OR REPLACE VIEW ndd.v_typhoon_road AS " + + " SELECT ufid,dept_id,roadname,c0,c1, id "+ + " FROM ndd.typhoon_road" + tableNext; + + //switch + if(!tableNext.equals(tableCurr)) + sqlExec(postsql, + strStep2SQLNDD_rt, + new String[]{}); + logger.info(String.format("next xml")); + + } + logger.info(String.format("done")); + + } + + public static Document loadXMLFromString(String xml) throws Exception + { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + InputSource is = new InputSource(new StringReader(xml)); + return builder.parse(is); + } public void execute(JobExecutionContext context) throws JobExecutionException { // Every job has its own job detail @@ -567,7 +701,15 @@ String targetSchemaName, targetThemeTable; try { //logger.info("-- step:clearOutputDatabase --"); +/* doJob(targetDataStore.getConnection(Transaction.AUTO_COMMIT),new String[]{ + pgProperties.get("ftpurl"), + pgProperties.get("ftpuid"), + pgProperties.get("ftppwd"), + pgProperties.get("ftpdir") + }); +*/ + doJob2 (targetDataStore.getConnection(Transaction.AUTO_COMMIT),new String[]{ pgProperties.get("ftpurl"), pgProperties.get("ftpuid"), pgProperties.get("ftppwd"), @@ -632,14 +774,43 @@ // if(tmp.get(i).getGroupName().equals("featureimg")) // { url=info[3]+dirname+"/"; - - + if(filename.contains("NDSExt" )) + { + filename=dirname+filename; + } byte[] bytes= getFile(ftp,uid,pwd,url,filename); return bytes; // return new FileTransfer(filename, "application/octet-stream",bytes); // } // } // return null; + } + + private byte[] getNDDDash2(String[] info, String dirname, String filename) { + String url="";//info[3]; + String ftp=info[0]; + String uid=info[1]; + String pwd=info[2]; + + dirname= dirname.replace("[.]","_"); //防hack + filename= filename.replace("[/]","_"); //防hack + // List<MapItemValue> tmp= dmmsSite.getFtpList(site); + String[] temp=dirname.split("/"); + dirname= temp[temp.length-1]; + + // for(int i=0;i<tmp.size();i++) + // { + // if(tmp.get(i).getGroupName().equals("featureimg")) + // { + url=info[3]+dirname+"/"; + filename=dirname+filename; + + byte[] bytes= getFile(ftp,uid,pwd,url,filename); + return bytes; + // return new FileTransfer(filename, "application/octet-stream",bytes); + // } + // } + // return null; } private String[] getFileList(String urlString,String ftpUser,String ftpPwd,String filePath, String filter){ @@ -764,7 +935,7 @@ // String stie=getUserDept(); // String[] list=dmmsFtpClient.getNDDList(stie) ; - String[] list =getNDDList(info) ; + String[] list =getNDDList(info); List<String> lstXML= new ArrayList<String>(); for(int i=0;i<list.length;i++) @@ -783,6 +954,14 @@ return new String[]{}; } + public String transformufid(HashMap<ArrayList<String>, String> ufidMap,String ncityname, String ntownname, String name) + { + ArrayList<String> list = new ArrayList<String>(); + list.add(ncityname); + list.add(ntownname); + list.add(name); + return ufidMap.get(list); + } private static Map<String, String> ditTyphoon = new HashMap<String, String>(); @@ -857,4 +1036,24 @@ if(listDict.size()==0)return ""; // not exist ->dont work return listDict.get(0)[0]; } + + public HashMap hashmapUfid(Connection postsql) throws SQLException + { + HashMap<ArrayList<String>, String> map = new HashMap<ArrayList<String>, String>(); + + List<String[]> listDict; + String strSQLSelectSchedule=String.format( "select ncityname,ntownname,name,ufid from public.neighbor"); + + listDict= sqlExecQuery(postsql,strSQLSelectSchedule,new String[]{}); + for(Iterator<String[]> i = listDict.iterator(); i.hasNext(); ) { + String[] item = i.next(); + // String value[] = {item[0],item[1],item[2]}; + ArrayList<String> list = new ArrayList<String>(); + list.add(item[0]); + list.add(item[1]); + list.add(item[2]); + map.put(list,item[3]); + } + return map; + } } -- Gitblit v0.0.0-SNAPSHOT