tdd : picking system - picking

This commit is contained in:
haerong22
2021-08-05 22:11:12 +09:00
parent cab6df8514
commit 0dc9916bde
5 changed files with 141 additions and 0 deletions

View File

@@ -11,6 +11,7 @@ public class PickingList {
private Long id;
private Order order;
private Map<Sku, Integer> skuAmountMap;
private Map<Sku, Integer> pickedMap;
private PickingStateEnum state;
private Picker picker;
}

View File

@@ -0,0 +1,9 @@
package com.example.pickingtdd.service;
import com.example.pickingtdd.entity.PickingList;
import com.example.pickingtdd.entity.Sku;
public interface PickingService {
void pick(PickingList pickingList, Sku sku) throws Exception;
}

View File

@@ -0,0 +1,51 @@
package com.example.pickingtdd.service;
import com.example.pickingtdd.entity.PickerStateEnum;
import com.example.pickingtdd.entity.PickingList;
import com.example.pickingtdd.entity.PickingStateEnum;
import com.example.pickingtdd.entity.Sku;
import org.springframework.stereotype.Service;
@Service
public class PickingServiceImpl implements PickingService {
@Override
public void pick(PickingList pickingList, Sku sku) throws Exception{
setStatus(pickingList, null);
if (!pickingList.getSkuAmountMap().containsKey(sku)) {
throw new Exception("wrong sku");
} else {
if (pickingList.getPickedMap().get(sku).equals(pickingList.getSkuAmountMap().get(sku))) {
throw new Exception("to much sku");
}
pickingList.getPickedMap().put(sku, pickingList.getPickedMap().get(sku) + 1);
}
}
private void setStatus(PickingList pickingList, PickingStateEnum status) {
if (status == null) {
boolean isDone = false;
for (Sku sku : pickingList.getSkuAmountMap().keySet()) {
isDone = pickingList.getSkuAmountMap().get(sku).equals(pickingList.getPickedMap().get(sku));
}
if (isDone) {
setStatus(pickingList, PickingStateEnum.DONE);
} else {
pickingList.setState(PickingStateEnum.PROGRESS);
pickingList.getPicker().setState(PickerStateEnum.PROCESS);
}
} else {
pickingList.setState(status);
if (status == PickingStateEnum.DONE) {
pickingList.getPicker().setState(PickerStateEnum.DONE);
}
if (status == PickingStateEnum.ERROR) {
pickingList.getPicker().setState(PickerStateEnum.ERROR);
}
if (status == PickingStateEnum.PENDING) {
pickingList.getPicker().setState(PickerStateEnum.PENDING);
}
}
}
}

View File

@@ -0,0 +1,76 @@
package com.example.pickingtdd.service;
import com.example.pickingtdd.entity.*;
import org.assertj.core.util.Maps;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.Arrays;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.fail;
@SpringBootTest
public class PickingServiceTests {
@Autowired PickingService pickingService;
Order order;
PickingList pickingList;
OrderDetail orderDetail;
OrderDetail orderDetail2;
Picker picker;
@BeforeEach
void init() {
order = new Order();
order.setState(OrderStateEnum.ASSIGNED);
order.setOrderId(1L);
orderDetail = new OrderDetail();
orderDetail.setOrderDetailId(1L);
orderDetail.setOrderId(1L);
orderDetail.setSku(new Sku());
orderDetail.setAmount(10);
orderDetail2 = new OrderDetail();
orderDetail2.setOrderDetailId(1L);
orderDetail2.setOrderId(1L);
orderDetail2.setSku(new Sku());
orderDetail2.setAmount(10);
order.setOrderDetailList(Arrays.asList(orderDetail, orderDetail2));
pickingList = new PickingList();
pickingList.setOrder(order);
pickingList.setState(PickingStateEnum.ASSIGNED);
pickingList.setId(1L);
pickingList.setSkuAmountMap(Maps.newHashMap(orderDetail.getSku(), orderDetail.getAmount()));
pickingList.getSkuAmountMap().put(orderDetail2.getSku(), orderDetail2.getAmount());
pickingList.setPickedMap(Maps.newHashMap(orderDetail.getSku(), 0));
pickingList.getPickedMap().put(orderDetail2.getSku(), 0);
picker = new Picker();
picker.setPickerId(1L);
picker.setAssignedPickingList(pickingList);
picker.setAssignedOrder(order);
pickingList.setPicker(picker);
}
@Test
void pick_one_success() {
try {
pickingService.pick(pickingList, orderDetail.getSku());
} catch (Exception e) {
fail("should not exception");
}
assertEquals(PickingStateEnum.PROGRESS, pickingList.getState());
assertEquals(PickerStateEnum.PROCESS, picker.getState());
assertEquals(1, pickingList.getPickedMap().get(orderDetail.getSku()));
}
}

View File

@@ -8,6 +8,10 @@ SKU
주문 -> 피킹리스트 -> 피커 -> 피킹완료
------- TO-DO -------
[] 피킹
[] 피킹 중단
[] 피킹 에러
[] 피킹 완료
[v] 피킹 리스트 할당시 피커도 할당
[v] 피커 할당시 피킹리스트도 할당