[프로젝트] 웹 siCloud - day17

_bean_·2023년 8월 10일
0

[팀 프로젝트] siCloud

목록 보기
19/21
post-thumbnail

오류 및 문제점

1. 3PL 매칭 조건 검색 쿼리 수정

  • 문제점: 현재 쿼리로는 계약 자리가 남아있어도 최근 계약이 오래 남으면 검색되지 않는다.
  • 해결 방안: 계약 기간 조건에 or로 자리가 남은 경우를 추가한다.
SELECT *  
FROM threepl  
	JOIN product_group  
	ON threepl.product_group_no = product_group.product_group_no  
	JOIN (SELECT threepl_no, IFNULL(MIN(end_date), SYSDATE()) AS end_date  
		FROM matching  
			RIGHT OUTER JOIN warehouse  
			ON matching.warehouse_no = warehouse.warehouse_no  
		GROUP BY warehouse.threepl_no) AS dateinfo  
	ON threepl.threepl_no = dateinfo.threepl_no  
WHERE product_group.group_name LIKE CONCAT('%', '%')	  
AND threepl.address LIKE CONCAT('%','%')  
AND threepl.fee <=  10000000
-- 남은 자리(cnt_total - cnt_contracted) 조건 추가
AND (end_date <= DATE_ADD(SYSDATE(), INTERVAL 2 MONTH) OR (cnt_total - cnt_contracted > 0))
ORDER BY end_date, company_name 

2. SQL 매일 일어나는 이벤트

  • 문제점: 계약 여부를 매일 확인해야 한다.
  • 해결 방안: SQL 이벤트를 만들어 하루에 한 번 계약 종료일이 어제인 계약을 만료시킨다.
CREATE EVENT event_contract_expiration
	ON SCHEDULE EVERY 1 DAY
		STARTS '2023-08-11 00:00:00'
	DO
		DELETE FROM matching
		WHERE DATE_FORMAT(end_date, '%Y-%m-%d') = DATE_FORMAT(DATE_ADD(SYSDATE(), INTERVAL -1 DAY), '%Y-%m-%d');

진행 상황

1. 쇼핑몰 주문 자동 생성

  • 주소, 채널, 주문자명 배열에서 난수를 이용해 랜덤 주문 목록 생성
    • 주소: 네이버 지도에 'OO도 아파트' 검색해서 짧은 주소 선택
    • 주문자명: 랜덤 이름 생성기 사용
  • 특정 화주사의 상품 목록, 구매 퍼센트(소비자가*0.9의 가격으로 구매), 구매 수량 배열에서 난수를 이용해 랜덤 주문 상품 생성
@Transactional
public List<ShoppingProductDTO> register(Long sellerNo) {
	List<SimpleProductDTO> products = productService.findByAllProductSimpledata(sellerNo);
	String[] addresses = {"서울 강남구 개포동 190", "서울 용산구 서빙고로 17",
			"경기 파주시 심학산로 385", "경기 의정부시 용민로 10",
			"강원 춘천시 동면 만천로 242", "강원 춘천시 안마산로 133",
			"충북 청주시 상당구 방서동", "충북 청주시 흥덕구 대농로 55",
			"충남 아산시 갈산샛들로 67", "충남 천안시 서북구 미라2길 19",
			"전북 군산시 하나운2길 15", "전북 전주시 덕진구 호반로 11",
			"전남 여수시 웅천중앙로 47", "전남 목포시 옥암로 156",
			"경북 구미시 옥계북로 69", "경북 구미시 문장로 111",
			"경남 양산시 물금읍 새실로 11", "경남 진주시 새평거로 30"};
	String[] channels = {"11번가", "스마트스토어", "G마켓", "카카오선물하기", "SSG닷컴", "옥션"};
	String[] orderers = {"임시아", "장원우", "고서준", "문민경", "오진아", "강다운", "정다운"};
	double[] sellingPct = {1.0, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4}; 
		
	List<ShoppingProductDTO> shoppingProductDTOs = new ArrayList<>();
	List<String> productNos = new ArrayList<>();
	List<ShoppingProduct> shoppingProducts = new ArrayList<>();
		
	// 주소, 판매채널, 주문자명 랜덤 설정
	String address = addresses[getRandomNumber(addresses.length)];
	String channel = channels[getRandomNumber(channels.length)];
	String orderer = orderers[getRandomNumber(orderers.length)];
		
	// 주문 목록 생성
	Seller seller = sellerService.findById(sellerNo);
	StringBuilder exportNo = new StringBuilder("S");
	exportNo.append(sellerNo);
	exportNo.append("-");
	exportNo.append(new Date().getTime() % 10000000);
	Shopping shopping = Shopping
			.builder()
			.exportNo(exportNo.toString())
			.seller(seller)
			.salesChannel(channel)
			.address(address)
			.orderName(orderer)
			.build();
	Shopping savedShopping = shoppingRepository.save(shopping);
		
	// 주문 상품 개수 1~5 랜덤 설정
	int numOfProduct = getRandomNumber(5) + 1;
		
	while(shoppingProductDTOs.size() < numOfProduct) {
		// 상품, 수량 1~10 랜덤 설정
		int idx = getRandomNumber(products.size());
		int amount = getRandomNumber(10) + 1;
		double pct = sellingPct[getRandomNumber(sellingPct.length)];
			
		while(productNos.indexOf(products.get(idx).getProductNo()) != -1) {
			idx = getRandomNumber(products.size());
		}
			
		productNos.add(products.get(idx).getProductNo());
		ShoppingProductDTO shoppingProductDTO = ShoppingProductDTO
				.builder()
				.productNo(products.get(idx).getProductNo())
				.amount(amount)
				.sellingPrice((int) (products.get(idx).getConsumerPrice() * amount * pct))
				.build();
		shoppingProductDTOs.add(shoppingProductDTO);
	}
		
		
	for(ShoppingProductDTO shoppingProductDTO: shoppingProductDTOs) {
		Product findedProduct = productService.findByProductNo(shoppingProductDTO.getProductNo());
		shoppingProducts.add(shoppingProductDTO.toShoppingProduct(findedProduct, savedShopping));
	}
		
	List<ShoppingProduct> savedProduct = shoppingProductRepository.saveAll(shoppingProducts);
		
	if(savedProduct == null || savedShopping == null) return null;
		
	return findShoppings(sellerNo);
}

2. 시연 데이터 생성중

  • 데이터 찾아 넣기
    • 상품군, 세부 상품군
    • 3PL, 화주사
    • 상품
  • 데이터 넣은 후 가공
    • 발주, 입고, 출고, 쇼핑몰

참고 자료

profile
어쩌다 풀스택 :3

0개의 댓글