Add calculation services and update packaging model
Introduce `CalculationExecutionService` and `ContainerCalculationService` for handling premise and container-level calculations, along with a new `ContainerCalculationResult` model. Updated `PackagingDimension` to include a `withTolerance` method for dimension adjustments. Renamed `CalculationController` to `PremiseController` for improved clarity. Enhanced `ExcelReportingService` for accurate header and data mapping during report generation.
This commit is contained in:
parent
46fd70a2c8
commit
d2e271ed36
6 changed files with 112 additions and 15 deletions
|
|
@ -0,0 +1,9 @@
|
|||
package de.avatic.lcc.calculationmodel;
|
||||
|
||||
public class ContainerCalculationResult {
|
||||
|
||||
private int layer;
|
||||
private String structure;
|
||||
private int huUnitCount;
|
||||
|
||||
}
|
||||
|
|
@ -24,7 +24,7 @@ import java.util.Map;
|
|||
|
||||
@RestController
|
||||
@RequestMapping("/api/calculation")
|
||||
public class CalculationController {
|
||||
public class PremiseController {
|
||||
|
||||
private final PremiseSearchStringAnalyzerService premiseSearchStringAnalyzerService;
|
||||
private final PremisesService premisesServices;
|
||||
|
|
@ -33,7 +33,7 @@ public class CalculationController {
|
|||
private final ChangeSupplierService changeSupplierService;
|
||||
private final ChangeMaterialService changeMaterialService;
|
||||
|
||||
public CalculationController(PremiseSearchStringAnalyzerService premiseSearchStringAnalyzerService, PremisesService premisesServices, PremiseCreationService premiseCreationService, DestinationService destinationService, ChangeSupplierService changeSupplierService, ChangeMaterialService changeMaterialService) {
|
||||
public PremiseController(PremiseSearchStringAnalyzerService premiseSearchStringAnalyzerService, PremisesService premisesServices, PremiseCreationService premiseCreationService, DestinationService destinationService, ChangeSupplierService changeSupplierService, ChangeMaterialService changeMaterialService) {
|
||||
this.premiseSearchStringAnalyzerService = premiseSearchStringAnalyzerService;
|
||||
this.premisesServices = premisesServices;
|
||||
this.premiseCreationService = premiseCreationService;
|
||||
|
|
@ -71,7 +71,7 @@ public class CalculationController {
|
|||
// triggers a calculation
|
||||
@PutMapping("/done")
|
||||
public ResponseEntity<Integer> completePremises(@RequestBody List<Integer> premiseIds) {
|
||||
return ResponseEntity.ok(premisesServices.startCalculation(premiseIds)); //TODO
|
||||
return ResponseEntity.ok(premisesServices.startCalculation(premiseIds));
|
||||
}
|
||||
|
||||
@PutMapping("/packaging")
|
||||
|
|
@ -106,4 +106,20 @@ public class PackagingDimension {
|
|||
public void setDeprecated(Boolean deprecated) {
|
||||
isDeprecated = deprecated;
|
||||
}
|
||||
|
||||
public PackagingDimension withTolerance(double tolerance) {
|
||||
PackagingDimension dimensions = new PackagingDimension();
|
||||
|
||||
dimensions.setType(type);
|
||||
dimensions.setLength(Double.valueOf(length.doubleValue() * (1.0+tolerance)).intValue());
|
||||
dimensions.setWidth(Double.valueOf(width.doubleValue() * (1.0+tolerance)).intValue());
|
||||
dimensions.setHeight(Double.valueOf(height.doubleValue() * (1.0+tolerance)).intValue());
|
||||
dimensions.setDimensionUnit(dimensionUnit);
|
||||
dimensions.setWeight(weight);
|
||||
dimensions.setWeightUnit(weightUnit);
|
||||
dimensions.setContentUnitCount(contentUnitCount);
|
||||
dimensions.setDeprecated(isDeprecated);
|
||||
|
||||
return dimensions;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,24 @@
|
|||
package de.avatic.lcc.service.calculation;
|
||||
|
||||
import de.avatic.lcc.model.premises.Premise;
|
||||
import de.avatic.lcc.repositories.premise.PremiseRepository;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class CalculationExecutionService {
|
||||
|
||||
|
||||
private final PremiseRepository premiseRepository;
|
||||
|
||||
public CalculationExecutionService(PremiseRepository premiseRepository) {
|
||||
this.premiseRepository = premiseRepository;
|
||||
}
|
||||
|
||||
public void doCalculation(Integer premiseId) {
|
||||
var premise = premiseRepository.getPremiseById(premiseId);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
package de.avatic.lcc.service.calculation;
|
||||
|
||||
import de.avatic.lcc.calculationmodel.ContainerCalculationResult;
|
||||
import de.avatic.lcc.model.packaging.Packaging;
|
||||
import de.avatic.lcc.model.packaging.PackagingDimension;
|
||||
import de.avatic.lcc.model.utils.DimensionUnit;
|
||||
import de.avatic.lcc.repositories.packaging.PackagingDimensionRepository;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class ContainerCalculationService {
|
||||
|
||||
private static final double DIMENSION_TOLERANCE = 0.02;
|
||||
|
||||
private static final int TEU_LENGTH = 5890;
|
||||
private static final int TEU_WIDTH = 2350;
|
||||
private static final int TEU_HEIGHT = 2390;
|
||||
|
||||
private static final int FEU_LENGTH = 12030;
|
||||
private static final int FEU_WIDTH = 2350;
|
||||
private static final int FEU_HEIGHT = 2390;
|
||||
|
||||
private static final int HQ_LENGTH = 12030;
|
||||
private static final int HQ_WIDTH = 2350;
|
||||
private static final int HQ_HEIGHT = 2690;
|
||||
|
||||
|
||||
|
||||
public ContainerCalculationResult doCalculation(PackagingDimension hu) {
|
||||
var dimensions = hu.withTolerance(DIMENSION_TOLERANCE);
|
||||
}
|
||||
|
||||
private int calculateLayer(PackagingDimension dimension, ) {
|
||||
|
||||
}
|
||||
|
||||
private static class Container {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -46,21 +46,29 @@ public class ExcelReportingService {
|
|||
|
||||
List<ReportFlattener> flatteners = reports.stream().map(ReportFlattener::new).toList();
|
||||
|
||||
int rowIdx = 1;
|
||||
|
||||
while(true) {
|
||||
boolean hasData = false;
|
||||
boolean headerWritten = false;
|
||||
|
||||
var row = sheet.createRow(rowIdx);
|
||||
int cellIdx = 0;
|
||||
var row = sheet.createRow(sheet.getLastRowNum() + 1);
|
||||
int cellIdx = 1 /* 0 is the header column */;
|
||||
for(ReportFlattener flattener : flatteners) {
|
||||
if(cellIdx == 0) {
|
||||
row.createCell(cellIdx++).setCellValue(flattener.getHeader(rowIdx));
|
||||
|
||||
Cell cell = row.createCell(cellIdx);
|
||||
|
||||
if(flattener.hasData(row.getRowNum())) {
|
||||
if(!headerWritten) {
|
||||
row.createCell(0).setCellValue(flattener.getHeader(row.getRowNum()));
|
||||
headerWritten = true;
|
||||
}
|
||||
cell.setCellValue(flattener.getCell(row.getRowNum()));
|
||||
hasData = true;
|
||||
}
|
||||
row.createCell(cellIdx++).setCellValue(flattener.getCell(rowIdx));
|
||||
|
||||
cellIdx++;
|
||||
}
|
||||
|
||||
rowIdx++;
|
||||
if(!hasData) break;
|
||||
}
|
||||
|
||||
|
|
@ -73,11 +81,6 @@ public class ExcelReportingService {
|
|||
}
|
||||
}
|
||||
|
||||
private void mapToCell(Sheet sheet, ReportDTO reportDTO, Cell cell, int rowIdx) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
private static class ReportFlattener {
|
||||
|
||||
private static final String SUPPLIER_NAME = "Supplier";
|
||||
|
|
@ -179,6 +182,10 @@ public class ExcelReportingService {
|
|||
public String getHeader(int rowIdx) {
|
||||
return dataHeader.get(rowIdx);
|
||||
}
|
||||
|
||||
public boolean hasData(int index) {
|
||||
return data.size() > index;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue