diff --git a/src/main/java/com/kamco/cd/kamcoback/label/LabelAllocateApiController.java b/src/main/java/com/kamco/cd/kamcoback/label/LabelAllocateApiController.java index 29e5ab8f..5a739715 100644 --- a/src/main/java/com/kamco/cd/kamcoback/label/LabelAllocateApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/label/LabelAllocateApiController.java @@ -26,51 +26,42 @@ public class LabelAllocateApiController { @PostMapping("/allocate") public ApiResponseDto labelAllocate(@RequestBody LabelAllocateDto dto) { - //도엽별 카운트 쿼리 - List sheets = List.of( - new Sheet("1", 261), - new Sheet("2", 500), - new Sheet("3", 350), - new Sheet("4", 250), - new Sheet("5", 380), - new Sheet("6", 459) - ); + // 도엽별 카운트 쿼리 + List sheets = + List.of( + new Sheet("1", 261), + new Sheet("2", 500), + new Sheet("3", 350), + new Sheet("4", 250), + new Sheet("5", 380), + new Sheet("6", 459)); - //사용자별 할당 입력한 값 - List targets = List.of( - new TargetUser("A", 1000), - new TargetUser("B", 500), - new TargetUser("C", 700) - ); + // 사용자별 할당 입력한 값 + List targets = + List.of(new TargetUser("A", 1000), new TargetUser("B", 500), new TargetUser("C", 700)); LabelAllocateService.allocate(new ArrayList<>(sheets), new ArrayList<>(targets)); - targets.forEach(t -> { - log.info("[" + t.getUserId() + "]"); - t.getAssigned().forEach(u -> { - log.info(" - 도엽: " + u.getSheetId() + " (" + u.getCount() + ")"); - }); - }); + targets.forEach( + t -> { + log.info("[" + t.getUserId() + "]"); + t.getAssigned() + .forEach( + u -> { + log.info(" - 도엽: " + u.getSheetId() + " (" + u.getCount() + ")"); + }); + }); /** - * [A] 입력한 수 : 1000 - * - 도엽: 2 (500) - * - 도엽: 6 (459) - * - 도엽: 5 (41) + * [A] 입력한 수 : 1000 - 도엽: 2 (500) - 도엽: 6 (459) - 도엽: 5 (41) * - * [B] 입력한 수 : 500 - * - 도엽: 5 (339) - * - 도엽: 3 (161) + *

[B] 입력한 수 : 500 - 도엽: 5 (339) - 도엽: 3 (161) * - * [C] 입력한 수 : 700 - * - 도엽: 3 (189) - * - 도엽: 1 (261) - * - 도엽: 4 (250) + *

[C] 입력한 수 : 700 - 도엽: 3 (189) - 도엽: 1 (261) - 도엽: 4 (250) */ - //A 에게 도엽 2 asc 해서 500건 할당 -> 도엽 6 asc 해서 459 할당 -> 도엽 5 asc 해서 41건 할당 -> insert - //B 에게 도엽 5 위에 41건 할당한 것 빼고 asc 해서 339건 할당 -> 도엽 3 asc 해서 161건 할당 -> insert - //.... for문에서 할당한 것 빼고 asc 해서 건수만큼 할당 insert 하고 다음 으로 넘어가기 + // A 에게 도엽 2 asc 해서 500건 할당 -> 도엽 6 asc 해서 459 할당 -> 도엽 5 asc 해서 41건 할당 -> insert + // B 에게 도엽 5 위에 41건 할당한 것 빼고 asc 해서 339건 할당 -> 도엽 3 asc 해서 161건 할당 -> insert + // .... for문에서 할당한 것 빼고 asc 해서 건수만큼 할당 insert 하고 다음 으로 넘어가기 return ApiResponseDto.ok(null); } - } diff --git a/src/main/java/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto.java b/src/main/java/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto.java index 612e3592..a6802547 100644 --- a/src/main/java/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto.java @@ -27,8 +27,7 @@ public class LabelAllocateDto { private final int demand; private final List assigned = new ArrayList<>(); private int allocated = 0; - @Setter - private int shortage = 0; + @Setter private int shortage = 0; public TargetUser(String userId, int demand) { this.userId = userId; @@ -38,11 +37,10 @@ public class LabelAllocateDto { public int getRemainDemand() { return demand - allocated; } - + public void assign(String sheetId, int count) { assigned.add(new Sheet(sheetId, count)); allocated += count; } - } } diff --git a/src/main/java/com/kamco/cd/kamcoback/label/service/LabelAllocateService.java b/src/main/java/com/kamco/cd/kamcoback/label/service/LabelAllocateService.java index 9336893c..547284b6 100644 --- a/src/main/java/com/kamco/cd/kamcoback/label/service/LabelAllocateService.java +++ b/src/main/java/com/kamco/cd/kamcoback/label/service/LabelAllocateService.java @@ -18,14 +18,10 @@ public class LabelAllocateService { allocateSheets(sheets, targetUsers); // 2️⃣ 전체 부족분 비율 계산 - distributeShortage(targetUsers); //항상 마지막에 한 번만 호출해야함 - + distributeShortage(targetUsers); // 항상 마지막에 한 번만 호출해야함 } - public static void allocateSheets( - List sheets, - List targets - ) { + public static void allocateSheets(List sheets, List targets) { // 도엽 큰 것부터 (선택 사항) sheets.sort(Comparator.comparingInt(Sheet::getCount).reversed()); @@ -35,10 +31,7 @@ public class LabelAllocateService { while (it.hasNext() && target.getRemainDemand() > 0) { Sheet sheet = it.next(); - int assignable = Math.min( - sheet.getCount(), - target.getRemainDemand() - ); + int assignable = Math.min(sheet.getCount(), target.getRemainDemand()); if (assignable > 0) { target.assign(sheet.getSheetId(), assignable); @@ -54,13 +47,9 @@ public class LabelAllocateService { public static void distributeShortage(List targets) { - int totalDemand = targets.stream() - .mapToInt(TargetUser::getDemand) - .sum(); + int totalDemand = targets.stream().mapToInt(TargetUser::getDemand).sum(); - int totalAllocated = targets.stream() - .mapToInt(t -> t.getAllocated()) - .sum(); + int totalAllocated = targets.stream().mapToInt(t -> t.getAllocated()).sum(); int shortage = totalDemand - totalAllocated; @@ -86,5 +75,4 @@ public class LabelAllocateService { t.setShortage(share); } } - }