[프로젝트] 웹 ITEM FARM - day08

_bean_·2023년 4월 26일
0
post-thumbnail

오류 및 문제점

1. 2개의 SQL select 결과를 하나의 결과로 보내야 한다.

  • 문제점: 입출고 내역 조회 시 입고 결과, 출고 결과 모두 필요하다.
  • 해결 방안: 입출고VO를 생성 후 각각에 대해 쿼리 실행 뒤 리스트에 추가한다. 추가 완료 후에는 정해진 방식으로 정렬한다. (날짜 내림차순, 상품 코드 오름차순)
// WarehousingDAO.java
if (!cond.equals("storing")) {
	pst = conn.prepareStatement(sql_unstoring);			
	pst.setInt(1, comID);
	rs = pst.executeQuery();
				
	while(rs.next()) {
		WarehousingVO warehousing = makeWarehousing(rs, "unstoring");
		warehousingList.add(warehousing);
	}
}
if (!cond.equals("unstoring")) {
	pst = conn.prepareStatement(sql_storing);
	pst.setInt(1, comID);
	rs = pst.executeQuery();
				
	while(rs.next()) {
		WarehousingVO warehousing = makeWarehousing(rs, "storing");
		warehousingList.add(warehousing);
	}
}

Collections.sort(warehousingList);

2. org.apache.jasper.JasperException: JSP를 위한 클래스를 컴파일할 수 없습니다.

  • 문제점: product_list.jsp에서 CategoryService 호출 시 header.jsp와 충돌이 생긴다. (product_list.jsp에 header.jsp 파일을 include하는 상황이다.)
  • 해결 방안: 서비스 호출 변수명을 수정한다.
// 변경 전
// header.jsp
CompanyService service = new CompanyService();
// product_list.jsp
CategoryService service = new CategoryService();

// 변경 후
//product_list.jsp
CategoryService categoryService = new CategoryService();

3. 상품 등록 및 수정 카테고리 외래키 제한

  • 문제점: 상품의 카테고리가 외래키이기 때문에 input 입력 시 오류가 발생할 수 있다.
  • 해결 방안: 카테고리를 select로 변경한다.

진행 상황

1. 입출고 내역 조회

// WarehousingVO.java
@Override
public int compareTo(WarehousingVO obj) {
	int result1 = obj.warehousing_date.compareTo(warehousing_date);
	int result2 = product_code - obj.product_code;
		
	if(result1 == 0) {
		return result2;
	}
		
	return result1;
}

// WarehousingDAO.java
String sql_unstoring = """
	select product_code, product_name, unstoring_date, unstoring_quantity
	from unstoring_detail
	join unstoring using(unstoring_code)
	join product using(product_code)
	where unstoring_state='출고완료' and company_id = ?	
	""";
String sql_storing = """
	select product_code, product_name, balju_code, storing_date, storing_quantity
	from storing_detail
	join storing using(storing_code)
	join product using(product_code)
	where company_id = ?
	""";

private WarehousingVO makeWarehousing(ResultSet rs, String mode) throws SQLException {
	WarehousingVO warehousing = new WarehousingVO();
		
	int product_code = rs.getInt("product_code");
	String product_name = rs.getString("product_name");
	String warehousing_state;
	String balju_code;
	Date warehousing_date;
	int warehousing_quantity;		
		
	if(mode.equals("unstoring")) {
		warehousing_state = "출고";
		balju_code = null;
		warehousing_date = rs.getDate("unstoring_date");
		warehousing_quantity = rs.getInt("unstoring_quantity");
	} else {
		warehousing_state = "입고";
		balju_code = rs.getString("balju_code");
		warehousing_date = rs.getDate("storing_date");
		warehousing_quantity = rs.getInt("storing_quantity");
	}
}

// WarehousingListController.java
if(method.equals("GET")) {
	warehousingList = service.warehousingList(comId, "all");
	request.setAttribute("filter", "all");
} else {
	String cond = request.getParameter("warehousing-filter");
	warehousingList = service.warehousingList(comId, cond);
	request.setAttribute("filter", cond);
}
request.setAttribute("warehousingList", warehousingList);
<!-- warehousing_list.jsp -->
<c:forEach items="${warehousingList}" var="warehousing" varStatus="status">
  <tr id="datarow">
    <td>${status.count}</td>
    <td>${warehousing.warehousing_state}</td>
    <td>${warehousing.product_code}</td>
    <td>${warehousing.product_name}</td>
    <td>${warehousing.warehousing_state == "출고" ? "-" : warehousing.balju_code != null ? "O" : "X"}</td>
    <td>${warehousing.balju_code == null ? "-" : warehousing.balju_code}</td>
    <td>${warehousing.warehousing_date}</td>
    <td>${warehousing.warehousing_quantity}</td>
  </tr>
</c:forEach>

2. 로그인에 따른 헤더 제한

  1. comId != null
    • 매니저 로그인인 경우
      - 매니저 로그인 정보
      - 기업 정보
      - 조회 기업 변경
      - 로그아웃
    • 기업 로그인인 경우
      - 기업 정보
      - 로그아웃
  2. comId == null
    • 로그인
<ul class="navbar-nav ml-auto">
  <c:if test="${comId != null}">
    <c:if test="${managerUser != null && managerUser != ''}">
      <li class="nav-item no-arrow">
        <div class="nav-link">
          <i class="fas fa fa-user fa-0.5x activeColor" aria-hidden="true"></i>
          <span class="mr-2 d-none d-lg-inline text-gray-600 small">&nbsp ${managerUser.manager_name}</span>
        </div>
      </li>
      <div class="topbar-divider d-none d-sm-block"></div>
    </c:if>
    
    <li class="nav-item no-arrow">
      <div class="nav-link">
        <i class="fas fa fa-building fa-0.5x activeColor" aria-hidden="true"></i>
        <span class="mr-2 d-none d-lg-inline text-gray-600 small">&nbsp ${comName}</span>
      </div>
    </li>
    <div class="topbar-divider d-none d-sm-block"></div>
    
    <c:if test="${managerUser != null && managerUser != ''}">
      <li class="nav-item no-arrow dropdown">
        <a class="nav-link dropdown-toggle" href="#" role="button" id="dropdownMenuLink"
           data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" >
          <i class="fas fa-list fa-sm fa-fw mr-2 text-gray-400"></i>
          <span class="mr-2 d-none d-lg-inline text-gray-600 small">조회 기업 변경</span>
        </a>
        <div id="select-box" class="dropdown-menu dropdown-menu-right shadow animated--fade-in" aria-labelledby="dropdownMenuLink">
          <div class="dropdown-header">기업 목록</div>
          <c:forEach items="${lookUpList}" var="look" varStatus="status">
            <a class="dropdown-item" data-comId="${look.company_id}"
               data-comName="${look.company_name}">${look.company_id}: ${look.company_name}</a>
          </c:forEach>
        </div>
      </li>
      <div class="topbar-divider d-none d-sm-block"></div>
    </c:if>
    
    <li class="nav-item no-arrow">
      <a class="nav-link" href="#" role="button" aria-haspopup="true" aria-expanded="false"
         data-toggle="modal" data-target="#logoutModal"> 
        <i class="fas fa-sign-out-alt fa-sm fa-fw mr-2 text-gray-400"></i> 
        <span class="mr-2 d-none d-lg-inline text-gray-600 small">Logout</span>
      </a>
    </li>
  </c:if>
  
  <c:if test="${comId == null}">
    <li class="nav-item no-arrow">
      <a class="nav-link" href="/auth/LoginCheck.do"> 
        <i class="fas fa-sign-out-alt fa-sm fa-fw mr-2 text-gray-400"></i> 
        <span class="mr-2 d-none d-lg-inline text-gray-600 small">Login</span>
      </a>
    </li>
  </c:if>
</ul>

3. 상품 카테고리 select로 변환

<!-- product_insert.jsp -->
<tr>
  <th>카테고리</th>
  <td>
    <div class="nav-item no-arrow dropdown">
      <a class="nav-link dropdown-toggle" href="#" role="button" id="categoryInsertDropdown"
         data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" >
        <i class="fas fa-list fa-sm fa-fw mr-2 text-gray-400"></i>
        <input name="subcategory_name" id="selectedInsertCategory" class="mr-2 d-none d-lg-inline text-gray-600 small" value="카테고리 선택">
      </a>
      <div id="category-select-insert" class="dropdown-menu dropdown-menu-right shadow animated--fade-in" aria-labelledby="categoryInsertDropdown">
        <c:forEach items="${categoryList}" var="category">
          <div class="dropdown-header">${category.category_name}</div>
          <c:forEach items="${subcategoryList}" var="subcategory">
            <c:if test="${subcategory.category_code == category.category_code}">
              <a class="dropdown-item category-insert-item" data-value="${subcategory.subcategory_name}">${subcategory.subcategory_name}</a>
            </c:if>
          </c:forEach>
        </c:forEach>
      </div>
    </div>
  </td>
</tr>

<script>
  $(".category-insert-item").on("click", function () {
  	var selected = $(this).attr("data-value");
  	$("#selectedInsertCategory").attr("value", selected);
});
</script>

참고 자료

profile
어쩌다 풀스택 :3

0개의 댓글