Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -60,15 +60,16 @@ public ResponseEntity<Map<String, String>> test(
@Operation(summary = "발주 요청 생성", description = "대리점 또는 창고에서 본사로 발주 요청을 보냅니다.")
@PostMapping
public ResponseEntity<ApiResponse<PurchaseOrderResponse>> requestPurchaseOrder(
@RequestBody PurchaseOrderRequest request
@CurrentUser UserContext user, @RequestBody PurchaseOrderRequest request
){
PurchaseOrderResponse response = purchaseOrderService.createPurchaseOrder(request);
PurchaseOrderResponse response = purchaseOrderService.createPurchaseOrder(user, request);
return ApiResponse.success(SuccessStatus.REQUEST_PURCHASE_SUCCESS, response);
}

@Operation(summary = "본사 발주 요청 건 전체 조회", description = "대리점이 요청한 발주 내역을 전체조회 또는 날짜/대리점이름/발부번호로 필터링하여 조회합니다.")
@GetMapping("/head/orders/pending")
public ResponseEntity<ApiResponse<PageResponse<HeadPurchaseOrderResponse>>> getPendingOrders(
@CurrentUser UserContext user,
@RequestParam(required = false)
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate startDate,
@RequestParam(required = false)
Expand All @@ -79,12 +80,13 @@ public ResponseEntity<ApiResponse<PageResponse<HeadPurchaseOrderResponse>>> getP
@PageableDefault(sort = "id", direction = Sort.Direction.DESC) Pageable pageable
){
PageResponse<HeadPurchaseOrderResponse> page =
purchaseOrderService.getPendingOrders(startDate, endDate, search, pageable);
purchaseOrderService.getPendingOrders(user, startDate, endDate, search, pageable);
return ApiResponse.success(SuccessStatus.SEND_PURCHASE_LIST_SUCCESS,page);
}
@Operation(summary = "본사 발주 처리건 전체 조회", description = "대리점이 요청한 발주 내역을 본사에서 출고중,승인완료,납품완료 상태의 데이터를 전체조회 또는 날짜/대리점이름/발주번호/상태로 필터링하여 조회합니다.")
@GetMapping("/head/orders/processed")
public ResponseEntity<ApiResponse<PageResponse<HeadPurchaseOrderResponse>>> getProcessedOrders(
@CurrentUser UserContext user,
@RequestParam(required = false)
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate startDate,
@RequestParam(required = false)
Expand All @@ -96,13 +98,14 @@ public ResponseEntity<ApiResponse<PageResponse<HeadPurchaseOrderResponse>>> getP
@PageableDefault(sort = "id", direction = Sort.Direction.DESC) Pageable pageable
){
PageResponse<HeadPurchaseOrderResponse> page =
purchaseOrderService.getProcessedOrders(startDate, endDate, search, status, pageable);
purchaseOrderService.getProcessedOrders(user, startDate, endDate, search, status, pageable);
return ApiResponse.success(SuccessStatus.SEND_PURCHASE_LIST_SUCCESS,page);
}

@Operation(summary = "본사 발주 취소건 전체 조회", description = "대리점이 요청한 발주 내역을 본사에서 반려,취소 상태의 데이터를 전체조회 또는 날짜/대리점이름/발주번호/상태로 필터링하여 조회합니다.")
@GetMapping("/head/orders/cancel")
public ResponseEntity<ApiResponse<PageResponse<HeadPurchaseOrderResponse>>> getCanceledOrders(
@CurrentUser UserContext user,
@RequestParam(required = false)
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate startDate,
@RequestParam(required = false)
Expand All @@ -114,50 +117,51 @@ public ResponseEntity<ApiResponse<PageResponse<HeadPurchaseOrderResponse>>> getC
@PageableDefault(sort = "id", direction = Sort.Direction.DESC) Pageable pageable
){
PageResponse<HeadPurchaseOrderResponse> page =
purchaseOrderService.getCancelOrders(startDate, endDate, search, status, pageable);
purchaseOrderService.getCancelOrders(user, startDate, endDate, search, status, pageable);
return ApiResponse.success(SuccessStatus.SEND_PURCHASE_LIST_SUCCESS,page);
}

@Operation(summary = "본사 발주 상세 조회", description = "발주 상세내역을 조회합니다.")
@GetMapping("/head/{orderId}")
public ResponseEntity<ApiResponse<HeadPurchaseOrderDetailResponse>> getPurchaseOrderDetail(
@PathVariable Long orderId
public ResponseEntity<ApiResponse<HeadPurchaseOrderDetailResponse>> getHeadPurchaseOrderDetail(
@CurrentUser UserContext user, @PathVariable Long orderId
){
HeadPurchaseOrderDetailResponse response= purchaseOrderService.getPurchaseOrderDetail(orderId);
HeadPurchaseOrderDetailResponse response= purchaseOrderService.getHeadPurchaseOrderDetail(user, orderId);
return ApiResponse.success(SuccessStatus.SEND_PURCHASE_DETAIL_SUCCESS,response);
}

@Operation(summary = "대리점 발주 전체 조회", description = "엔지니어가 자신이 등록한 발주 내역을 전체조회, 날짜로 필터링 조회합니다.")
@GetMapping("/branch")
public ResponseEntity<ApiResponse<PageResponse<PurchaseOrderDetailResponse>>> getBranchPurchaseOrders(
@RequestParam String branchCode, @RequestParam Long engineerId,
@CurrentUser UserContext user,
@RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate startDate,
@RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate endDate,
Pageable pageable

){
PageResponse<PurchaseOrderDetailResponse> list = purchaseOrderService.getBranchPurchaseOrders(branchCode,engineerId,startDate,endDate,pageable);
PageResponse<PurchaseOrderDetailResponse> list = purchaseOrderService.getBranchPurchaseOrders(user,startDate,endDate,pageable);
return ApiResponse.success(SuccessStatus.SEND_PURCHASE_LIST_SUCCESS,list);
}

@Operation(summary = "대리점 발주 상태 그룹별 조회", description = "준비 / 완료 / 취소·반려 그룹별로 발주 내역을 조회합니다.")
@GetMapping("/status")
public ResponseEntity<ApiResponse<PageResponse<PurchaseOrderDetailResponse>>> getBranchPurchaseOrdersByFilter(
@RequestParam String branchCode, @RequestParam Long engineerId, @RequestParam String filterType, // "ready", "completed", "cancelled"
@CurrentUser UserContext user, @RequestParam String filterType, // "ready", "completed", "cancelled"
@RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate startDate,
@RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate endDate,
Pageable pageable
){
PageResponse<PurchaseOrderDetailResponse> list = purchaseOrderService.getBranchPurchaseOrdersByFilter(branchCode, engineerId, filterType,startDate,endDate,pageable);
PageResponse<PurchaseOrderDetailResponse> list = purchaseOrderService.getBranchPurchaseOrdersByFilter(user, filterType,startDate,endDate,pageable);
return ApiResponse.success(SuccessStatus.SEND_PURCHASE_LIST_SUCCESS,list);
}

@Operation(summary = "대리점에서 발주 상세 조회", description = "특정 발주 번호 상세 조회")
@GetMapping("/{orderId}")
public ResponseEntity<ApiResponse<PurchaseOrderDetailResponse>> getPurchaseOrderDetail(
@PathVariable Long orderId, @RequestParam String branchCode, @RequestParam Long engineerId
@CurrentUser UserContext user,
@PathVariable Long orderId
){
PurchaseOrderDetailResponse detail = purchaseOrderService.getPurchaseOrderDetail(orderId,branchCode, engineerId);
PurchaseOrderDetailResponse detail = purchaseOrderService.getPurchaseOrderDetail(user, orderId);
return ApiResponse.success(SuccessStatus.SEND_PURCHASE_DETAIL_SUCCESS,detail);
}

Expand All @@ -173,33 +177,34 @@ public ResponseEntity<ApiResponse<Void>> cancelBranchOrder(

@Operation(summary = "수리 접수내역 조회 시 발주 부품 조회", description = "대리점에서 수리내역 조회 시 해당 발주의 부품 목록을 반환합니다.")
@GetMapping("/repair/parts/{receiptNum}/{vehicleNumber}")
public ResponseEntity<ApiResponse<PurchaseOrderResponse>> getCompleteRepairParts(@PathVariable String receiptNum, @PathVariable String vehicleNumber, @RequestParam String branchCode, @RequestParam Long engineerId ){
PurchaseOrderResponse response = purchaseOrderService.getCompleteRepairPartsList(receiptNum,vehicleNumber,branchCode,engineerId);
public ResponseEntity<ApiResponse<PurchaseOrderResponse>> getCompleteRepairParts(@CurrentUser UserContext user,@PathVariable String receiptNum, @PathVariable String vehicleNumber) {
PurchaseOrderResponse response = purchaseOrderService.getCompleteRepairPartsList(user, receiptNum,vehicleNumber);
return ApiResponse.success(SuccessStatus.SEARCH_PARTS_SUCCESS,response);
}


@Operation(summary = "발주 승인", description = "본사에서 발주를 승인합니다.")
@PatchMapping("/{orderId}/approve")
public ResponseEntity<ApiResponse<Void>> approve(@PathVariable Long orderId, @RequestBody NoteRequest request){
purchaseOrderService.approveOrder(orderId, request.getNote());
public ResponseEntity<ApiResponse<Void>> approve(@CurrentUser UserContext user,@PathVariable Long orderId, @RequestBody NoteRequest request){
purchaseOrderService.approveOrder(user, orderId, request.getNote());
return ApiResponse.success_only(SuccessStatus.APPROVE_PURCHASE_SUCCESS);
}

@Operation(summary = "발주 출고일 업데이트", description = "승인된 발주 건을 출고 상태로 변경하고, 출고일(transferDate)을 기록합니다.")
@PatchMapping("/{orderId}/ship")
public ResponseEntity<ApiResponse<Void>> processShipment(@PathVariable Long orderId){
purchaseOrderService.ship(orderId);
public ResponseEntity<ApiResponse<Void>> processShipment(@CurrentUser UserContext user, @PathVariable Long orderId){
purchaseOrderService.ship(user, orderId);
scheduledTaskService.scheduleNewTask(orderId);
return ApiResponse.success_only(SuccessStatus.SHIPPED_PURCHASE_SUCCESS);
}

@Operation(summary = "발주 반려", description = "본사에서 발주를 반려합니다.")
@PatchMapping("/{orderId}/reject")
public ResponseEntity<ApiResponse<Void>> reject(
@CurrentUser UserContext user,
@PathVariable Long orderId, @RequestBody NoteRequest request
){
purchaseOrderService.rejectOrder(orderId, request.getNote());
purchaseOrderService.rejectOrder(user, orderId, request.getNote());
return ApiResponse.success_only(SuccessStatus.REJECT_PURCHASE_SUCCESS);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,6 @@
public class PurchaseOrderRequest {
private String vehicleNumber;
private String vehicleModel;
private Long requesterId;
private String requesterName;
private String requesterRole;
private String requesterCode;
private String receiptNum;
private List<OrderItemRequest> items;
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,59 +5,58 @@
import com.gearfirst.backend.api.order.dto.response.HeadPurchaseOrderResponse;
import com.gearfirst.backend.api.order.dto.response.PurchaseOrderDetailResponse;
import com.gearfirst.backend.api.order.dto.response.PurchaseOrderResponse;
import com.gearfirst.backend.common.annotation.CurrentUser;
import com.gearfirst.backend.common.context.UserContext;
import com.gearfirst.backend.common.dto.response.PageResponse;
import com.gearfirst.backend.common.enums.OrderStatus;
import org.springframework.data.domain.Pageable;

import java.time.LocalDate;
import java.util.List;

public interface PurchaseOrderService {
//대리점 발주 요청 생성
PurchaseOrderResponse createPurchaseOrder(PurchaseOrderRequest request);
PurchaseOrderResponse createPurchaseOrder(UserContext user, PurchaseOrderRequest request);
PageResponse<HeadPurchaseOrderResponse> getPendingOrders(
UserContext user,
LocalDate startDate, LocalDate endDate,
String searchKeyword,
Pageable pageable
);

PageResponse<HeadPurchaseOrderResponse> getProcessedOrders(
UserContext user,
LocalDate startDate, LocalDate endDate,
String searchKeyword,
String status,
Pageable pageable
);
PageResponse<HeadPurchaseOrderResponse> getCancelOrders(
UserContext user,
LocalDate startDate, LocalDate endDate,
String searchKeyword,
String status,
Pageable pageable
);
//본사용 발주 상세 조회
HeadPurchaseOrderDetailResponse getPurchaseOrderDetail(Long orderId);
HeadPurchaseOrderDetailResponse getHeadPurchaseOrderDetail(UserContext user, Long orderId);

//엔지니어용 발주 목록 전체 조회
PageResponse<PurchaseOrderDetailResponse> getBranchPurchaseOrders(String branchCode, Long engineerId, LocalDate startDate, LocalDate endDate, Pageable pageable);
PageResponse<PurchaseOrderDetailResponse> getBranchPurchaseOrders(UserContext user, LocalDate startDate, LocalDate endDate, Pageable pageable);
//대리점 상태 그룹별 조회(준비/ 완료 / 취소)
PageResponse<PurchaseOrderDetailResponse> getBranchPurchaseOrdersByFilter(
String branchCode, Long engineerId, String filterType,
UserContext user, String filterType,
LocalDate startDate, LocalDate endDate, Pageable pageable
);

//발주 부품 조회
PurchaseOrderResponse getCompleteRepairPartsList(String receiptNum, String vehicleNumber, String branchCode, Long engineerId);
PurchaseOrderResponse getCompleteRepairPartsList(UserContext user, String receiptNum, String vehicleNumber);

//발주 상세 조회
PurchaseOrderDetailResponse getPurchaseOrderDetail(Long orderId, String branchCode, Long engineerId);

PurchaseOrderDetailResponse getPurchaseOrderDetail(UserContext user, Long orderId);
//대리점 발주 취소
void cancelBranchOrder(UserContext user, Long orderId);
//발주 승인
void approveOrder(Long orderId,String note);
void approveOrder(UserContext user, Long orderId,String note);
//출고날짜 업데이트
void ship(Long orderId);
void ship(UserContext user, Long orderId);
//발주 반려
void rejectOrder(Long orderId, String note);
void rejectOrder(UserContext user, Long orderId, String note);
}
Loading