쿼리문에 부등호가 들어갈 경우 요런식으로 사용 가능함
<![CDATA[ ]]> << 쿼리문 전체를 요안에 넣어줘도 됨
09:00시를 넘어서 출근을 찍었을 경우 state값을 변경해주기
<insert id="towork">
insert into commute (towork,writeday,sawon,state)
values(curtime(),#{param2},#{param1}, <![CDATA['09:00:00' < curtime()]]>)
</insert>
mysql if문은 참일경우 실행,참이아닐경우 이후 이프문의 값을 넣어줌
update commute set tohome=curtime() , state , if(state=0,2 , if(state=1,3))
위 쿼리문의 해석
update commute set tohome=curtime() 현재 퇴근 찍은 시간을 업데이트 해주고
state = if('18:00:00' <= curtime() << 퇴근 찍은 시간이 18시를 넘거나 같다면 ,state << 값을 넣어주고
, if(state=0,2, if(state=1,3)) << 참이 아닐 경우 state값이 0이면 2, 1이면 3을 넣어줘라
위에쿼리문을 사용해서 바꾼 쿼리문을 보자믄 아래처럼해야함
<update id="tohome"><![CDATA[
update commute set tohome=curtime(),
state=if('18:00:00' <= curtime() , state, if(state=0,2, if(state=1,3,state) )))
where writeday=#{param2} and sawon=#{param1}
]]>
</update>
그리고 이제 출력하는 부분에서 변경해줘야하는 사항이 있음
mypage 에서 휴가인 경우가 추가됨 출,퇴근이 둘다 null이고 state값이 4(결근),5(휴가) 인데
코드를 적어보자면
@Override
public String mypage(HttpSession session,Model model) {
// 회원정보
String sawon = session.getAttribute("sawon").toString();
MemberVo mvo = mapper.mypage(sawon);
model.addAttribute("mvo",mvo);
model.addAttribute("depart",mapper.getDepartName(mvo.getDepart()));
// 출퇴근 출력
LocalDate today = LocalDate.now();
CommuteVo cvo = mapper.getCommute(sawon,today.toString());
int chk;
if(cvo==null)
{
// 출근 안함.
chk=1;
}
else if(cvo.getTowork()==null && cvo.getTohome()==null && cvo.getState()==5)
{
chk=4;
}
else if(cvo.getTowork()!=null && cvo.getTohome()==null)
{ // 출근이 저장됐다.
chk=2;
}
else
{ // 출,퇴근이 전부 DB에 저장됐다.
chk=3;
}
model.addAttribute("chk",chk);
// 사원간 쪽지
return "/member/mypage";
}
mypage.jsp 처리는 아래처럼
<section>
<table width="800" align="center">
<caption> <h3 style="text-align:center"> 사원 정보 <a href="/member/memberUp" style="font-size:13px"> 정보 수정 </a> </h3> </caption>
<tr>
<td width="80"> 이 름 </td>
<td width="160">${mvo.name}</td>
<td width="80"> 아이디 </td>
<td width="160">${mvo.userid}</td>
<td width="80"> 사원코드 </td>
<td width="160"> ${mvo.sawon} </td>
</tr>
<tr>
<td> 부 서 </td>
<td>${depart}</td>
<td> 입사일 </td>
<td>${mvo.ipsa}</td>
<td> 전화번호 </td>
<td>${mvo.phone}</td>
</tr>
</table>
여기부분에 휴가가 추가 됨
<h3 align="center"> 출퇴근 정보
<c:if test="${chk==1}">
<span id="comm"> <a href="towork"> 출근찍기 </a> </span>
</c:if>
<c:if test="${chk==2}">
<span id="comm"> <a href="tohome"> 퇴근찍기 </a> </span>
</c:if>
<c:if test="${chk==3}">
<span id="comm"> 출퇴근완료 </span>
</c:if>
<c:if test="${chk==4}">
<span id="comm"> 휴 가 </span>
</c:if>
</h3>
</section>
그리고 관리자가 보는 출,퇴근 페이지 jsp 처리는 이런식으로 if문 처리로 상태를 보여줌
<section>
<table width="800" align="center">
<caption> <h3> ${today} 출퇴근 정보 </h3> </caption>
<tr>
<td> 이 름 </td>
<td> 출근시간 </td>
<td> 퇴근시간 </td>
<td> 상 태 </td>
</tr>
<c:forEach items="${list}" var="cvo">
<tr>
<td>${cvo.name}</td>
<td>${cvo.towork}</td>
<td>${cvo.tohome}</td>
<td>
<c:if test="${cvo.state==0}">
정상
</c:if>
<c:if test="${cvo.state==1}">
지각
</c:if>
<c:if test="${cvo.state==2}">
조퇴
</c:if>
<c:if test="${cvo.state==3}">
결근
</c:if>
<c:if test="${cvo.state==4}">
휴가
</c:if>
</td>
</tr>
</c:forEach>
</table>
</section>
혹시나 까먹고 어제 안적었을까봐 적어두는 출근 입력하기
출근 구현클래스
@Override
public String towork(HttpSession session) {
String sawon = session.getAttribute("sawon").toString();
String today = LocalDate.now().toString();
mapper.towork(sawon,today);
return "redirect:/member/mypage";
}
mapper
<insert id="towork">
insert into commute (towork,writeday,sawon,state)
values(curtime(),#{param2},#{param1}, <![CDATA['09:00:00' < curtime()]]>)
</insert>
혹시나 까먹고 어제 안적었을까봐 적어두는 퇴근 입력하기
퇴근 구현클래스( 출근과 같음 )
@Override
public String tohome(HttpSession session) {
String sawon = session.getAttribute("sawon").toString();
String today = LocalDate.now().toString();
mapper.tohome(sawon,today);
return "redirect:/member/mypage";
}
퇴근 mapper
오늘 한건데 헷갈리니까 한번 더 적어서 익혀두기
<update id="tohome"><![CDATA[
update commute set tohome=curtime(),
state=if('18:00:00' <= curtime() , state, if(state=0,2, if(state=1,3,state) ))
where writeday=#{param2} and sawon=#{param1}
]]>
</update>
쪽지 보내기 jsp 처리
<script>
function getName(depart)
{
var chk = new XMLHttpRequest();
chk.onload=function()
{
var data = JSON.parse(chk.responseText);
var str = "";
for(mem in data)
{
str = str+ "<option value=' "+data[mem].sawon+" '>" + data[mem].name + "</option>";
}
document.getElementById("gname").innerHTML=str;
}
chk.open("get","getName?depart="+depart);
chk.send();
}
</script>
</head>
<body>
<div id="mform">
<form method="post" action="sendmemo_ok">
<div>
<select name="depart" onchange="getName(this.value)">
<option> 부서선택 </option>
<c:forEach items="${list}" var="dvo">
<option value="${dvo.code}"> ${dvo.name} </option>
</c:forEach>
</select>
<select name="resawon" id="gname">
</select>
</div>
<div> <input type="text" name="title"> </div>
<div> <textarea name="content"> </textarea> </div>
<div> <input type="submit" value="쪽지보내기"> </div>
</form>
</div>
</body>
보낸쪽지중 총 갯수와 읽은쪽지 값 가져오기
<select id="getChongCnt" resultType="int">
select count(*) from memo where sesawon=#{param}
</select>
<select id="getReadCnt" resultType="int">
select count(*) from memo where sesawon=#{param} and state=1
</select>
view 파일에 출력하기
<table width="400" align="center">
<caption><h3> 쪽지 관련
<span id="comm"> <a href="javascript:mopen()"> 쪽지 보내기 </a> </span>
</h3>
</caption>
<tr>
<td> 보낸 쪽지 </td>
<td> 받은 쪽지 </td>
</tr>
<tr>
<td> 보낸쪽지 <span style="color:red">${readcnt}</span> / ${chongcnt} </td>
<td> 받은쪽지 <span style="color:red">${readcnt2}</span> / ${chongcnt2} </td></td>
</tr>
</table>