Obsah
Postup nastavení importu Excel souboru z CAD (Tos Svitavy)
Nastavení přepínačů
Administrace > Nástroje administrátora > Objekty systému > Řízené objekty
Vyhledat KonstrKusImport
Záložka Přepínače
Vyhledat přepínač KonstrKusImportSchvalTransformuj
Záložka Firemní
Založit
Vybrat z poptextu Schválení a transformace
Uložit
Podobně přepínač varianta
Vyhledat přepínač KonstrKusImportVarianta
Záložka Firemní
Založit
Zapsat TosSy
Uložit
Nastavení parametrů příchozích souborů
Založit agendu AXA
Administrace > MSK - Webové služby > Agendy komunikace
Agenda - TOSCAD
Cílový systém - OR-SYSTEM
Odkaz na úlohu - 58 CSTANDKUS_IMPORT (předpokládá se, že bude řešena logika třídou cz.orcz.mskws.CStandKusImport)
Založit parametr příchozích souborů Fmp
Administrace > MSK - Webové služby > Příchozí/odchozí soubory > Parametry příchozích/odchozích souborů
Vstup/Výstup - Import s podporou Groovy do OR-SYSTEM Open (vybrat z poptextu - hodnotu „w“
Adresář pro uložení - libovolný např import-g - založit na serveru relativně k datovému adresáři, tedy např. /dlf1/oropen/cvicna/import-g
Adresář protokolu - libovolný např import-g/protokoly - založit podobně jako předchozí bod na serveru
Založit agendu souborů Fma
Administrace > MSK - Webové služby > Příchozí/odchozí soubory > Agendy souborů
Vstupní/Výstupní - vybrat parametr z předchozího kroku - Import s podporou Groovy maker do OR-SYSTEM Open
Priorita - okamžitá
Jméno adresáře příchozího -URL cesta /dlf1/importopen/cvicna/windchill (Obvykle se jedná o adresář z NAS serveru připojený k aplikačnímu serveru)
Jméno souboru příchozího: *.xlsx
Agenda TOSCAD
Zařazení úlohy importu do menu
Nalistovat menu, kde budeme chtít úlohu zařadit
např.
TPV > Správa konstrukčních kusovníků
Pravý klik na menu > Úprava menu pro všechny.
Program - cz.orcz.gui.Orfert
Parametry - method:posliZpravuObjektu object:cz.orcz.mskws.ws.AutoImport parameter:TOSCAD
Nastavení konverzní tabulky
Pomocí konverzní tabulky lze naplnit atributy entit CPolozka(ts) a CPolozkaRozmer(tsr).
Lze nastavit způsob jaký se konvertují atributy konstrukčního kusovníku do výše uvedených entit.
A to z hlavičky CKonstrKusHlav, tak řádků CKonstrKusKomp
Konverzní tabulku je možné založit ručně.
A to pro tyto entity:
- TosSyTsKonstrKusHlavImp
plnění Ts hlavičky kusovníku
tsZn = nazev
tsCh = chK (rozlišení na 25, 31 se určuje v Groovy)
- TosSyTsrKonstrKusHlavImp
plnění Tsr hlavičky kusovníku - TosSyTsKonstrKusKompImp
plnění Ts komponenty kusovníku
tsZn = nazev
tsCh = chK (rozlišení na 25, 31 se určuje v Groovy)
- TosSyTsrKonstrKusKompImp
plnění Tsr komponenty kusovníku - TosSyStKonstrKusKompImp
plnění St komponenty kusovníku
stSklad = atrAn09 konkrétně se plní hodnotou 300 v případě, když jena vstupu mezeravalue==""?"300":value
V řádcích se tedy nastavuje plnění konstant nebo plnění z Importovaných podkladů přímo nebo s konverzí groovy skriptem (viz nápověda k položkám Wkr)
Existuje také varianta naimportování předpřipraveného souboru.
Administrace > MSK - Webové služby > Konverzní tabulka
Další nabídka > Import záznamů.
Vybrat export_wkh_TosSy.json
Popřípadě založit ručně:
Založit hlavičku konverzní tabulky Wkh
Zapsat postupně 5 entit výše uvedených.
Příklad pro vyplnění názvu tsZn z atributu nazev konstrukčního kusovníku.
Název tabulky v OR vybrat z poptextu - Ts
Název atributu v OR např. tsZn
Název atributu v konstrukčním kusovníku - nazev
Příklad pro vyplnění konstanty „J“ do tsStJn
Název tabulky v OR vybrat z poptextu - Ts
Název atributu v OR např. tsStJn
Název atributu v konstrukčním kusovníku - ponechat prázdný
Značka K jako konstanta
Konstanta J
Obecně je potřeba prověřit plnění měrné jednotky, a doplnit konstanty dle analýzy vstupního excel souboru.
Vytvoření Groovy makra
Makro provádí konverzi XLSX souboru do Importovaných podkladů konstrukčního kusovníku.
Založit makro
Administrace > Nástroje administrátora > Správa vlastních zdrojů aplikace > Groovy makra
Druh: Skupinové
Kód TOSCAD (dle agendy)
Název TOSCAD (dle agendy)
Třída definice cz.ortex.common.o0.mailTemplateTypes.GroovyType
Předmět Import kusovníku TosCad
záložka „Programování“
(Groovy makrem je možné modifikovat funkčnost importu)
Další nastavení
V plánovači úloh nakonfigurovat login, který spouští úlohy
V konfiguraci cest nastavit proměnnou protokoly
Testování importu TOSCAD
Nakopírovat cvičné xlsx soubory do adresáře dle Fmp.
Např. /dlf1/importopen/cvicna/toscad/6018980B.xlsx
V naplánovaných úlohách přes pravý klik provést spuštění.
Výsledek se zobrazí v záložce historie, popřípadě vyběhne chyba na popředí.
Princip importu spočívá v procházení adresáře importu. Pro každý XLSX soubor se vygeneruje úloha do fronty Axz.
Makro TOSCAD (varianta prvního vzorku do 1.11.2023)
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.annotation.JsonProperty; import cz.orcz.mskws.ws.KonstrKusImport; import cz.orcz.orfmodel.Axz; import cz.orcz.orfmodel.CKonstrKusHlavWsImp; import cz.orcz.orfmodel.CKonstrKusKompImp; import cz.orcz.orfmodel.CPolozka; import cz.ortex.impldao.o0.admin.O0logDaoImpl; import cz.ortex.impllogic.o0.task.O0taskDemonUtil; import cz.ortex.impllogic.o0.task.OxSpustDavTaskRun; import cz.ortex.implutil.o0.O0CfgSrv; import cz.ortex.implutil.o0.O0CfgSrvPar; import cz.ortex.util.o0.O0Session; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintStream; import java.math.BigDecimal; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.swing.JOptionPane; import javax.xml.bind.*; import javax.xml.bind.annotation.*; import javax.xml.transform.stream.StreamSource; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.Criteria; import org.hibernate.criterion.Restrictions; import static cz.ortex.implutil.o0.HibernateUtil.getSessionFactory; protected static void autoImport(String urlCesta, O0Session o0Session,Axz axz) { CKonstrKusKompImp lastKusKompImp; int lastLevel; // Create a Random object Random random = new Random(); // Generate a random integer between 0 (inclusive) and an upper bound (exclusive) int randomInt = random.nextInt(100); // Change 100 to your desired upper bound if (axz == null){ axz = new Axz(); axz.setAxzId=randomInt; } try { //Adresář protokolu obecný String adrProtokol = O0CfgSrv.get(O0CfgSrvPar.ADR_PROTOKOLY); // Zadejte cestu k souboru, kam chcete přesměrovat výstup String soubor = adrProtokol + "axz_"+axz.axzId+".log"; axz.axzHlaseni = soubor; // Vytvořte nový výstupní proud pro soubor FileOutputStream fileOutputStream = new FileOutputStream(soubor); // Vytvořte PrintStream pro nový výstupní proud PrintStream printStream = new PrintStream(fileOutputStream); // Uložte stávající System.out do záložního PrintStreamu PrintStream systemOutBackup = System.out; // Nastavte nový PrintStream jako System.out System.setOut(printStream); // Nyní vše, co je vypsáno na System.out, bude přesměrováno do souboru List<CKonstrKusHlavWsImp> kusHlavImpList = new ArrayList<>(); try { // Otevřete Excel soubor FileInputStream excelFile = new FileInputStream(new File(urlCesta)); Workbook workbook = new XSSFWorkbook(excelFile); int poziceG = 0; // Získání prvního listu Sheet sheet = workbook.getSheetAt(0); // Iterujte přes řádky a sloupce a převeďte je na JSON Iterator<Row> rowIterator = sheet.iterator(); ObjectMapper objectMapper = new ObjectMapper(); // Vytvoření seznamu CKonstrKusHlavWsImp objektů // Mapa pro uchování předchozích úrovní Map<Integer, CKonstrKusHlavWsImp> previousLevels = new HashMap<>(); String autor = o0Session.getLoginName(); Session s2 = getSessionFactory().getCurrentSession();//udelam novou //prvni radek nadpis Row row = rowIterator.next(); while (rowIterator.hasNext()) { row = rowIterator.next(); // Převeďte řádek na objekt (můžete vytvořit vlastní třídu pro reprezentaci dat) // Příklad: MyClass data = new MyClass(row.getCell(0).toString(), row.getCell(1).getNumericCellValue()); //CKonstrKusHlavWsImp data = new CKonstrKusHlavWsImp(); // Root data = new Root(row.getCell(0).toString(), row.getCell(1).getNumericCellValue()); if (row.getCell(0) == null) { break; } Root data = new Root( row.getCell(0).toString(), row.getCell(1).toString(), row.getCell(2).toString(), "E"+row.getCell(3).toString(), String.valueOf(row.getCell(4).getNumericCellValue()), row.getCell(5).toString(), row.getCell(6).toString(), row.getCell(7).toString(), row.getCell(8).toString(), row.getCell(9).toString(), row.getCell(10).toString(), row.getCell(11).toString(), row.getCell(12).toString(), row.getCell(13).toString(), row.getCell(14).toString(), row.getCell(15).toString(), row.getCell(16).toString(), row.getCell(17).toString(), row.getCell(18).toString(), row.getCell(19).toString(), row.getCell(20).toString(), row.getCell(21).toString() ); // Převeďte objekt na JSON String json = objectMapper.writeValueAsString(data); //System.out.println(json); int lastDotIndex = data.pozice.lastIndexOf("."); String atrAn08; if (lastDotIndex != -1) { atrAn08 = data.pozice.substring(lastDotIndex + 1); } else { atrAn08 = data.pozice; } int level = data.pozice.replaceAll("\\.","").length(); int level2 = data.pozice.length(); //System.out.println("level2 je " + level2 + " " + data.nazev); if ("0.0".equals(data.pozice)) { level = 0; //JOptionPane.showMessageDialog(null, "level 0"); CKonstrKusHlavWsImp kusHlavImp = new CKonstrKusHlavWsImp(); kusHlavImp.setIdentPol(data.cislovykresu); kusHlavImp.setIdCSyst(String.valueOf(level)); kusHlavImp.setVykres(data.cislovykresu); kusHlavImp.setNazev(data.nazev); kusHlavImp.setStatus((short) 200); kusHlavImp.setEdat(new Date()); kusHlavImp.setEname(autor); kusHlavImp.setRevize("00"); CPolozka cPolozka=s2.get(CPolozka.class,kusHlavImp.getIdentPol()); if (cPolozka != null){ kusHlavImp.setTypPol(cPolozka.getBs()); } else { kusHlavImp.setTypPol((short) 0); } kusHlavImpList.add(kusHlavImp); // Přidání CKonstrKusHlavWsImp do mapy předchozích úrovní previousLevels.put(level, kusHlavImp); } else { CKonstrKusHlavWsImp parentHlavImp = previousLevels.get(level - 1); if (parentHlavImp == null) { CKonstrKusHlavWsImp kusHlavImp = new CKonstrKusHlavWsImp(); kusHlavImp.setIdentPol(lastKusKompImp.getIdentPol()); kusHlavImp.setVykres(lastKusKompImp.getIdentPol()); kusHlavImp.setNazev(lastKusKompImp.getNazev()); kusHlavImp.setAtrAn08("10"); previousLevels.put(level - 1, kusHlavImp); kusHlavImp.setIdCSyst(String.valueOf(level - 1)); kusHlavImpList.add(kusHlavImp); kusHlavImp.setStatus((short) 200); kusHlavImp.setEdat(new Date()); kusHlavImp.setEname(autor); kusHlavImp.setRevize("00"); CPolozka cPolozka=s2.get(CPolozka.class,kusHlavImp.getIdentPol()); if (cPolozka != null){ kusHlavImp.setTypPol(cPolozka.getBs()); } else { kusHlavImp.setTypPol((short) 0); } parentHlavImp = previousLevels.get(level - 1); } if (parentHlavImp != null) { CKonstrKusKompImp kusKompImp = new CKonstrKusKompImp(); kusKompImp.setIdentPol(data.cislovykresu); kusKompImp.setIdCSyst(String.valueOf(level)); kusKompImp.setMnoz(new BigDecimal(data.kusy)); kusKompImp.setcKonstrKusHlavImp(parentHlavImp); kusKompImp.setVykres(data.cislovykresu); kusKompImp.setNazev(data.nazev); //System.out.println("an08 "+data.pozice + " " + atrAn08); parentHlavImp.getcKonstrKusKompImps().add(kusKompImp); if (lastLevel > level){ previousLevels.remove(level); } //kusKompImp.setAtrAn08(atrAn08); //poziceG=poziceG+10; kusKompImp.setAtrAn08(parentHlavImp.getAtrAn08()); try { parentHlavImp.setAtrAn08(String.valueOf(Integer.valueOf(parentHlavImp.getAtrAn08())+10)); } catch (Exception e) { parentHlavImp.setAtrAn08("20"); kusKompImp.setAtrAn08("10"); } System.out.println(kusKompImp.identPol + " "+kusKompImp.atrAn08); kusKompImp.setRevize("00"); CPolozka cPolozka=s2.get(CPolozka.class,kusKompImp.getIdentPol()); if (cPolozka != null){ kusKompImp.setTypPol(cPolozka.getBs()); } else { kusKompImp.setTypPol((short) 0); } kusKompImp.setEdat(new Date()); kusKompImp.setEname(autor); lastKusKompImp=kusKompImp; lastLevel=level; // dogeneruji material dle bez1 if (data.material > " "){ Criteria c = s2.createCriteria(CPolozka.class); c.add(Restrictions.eq("bez1", data.material)); c.setMaxResults(1); CPolozka material = (CPolozka) c.uniqueResult(); if (material == null){ material = new CPolozka(); material.setIna("nenalezeno "+data.material); material.setZn(" "); } CKonstrKusHlavWsImp kusHlavImpM = new CKonstrKusHlavWsImp(); kusHlavImpM.setIdentPol(kusKompImp.getIdentPol()); kusHlavImpM.setVykres(kusKompImp.getVykres()); kusHlavImpM.setNazev(kusKompImp.getNazev()); kusHlavImpM.setIdCSyst(kusKompImp.getIdCSyst()); kusHlavImpM.setStatus((short) 200); kusHlavImpM.setEdat(new Date()); kusHlavImpM.setEname(autor); kusHlavImpM.setRevize("00"); //plati stale pro cPolozka if (cPolozka != null){ kusHlavImpM.setTypPol(cPolozka.getBs()); } else { kusHlavImpM.setTypPol((short) 0); } CKonstrKusKompImp kusKompImpM = new CKonstrKusKompImp(); kusKompImpM.setIdentPol(material.getIna()); kusKompImpM.setIdCSyst(String.valueOf(level + 1)); kusKompImpM.setMnoz(new BigDecimal(data.hmotnostKg)); kusKompImpM.setTypPol((short)1); kusKompImpM.setcKonstrKusHlavImp(kusHlavImpM); kusKompImpM.setVykres(material.getIna()); kusKompImpM.setNazev(material.getZn()); kusHlavImpM.getcKonstrKusKompImps().add(kusKompImpM); kusHlavImpList.add(kusHlavImpM); } } else { } } } // Uzavřete Excel soubor excelFile.close(); } catch (IOException e) { e.printStackTrace(); } // Výpis naimportovaných dat for (CKonstrKusHlavWsImp kusHlavImp : kusHlavImpList) { System.out.println("CKonstrKusHlavWsImp: identPol=" + kusHlavImp.getIdentPol() + "level "+kusHlavImp.getIdCSyst()); for (CKonstrKusKompImp kusKompImp : kusHlavImp.getcKonstrKusKompImps()) { System.out.println(" CKonstrKusKompImp: identPol=" + kusKompImp.getIdentPol() + ", mnozstvi=" + kusKompImp.getMnoz()); } //JOptionPane.showMessageDialog(null, "CKonstrKusHlavWsImp: identPol=" + kusHlavImp.getIdentPol() + "level "+kusHlavImp.getIdCSyst()); Session s = getSessionFactory().openSession();//udelam novou Transaction tx = s.getTransaction(); tx.begin(); s.save(kusHlavImp); s.update(axz); tx.commit(); KonstrKusImport i = new KonstrKusImport(o0Session); i.transformuj(kusHlavImp); } // Obnovte původní System.out System.setOut(systemOutBackup); // Zavřete souborový výstup printStream.close(); String obsahLogu = new String(Files.readAllBytes(Paths.get(axz.axzHlaseni))); O0logDaoImpl o0logDaoImpl; o0logDaoImpl = new O0logDaoImpl(); o0logDaoImpl.setOrsoftSession(o0Session); Character v='V'; Character g='G'; try { o0logDaoImpl.zapisLog("WINDCHILL axz:"+axz.axzId, obsahLogu, null, null, null, null, null, null, null, v,g); } catch (Exception e){ //JOptionPane.showMessageDialog(null, e.getMessage()); System.out.println(" vyjimka " + e.getMessage()); } try { if (O0taskDemonUtil.getOrsoftSessionRun() != null) { OxSpustDavTaskRun.zapisVysledek(obsahLogu); } } catch (Exception e){ //JOptionPane.showMessageDialog(null, e.getMessage()); System.out.println(" vyjimka " + e.getMessage()); } } catch (JAXBException e) { e.printStackTrace(); } } public class Root { @JsonProperty("Pozice") public String pozice; @JsonProperty("Kusy") public String kusy; @JsonProperty("Nazev") public String nazev; @JsonProperty("Cislovykresu") public String cislovykresu; @JsonProperty("Hmotnost(kg)") public String hmotnostKg; @JsonProperty("Vyroba") public String vyroba; @JsonProperty("Polotovar") public String polotovar; @JsonProperty("Material") public String material; @JsonProperty("Delkapolotovaru(mm)") public String delkapolotovaruMm; @JsonProperty("Vazbanaoperaci") public String vazbanaoperaci; @JsonProperty("Cenakalkul./nakup") public String cenakalkuNakup; @JsonProperty("Ch.k.") public String chK; @JsonProperty("MJ") public String mJ; @JsonProperty("Druhmat.prokalkulaci") public String druhmatProkalkulaci; @JsonProperty("Ucet") public String ucet; @JsonProperty("Dozakazky") public String dozakazky; @JsonProperty("Kalkulace") public String kalkulace; @JsonProperty("Propocetpotreby") public String propocetpotreby; @JsonProperty("Odpiszeskladu") public String odpiszeskladu; @JsonProperty("Sklad") public String sklad; @JsonProperty("Autor") public String autor; @JsonProperty("Datumporizeni") public String datumporizeni; public Root(String pozice, String kusy, String nazev, String cislovykresu, String hmotnostKg, String vyroba, String polotovar, String material, String delkapolotovaruMm, String vazbanaoperaci, String cenakalkuNakup, String chK, String mJ, String druhmatProkalkulaci, String ucet, String dozakazky, String kalkulace, String propocetpotreby, String odpiszeskladu, String sklad, String autor, String datumporizeni) { this.pozice = pozice; this.kusy = kusy; this.nazev = nazev; this.cislovykresu = cislovykresu; this.hmotnostKg = hmotnostKg; this.vyroba = vyroba; this.polotovar = polotovar; this.material = material; this.delkapolotovaruMm = delkapolotovaruMm; this.vazbanaoperaci = vazbanaoperaci; this.cenakalkuNakup = cenakalkuNakup; this.chK = chK; this.mJ = mJ; this.druhmatProkalkulaci = druhmatProkalkulaci; this.ucet = ucet; this.dozakazky = dozakazky; this.kalkulace = kalkulace; this.propocetpotreby = propocetpotreby; this.odpiszeskladu = odpiszeskladu; this.sklad = sklad; this.autor = autor; this.datumporizeni = datumporizeni; } }
Makro TOSCAD (varianta 4.12.2023)
/* komentář z Excelu Sloupce B - K = vždy importovat hodnotu, která je uvedena. Sloupec A Pozice = Struktura kusovníku (při zakládání pozic číslovat po 10-ti, tj. 10, 20, 30, …) Sloupec F Výroba - v = vyráběná položka, mezera = nakupovaní položka Sloupec G Polotovar do TS003 tj. TS-BEZ1 atrAn01 Sloupec H Materiál do TS004 tj. TS-BEZ2 atrAn02 Sloupec I Délka polotovaru - pouze informativní údaj = nyní neimportovat Sloupec J Tloušťka plechu do TS072 tj. TS-VOL tsVol atrAn03 Sloupec K Výpal do TS154 tj. TS-E-BA tsEBa atrAn04 Sloupce L -> = pokud je prázdné, vždy při importu doplnit uvedenou hodnotu níže. Sloupec L Pokud je prázdné, tak při zakládání nové položky do TS = Vyráběná položka = 25, Nakupovaná položka = 31, Do budoucna bude vyplněno přímo v EXCELu. TS007 tj. TS-CH atrAn05 Sloupec M Pokud je prázdné, tak při zakládání nové položky do TS = Měrná jednotka vždy KS TS-ME atrAn06 Sloupec N Vždy J Sloupec O Vždy J Sloupec P Vždy J Sloupec Q Pokud je prázdné, tak Vyráběná položka = vždy J, Nakupovaná položka = vždy a Sloupec R Pokud je prázdné, tak Vyráběná položka = vždy 310, Nakupoaná 220 Sloupec S Aktuální datum Sloupec T Přihlášený uživatel Sloupec U Aktuální datum */ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.annotation.JsonProperty; import cz.orcz.mskws.ws.KonstrKusImport; import cz.orcz.orfmodel.Axz; import cz.orcz.orfmodel.CKonstrKusHlavWsImp; import cz.orcz.orfmodel.CKonstrKusKompImp; import cz.orcz.orfmodel.CPolozka; import cz.ortex.impldao.o0.admin.O0logDaoImpl; import cz.ortex.impllogic.o0.task.O0taskDemonUtil; import cz.ortex.impllogic.o0.task.OxSpustDavTaskRun; import cz.ortex.implutil.o0.O0CfgSrv; import cz.ortex.implutil.o0.O0CfgSrvPar; import cz.ortex.util.o0.O0Session; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintStream; import java.math.BigDecimal; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.swing.JOptionPane; import javax.xml.bind.*; import javax.xml.bind.annotation.*; import javax.xml.transform.stream.StreamSource; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.ss.usermodel.DataFormatter; import org.hibernate.Session; import org.hibernate.Transaction; import java.util.Locale; import org.hibernate.Criteria; import org.hibernate.criterion.Restrictions; import static cz.ortex.implutil.o0.HibernateUtil.getSessionFactory; protected static void autoImport(String urlCesta, O0Session o0Session,Axz axz) { CKonstrKusKompImp lastKusKompImp; int lastLevel; // Create a Random object Random random = new Random(); // Generate a random integer between 0 (inclusive) and an upper bound (exclusive) int randomInt = random.nextInt(100); // Change 100 to your desired upper bound if (axz == null){ axz = new Axz(); axz.setAxzId=randomInt; } try { //Adresář protokolu obecný String adrProtokol = O0CfgSrv.get(O0CfgSrvPar.ADR_PROTOKOLY); // Zadejte cestu k souboru, kam chcete přesměrovat výstup String soubor = adrProtokol + "axz_"+axz.axzId+".log"; axz.axzHlaseni = soubor; // Vytvořte nový výstupní proud pro soubor FileOutputStream fileOutputStream = new FileOutputStream(soubor); // Vytvořte PrintStream pro nový výstupní proud PrintStream printStream = new PrintStream(fileOutputStream); // Uložte stávající System.out do záložního PrintStreamu PrintStream systemOutBackup = System.out; // Nastavte nový PrintStream jako System.out System.setOut(printStream); // Nyní vše, co je vypsáno na System.out, bude přesměrováno do souboru // Zadejte cestu k souboru, kam chcete přesměrovat chybový výstup String souborErr = adrProtokol + "axz_"+axz.axzId+".err"; // Vytvořte nový výstupní proud pro soubor FileOutputStream fileOutputStreamErr = new FileOutputStream(souborErr); // Vytvořte PrintStream pro nový výstupní proud PrintStream printStreamErr = new PrintStream(fileOutputStreamErr); // Uložte stávající System.err do záložního PrintStreamu PrintStream systemErrBackup = System.err; // Nastavte nový PrintStream jako System.err System.setErr(printStreamErr); // Nyní vše, co je vypsáno na System.err, bude přesměrováno do souboru List<CKonstrKusHlavWsImp> kusHlavImpList = new ArrayList<>(); try { // Otevřete Excel soubor FileInputStream excelFile = new FileInputStream(new File(urlCesta)); Workbook workbook = new XSSFWorkbook(excelFile); int poziceG = 0; // Získání prvního listu Sheet sheet = workbook.getSheetAt(0); // Iterujte přes řádky a sloupce a převeďte je na JSON Iterator<Row> rowIterator = sheet.iterator(); ObjectMapper objectMapper = new ObjectMapper(); // Vytvoření seznamu CKonstrKusHlavWsImp objektů // Mapa pro uchování předchozích úrovní Map<Integer, CKonstrKusHlavWsImp> previousLevels = new HashMap<>(); String autor = o0Session.getLoginName(); Session s2 = getSessionFactory().getCurrentSession();//udelam novou //prvni radek nadpis Row row = rowIterator.next(); while (rowIterator.hasNext()) { row = rowIterator.next(); // Převeďte řádek na objekt (můžete vytvořit vlastní třídu pro reprezentaci dat) // Příklad: MyClass data = new MyClass(row.getCell(0).toString(), row.getCell(1).getNumericCellValue()); //CKonstrKusHlavWsImp data = new CKonstrKusHlavWsImp(); // Root data = new Root(row.getCell(0).toString(), row.getCell(1).getNumericCellValue()); if (row.getCell(0) == null) { break; } DataFormatter dataFormatter = new DataFormatter(Locale.US); Root data = new Root( dataFormatter.formatCellValue(row.getCell(0)), dataFormatter.formatCellValue(row.getCell(1)), dataFormatter.formatCellValue(row.getCell(2)), dataFormatter.formatCellValue(row.getCell(3)), dataFormatter.formatCellValue(row.getCell(4)), dataFormatter.formatCellValue(row.getCell(5)), dataFormatter.formatCellValue(row.getCell(6)), dataFormatter.formatCellValue(row.getCell(7)), dataFormatter.formatCellValue(row.getCell(8)), dataFormatter.formatCellValue(row.getCell(9)), dataFormatter.formatCellValue(row.getCell(10)), dataFormatter.formatCellValue(row.getCell(11)), dataFormatter.formatCellValue(row.getCell(12)), dataFormatter.formatCellValue(row.getCell(13)), dataFormatter.formatCellValue(row.getCell(14)), dataFormatter.formatCellValue(row.getCell(15)), dataFormatter.formatCellValue(row.getCell(16)), dataFormatter.formatCellValue(row.getCell(17)), dataFormatter.formatCellValue(row.getCell(18)), dataFormatter.formatCellValue(row.getCell(19)), dataFormatter.formatCellValue(row.getCell(20)) ); // Převeďte objekt na JSON String json = objectMapper.writeValueAsString(data); //System.out.println(json); int lastDotIndex = data.pozice.lastIndexOf("."); data.chK = data.chK.equals("") ? (data.vyroba.equals("v") ? "25" : "31") : data.chK; data.sklad = data.sklad.equals("") ? (data.vyroba.equals("v") ? "310" : "220") : data.sklad; data.odpiszeskladu = data.odpiszeskladu.equals("") ? (data.vyroba.equals("v") ? "J" : "a") : data.odpiszeskladu; String atrAn08; if (lastDotIndex != -1) { atrAn08 = data.pozice.substring(lastDotIndex + 1); } else { atrAn08 = data.pozice; } //int level = data.pozice.replaceAll("\\.","").length(); //System.out.println("data.pozice je "+data.pozice); int level = countDots(data.pozice)+1; if ("0.0".equals(data.pozice) ||"0".equals(data.pozice)) { level = 0; //JOptionPane.showMessageDialog(null, "level 0"); CKonstrKusHlavWsImp kusHlavImp = new CKonstrKusHlavWsImp(); kusHlavImp.setIdentPol(data.cislovykresu); kusHlavImp.setIdCSyst(data.cislovykresu); kusHlavImp.setVykres(data.cislovykresu); kusHlavImp.setNazev(data.nazev); kusHlavImp.setStatus((short) 200); kusHlavImp.setEdat(new Date()); kusHlavImp.setEname(autor); kusHlavImp.setRevize("00"); CPolozka cPolozka=s2.get(CPolozka.class,kusHlavImp.getIdentPol()); if (cPolozka != null){ kusHlavImp.setTypPol(cPolozka.getBs()); } else { if (data.vyroba.equals("v")){ kusHlavImp.setTypPol((short) 0); } else { kusHlavImp.setTypPol((short) 1); } } kusHlavImpList.add(kusHlavImp); // Přidání CKonstrKusHlavWsImp do mapy předchozích úrovní previousLevels.put(level, kusHlavImp); } else { CKonstrKusHlavWsImp parentHlavImp = previousLevels.get(level - 1); if (parentHlavImp == null) { CKonstrKusHlavWsImp kusHlavImp = new CKonstrKusHlavWsImp(); kusHlavImp.setIdentPol(lastKusKompImp.getIdentPol()); kusHlavImp.setVykres(lastKusKompImp.getIdentPol()); kusHlavImp.setNazev(lastKusKompImp.getNazev()); previousLevels.put(level - 1, kusHlavImp); kusHlavImp.setIdCSyst(lastKusKompImp.getIdentPol()); kusHlavImpList.add(kusHlavImp); kusHlavImp.setStatus((short) 200); kusHlavImp.setEdat(new Date()); kusHlavImp.setEname(autor); kusHlavImp.setRevize("00"); kusHlavImp.setTypPol(lastKusKompImp.getTypPol()); /* CPolozka cPolozka=s2.get(CPolozka.class,kusHlavImp.getIdentPol()); if (cPolozka != null){ kusHlavImp.setTypPol(cPolozka.getBs()); } else { if (data.vyroba.equals("v")){ kusHlavImp.setTypPol((short) 0); } else { kusHlavImp.setTypPol((short) 1); } } */ parentHlavImp = previousLevels.get(level - 1); } if (parentHlavImp != null) { CKonstrKusKompImp kusKompImp = new CKonstrKusKompImp(); kusKompImp.setIdentPol(data.cislovykresu); kusKompImp.setIdCSyst(data.cislovykresu); //System.out.println("data.kusy "+data.kusy); kusKompImp.setMnoz(new BigDecimal(data.kusy)); kusKompImp.setcKonstrKusHlavImp(parentHlavImp); kusKompImp.setVykres(data.cislovykresu); kusKompImp.setNazev(data.nazev); kusKompImp.setAtrAn09(data.sklad); kusKompImp.setAtrAn01(data.polotovar); kusKompImp.setAtrAn02(data.material); kusKompImp.setAtrAn03(data.tloustkaplechu); kusKompImp.setAtrAn04(data.vypal); kusKompImp.setAtrAn05(data.chK); kusKompImp.setAtrAn06(data.mJ); kusKompImp.setAtrAn07(data.odpiszeskladu); kusKompImp.setAtrAn08(atrAn08); //System.out.println("an08 "+data.pozice + " " + atrAn08); parentHlavImp.getcKonstrKusKompImps().add(kusKompImp); if (lastLevel > level){ previousLevels.remove(level); } //kusKompImp.setAtrAn08(atrAn08); //poziceG=poziceG+10; kusKompImp.setRevize("00"); CPolozka cPolozka=s2.get(CPolozka.class,kusKompImp.getIdentPol()); if (cPolozka != null){ kusKompImp.setTypPol(cPolozka.getBs()); } else { if (data.vyroba.equals("v")){ kusKompImp.setTypPol((short) 0); } else { kusKompImp.setTypPol((short) 1); } } kusKompImp.setEdat(new Date()); kusKompImp.setEname(autor); lastKusKompImp=kusKompImp; lastLevel=level; } else { } } } // Uzavřete Excel soubor excelFile.close(); } catch (IOException e) { e.printStackTrace(); } // Výpis naimportovaných dat for (CKonstrKusHlavWsImp kusHlavImp : kusHlavImpList) { //System.out.println("CKonstrKusHlavWsImp: identPol=" + kusHlavImp.getIdentPol() + "level "+kusHlavImp.getIdCSyst()); for (CKonstrKusKompImp kusKompImp : kusHlavImp.getcKonstrKusKompImps()) { //System.out.println(" CKonstrKusKompImp: identPol=" + kusKompImp.getIdentPol() + ", mnozstvi=" + kusKompImp.getMnoz()); } //JOptionPane.showMessageDialog(null, "CKonstrKusHlavWsImp: identPol=" + kusHlavImp.getIdentPol() + "level "+kusHlavImp.getIdCSyst()); Session s = getSessionFactory().openSession();//udelam novou Transaction tx = s.getTransaction(); tx.begin(); s.save(kusHlavImp); s.update(axz); tx.commit(); KonstrKusImport i = new KonstrKusImport(o0Session); i.transformuj(kusHlavImp); } System.out.println(" Import proběhl v pořádku"); // Obnovte původní System.out System.setOut(systemOutBackup); System.setErr(systemErrBackup); // Zavřete souborový výstup printStream.close(); String obsahLogu = new String(Files.readAllBytes(Paths.get(axz.axzHlaseni))); String obsahErr = new String(Files.readAllBytes(Paths.get(souborErr))); O0logDaoImpl o0logDaoImpl; o0logDaoImpl = new O0logDaoImpl(); o0logDaoImpl.setOrsoftSession(o0Session); Character v='V'; Character g='G'; try { o0logDaoImpl.zapisLog("TOSCAD axz:"+axz.axzId, obsahLogu, null, null, null, null, null, null, null, v,g); } catch (Exception e){ //JOptionPane.showMessageDialog(null, e.getMessage()); System.out.println(" vyjimka " + e.getMessage()); } try { if (O0taskDemonUtil.getOrsoftSessionRun() != null) { OxSpustDavTaskRun.zapisVysledek(obsahLogu); } } catch (Exception e){ //JOptionPane.showMessageDialog(null, e.getMessage()); System.out.println(" vyjimka " + e.getMessage()); } } catch (JAXBException e) { e.printStackTrace(); } } static int countDots(String str) { int count = 0; for (int i = 0; i < str.length(); i++) { if (str.charAt(i) == '.' && str.charAt(i + 1) != '0') { count++; } } return count; } public class Root { @JsonProperty("Pozice") public String pozice; @JsonProperty("Kusy") public String kusy; @JsonProperty("Nazev") public String nazev; @JsonProperty("Cislovykresu") public String cislovykresu; @JsonProperty("Hmotnost(kg)") public String hmotnostKg; @JsonProperty("Vyroba") public String vyroba; @JsonProperty("Polotovar") public String polotovar; @JsonProperty("Material") public String material; @JsonProperty("Delkapolotovaru(mm)") public String delkapolotovaruMm; @JsonProperty("Tloustkaplechu") public String tloustkaplechu; @JsonProperty("Vypal") public String vypal; @JsonProperty("Ch.k.") public String chK; @JsonProperty("MJ") public String mJ; @JsonProperty("Do zakázky") public String doZakazky; @JsonProperty("Kalkulace") public String kalkulace; // Chyběl název datového typu @JsonProperty("Propocetpotreby") public String propocetpotreby; @JsonProperty("Odpiszeskladu") public String odpiszeskladu; @JsonProperty("Sklad. Místo") public String sklad; @JsonProperty("Datumporizeni") public String datumporizeni; @JsonProperty("Autor") public String autor; @JsonProperty("Platnostod") public String platnostOd; // Konstruktor public Root(String pozice, String kusy, String nazev, String cislovykresu, String hmotnostKg, String vyroba, String polotovar, String material, String delkapolotovaruMm, String tloustkaplechu, String vypal, String chK, String mJ, String doZakazky, String kalkulace, String propocetpotreby, String odpiszeskladu, String sklad, String datumporizeni, String autor, String platnostOd) { this.pozice = pozice; this.kusy = kusy; this.nazev = nazev; this.cislovykresu = cislovykresu; this.hmotnostKg = hmotnostKg; this.vyroba = vyroba; this.polotovar = polotovar; this.material = material; this.delkapolotovaruMm = delkapolotovaruMm; this.tloustkaplechu = tloustkaplechu; this.vypal = vypal; this.chK = chK; this.mJ = mJ; this.doZakazky = doZakazky; this.kalkulace = kalkulace; this.propocetpotreby = propocetpotreby; this.odpiszeskladu = odpiszeskladu; this.sklad = sklad; this.datumporizeni = datumporizeni; this.autor = autor; this.platnostOd = platnostOd; } }
Doplnění nových polí
Pokud budou do Excelu doplněna nová pole, je potřeba provést příslušné úpravy v Groovy makru a konverzní tabulce.
Příklad nová políčko bude mít název newfield
- V Groovy doplnit do objektu Root a do konstruktoru.
- V objektech kusHlavImp a kusKompImp existuje sada volně použitelných atribuů atrAn01 - atrAn20. (kromě atrAn08, který je použit pro předání pozice)
- V makru všude kde se nachází setIdentPol(data.cislovykresu) doplníme nový řádek setAtrAn01(data.newfield);
- V konverzní tabulce Wkh/Wkr doplnit nový řádek kde se atribut atrAnXX přesune do Tsr či Ts
Řešení prefixu
Prefix E u vyráběných dílů je řešen aktuálně v Groovy makru a neni tedy řešeno dotazem.
Je to řádek v části data =
"E"+row.getCell(3).toString(),\\