tdd : picking system - picking
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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()));
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,10 @@ SKU
|
||||
주문 -> 피킹리스트 -> 피커 -> 피킹완료
|
||||
|
||||
------- TO-DO -------
|
||||
[] 피킹
|
||||
[] 피킹 중단
|
||||
[] 피킹 에러
|
||||
[] 피킹 완료
|
||||
|
||||
[v] 피킹 리스트 할당시 피커도 할당
|
||||
[v] 피커 할당시 피킹리스트도 할당
|
||||
|
||||
Reference in New Issue
Block a user