본문 바로가기

일경험

[국민취업지원제도 일경험프로그램 50일차] 결재시스템 2개 남았다⑩

반응형

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 &gt;= TO_DATE(#{stDate}, 'yyyy-MM-dd')
</if>
<if test="enDate != null and enDate != ''">
    and APPR_REG_DATE &lt;= 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>

text-align : center

 

7개 중에 5개 해결

많이 해결하긴 했지만 가장 어려운 2개의 문제를 해결하지 못해서 매우 찝찝하다. 그러나 계속 들여다봐도 문제 해결을 못하겠다. 머리를 비우고 다시 시도해 보자.

 

 

 

반응형