반응형
개요
지난 기간동안 프로젝트 명세와 ERD 등 많은 변경 사항이 생겼다.
따라서 해당 명세에 따라 DB 생성 조건이 변경되었다.
우선 사용자 관점에서의 명세는 아래와 같다.
사물함 조회 명세
- 사물함 위치에 따른 버튼 클릭 시 사물함 현황을 노출시킨다. A, B, C섹터가 존재한다.
- 특정 섹터 터치 시 해당 섹터의 사물함 정보를 DB에서 가져와 클라이언트에 리턴해준다.
- 각 섹터마다 60개의 사물함이 존재하며 사물함 Id는 곧 사물함 번호가 된다.
- lockerStatusId가 1인 경우 사용 가능, 2인 경우 사용 중, 3인 경우 수리 중으로 명시한다.
- 해당 값을 통해 사용자가 보관 요청 탭을 클릭할 경우 사용 중이거나 수리 중인 사물함의 경우 클라이언트에서 터치 불가, 회색으로 명시 등 사용자에게 선택할 수 없음을 명시해 준다.
- 반대로 물품 수령 요청을 클릭할 경우 사용 가능한 사물함을 선택할 수 없음을 명시해 준다.
물품 보관 명세
- 물품 보관 클라이언트 요청으로 부터 전달 받은 lockerId를 통해 사물함이 유효한 상태인지 체크한다. 잘못 된 사물함 번호를 입력한 경우 사물함 번호를 찾을 수 없다는 예외를 던져준다. 이미 사용중인 사물함에 보관 요청을 한 경우 사용 가능한 사물함이 아니라는 예외를 던져준다.
- 클라이언트 요청으로 부터 전달 받은 phoneNumber를 통해 사용 기록이 있다면 해당 userId를, 없다면 새로 생성 후 userId를 반환한다.
- 6자리의 랜덤한 정수를 가지는 토큰 번호를 생성 후 해당 tokenId를 반환한다.
- lockerId를 통해 사물함 상태를 사용 중으로 업데이트 및 생성한 토큰 id를 할당해 준다.
- 작업 대기열 테이블에 레코드를 생성하고, lockerId와 requestType("Store")을 저장해 준다.
- 사용 로그 테이블에 레코드를 생성하고, lockerId, userId, storeTime(현재 localDateTime)을 저장해 준다.
- 클라이언트에게 lockerId, tokenValue, message(응답 내용)을 리턴해 준다.
물품 반환 명세
- 물품 반환 요청 시 전달 받은 lockerId를 통해 사물함이 유효한 상태인지 체크한다. 잘못 된 사물함 번호를 입력한 경우 사물함 번호를 찾을 수 없다는 예외를 던져준다. 사용중이 아닌 사물함에 보관 요청을 한 경우 사용중이 아닌 사물함이라는 예외를 던져준다.
- 클라이언트 요청으로 부터 전달 받은 lockerId를 통해 사물함에 기록된 tokenId를 반환한다.
- tokenId의 tokenValue와 클라이언트 요청으로 부터 전달 받은 tokenValue가 일치하는지 확인한다. 만약 토큰 번호가 일치하는 tokenId가 없다면 예외를 던져준다. 토큰 번호가 불일치 하는 경우에도 예외를 던져준다.
- 작업 대기열에 lockerId가 존재하고, requestType이 "retrieve"인지 확인한다, 이미 존재한다면 이미 수령 요청이 완료된 작업임을 예외로 던져준다.
- 작업 대기열 테이블에 레코드를 생성하고, lockerId와 requestType("Retrieve")를 저장해 준다.
- 클라이언트에게 lockerId, message(응답 내용)을 리턴해 준다.
로봇 조작 명세
- 작업 대기열 테이블에서 가장 오래된 대기 중인 작업을 조회해 준다. 대기중인 작업이 없으면 예외를 던져준다.
- 사용 가능한 로봇을 선택하고, 사용 중으로 변경해 준다. 만약 사용 가능한 로봇이 없으면 예외를 던져준다.
- 가장 오래된 대기 중인 작업의 사물함 번호를 통해 사물함 테이블을 조회하여 대상 사물함 정보를 반환한다.
- robotId, lockerId, action을 매개 변수로 전달 하여 젯슨 나노 보드의 Flask 서버의 URL로 로봇 작업 수행 요청을 진행한다. 이 때 robotId는 사용 가능한 로봇, lockerId는 작업 대상 사물함 번호, action은 보관/수령 여부이다. 만약 로봇 작업 요청 중 예외가 발생한 경우 관련 예외를 던져준다.
- 반환 작업인 경우 사물함 상태를 사용 가능으로 변경해 준다, 보관 작업의 경우 이미 보관 요청 시 변경해 주었다.
- 사용 로그 테이블에 업데이트 작업을 진행해 준다, 보관 작업의 경우 해당 작업을 맡은 robotId를 업데이트 해준다, 반환 작업의 경우 해당 작업을 맡은 robotId와 반환 작업이 완료된 시점 retrieveTime을 업데이트 해준다. 각각 로그 테이블을 참조해 lockerId가 일치하면서 보관/수령 로봇의 Id값이 NULL인 값을 찾아주면 된다. 없으면 예외를 던진다.
- 보관/수령 작업에 사용된 로봇의 상태를 대기 중으로 변경해 준다.
- 작업 대기열 테이블에서 현재 진행한 작업을 삭제해 준다.
- 클라이언트에게 success(작업 성공 여부), message(응답 내용)을 리턴해 준다.
고객 여정 맵
- 물품 보관을 원할 경우 키오스크를 통해 물품 보관 버튼을 클릭한다.
- 사용 가능한 사물함을 터치하여 핸드폰 번호를 입력해 준다.
- 보관 요청이 완료되고 물품을 두고 가면 순차적으로 보관 작업을 수행한다. 이때 입력한 핸드폰 번호를 통해 물품을 보관한 사물함 번호와 6자리의 인증 번호가 발송된다.
- 볼일을 마친 후 키오스크에서 직접 or 핸드폰을 통해 물품 수령 작업을 수행한다.
- 마찬 가지로 물품 반환 버튼 터치 후 자신이 물품을 보관한 사물함 번호를 터치해 준다.
- 전달 받았던 6자리의 인증 번호를 입력해 준다. 인증 번호가 일치할 경우 순차적으로 반환 작업을 수행한다.
- 반환 순서는 유저에게 공개되며 자신의 물품이 반환됨이 확인되면 물품 수령을 진행한다.
728x90
반응형
'프로젝트 > 무인 사물함' 카테고리의 다른 글
[AIoT] 무인 사물함 프로젝트 MVC 모델 작성 Model-Entity (0) | 2025.02.10 |
---|---|
[AIoT] 무인 사물함 프로젝트 관리자 관점 명세 정의 (0) | 2025.02.10 |
[AIoT] 무인 사물함 프로젝트 물리적 DB 설계 (1) | 2025.01.23 |
[AIoT] 무인 사물함 프로젝트 논리적 DB 설계, ERD 작성 (0) | 2025.01.23 |
[AIoT] 무인 사물함 프로젝트 개요 (1) | 2025.01.23 |