50일 차 특이사항
1. 날짜검색 동기처리
- 날짜 검색 실패
- ORACLE에서 테이블 만들 때 APPR_REG_DATE를 DATE로 설정해 줬다. TO_DATE 함수를 써야하나?
CREATE TABLE "GIANTSTUDY"."JSH_APPROVAL_LIST"
( "SEQ" NUMBER,
"WRITE_ID" VARCHAR2(20 BYTE),
"APPR_SUBJECT" VARCHAR2(20 BYTE),
"APPR_CONTENT" VARCHAR2(20 BYTE),
"APPR_STATUS" VARCHAR2(20 BYTE),
"APPR_REG_DATE" DATE,
"APPR_DATE" DATE,
"APPR_APPER" VARCHAR2(20 BYTE)
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS" ;
- TO_DATE를 사용해서 APPR_REG_DATE를 날짜형식으로 변환해 주니 검색이 잘된다. 그런데 다른 문제가 생겼다. 날짜를 10/17~10/18로 설정하면 오늘날짜로 쓴 글이 보이지 않는다. 범위를 다시 설정해 주자. %gt는 '이상'을 뜻하고 %lt는 '이하'를 뜻한다. enDate에 +1을 해줘야 18일에 쓴 글이 보인다. +1을 해주면 18일 자정 이전까지 데이터를 모두 볼 수 있다.
<if test="stDate != null and stDate != ''">
and APPR_REG_DATE >= TO_DATE(#{stDate}, 'yyyy-MM-dd')
</if>
<if test="enDate != null and enDate != ''">
and APPR_REG_DATE <= TO_DATE(#{enDate}, 'yyyy-MM-dd') +1
</if>
2. 결재상태 비동기처리 (완료)
3. 검색조건, 검색어 임시저장
- 컨트롤러에서 map을 받아오지 못하는 문제가 있었다.
$("#searchType").val('${map.searchType}');
$("#searchTxt").val('${map.searchTxt}');
- controller에 "map"을 추가해줬다.
model.addAttribute("map", map);
- 문제 해결!
4. 결재 중인데 반려, 결재, 임시저장 버튼이 보이면 안 된다.
- 결재상태가 결재 중이면 ~ 조건문을 수정해 보자.
- 결재상태가 'ing' 결재 중인 경우, memRank가 부장이면 임시저장 버튼만 없앤다. 즉, 반려, 결재버튼은 그대로 보인다. 다른 사람들(사원, 대리, 과장)은 모든 버튼이 사라진다(권한 없어짐).
-. show()를 사용할 필요 없음. 이미 버튼은 다 보이고 있기 때문에 숨기는 것이 목적임.
//결재중
}else if(mofyStatus == 'ing'){
$("#signWait").prop("checked",true);
$("#signIng").prop("checked",true);
if (memRank == 'KING') {
$("#tmpBtn").hide();
} else {
$("#tmpBtn, #retBtn, #appBtn").hide();
}
5. 부장이 결재하면 글이 사라진다. 글이 보이도록 다시 설정.
- 왜 반려 혹은 결재를 누르면 결재글이 사라지는 걸까? 이유를 못 찾고 있다.
- 부장이 부장 자신이 쓴 글을 결제하면 글이 사라지지 않는다.
- 어디서 문제지?
- 이곳이 문제였다. mapper에서 결재 상태가 'ing'인 글만 조회되는 상태였다. APPR_STATUS = 'end'를 추가해 주자 글이 사라지지 않고 조회된다. 글이 사라진 것처럼 보였던 것이다. 글이 조회되지 않아서 사라지는 것처럼 보임.
<when test="memInfo.memRank == 'KING'">
and (APPR_STATUS = 'ing' OR APPR_STATUS = 'end' OR WRITE_ID = #{memInfo.memId})
</when>
해결 못한 문제...
6. 반려 후 결재자가 삭제되어야 한다.
- 결재상태가 반려라면~ 결재자가 공백이 되도록 한다.
- 혹은 결재자가 null로 업데이트된다?
- jsp에서 처리해 줬다. apprStatusKor(결재상태)가 반려가 아닌 경우만 결제자를 표시해 주고, 결재상태가 반려면 결제자를 공백으로 처리함.
- 그런데 이건 임시방편에 불과하잖아. apprStatusKor가 반려로 바뀌면 결재자가 공백으로 update가 돼야 한다.
<c:forEach items="${apprList}" var="list">
<tr onclick="fncGoDetail(${list.seq})">
<td>${list.seq}</td>
<td>${list.writeName}</td>
<td>${list.apprSubject}</td>
<td>${list.apprRegDate}</td>
<td>${list.apprDate}</td>
<td>
<c:choose>
<c:when test="${list.apprStatusKor != '반려'}">
${list.apperName}
</c:when>
<c:otherwise>
<!-- '반려' 상태인 결제자 공백 -->
</c:otherwise>
</c:choose>
</td>
<td>${list.apprStatusKor}</td>
</tr>
</c:forEach>
- 이것도 안 되고 , 막혀버렸다.
<if test="apprStatus = 'ret'">
and APPR_DATE = null
and APPR_APPER = null
</if>
7. 힌트 : history table을 기준으로 마지막 결재자가 로그인 id와 같으면 글이 조회된다.
- 이것도 해결하지 못했음. 조건을 부여하기가 까다롭다. 어떻게 해야 할지 모르겠다.
보기 좋게
1. 검색 후 데이터가 존재하지 않는 경우, 왼쪽에 치우쳐져서 text가 출력됐다. text-align: center로 가운데 정렬해 주기.
<c:when test="${empty apprList}">
<tr>
<td colspan="7" style="text-align: center;">데이터가 존재하지 않습니다</td>
</tr>
</c:when>
7개 중에 5개 해결
많이 해결하긴 했지만 가장 어려운 2개의 문제를 해결하지 못해서 매우 찝찝하다. 그러나 계속 들여다봐도 문제 해결을 못하겠다. 머리를 비우고 다시 시도해 보자.
'일경험' 카테고리의 다른 글
[국민취업지원제도 일경험프로그램 51일차] 결재시스템 마무리 ⑩ (1) | 2023.10.19 |
---|---|
[결재 시스템] 결재 상태가 반려로 바뀌면 결재일과 결재자를 null로 바꿔주기 (0) | 2023.10.18 |
[국민취업지원제도 일경험프로그램 49일차] 결재시스템 중간점검⑨ (0) | 2023.10.17 |
[국민취업지원제도 일경험프로그램 48일차] 결재시스템 과장이 문제다⑧ (0) | 2023.10.16 |
[국민취업지원제도 일경험프로그램 48일차] 결재시스템 결재, 임시저장 ⑦ (0) | 2023.10.13 |