Java Struts生成多个文件

时间:2017-06-19 09:11:01

标签: xml file dom struts2

我的struts应用程序有问题。我想在一些sql查询的基础上生成多个xml文件。函数正在生成每种货币的文件,正如您在代码中看到的那样,即如果我有3种货币,我应该生成3个文件。函数GenerateXSLAction正在生成xml所以在system.out我有3次“文件已保存”,但最后弹出屏幕只保存最后一个。我想下载3个文件。我是初学者是支柱。谁能帮我 ?我应该在哪里创建一个循环?

   @Namespace("/fla/taxqube")
    @Results ({
        @Result(type=StreamResult.class, value="resultFile", params={"inputName", "resultFile", "contentType", "application/ms-excel", "contentDisposition",     "attachment; filename=${fileName}"}),
        @Result (name=Action.INPUT, value="/fla/taxqube/show.jsp")

    })


public class GenerateXLSAction extends LoggedUserAwareAction{
    private static final long serialVersionUID = -4830370304838362908L;

    private String fileName;
    private String from;
    private String to;
    private ArrayList<Waluta> listaWalut;
    private ArrayList<WyciagiBankowe2> lista;

    public String getFrom() {
        return from;
    }


    public void setFrom(String from) {
        this.from = from;
    }


    public String getTo() {
        return to;
    }


    public void setTo(String to) {
        this.to = to;
    }


    @Override
    public String execute(){


        return SUCCESS;
    }


    public InputStream getResultFile() throws IOException{
        ArrayList<WyciagiBankowe> list = (ArrayList<WyciagiBankowe>)session.get(Constants.TAXQUBE_LIST);
        session.get("from");
        session.get("to");


        fileName = "JPK_WB(1).xml";
        generateXLSReport(list);


        return new FileInputStream(fileName);

    }

    public void generateXLSReport(ArrayList<WyciagiBankowe> list){
            try {

                FileOutputStream fileOut = new FileOutputStream(fileName);


                from = session.get("from").toString();
                to = session.get("to").toString();

                // current date // Data Wystawienia JPK

                DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
                Date date = new Date();

                // date from and date to - selection


                // tutaj musi byc zapytanie do asa o wb2

                listaWalut = new ArrayList<Waluta>();

                Waluta currency = null;
                Connection con = null;
                PreparedStatement st = null;
                ResultSet rs = null;


                    con = getConnectionToISeries((String)session.get(Constants.ISERIES_IP));

                    st = con.prepareStatement("SELECT " +
                    "Z1OJPK_WB2.CURRENCY, " +
                    "Z1OJPK_WB2.FROM, " +
                    "Z1OJPK_WB2.TO, " +
                    "Z1OJPK_WB2.W1OBAL, " +
                    "Z1OJPK_WB2.W1BKAC " +

                    "FROM Fpl600cf30/Z1OJPK_WB2");

                    st.executeQuery();
                    rs = st.getResultSet();

                    while(rs.next()){
                        currency = new Waluta();

                        currency.setCURRENCY(rs.getString(1));
                        currency.setFROM(rs.getString(2));
                        currency.setTO(rs.getString(3));
                        currency.setSaldoPoczatkowe(rs.getString(4));
                        currency.setKontoBankowe(rs.getString(5));

                        listaWalut.add(currency);
                    }

                    rs.close();
                    rs = null;
                    st.close();
                    st = null;


                // koniec zapytania


                    for (Waluta currency1: listaWalut) {

                // drugie zapytanie

                    lista = new ArrayList<WyciagiBankowe2>();
                    WyciagiBankowe2 rfcq;
                    con = getConnectionToISeries((String)session.get(Constants.ISERIES_IP));

                    st = con.prepareStatement("SELECT " +
                            "Z1OJPK_WB1.CURRENCY, " +
                            "Z1OJPK_WB1.W1ROWN, " +
                            "Z1OJPK_WB1.W1ODAT, " +
                            "Z1OJPK_WB1.W1PNAM, " +
                            "Z1OJPK_WB1.W1ODES, " +
                            "Z1OJPK_WB1.W1OAMO, " +
                            "Z1OJPK_WB1.W1OSAL " +

                            "FROM Fpl600cf30/Z1OJPK_WB1 "
                            + " WHERE CURRENCY = ?");

                    st.setString(1, currency.getCURRENCY());
                    st.executeQuery();
                    rs = st.getResultSet();

                    while(rs.next()){
                        rfcq = new WyciagiBankowe2();
//                      rfcq.setDate(DATE_ONLY_FORMAT.format(df.parse(rs.getObject(1).toString())));
//                      String time = rs.getObject(2).toString();
//                      if(time.length() < 6){
//                          time = "0" + time;
//                      }
                        rfcq.setCURRENCY(rs.getString(1));
                        rfcq.setNumerWiersza(rs.getString(2));
                        rfcq.setDataOperacji(rs.getString(3));
                        rfcq.setNazwaPodmiotu(rs.getString(4));
                        rfcq.setOpisOperacji(rs.getString(5));
                        rfcq.setKwotaOperacji(rs.getString(6));
                        rfcq.setSaldoOperacji(rs.getString(7));


                        lista.add(rfcq);
                    }

                    rs.close();
                    rs = null;
                    st.close();
                    st = null;


                // koniec drugiego zapytania


//              FileOutputStream fileOut = new FileOutputStream(fileName);

                        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
                        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

                        // root elements
                        Document doc = docBuilder.newDocument();
                        Element rootElement = doc.createElement("JPK");
                        doc.appendChild(rootElement);

                        // staff elements
                        Element Naglowek = doc.createElement("Naglowek");
                        rootElement.appendChild(Naglowek);


                        Element Podmiot1 = doc.createElement("Podmiot1");
                        rootElement.appendChild(Podmiot1);


                        Element NumerRachunku = doc.createElement("NumerRachunku");
                        NumerRachunku.appendChild(doc.createTextNode(currency1.getKontoBankowe().trim()));
                        rootElement.appendChild(NumerRachunku);



                            Element IdentyfikatorPodmiotu = doc.createElement("IdentyfikatorPodmiotu");
                            Podmiot1.appendChild(IdentyfikatorPodmiotu);

                            Element AdresPodmiotu = doc.createElement("AdresPodmiotu");
                            Podmiot1.appendChild(AdresPodmiotu);

                        // tu powinnien byc jeszcze lisc Numer rachunku

                        Element Salda = doc.createElement("Salda");
                        rootElement.appendChild(Salda);


                        // shorten way
                        // staff.setAttribute("id", "1");

                        // firstname elements
                        Element KodFormularza = doc.createElement("KodFormularza");
                        KodFormularza.appendChild(doc.createTextNode("JPK_WB"));
                        Naglowek.appendChild(KodFormularza);


                        Attr attr2 = doc.createAttribute("kodSystemowy");
                        attr2.setValue("JPK_WB(1)");
                        KodFormularza.setAttributeNode(attr2);      

                        Attr attr3 = doc.createAttribute("wersjaSchemy");
                        attr3.setValue("1-0");
                        KodFormularza.setAttributeNode(attr3);



                        // lastname elements
                        Element WariantFormularza = doc.createElement("WariantFormularza");
                        WariantFormularza.appendChild(doc.createTextNode("1"));
                        Naglowek.appendChild(WariantFormularza);

                        // nickname elements
                        Element CelZlozenia = doc.createElement("CelZlozenia");
                        CelZlozenia.appendChild(doc.createTextNode("1"));
                        Naglowek.appendChild(CelZlozenia);

                        // salary elements
                        Element DataWytworzeniaJPK = doc.createElement("DataWytworzeniaJPK");
                        DataWytworzeniaJPK.appendChild(doc.createTextNode(dateFormat.format(date)));
                        Naglowek.appendChild(DataWytworzeniaJPK);


                        Element DataOd = doc.createElement("DataOd");
                        DataOd.appendChild(doc.createTextNode(from.substring(0, 4) + "-" + from.substring(4, 6)  + "-" +  from.substring(6, 8)));
                        Naglowek.appendChild(DataOd);

                        // lastname elements
                        Element DataDo = doc.createElement("DataDo");
                        DataDo.appendChild(doc.createTextNode(to.substring(0, 4) + "-" + to.substring(4, 6)  + "-" +  to.substring(6, 8)));
                        Naglowek.appendChild(DataDo);

                        // nickname elements
                        Element DomyslnyKodWaluty = doc.createElement("DomyslnyKodWaluty");
                        DomyslnyKodWaluty.appendChild(doc.createTextNode(currency1.getCURRENCY().trim()));
                        Naglowek.appendChild(DomyslnyKodWaluty);

                        // salary elements
                        Element KodUrzedu = doc.createElement("KodUrzedu");
                        KodUrzedu.appendChild(doc.createTextNode("1234"));
                        Naglowek.appendChild(KodUrzedu);

                        // tutaj liscie noda identyfikator podmiotu

                        // salary elements
                        Element NIP = doc.createElement("NIP");
                        NIP.appendChild(doc.createTextNode("8992393856"));
                        IdentyfikatorPodmiotu.appendChild(NIP);


                        Element PelnaNazwa = doc.createElement("PelnaNazwa");
                        PelnaNazwa.appendChild(doc.createTextNode("International Deco Logistics Sp. z o.o."));
                        IdentyfikatorPodmiotu.appendChild(PelnaNazwa);

                        // lastname elements
                        Element REGON = doc.createElement("REGON");
                        REGON.appendChild(doc.createTextNode("932290611"));
                        IdentyfikatorPodmiotu.appendChild(REGON);


                        // tutaj liscie noda adres podmiotu

                        // nickname elements
                        Element KodKraju = doc.createElement("KodKraju");
                        KodKraju.appendChild(doc.createTextNode("PL"));
                        AdresPodmiotu.appendChild(KodKraju);

                        // salary elements
                        Element Wojewodztwo = doc.createElement("Wojewodztwo");
                        Wojewodztwo.appendChild(doc.createTextNode("dolnoslaskie"));
                        AdresPodmiotu.appendChild(Wojewodztwo);

                        Element Powiat = doc.createElement("Powiat");
                        Powiat.appendChild(doc.createTextNode("strzelinski"));
                        AdresPodmiotu.appendChild(Powiat);


                        Element Gmina = doc.createElement("Gmina");
                        Gmina.appendChild(doc.createTextNode("Borow"));
                        AdresPodmiotu.appendChild(Gmina);

                        // lastname elements
                        Element Ulica = doc.createElement("Ulica");
                        Ulica.appendChild(doc.createTextNode("Nowowiejska"));
                        AdresPodmiotu.appendChild(Ulica);

                        // nickname elements
                        Element NrDomu = doc.createElement("NrDomu");
                        NrDomu.appendChild(doc.createTextNode("1"));
                        AdresPodmiotu.appendChild(NrDomu);

                        // salary elements
                        Element Miejscowosc = doc.createElement("Miejscowosc");
                        Miejscowosc.appendChild(doc.createTextNode("Borek Strzelinski"));
                        AdresPodmiotu.appendChild(Miejscowosc);

                        Element KodPocztowy = doc.createElement("KodPocztowy");
                        KodPocztowy.appendChild(doc.createTextNode("57-160"));
                        AdresPodmiotu.appendChild(KodPocztowy);


                        Element Poczta = doc.createElement("Poczta");
                        Poczta.appendChild(doc.createTextNode("Borow"));
                        AdresPodmiotu.appendChild(Poczta);

                        // lastname elements
                        Element SaldoPoczatkowe = doc.createElement("SaldoPoczatkowe");
                        SaldoPoczatkowe.appendChild(doc.createTextNode(currency1.getSaldoPoczatkowe().trim()));
                        Salda.appendChild(SaldoPoczatkowe);

                        // nickname elements
                        Element SaldoKoncowe = doc.createElement("SaldoKoncowe");
                        SaldoKoncowe.appendChild(doc.createTextNode("400.00"));
                        Salda.appendChild(SaldoKoncowe);

                        // end salda

                        // tutaj juz zaczynaja sie wiersze
                        // iteracja po kontrahentach wyciagi bankowe

            for (WyciagiBankowe2 rfcq2 : lista) {


                Element WyciagWiersz = doc.createElement("WyciagWiersz");
                rootElement.appendChild(WyciagWiersz);

                Attr attr = doc.createAttribute("typ");
                attr.setValue("G");
                WyciagWiersz.setAttributeNode(attr);

                        Element NumerWiersza = doc.createElement("NumerWiersza");
                        NumerWiersza.appendChild(doc.createTextNode("1"));
                        WyciagWiersz.appendChild(NumerWiersza);

                        Element DataOperacji = doc.createElement("DataOperacji");
                        DataOperacji.appendChild(doc.createTextNode(rfcq2.getDataOperacji().trim()));
                        WyciagWiersz.appendChild(DataOperacji);

                        Element NazwaPodmiotu = doc.createElement("NazwaPodmiotu");
                        NazwaPodmiotu.appendChild(doc.createTextNode(rfcq2.getNazwaPodmiotu().trim()));
                        WyciagWiersz.appendChild(NazwaPodmiotu);

                        Element OpisOperacji = doc.createElement("OpisOperacji");
                        OpisOperacji.appendChild(doc.createTextNode(rfcq2.getOpisOperacji().trim()));
                        WyciagWiersz.appendChild(OpisOperacji);

                        Element KwotaOperacji = doc.createElement("KwotaOperacji");
                        KwotaOperacji.appendChild(doc.createTextNode(rfcq2.getKwotaOperacji().trim()));
                        WyciagWiersz.appendChild(KwotaOperacji);

                        Element SaldoOperacji = doc.createElement("SaldoOperacji");
                        SaldoOperacji.appendChild(doc.createTextNode(rfcq2.getSaldoOperacji().trim()));
                        WyciagWiersz.appendChild(SaldoOperacji);

            }           

                        // end wierszy

                        Element WyciagCtrl =  doc.createElement("WyciagCtrl");
                        rootElement.appendChild(WyciagCtrl);


                        Element LiczbaWierszy = doc.createElement("LiczbaWierszy");
                        LiczbaWierszy.appendChild(doc.createTextNode("22"));
                        WyciagCtrl.appendChild(LiczbaWierszy);

                        Element SumaObciazen = doc.createElement("SumaObciazen");
                        SumaObciazen.appendChild(doc.createTextNode("300.00"));
                        WyciagCtrl.appendChild(SumaObciazen);

                        Element SumaUznan = doc.createElement("SumaUznan");
                        SumaUznan.appendChild(doc.createTextNode("500.00"));
                        WyciagCtrl.appendChild(SumaUznan);


                        // write the content into xml file
                        TransformerFactory transformerFactory = TransformerFactory.newInstance();
                        Transformer transformer =transformerFactory.newTransformer();

//                      StringWriter writer = new StringWriter();
//                      

//                      Source xmlSource = new DOMSource(doc);
                        DOMSource source = new DOMSource(doc);

                        // pelna biblioteka jest podana dlatego ze jest konfikt obiektow StreamResult 
                        javax.xml.transform.stream.StreamResult result = new javax.xml.transform.stream.StreamResult(fileOut);
                        transformer.transform(source, result);

                        System.out.println(dateFormat.format(date) + " File saved!");

        }


                      } catch (ParserConfigurationException pce) {
                        pce.printStackTrace();
                      } catch (TransformerException tfe) {
                        tfe.printStackTrace();
                      } catch (FileNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

            }

0 个答案:

没有答案