diff --git a/Backend/import_jsons/jobs.json b/Backend/import_jsons/jobs.json index e840c6f..3387af4 100644 --- a/Backend/import_jsons/jobs.json +++ b/Backend/import_jsons/jobs.json @@ -13,19 +13,19 @@ "status": "PENDING", "priority": "URGENT", "duration": 3600, - "idMachineType": 1 + "idMachineType": 2 }, { "title": "Taglio Legno di Precisione", - "description": "Operazione di taglio su larga scala utilizzando la Sega a Nastro Industriale per legno massiccio.", + "description": "Operazione di taglio su larga scala utilizzando la Pialla Automatica per legno massiccio.", "status": "PENDING", "priority": "HIGH", "duration": 5400, - "idMachineType": 1 + "idMachineType": 6 }, { "title": "Stampaggio Parti in Plastica", - "description": "Produzione di componenti in plastica mediante Macchina per Stampaggio a Iniezione ad alta efficienza.", + "description": "Produzione di componenti in plastica mediante Pressa Idraulica ad alta efficienza.", "status": "PENDING", "priority": "URGENT", "duration": 3600, @@ -37,7 +37,7 @@ "status": "PENDING", "priority": "LOW", "duration": 3600, - "idMachineType": 5 + "idMachineType": 3 }, { "title": "Formatura Materiali Metallici", @@ -45,38 +45,118 @@ "status": "PENDING", "priority": "MEDIUM", "duration": 5400, + "idMachineType": 4 + }, + { + "title": "Taglio Laser Acciaio", + "description": "Taglio preciso di acciaio in fogli spessi utilizzando la Segatrice Laser.", + "status": "PENDING", + "priority": "HIGH", + "duration": 4800, + "idMachineType": 5 + }, + { + "title": "Rifinitura Superfici Legno", + "description": "Rifinitura delle superfici di legno con la Pialla Automatica per garantire una finitura liscia.", + "status": "PENDING", + "priority": "MEDIUM", + "duration": 3000, "idMachineType": 6 }, { - "title": "Taglio Laser di Alta Precisione", - "description": "Taglio di materiali metallici e non mediante la Segatrice Laser ad alta precisione.", + "title": "Produzione Componenti Leggeri", + "description": "Lavorazione di leghe leggere con il Tornio Meccanico per componenti automobilistici.", "status": "PENDING", "priority": "HIGH", - "duration": 7200, - "idMachineType": 7 + "duration": 4200, + "idMachineType": 1 + }, + { + "title": "Assemblaggio Preciso CNC", + "description": "Assemblaggio di componenti complessi utilizzando la Fresatrice CNC per garantire precisione.", + "status": "PENDING", + "priority": "URGENT", + "duration": 3900, + "idMachineType": 2 }, { - "title": "Rifinitura Superfici in Legno", - "description": "Livellamento e rifinitura delle superfici in legno utilizzando la Pialla Automatica.", + "title": "Taglio Legno su Richiesta", + "description": "Operazioni di taglio personalizzate su legno con la Pialla Automatica per progetti specifici.", + "status": "PENDING", + "priority": "LOW", + "duration": 2500, + "idMachineType": 6 + }, + { + "title": "Stampaggio Serie Limitata", + "description": "Produzione di piccole serie di componenti in plastica con la Pressa Idraulica.", "status": "PENDING", "priority": "MEDIUM", - "duration": 3600, - "idMachineType": 8 + "duration": 4000, + "idMachineType": 4 }, { - "title": "Compattazione Materiali Granulari", - "description": "Compattazione uniforme di materiali granulari e sabbie con il Compattatore Vibroassiale.", + "title": "Foratura Multipla", + "description": "Esecuzione di forature multiple in materiali diversi utilizzando il Trapano a Colonna.", + "status": "PENDING", + "priority": "HIGH", + "duration": 3300, + "idMachineType": 3 + }, + { + "title": "Taglio Laser Materiali Non Metallici", + "description": "Taglio di materiali non metallici con la Segatrice Laser per applicazioni artistiche.", "status": "PENDING", "priority": "LOW", - "duration": 7200, - "idMachineType": 9 + "duration": 2700, + "idMachineType": 5 }, { - "title": "Miscelazione Materiali in Polvere", - "description": "Mescolamento omogeneo di materiali in polvere o liquidi in grandi quantità con il Miscelatore Industriale.", + "title": "Rifinitura Avanzata Legno", + "description": "Rifinitura avanzata delle superfici in legno con la Pialla Automatica per qualità superiore.", "status": "PENDING", "priority": "HIGH", - "duration": 5400, - "idMachineType": 10 + "duration": 3100, + "idMachineType": 6 + }, + { + "title": "Produzione Acciaio Preciso", + "description": "Lavorazione precisa dell'acciaio con il Tornio Meccanico per componenti di alta qualità.", + "status": "PENDING", + "priority": "URGENT", + "duration": 4500, + "idMachineType": 1 + }, + { + "title": "Assemblaggio Componenti CNC", + "description": "Assemblaggio di componenti complessi prodotti con la Fresatrice CNC.", + "status": "PENDING", + "priority": "MEDIUM", + "duration": 3800, + "idMachineType": 2 + }, + { + "title": "Stampaggio Grande Formato", + "description": "Stampaggio di grandi componenti in plastica con la Pressa Idraulica ad alta capacità.", + "status": "PENDING", + "priority": "HIGH", + "duration": 5000, + "idMachineType": 4 + }, + { + "title": "Foratura Profonda", + "description": "Esecuzione di forature profonde in materiali duri con il Trapano a Colonna.", + "status": "PENDING", + "priority": "MEDIUM", + "duration": 3600, + "idMachineType": 3 + }, + { + "title": "Taglio Laser Precisione Fine", + "description": "Taglio di precisione fine di materiali metallici con la Segatrice Laser.", + "status": "PENDING", + "priority": "URGENT", + "duration": 2900, + "idMachineType": 5 } ] diff --git a/Backend/import_jsons/machine_types.json b/Backend/import_jsons/machine_types.json index 504ab9d..d31da6b 100644 --- a/Backend/import_jsons/machine_types.json +++ b/Backend/import_jsons/machine_types.json @@ -22,21 +22,5 @@ { "name": "Pialla Automatica", "description": "Macchina utilizzata per livellare e rifinire superfici di legno, garantendo uniformità e finitura di alta qualità." - }, - { - "name": "Sega a Nastro Industriale", - "description": "Sega robusta utilizzata per tagliare grandi quantità di legno, metallo o plastica con precisione e velocità." - }, - { - "name": "Macchina per Stampaggio a Iniezione", - "description": "Macchina utilizzata per produrre parti in plastica tramite il processo di stampaggio a iniezione ad alta efficienza." - }, - { - "name": "Compattatore Vibroassiale", - "description": "Macchina utilizzata per compattare materiali granulari e sabbie in modo uniforme e consistente." - }, - { - "name": "Miscelatore Industriale", - "description": "Macchina utilizzata per mescolare materiali in polvere o liquidi in grandi quantità, garantendo un'omogeneità perfetta." } ] diff --git a/Backend/import_jsons/machines.json b/Backend/import_jsons/machines.json index ed12a7b..5c107e5 100644 --- a/Backend/import_jsons/machines.json +++ b/Backend/import_jsons/machines.json @@ -5,6 +5,12 @@ "status": "AVAILABLE", "typeId": 1 }, + { + "name": "Tornio Meccanico TM-401", + "description": "Torno meccanico con maggiore capacità di carico per componenti di grandi dimensioni.", + "status": "AVAILABLE", + "typeId": 1 + }, { "name": "Fresatrice CNC FC-500", "description": "Fresatrice a controllo numerico computerizzato con 5 assi per la produzione di componenti complessi.", @@ -12,51 +18,57 @@ "typeId": 2 }, { - "name": "Sega a Nastro Industriale SN-600", - "description": "Sega a nastro robusta con lama ad alta resistenza per tagli rapidi e precisi su legno e metallo.", + "name": "Fresatrice CNC FC-501", + "description": "Fresatrice CNC con capacità di lavorazione multi-materiale e interfaccia avanzata.", "status": "AVAILABLE", - "typeId": 3 - }, - { - "name": "Stampatrice a Iniezione SI-700", - "description": "Macchina per stampaggio a iniezione ad alta efficienza con capacità di 700 tonnellate.", - "status": "MAINTENANCE", - "typeId": 4 + "typeId": 2 }, { "name": "Trapano a Colonna TC-800", "description": "Trapano a colonna avanzato con sistema di misurazione automatica per forature precise in materiali duri.", "status": "AVAILABLE", - "typeId": 5 + "typeId": 3 + }, + { + "name": "Trapano a Colonna TC-801", + "description": "Trapano a colonna con maggiore precisione e capacità di profondità per applicazioni industriali.", + "status": "AVAILABLE", + "typeId": 3 }, { "name": "Pressa Idraulica PI-900", "description": "Pressa idraulica ad alta capacità per operazioni di stampaggio e piegatura di lamiere metalliche.", "status": "BUSY", - "typeId": 6 + "typeId": 4 + }, + { + "name": "Pressa Idraulica PI-901", + "description": "Pressa idraulica con controllo digitale per maggiore precisione nelle operazioni di lavorazione.", + "status": "AVAILABLE", + "typeId": 4 }, { "name": "Segatrice Laser SL-1000", "description": "Segatrice laser ad alta precisione con interfaccia utente intuitiva e controllo remoto.", "status": "AVAILABLE", - "typeId": 7 + "typeId": 5 + }, + { + "name": "Segatrice Laser SL-1001", + "description": "Segatrice laser con capacità di taglio aumentata per materiali di maggior spessore.", + "status": "AVAILABLE", + "typeId": 5 }, { "name": "Pialla Automatica PA-1100", "description": "Pialla automatica per la rifinitura di superfici in legno, garantendo uniformità e qualità elevata.", "status": "BUSY", - "typeId": 8 - }, - { - "name": "Compattatore Vibroassiale CV-1200", - "description": "Compattatore vibroassiale con controllo elettronico per ottimizzare la densità dei materiali compattati.", - "status": "AVAILABLE", - "typeId": 9 + "typeId": 6 }, { - "name": "Miscelatore Industriale MI-1300", - "description": "Miscelatore industriale ad alta capacità per la miscelazione omogenea di materiali liquidi e solidi.", + "name": "Pialla Automatica PA-1101", + "description": "Pialla automatica con capacità di lavorazione multi-dimensionale per progetti complessi.", "status": "AVAILABLE", - "typeId": 10 + "typeId": 6 } ] diff --git a/Backend/src/main/java/unical/demacs/rdm/controller/JsonController.java b/Backend/src/main/java/unical/demacs/rdm/controller/JsonController.java index 180e308..1615ab3 100644 --- a/Backend/src/main/java/unical/demacs/rdm/controller/JsonController.java +++ b/Backend/src/main/java/unical/demacs/rdm/controller/JsonController.java @@ -73,11 +73,13 @@ public ResponseEntity> exportJob() { @PostMapping(value = "/importMachineType", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity> importMachineType(@RequestBody List machineTypes) { try { - machineTypes.forEach(machineTypeService::createMachineType); - Map response = Map.of("message", "MachineTypes imported successfully."); + for (MachineTypeDTO machineTypeDTO : machineTypes) { + machineTypeService.createMachineType(machineTypeDTO); + } + Map response = Map.of("message", "MachineTypes importati con successo."); return ResponseEntity.ok(response); } catch (Exception e) { - return ResponseEntity.status(400).body(Map.of("message", "Error importing MachineTypes: " + e.getMessage())); + return ResponseEntity.status(400).body(Map.of("message", "Errore durante l'importazione dei MachineTypes: " + e.getMessage())); } } diff --git a/Backend/src/main/java/unical/demacs/rdm/persistence/repository/MachineTypeRepository.java b/Backend/src/main/java/unical/demacs/rdm/persistence/repository/MachineTypeRepository.java index e3a4e4d..da04fa3 100644 --- a/Backend/src/main/java/unical/demacs/rdm/persistence/repository/MachineTypeRepository.java +++ b/Backend/src/main/java/unical/demacs/rdm/persistence/repository/MachineTypeRepository.java @@ -8,6 +8,5 @@ @Repository public interface MachineTypeRepository extends JpaRepository { - Optional findByName(String name); Optional findById(Long id); } diff --git a/Backend/src/main/java/unical/demacs/rdm/persistence/service/implementation/MachineTypeServiceImpl.java b/Backend/src/main/java/unical/demacs/rdm/persistence/service/implementation/MachineTypeServiceImpl.java index 030e282..69e94ae 100644 --- a/Backend/src/main/java/unical/demacs/rdm/persistence/service/implementation/MachineTypeServiceImpl.java +++ b/Backend/src/main/java/unical/demacs/rdm/persistence/service/implementation/MachineTypeServiceImpl.java @@ -25,38 +25,35 @@ public class MachineTypeServiceImpl implements IMachineTypeService { @Override public MachineType createMachineType(MachineTypeDTO machineTypeDTO) { - logger.info("++++++START REQUEST++++++"); - logger.info("Creating machine type with name: {}", machineTypeDTO.getName()); - try { - if (!rateLimiter.tryAcquire()) { - logger.warn("Rate limit exceeded for createMachineType"); - throw new MachineException("Rate limit exceeded for createMachineType"); - } - Optional existingMachineType = machineTypeRepository.findByName(machineTypeDTO.getName()); - if (existingMachineType.isPresent()) { - logger.error("Duplicate machine type name: {}", machineTypeDTO.getName()); - throw new MachineException("Esiste già un Machine Type con questo nome."); + MachineType machineType = new MachineType(); + machineType.setName(machineTypeDTO.getName()); + machineType.setDescription(machineTypeDTO.getDescription()); + + if (machineTypeDTO.getId() != null) { + Optional existing = machineTypeRepository.findById(machineTypeDTO.getId()); + if (existing.isPresent()) { + return machineTypeRepository.save(machineType); + } else { + machineType.setId(machineTypeDTO.getId()); + return machineTypeRepository.save(machineType); } - MachineType machineType = MachineType.buildMachineType() - .name(machineTypeDTO.getName()) - .description(machineTypeDTO.getDescription()) - .build(); - machineTypeRepository.save(machineType); - logger.info("Machine type with name {} created successfully", machineTypeDTO.getName()); - return machineType; - } catch (MachineException e) { - throw e; - } catch (DataIntegrityViolationException e) { - logger.error("Data integrity violation while creating machine type: {}", machineTypeDTO.getName(), e); - throw new MachineException("Esiste già un Machine Type con questo nome."); - } catch (Exception e) { - logger.error("Error creating machine type with name: {}", machineTypeDTO.getName(), e); - throw new MachineException("Errore nella creazione del Machine Type."); - } finally { - logger.info("++++++END REQUEST++++++"); + } else { + return machineTypeRepository.save(machineType); } } + @Override + public MachineType updateMachineType(Long id, MachineTypeDTO machineTypeDTO) { + Optional existingOpt = machineTypeRepository.findById(id); + if (existingOpt.isEmpty()) { + throw new IllegalArgumentException("MachineType con ID " + id + " non trovato."); + } + MachineType existing = existingOpt.get(); + existing.setName(machineTypeDTO.getName()); + existing.setDescription(machineTypeDTO.getDescription()); + return machineTypeRepository.save(existing); + } + @Override public Optional getMachineTypeById(Long id) { logger.info("++++++START REQUEST++++++"); @@ -128,31 +125,4 @@ public void deleteMachineType(Long id) { } } - @Override - public MachineType updateMachineType(Long id, MachineTypeDTO machineTypeDTO) { - logger.info("++++++START REQUEST++++++"); - logger.info("Updating machine type with id: " + id); - try { - if (!rateLimiter.tryAcquire()) { - logger.warn("Rate limit exceeded for updateMachineType"); - throw new MachineException("Rate limit exceeded for updateMachineType"); - } - Optional machineType = machineTypeRepository.findById(id); - if(machineType.isEmpty()){ - logger.error("Machine type with id {} not found", id); - throw new MachineException("Machine type not found"); - } - machineType.get().setName(machineTypeDTO.getName()); - machineType.get().setDescription(machineTypeDTO.getDescription()); - machineTypeRepository.save(machineType.get()); - logger.info("Machine type with id {} updated successfully", id); - return machineType.get(); - } catch (Exception e) { - logger.error("Error updating machine type with id: {}", id, e); - throw new MachineException("Error updating machine type"); - } - finally { - logger.info("++++++END REQUEST++++++"); - } - } } diff --git a/Backend/src/main/java/unical/demacs/rdm/persistence/service/interfaces/IMachineTypeService.java b/Backend/src/main/java/unical/demacs/rdm/persistence/service/interfaces/IMachineTypeService.java index 86696a1..41ea4ef 100644 --- a/Backend/src/main/java/unical/demacs/rdm/persistence/service/interfaces/IMachineTypeService.java +++ b/Backend/src/main/java/unical/demacs/rdm/persistence/service/interfaces/IMachineTypeService.java @@ -8,8 +8,8 @@ public interface IMachineTypeService { MachineType createMachineType(MachineTypeDTO machineTypeDTO); + MachineType updateMachineType(Long id, MachineTypeDTO machineTypeDTO); Optional getMachineTypeById(Long id); List getAllMachineTypes(); void deleteMachineType(Long id); - MachineType updateMachineType(Long id, MachineTypeDTO machineTypeDTO); }