본문 바로가기

반응형
오늘은 결재글 리스트 화면을 마저 구현하도록 하겠습니다.

 

오늘 만족해야 할 것

게시글 조건
    - 과장은 결재대기 상태인 글만, 부장은 결재중 상태인 글만 보이도록 합니다.
    - 결재 상태는 코드값으로 저장되지만 노출은 사용장게 맞춰서 보이도록 합니다.
    - 작성자,결재자 이름을 저장하지 말고 결재 상태 처럼 노출만 작성자, 결재자 이름으로 되게 작성

 

1. 계급별 노출 게시글

부장은 결재완료, 결재중인 게시글을 볼 수 있어야 하며, 과장은 결재 대기, 대리와 사원은 본인의 결재글만 보이도록 해야합니다. 

1-1. Controller

	@RequestMapping(value = "/list", method = RequestMethod.GET)
	public String list(HttpServletRequest request, RedirectAttributes redirectAttributes, Model model) {
		HttpSession session = request.getSession();
		String sessionId = (String) session.getAttribute("sessionId");
		String sessionPst = (String) session.getAttribute("sessionPst"); // 추가

		if (sessionId == null) {
			redirectAttributes.addFlashAttribute("msg", "로그인 하세요");
			return "redirect:/login";
		}
		Map<String, Object> listCdt = new HashMap<String, Object>();
		listCdt.put("writerId", sessionId);
		listCdt.put("sessionPst", sessionPst); // 추가
		
		List<Map<String, Object>> appList = appSer.getAppList(listCdt);

		model.addAttribute("appList", appList);
		
		return "list";
	}

로그인을 해줄 때 sessionPst를 set 해줬었습니다. 직급을 이용해야하니 이번엔 get으로 해당 값을 불러오겠습니다.

1-2. Mapper

	<select id="getAppList" resultMap="App">
		select
			eaa.app_seq,
			eamw.mem_name WRITER_NAME,
			eaa.app_title,
			to_char(eaa.reg_date, 'yyyy-mm-dd') reg_date,
			to_char(eaa.app_date, 'yyyy-mm-dd') app_date,
			eama.mem_name APPER_NAME,
			decode(eaa.app_status,'A','결재 대기','B','결재 중','C','결재 완료') app_status
		from e_approval_app eaa
		left join e_approval_member eamw on eaa.writer_seq = eamw.mem_seq
		left join e_approval_member eama on eaa.apper_seq = eama.mem_seq
		<!-- 본인이 작성한 글만 보이도록 -->
		where eamw.id = #{writerId}
		<!-- 각 직급별로 볼 수 있는 글 -->
		<if test="sessionPst =='부장' ">
			or (eaa.app_status in ('C', 'B'))
		</if>
		<if test="sessionPst == '과장' ">
			or (eaa.app_status = 'A')
		</if>
		order by eaa.app_seq desc
	</select>

쿼리 해석을 해보도록 하겠습니다. 우리는 Controller에서 sessionPst(직급)을 파라미터로 받았습니다. 이 값은 한글로 되어있는 직급이며 부장, 과장, 대리, 사원이 있죠. 그래서 if문을 이용해서 각 직급마다 조건을 주면 됩니다. 이 때, 대리와 사원은 오직 자신의 글만 보여야 하는데, 이미 이전 시간에 써둔 조건이 있죠? 그러니 if문을 따로 써줄 필요는 없습니다.
부장과 과장은 자신의 글도 보여야 하니 or 을 이용해서 추가 조건을 줬습니다.

1-3. 결과

과장, 부장, 대리 결재글 리스트

 

2. 결재글 상태 코드값으로 저장, 작성자(& 결재자) 이름말고 다른 것으로 저장

저희가 지금까지 코딩을 이렇게 해왔었습니다. 그래서 추가적으로 해줄 것은 없습니다! 헤헤

ex) Mapper - decode... , ServiceImpl - appMap.put("appStatus", "A");, ....

 

오늘은 정말 빠르게 구현했네요... 다음 시간엔 검색 구현을 하겠습니다. 빠잇~!

 

후기

분량 조절을 잘못해서 이번엔 정말 빠르게 구현했네요... 2번을 보며 저번 시간과 같은 것을 느꼈습니다.
비록 처음에는 요구조건을 보며 설계하는 데에 오랜 시간을 썼지만 그로 인해서 이렇게 막힘 없이, 또는 예상했던 것보다 빠르게 끝낼 수 있었습니다.
반응형
댓글