spotless 적용
This commit is contained in:
@@ -26,51 +26,42 @@ public class LabelAllocateApiController {
|
|||||||
@PostMapping("/allocate")
|
@PostMapping("/allocate")
|
||||||
public ApiResponseDto<Void> labelAllocate(@RequestBody LabelAllocateDto dto) {
|
public ApiResponseDto<Void> labelAllocate(@RequestBody LabelAllocateDto dto) {
|
||||||
|
|
||||||
//도엽별 카운트 쿼리
|
// 도엽별 카운트 쿼리
|
||||||
List<Sheet> sheets = List.of(
|
List<Sheet> sheets =
|
||||||
new Sheet("1", 261),
|
List.of(
|
||||||
new Sheet("2", 500),
|
new Sheet("1", 261),
|
||||||
new Sheet("3", 350),
|
new Sheet("2", 500),
|
||||||
new Sheet("4", 250),
|
new Sheet("3", 350),
|
||||||
new Sheet("5", 380),
|
new Sheet("4", 250),
|
||||||
new Sheet("6", 459)
|
new Sheet("5", 380),
|
||||||
);
|
new Sheet("6", 459));
|
||||||
|
|
||||||
//사용자별 할당 입력한 값
|
// 사용자별 할당 입력한 값
|
||||||
List<TargetUser> targets = List.of(
|
List<TargetUser> targets =
|
||||||
new TargetUser("A", 1000),
|
List.of(new TargetUser("A", 1000), new TargetUser("B", 500), new TargetUser("C", 700));
|
||||||
new TargetUser("B", 500),
|
|
||||||
new TargetUser("C", 700)
|
|
||||||
);
|
|
||||||
|
|
||||||
LabelAllocateService.allocate(new ArrayList<>(sheets), new ArrayList<>(targets));
|
LabelAllocateService.allocate(new ArrayList<>(sheets), new ArrayList<>(targets));
|
||||||
|
|
||||||
targets.forEach(t -> {
|
targets.forEach(
|
||||||
log.info("[" + t.getUserId() + "]");
|
t -> {
|
||||||
t.getAssigned().forEach(u -> {
|
log.info("[" + t.getUserId() + "]");
|
||||||
log.info(" - 도엽: " + u.getSheetId() + " (" + u.getCount() + ")");
|
t.getAssigned()
|
||||||
});
|
.forEach(
|
||||||
});
|
u -> {
|
||||||
|
log.info(" - 도엽: " + u.getSheetId() + " (" + u.getCount() + ")");
|
||||||
|
});
|
||||||
|
});
|
||||||
/**
|
/**
|
||||||
* [A] 입력한 수 : 1000
|
* [A] 입력한 수 : 1000 - 도엽: 2 (500) - 도엽: 6 (459) - 도엽: 5 (41)
|
||||||
* - 도엽: 2 (500)
|
|
||||||
* - 도엽: 6 (459)
|
|
||||||
* - 도엽: 5 (41)
|
|
||||||
*
|
*
|
||||||
* [B] 입력한 수 : 500
|
* <p>[B] 입력한 수 : 500 - 도엽: 5 (339) - 도엽: 3 (161)
|
||||||
* - 도엽: 5 (339)
|
|
||||||
* - 도엽: 3 (161)
|
|
||||||
*
|
*
|
||||||
* [C] 입력한 수 : 700
|
* <p>[C] 입력한 수 : 700 - 도엽: 3 (189) - 도엽: 1 (261) - 도엽: 4 (250)
|
||||||
* - 도엽: 3 (189)
|
|
||||||
* - 도엽: 1 (261)
|
|
||||||
* - 도엽: 4 (250)
|
|
||||||
*/
|
*/
|
||||||
//A 에게 도엽 2 asc 해서 500건 할당 -> 도엽 6 asc 해서 459 할당 -> 도엽 5 asc 해서 41건 할당 -> insert
|
// A 에게 도엽 2 asc 해서 500건 할당 -> 도엽 6 asc 해서 459 할당 -> 도엽 5 asc 해서 41건 할당 -> insert
|
||||||
//B 에게 도엽 5 위에 41건 할당한 것 빼고 asc 해서 339건 할당 -> 도엽 3 asc 해서 161건 할당 -> insert
|
// B 에게 도엽 5 위에 41건 할당한 것 빼고 asc 해서 339건 할당 -> 도엽 3 asc 해서 161건 할당 -> insert
|
||||||
//.... for문에서 할당한 것 빼고 asc 해서 건수만큼 할당 insert 하고 다음 으로 넘어가기
|
// .... for문에서 할당한 것 빼고 asc 해서 건수만큼 할당 insert 하고 다음 으로 넘어가기
|
||||||
|
|
||||||
return ApiResponseDto.ok(null);
|
return ApiResponseDto.ok(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,8 +27,7 @@ public class LabelAllocateDto {
|
|||||||
private final int demand;
|
private final int demand;
|
||||||
private final List<Sheet> assigned = new ArrayList<>();
|
private final List<Sheet> assigned = new ArrayList<>();
|
||||||
private int allocated = 0;
|
private int allocated = 0;
|
||||||
@Setter
|
@Setter private int shortage = 0;
|
||||||
private int shortage = 0;
|
|
||||||
|
|
||||||
public TargetUser(String userId, int demand) {
|
public TargetUser(String userId, int demand) {
|
||||||
this.userId = userId;
|
this.userId = userId;
|
||||||
@@ -43,6 +42,5 @@ public class LabelAllocateDto {
|
|||||||
assigned.add(new Sheet(sheetId, count));
|
assigned.add(new Sheet(sheetId, count));
|
||||||
allocated += count;
|
allocated += count;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,14 +18,10 @@ public class LabelAllocateService {
|
|||||||
allocateSheets(sheets, targetUsers);
|
allocateSheets(sheets, targetUsers);
|
||||||
|
|
||||||
// 2️⃣ 전체 부족분 비율 계산
|
// 2️⃣ 전체 부족분 비율 계산
|
||||||
distributeShortage(targetUsers); //항상 마지막에 한 번만 호출해야함
|
distributeShortage(targetUsers); // 항상 마지막에 한 번만 호출해야함
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void allocateSheets(
|
public static void allocateSheets(List<Sheet> sheets, List<TargetUser> targets) {
|
||||||
List<Sheet> sheets,
|
|
||||||
List<TargetUser> targets
|
|
||||||
) {
|
|
||||||
// 도엽 큰 것부터 (선택 사항)
|
// 도엽 큰 것부터 (선택 사항)
|
||||||
sheets.sort(Comparator.comparingInt(Sheet::getCount).reversed());
|
sheets.sort(Comparator.comparingInt(Sheet::getCount).reversed());
|
||||||
|
|
||||||
@@ -35,10 +31,7 @@ public class LabelAllocateService {
|
|||||||
while (it.hasNext() && target.getRemainDemand() > 0) {
|
while (it.hasNext() && target.getRemainDemand() > 0) {
|
||||||
Sheet sheet = it.next();
|
Sheet sheet = it.next();
|
||||||
|
|
||||||
int assignable = Math.min(
|
int assignable = Math.min(sheet.getCount(), target.getRemainDemand());
|
||||||
sheet.getCount(),
|
|
||||||
target.getRemainDemand()
|
|
||||||
);
|
|
||||||
|
|
||||||
if (assignable > 0) {
|
if (assignable > 0) {
|
||||||
target.assign(sheet.getSheetId(), assignable);
|
target.assign(sheet.getSheetId(), assignable);
|
||||||
@@ -54,13 +47,9 @@ public class LabelAllocateService {
|
|||||||
|
|
||||||
public static void distributeShortage(List<TargetUser> targets) {
|
public static void distributeShortage(List<TargetUser> targets) {
|
||||||
|
|
||||||
int totalDemand = targets.stream()
|
int totalDemand = targets.stream().mapToInt(TargetUser::getDemand).sum();
|
||||||
.mapToInt(TargetUser::getDemand)
|
|
||||||
.sum();
|
|
||||||
|
|
||||||
int totalAllocated = targets.stream()
|
int totalAllocated = targets.stream().mapToInt(t -> t.getAllocated()).sum();
|
||||||
.mapToInt(t -> t.getAllocated())
|
|
||||||
.sum();
|
|
||||||
|
|
||||||
int shortage = totalDemand - totalAllocated;
|
int shortage = totalDemand - totalAllocated;
|
||||||
|
|
||||||
@@ -86,5 +75,4 @@ public class LabelAllocateService {
|
|||||||
t.setShortage(share);
|
t.setShortage(share);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user