본문 바로가기
Coding/전자정부프레임

1.예약 프로그램 관리자 페이지

by 찡콩찡 2022. 9. 21.

[예약] 내가 개발자라면 어떤 순서대로 작성해야 할까? 스토리보드는 사용자 흐름으로 작성한 것

프로그램 정보 다음에 예약자 정보

 

1 관리자 예약 프로그램 정보 CRUD 

 

2 관리자 예약자 관리 RUD 사용자가 예약한것을 관리함

 

3 사용자 예약 프로그램 정보  R : 1번이 돼야 C를 가져와서 LIST를 뿌림, 사용자 CRUD를 실행해야하면 3번을 먼저 해야함 

 

4 사용자 예약 CRUD : 예약함

 

1 -3 -4-2번 순으로 개발하는게 좋음

 

WBS (Work Breakdown Strucutre)  : 프로젝트 관리 및 시스템 엔지니어링에서 프로젝트 소규모의 구성 단위까지 나누어 전달할 수 있는 기능


https://debasedev.tistory.com/54

 

[PM] WBS (Work Breakdown Structure) 란?

WBS (Work Breakdown Structure)  전체 주간 회의 진행 중에 신규 개발건에 대해 이야기가 나왔는데 한참을 이야기하던 도중에 "해당 내용 WBS 로 작성해서 올려봐" 라는 말을 듣고 뭔진 모르겠지만 일단

debasedev.tistory.com


ReservationAdminController

 

//예약정보 등록/수정
	@RequestMapping(value= "/admin/rsv/rsvRegist.do")
	public String rsvRegist(@ModelAttribute("serviceVO") egovframework.let.rsv.service.ReservationVO ReservationVO,HttpServletRequest request, Model model) throws Exception{
		LoginVO user= (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
		if(user == null) {
			model.addAttribute("message", "로그인 후 사용가능합니다.");
			return "forward:/adming/rsv/rsvServcieList.do";
		}else {
			model.addAttribute("USER_INFO", user);
		}
        
        //정보가 비어져있으면 등록페이지로 가고 아이디 정보가 있으면 서치해서 가져와서
        //수정페이지로 가라
		ReservationVO result = new ReservationVO();
		if(!EgovStringUtil.isEmpty(ReservationVO.getResveId())) {
			result = reservationService.selectReservation(ReservationVO);
		}
		model.addAttribute("result", result);
        
		request.getSession().removeAttribute("sessionReservation");
        
		//jsp위치
		return "admin/rsv/RsvRegist";
	}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %>    
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>  
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>    

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Language" content="ko">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
<title>수업용 게시판</title>
<!-- BBS Style -->
<link href="/asset/BBSTMP_0000000000001/style.css" rel="stylesheet"/>
<!-- 공통 style -->
<link href="/asset/LYTTMP_0000000000000/style.css" rel="stylesheet"/>

<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<link rel="stylesheet" type="text/css" href="/asset/front/style.css">
<link href="/asset/front/style.css" rel="stylesheet"/>

<!-- JQUERY UI -->
//달력
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">

//시간
<script src="//cdnjs.cloudflare.com/ajax/libs/timepicker/1.3.5/jquery.timepicker.min.js"></script>
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/timepicker/1.3.5/jquery.timepicker.mis.css">


</head>
<body>
<c:choose>
	<c:when test="${not empty searchVO.resveId}">
		<c:set var="actionUrl" value="/admin/rsv/rsvUpdate.do"/>
	</c:when>
	<c:otherwise>
		<c:set var="avtionUrl" value="/admin/rsv/rsvInsert.do"/>
	</c:otherwise>
</c:choose>

<%--기본url --%>
<c:url var="_BASE_PARAM" value="">	
	<c:param name="searchCondition" value=""/>
	<c:if test="${not empty searchVO.searchKeyword}"><c:param name="searchKeyword" value="${searchVO.searchKeyword}"/></c:if>
</c:url>

<%-- <content 시작> --%>
<div id="content">
	<div class="container">
		<div id="contents">
			<form action="${actionUrl}" method="post" id="frm" name="frm" onsubmit="return regist()">
				<input type="hidden" name="resveId" value="${result.resveId}"/>
				
				<table class="chart2">
					<caption>예약정보 작성</caption>
					<colgroup>
						<col style="width:150px"/>
						<col />
					</colgroup>
				    <tbody>
				    	<tr> 
				    		<th scope="row">프로그램명</th>
				    		<td>
				    		 	<input type="text" id="resveSj" name="resveSj" title="제목입력" class="q3" value="<c:out value="${result.resveSj}"/>"/>
				    		</td>
				    	</tr>
				    	<tr>
				    		<th scope="row">프로그램 종류</th>
				    		<td>
				    			<select id="resveSeCode" name="resveSeCode">
				    				<option value="TYPE01">선착순</option>
				    				<option value="TYPE02"><c:if test="${result.resveSeCode eq 'TYPE02'}">selected="selected"</c:if>승인관리</option>
				    		    </select>
				    		</td>
				    	</tr>
				    	<tr>
				    		<th scope="row">운영기관</th>
				    		<td>
				    		 	<input type="text" id="useBeginDt" class="datepicker" name="useBeginDt" title="운영시작일" value="<c:out value="${result.useBeginDt}"/>" readonly="readonly"/>
				  				~ <input type="text" id="useEndDt" class="datepicker" name="useEndDt" title="운영종료일" value"<c:out value="${result.useEndDt}"/>" readonly="readonly"/>
				  			</td>
				  		</tr>
				  		<tr>
				  			<th scope="row">운영시간</th>
				  			<td>
				  				<input type="text" id="useBeginTime" class="timepicker" name="useBeginTime" title="운영시작시간" value="<c:out value="${result.useBeginTime}"/>"readonly="readonly"/>
				       		~<input type="text" id="useEndTime" class="timepicker" name="useEndTime" title="운영종료시간" value="<c:out value="${result.useEndTime}"/>"readonly="readonly"/>
				    		</td>
				    	</tr>
				    	<tr>
				    		<th scope="row">신청기간</th>
				    		<td> 
				    			<input type="text" id="reqstBgnde" class="datepicker" name="reqstBgnde" title="신청시작일" value="<c:out value="${result.reqstBgnde}"/>" readonly="readonly"/>
				    			~<input type="text" id="reqstEndde" class="datepicker" name="reqstEndde" title="신청종료일" value="<c:out value="${result.reqstEndde}"/>" readonly="readonly"/>
				    		</td>
				    	</tr>
				    	<tr>
				    		<th scope="row">강사명</th>
				    		<td>
				    			<input type="text" id="recNm" name="recNm" title="강사명" value="<c:out value="${result.recNm}"/>"/>
				   			</td>
				   		</tr>
				   		<tr>
				   			<th scope="row">신청인원수</th>
				   			<td>
				   				<input type="number" id="maxAplyCnt" name="maxAplyCnt" title="신청인원수" value="<c:out value="${result.maxAplyCnt}"/>"/>명
							</td>
						</tr>
						<tr> 
							<th scope="row">내용</th>
							<td> 
								<textarea rows="resveCn" name="resveCn" row="15" title="내용입력"><c:out value="${result.resveCn}"/></textarea>
							</td>
						</tr>
					</tbody>
				</table>
				<div class="btn-cont ar">
					<c:choose>
						<c:when test="${not empty searchVO.resveId}">
							<c:url var="uptUrl" value="/admin/rsv/rsvRegist.do${_BASE_PARAM}">
								<c:param name="resveId" value="${result.resveId}"/>							
							</c:url>
							<a href="${uptUrl}" id="btn-reg" class="btn">수정</a>
							
							<c:url var="delUrl" value="/admin/rsv/rsvDelete.do${_BASE_PARAM}">
								<c:param name="resveId" value="${result.resveId}"/>
							</c:url>
						    <a href="delUrl" id="btn-del" class="btn"><i class="ico-del">삭제</a>
						</c:when>
						<c:otherwise>
							<a href="#none" id="btn-reg" class="btn spot">등록</a>
						</c:otherwise>
					</c:choose>
					<c:url var="listUrl" value="/admin/rsv/rsvSelectList.do${_BASE_PARAM}"/>
					<a herf="${listUrl}" class="btn">취소</a>					
				</div>
			</form>
		</div>
	</div>
</div>
<!-- content끝 -->
<script>
$(document).ready(function(){
	//datepicker
	$(".datepicker").datepicker({
		dateFormat: 'yy-mm-dd',
		prevText: '이전달',
		nextText: '다음달',
		monthNames: ['1월','2월','3월','4월','5월','6월','7월','8월','9월','10월','11월','12월'],
		monthNamesShort:['1월','2월','3월','4월','5월','6월','7월','8월','9월','10월','11월','12월'],
		dayNames: ['일','월','화','수','목','금','토'],
		dayNamesShort: ['일','월','화','수','목','금','토'],
		showMonthAfterYear:true,
		yearSuffix: '년'
	});
	
	$('.timepicker').timepicker({
		timeFormat: 'HH:mm',
		interval: 60,
		minTime: '10',
		maxTime: '18:00',
		startTime: '10:00',
		dropdown:true,
		scrollbar:true
	});
	
	//예약정보등록
	$('#btn-reg').click(function(){
		$("#frm").submit();
		return false;
	});
	
	//예약글 삭제
	$("#btn-del").click(function(){
		if(!confirm("삭제하시겠습니까?")){
			return false;
		}
	});
});
function regist() {
	if(!$("#resveSj").val()){
		alert("프로그램명을 입력해주세요");
		return false;
	}
}

</script>
</body>
</html>

https://velog.io/@jch9537/URI-URL

 

URI & URL

웹개발 공부를 하면서 URL과 URI에 대해 자주 들었지만 둘 사이의 명확한 차이점을 알지 못해 정리를 해보게 되었다.결론부터 말하면 URI가 URL의 상위개념이며 공부를 하며 느낀 점은 URL이라고 부

velog.io

//예약정보 등록하기
	@RequestMapping(value="/admin/rsv/rsvInsert.do")
	public String insert(@ModelAttribute("searchVO")ReservationVO searchVO, HttpServletRequest request, ModelMap model) throws Exception{
		//이중 서브밋 방지 체크
		if(request.getSession().getAttribute("sessionReservation") != null) {
			return "forward:/admin/rsv/rsvSelectList.do";
		}
		LoginVO user= (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
		if(user == null) {
			model.addAttribute("message", "로그인 후 사용가능합니다.");
			return "forward:/admin/rsv/rsvSelectList.do";
		}
		searchVO.setUserId(user.getId());
		
		reservationService.insertReservation(searchVO);
		
		//이중 서브밋 방지
		request.getSession().setAttribute("sessionReservation", searchVO);
		return  "forward:/admin/rsv/rsvSelectList.do";
	}
//예약정보 수정하기
	@RequestMapping(value="/admin/rsv/rsvUpdate.do")
	public String rsvUpdate(@ModelAttribute("searchVO") ReservationVO searchVO,HttpServletRequest request, ModelMap model)throws Exception{
		//이중 서브밋 방지 체크
			if(request.getSession().getAttribute("sessionReservation") != null) {
				return "forward:/admin/rsv/rsvSelectList.do";
			}
			LoginVO user= (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
			if(user == null) {
				model.addAttribute("message", "로그인 후 사용가능합니다.");
			return "forward:/admin/rsv/rsvSelectList.do";
			}
			searchVO.setUserId(user.getId());
			reservationService.updateReservation(searchVO);
			
			//이중서브밋 방지
			request.getSession().setAttribute("sessionReservation", searchVO);
			return "forward:/admin/rsv/rsvSelectList.do";
}
	//예약정보 삭제하기
		@RequestMapping(value="/admin/rsv/rsvDelete.do")
		public String rsvDelete(@ModelAttribute("searchVO") ReservationVO searchVO,HttpServletRequest request, ModelMap model)throws Exception{
			LoginVO user= (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
			if(user == null) {
				model.addAttribute("message", "로그인 후 사용가능합니다.");
				return  "forward:/admin/rsv/rsvSelectList.do";
			}
			searchVO.setUserId(user.getId());
			reservationService.deleteReservation(searchVO);
			
			return  "forward:/admin/rsv/rsvSelectList.do";
		}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>예약관리</title>

<!-- BoardSelectList CSS -->
<!-- BBS Style -->
<link href="/asset/BBSTMP_0000000000001/style.css" rel="stylesheet"/>
<!-- 공통 style -->
<link href="/asset/LYTTMP_0000000000000/style.css" rel="stylesheet"/>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>


</head>
<body>

<!-- 기본 URL -->
<c:url var="_BASE_PARAM" value="">
   <c:param name="searchCondition" value="${searchVO.searchCondition}"/>
   <c:if test="${not empty searchVO.searchKeyword}">
      <c:param name="searchKeyword" value="${searchVO.searchKeyword}"/>
   </c:if>
</c:url>

<!-- content 시작 -->
<div id="content">
   <div class="container">
      <div id="contents">
          <!--검색영역 -->
         <div id="bbs_search">
            <form action="/admin/rsv/rsvSelectList.do" name="frm" method="post">
               <fieldset>
                  <legend>검색조건입력폼</legend>
                  <label for="ftext" class="hdn">검색분류선택</label>
                  <select name="searchCondition" id="ftext">
                     <option value="0" <c:if test="${searchVO.searchCondition eq '0'}">selected="selected"</c:if>>프로그램명</option>
                     <option value="1" <c:if test="${searchVO.searchCondition eq '1'}">selected="selected"</c:if>>내용</option>
                  </select>
                  <label for="inp_text" class="hdn">검색어입력</label>
                  <input name="searchKeyword" value="<c:out value="${searchVO.searchKeyword}"/>" type="text" class="inp_s" id="inp_text"/>
                  <span class="bbtn_s"><input type="submit" value="검색" title="검색(수업용 예약관리 게시물 내)"/></span>
               </fieldset>
            </form>
         </div>
         <!--목록영역 -->
         <div id="bbs_wrap">
            <div class="total">
               총 게시물
               <strong><c:out value="${paginationInfo.totalRecordCount}"/></strong>건 |
               현재 페이지 <strong><c:out value="${paginationInfo.currentPageNo}"/></strong>/
               <c:out value="${paginationInfo.totalPageCount}"/>
            </div>
            <div class="bss_list">
               <table class="list_table">
                  <thead>
                     <tr>
                        <th class="num" scope="col">번호</th>
                        <th class="tit" scope="col">프로그램명</th>
                        <th scope="col">신청기간</th>
                        <th scope="col">운영일</th>
                        <th scope="col">운영시간</th>
                        <th scope="col">강사명</th>
                        <th scope="col">신청자</th>
                        <th scope="col">관리</th>
                     </tr>
                  </thead>
                  <tbody>
                     <c:forEach var="result" items="${resultList}" varStatus="status">
                        <tr>
                           <td class="num"><c:out value="${paginationInfo.totalRecordCount - ((searchVO.pageIndex-1) * searchVO.pageUnit) - (status.count - 1)}"/></td>
                           <td class="tit">
                              <c:url var="updateUrl" value="/admin/rsv/rsvRegist.do${_BASE_PARAM}">
                                 <c:param name="resveId" value="${result.resveId}"/>
                                 <c:param name="pageIndex" value="${searchVO.pageIndex}"/>
                              </c:url>
                              <a href="${updateUrl}">
                                 <c:out value="${result.resveSj}"/>
                              </a>
                           </td>
                           <td>
                              <c:out value="${result.reqstBgnde}"/>~<br>
                              <c:out value="${result.reqstEndde}"/>
                           </td>
                           <td>
                              <c:out value="${result.useBeginDt}"/>~<br>
                              <c:out value="${result.useEndDt}"/>
                           </td>
                           <td><c:out value="${result.useBeginTime}~${result.useEndTime}"/></td>
                           <td><c:out value="${result.recNm}"/></td>
                           <td>
                              <c:url var="applyUrl" value="/admin/rsv/selectApplyList.do${_BASE_PARAM}">
                                 <c:param name="resveId" value="${result.resveId}"/>
                                 <c:param name="pageIndex" value="${searchVO.pageIndex}"/>
                              </c:url>
                              <a href="${applyUrl}" class="btn spot">신청자</a>
                           </td>
                           <td>
                              <a href="${updateUrl}" class="btn spot">수정</a>
                              <br/><br/>
                              <c:url var="deleteUrl" value="/admin/rsv/rsvDelete.do${_BASE_PARAM}">
                                 <c:param name="resveId" value="${result.resveId}"/>
                                 <c:param name="pageIndex" value="${searchVO.pageIndex}"/>
                              </c:url>
                              <a href="${deleteUrl}" class="btn spot btn-del">삭제</a>
                           </td>
                        </tr>
                     </c:forEach>
                     <!--글이 없을 경우 -->
                     <c:if test="${fn:length(resultList) == 0}">
                        <tr class="empty"><td colspan="8">검색 데이터가 없습니다.</td></tr>
                     </c:if>
                  </tbody>
               </table>
            </div>
            <div id="paging">
               <c:url var="pageUrl" value="/admin/rsv/rsvSelectList.do${_BASE_PARAM}"/>
               <c:set var="pagingParam"><c:out value="${pageUrl}"/></c:set>
               <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="${pagingParam}"/>
            </div>
         </div>
         <div class="btn-cont ar">
            <a href="/admin/rsv/rsvRegist.do" class="btn spot"><i class="ico-check-spot"></i> 등록</a>
         </div>
      </div>
   </div>
</div>
<!-- content 끝 -->
<script>
<c:if test="${not empty message}">
   alert("${message}")
</c:if>
   
//예약글 삭제
$(".btn-del").click(function(){
   if(!confirm("삭제하시겠습니까?")){
      return false;
   }
});
</script>
</body>
</html>

'Coding > 전자정부프레임' 카테고리의 다른 글

사용자예약 프로그램 정보  (0) 2022.09.28
3.사용자 예약프로그램 만들기  (0) 2022.09.21
예약관리  (0) 2022.09.14
OAuth 2.0 버전을 이용하여 네이버 로그인해보기  (0) 2022.09.07
회원가입  (0) 2022.08.17