[프로젝트] 웹 siCloud - day13

_bean_·2023년 8월 4일
0

[팀 프로젝트] siCloud

목록 보기
14/21
post-thumbnail

오류 및 문제점

1. WebClient를 이용해 List<> 타입 받기

  • 문제점: 제네릭 타입으로 responseBody를 받아야 한다.
  • 해결 방안: ParameterizedTypeReference을 사용한다.
WebClient webClient = WebClient.create("http://localhost:4885");
List<ShoppingDTO> shoppingDTOs = webClient.get()
    .uri("/shop/order/send/" + sellerNo)
	.retrieve()
	.bodyToMono(new ParameterizedTypeReference<List<ShoppingDTO>>() {})
	.block();

2. Timestamp 형태 변환

  • 문제점: 프론트에서 원하는 yyyy-MM-dd hh:mm 형식의 문자열로 Timestamp를 변환해야 한다.
  • 해결 방안: SimpleDateFormat을 이용해 String 문자열 패턴을 정한다.
public class TimestampUtil {
	public static String convertTimestampToString(Timestamp timestamp) {
		Date date = new Date(timestamp.getTime());
		SimpleDateFormat pattern = new SimpleDateFormat("yyyy-MM-dd hh:mm");
		
		return pattern.format(date);
	}
}

3. isAgreed 요청

  • 문제점: 프론트에서 요청한 isAgreed의 값이 계속 false로 나온다.
  • 해결 방안: boolean 타입의 경우 getter의 이름이 isXxx이다. 따라서 요청 변수의 이름을 agreed로 변경한다.
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ThreePLDTO {
	private boolean isAgreed;
}

진행 상황

1. 조회 응답에 totalPage수 추가

ExportsListDTO exportsListDTO = ExportsListDTO
		.builder()
		.totalPage(exports.getTotalPages())
		.exports(exportsDTOs)
		.build();
		
return exportsListDTO;

2. 쇼핑몰에서 주문 수집 요청 후 출고 목록 추가

@Transactional
public ExportsListDTO register(Long sellerNo, int pageNum, int countPerPage) {
	Seller seller = sellerService.findById(sellerNo);
		
	WebClient webClient = WebClient.create("http://localhost:4885");
	List<ShoppingDTO> shoppingDTOs = webClient.get()
		.uri("/shop/order/send/" + sellerNo)
		.retrieve()
		.bodyToMono(new ParameterizedTypeReference<List<ShoppingDTO>>() {})
		.block();
		
	for(ShoppingDTO shoppingDTO: shoppingDTOs) {
		List<ExportProduct> exportProducts = new ArrayList<>();
		Exports exports = shoppingDTO.toExports(seller);
			
		Exports savedExports = exportsRepository.save(exports);
			
		for(ShoppingProductDTO shoppingProductDTO : shoppingDTO.getOrderedProducts()) {
			Product product = productService.findByProductNo(shoppingProductDTO.getProductNo());
			ExportProduct exportProduct = shoppingProductDTO.toExportProduct(savedExports, product);
				
			exportProducts.add(exportProduct);
		}
			
		List<ExportProduct> savedExportProducts = exportProductRepository.saveAll(exportProducts);
		if(savedExports == null || savedExportProducts == null) findExports(sellerNo, 1, countPerPage);
			
	}
		
	return findExports(sellerNo, 1, countPerPage);
}

3. 쇼핑몰 주문 목록 조회

public List<ShoppingProductDTO> findShoppings(Long sellerNo) {
	List<ShoppingProductDTO> shoppingProductDTOs = new ArrayList<>();
	List<ShoppingProduct> shoppingProducts = shoppingProductRepository
		.findByShopping_Seller_SellerNoOrderByShopping_OrderDateDescProduct_ProductName(sellerNo);
		
	for(ShoppingProduct shoppingProduct: shoppingProducts) {
		ShoppingProductDTO shoppingProductDTO = shoppingProduct.toShoppingProductDTO();
		shoppingProductDTOs.add(shoppingProductDTO);
	}
		
	return shoppingProductDTOs;
}

4. 날짜 응답 형식 유틸

public class TimestampUtil {
	public static String convertTimestampToString(Timestamp timestamp) {
		Date date = new Date(timestamp.getTime());
		SimpleDateFormat pattern = new SimpleDateFormat("yyyy-MM-dd hh:mm");
		
		return pattern.format(date);
	}
}

5. 3PL 회원가입

  • 계약 가능한 화주사 수에 따라 창고 구역 개수 정해짐 (A~Z)
@Transactional
public boolean register3PL(ThreePLDTO threePLDTO) {
	List<Warehouse> warehouses = new ArrayList<>();
		
	User user = threePLDTO.toUser();
	ProductGroup productGroup = productGroupService.findByGroupName(threePLDTO.getProductGroupName());
	ThreePL threePL = threePLDTO.toThreePL(productGroup, user);
	ThreePL savedThreePL = threePLService.register(threePL);
		
	int cnt = savedThreePL.getCntTotal();
		
	for(int i = 0; i < cnt; i++) {
		Warehouse warehouse = Warehouse
				.builder()
				.threePL(savedThreePL)
				.location(String.valueOf((char) ('A' + i)))
				.build();
		warehouses.add(warehouse);
	}
		
	List<Warehouse>savedWarehouses = warehouseService.saveAll(warehouses);
		
	return savedWarehouses != null;
}

6. 상품군, 세부 상품군 목록 조회

// ProductGroupService.java
public List<ProductGroupDTO> findAll() {
	List<ProductGroupDTO> productGroupDTOs = new ArrayList<>();
	List<ProductGroup> productGroups = productGroupRepository.findAll();
		
	for(ProductGroup productGroup : productGroups) {
		ProductGroupDTO productGroupDTO = ProductGroupDTO.builder().groupName(productGroup.getGroupName()).build();
		productGroupDTOs.add(productGroupDTO);
	}
	return productGroupDTOs;
}

// DetailProductGroup.java
public List<ProductGroupDTO> findByProductGroup(Long sellerNo) {
	List<ProductGroupDTO> productGroupDTOs = new ArrayList<>();
	Seller seller = sellerService.findById(sellerNo);
		
	List<DetailProductGroup> detailProductGroups = detailProductGroupRepository
			.findByProductGroup_GroupName(seller.getProductGroup().getGroupName());
		
	for(DetailProductGroup detailProductGroup: detailProductGroups) {
		ProductGroupDTO productGroupDTO = ProductGroupDTO.builder().groupName(detailProductGroup.getGroupName()).build();
		productGroupDTOs.add(productGroupDTO);
	}
		
	return productGroupDTOs;
}

7. user, WMS, 3PL, 화주사 히스토리 트리거

-- update
DELIMITER //
CREATE TRIGGER trigger_history_threepl_updated
AFTER UPDATE ON threepl
FOR EACH ROW
BEGIN
	INSERT INTO threepl_history(history_threepl_no, updated_date, updated_type, address, business_no, ceo_name, cnt_total, 
		company_name, fee, is_agreed, manager_email, manager_name, manager_phone, product_group_no, threepl_no)
	VALUES(seq_nextval('seq_history'), CURRENT_TIMESTAMP(), 'UPDATED', OLD.address, OLD.business_no, OLD.ceo_name, OLD.cnt_total, 
		OLD.company_name, OLD.fee, OLD.is_agreed, OLD.manager_email, OLD.manager_name, OLD.manager_phone, OLD.product_group_no, OLD.threepl_no);
END //
DELIMITER ;

-- delete
DELIMITER //
CREATE TRIGGER trigger_history_threepl_deleted
AFTER DELETE ON threepl
FOR EACH ROW
BEGIN
	INSERT INTO threepl_history(history_threepl_no, updated_date, updated_type, address, business_no, ceo_name, cnt_total, 
		company_name, fee, is_agreed, manager_email, manager_name, manager_phone, product_group_no, threepl_no)
	VALUES(seq_nextval('seq_history'), CURRENT_TIMESTAMP(), 'DELETED', OLD.address, OLD.business_no, OLD.ceo_name, OLD.cnt_total, 
		OLD.company_name, OLD.fee, OLD.is_agreed, OLD.manager_email, OLD.manager_name, OLD.manager_phone, OLD.product_group_no, OLD.threepl_no);
END //
DELIMITER ;

참고 자료

profile
어쩌다 풀스택 :3

0개의 댓글