diff --git a/src/main/java/com/sampoom/backend/api/material/entity/Material.java b/src/main/java/com/sampoom/backend/api/material/entity/Material.java index 3cd8e3b..94fc4bb 100644 --- a/src/main/java/com/sampoom/backend/api/material/entity/Material.java +++ b/src/main/java/com/sampoom/backend/api/material/entity/Material.java @@ -40,9 +40,19 @@ public class Material { private Long standardCost; // 표준단가 + @Column(name = "standard_total_cost") + private Long standardTotalCost; // 표준총비용 (standardCost * standardQuantity) + @Version private Long version; // JPA가 자동 관리 (낙관적 락 + 자동 증가) + @PostLoad + @PrePersist + @PreUpdate + private void updateStandardTotalCost() { + this.standardTotalCost = calculateStandardTotalCost(); + } + /** 이름/단위/기준단위/리드타임/기준수량 수정 */ public void updateBasicInfo(String name, String unit, Integer baseQuantity, Integer standardQuantity, Integer leadTime, Long standardCost) { this.name = name; @@ -51,6 +61,7 @@ public void updateBasicInfo(String name, String unit, Integer baseQuantity, Inte this.standardQuantity = standardQuantity != null ? standardQuantity : 1; this.leadTime = leadTime; this.standardCost = standardCost; + updateStandardTotalCost(); } /** 카테고리 변경 + 코드 재발급 */ @@ -58,4 +69,24 @@ public void changeCategory(MaterialCategory newCategory, String newCode) { this.materialCategory = newCategory; this.materialCode = newCode; } + + /** 표준총비용 계산 */ + private Long calculateStandardTotalCost() { + if (this.standardCost == null || this.standardQuantity == null) { + return null; + } + return this.standardCost * this.standardQuantity; + } + + /** 표준비용 업데이트 시 총비용도 함께 업데이트 */ + public void updateStandardCost(Long standardCost) { + this.standardCost = standardCost; + updateStandardTotalCost(); + } + + /** 표준수량 업데이트 시 총비용도 함께 업데이트 */ + public void updateStandardQuantity(Integer standardQuantity) { + this.standardQuantity = standardQuantity != null ? standardQuantity : 1; + updateStandardTotalCost(); + } } diff --git a/src/main/java/com/sampoom/backend/api/material/event/dto/MaterialEvent.java b/src/main/java/com/sampoom/backend/api/material/event/dto/MaterialEvent.java index 6da79f6..a818657 100644 --- a/src/main/java/com/sampoom/backend/api/material/event/dto/MaterialEvent.java +++ b/src/main/java/com/sampoom/backend/api/material/event/dto/MaterialEvent.java @@ -32,5 +32,6 @@ public static class Payload { private boolean deleted; private Long materialCategoryId; private Long standardCost; + private Long standardTotalCost; // 표준총비용 추가 } } diff --git a/src/main/java/com/sampoom/backend/api/material/event/service/MaterialEventBatchService.java b/src/main/java/com/sampoom/backend/api/material/event/service/MaterialEventBatchService.java index 2824393..59f12ba 100644 --- a/src/main/java/com/sampoom/backend/api/material/event/service/MaterialEventBatchService.java +++ b/src/main/java/com/sampoom/backend/api/material/event/service/MaterialEventBatchService.java @@ -44,6 +44,7 @@ public void publishAllMaterialEvents() { .standardQuantity(material.getStandardQuantity() != null ? material.getStandardQuantity() : 1) .leadTime(material.getLeadTime()) .standardCost(material.getStandardCost()) + .standardTotalCost(material.getStandardTotalCost()) .deleted(false) .materialCategoryId(material.getMaterialCategory().getId()) .build()) diff --git a/src/main/java/com/sampoom/backend/api/material/service/MaterialService.java b/src/main/java/com/sampoom/backend/api/material/service/MaterialService.java index 4da7594..b5b6520 100644 --- a/src/main/java/com/sampoom/backend/api/material/service/MaterialService.java +++ b/src/main/java/com/sampoom/backend/api/material/service/MaterialService.java @@ -126,6 +126,7 @@ public MaterialResponseDTO createMaterial(MaterialRequestDTO requestDTO) { .deleted(false) .materialCategoryId(category.getId()) .standardCost(material.getStandardCost()) + .standardTotalCost(material.getStandardTotalCost()) .build()) .build(); @@ -188,6 +189,7 @@ public MaterialResponseDTO updateMaterial(Long id, MaterialRequestDTO requestDTO .deleted(false) .materialCategoryId(material.getMaterialCategory().getId()) .standardCost(material.getStandardCost()) + .standardTotalCost(material.getStandardTotalCost()) .build()) .build(); @@ -225,6 +227,7 @@ public void deleteMaterial(Long id) { .deleted(true) .materialCategoryId(material.getMaterialCategory().getId()) .standardCost(material.getStandardCost()) + .standardTotalCost(material.getStandardTotalCost()) .build()) .build();