This commit is contained in:
myname 2024-12-24 16:58:26 +09:00
commit 2b9e5fe4a7
9 changed files with 548 additions and 0 deletions

View File

@ -0,0 +1,13 @@
package kcc.com.uss.ion.hld.service;
import java.util.List;
public interface HolidayService {
public List<HolidayVO> selectHolidayList(HolidayVO holidayVO) throws Exception;
public void deleteHoliday(HolidayVO holidayVO) throws Exception;
public void insertHoliday(HolidayVO holidayVO) throws Exception;
}

View File

@ -0,0 +1,63 @@
package kcc.com.uss.ion.hld.service;
import java.io.Serializable;
import kcc.com.cmm.ComDefaultVO;
public class HolidayVO extends ComDefaultVO implements Serializable {
private static final long serialVersionUID = 5641887401063483713L;
public String locdate = ""; //날짜
public String dateKind = ""; //날짜종류
public String dateName = ""; //날짜명
public String holidayYn = ""; //공휴일 여부
public String delYn = ""; //삭제여부
public String regDt = ""; //등록일
public String updDt = ""; //변경일
public String getLocdate() {
return locdate;
}
public void setLocdate(String locdate) {
this.locdate = locdate;
}
public String getDateKind() {
return dateKind;
}
public void setDateKind(String dateKind) {
this.dateKind = dateKind;
}
public String getDateName() {
return dateName;
}
public void setDateName(String dateName) {
this.dateName = dateName;
}
public String getHolidayYn() {
return holidayYn;
}
public void setHolidayYn(String holidayYn) {
this.holidayYn = holidayYn;
}
public String getDelYn() {
return delYn;
}
public void setDelYn(String delYn) {
this.delYn = delYn;
}
public String getRegDt() {
return regDt;
}
public void setRegDt(String regDt) {
this.regDt = regDt;
}
public String getUpdDt() {
return updDt;
}
public void setUpdDt(String updDt) {
this.updDt = updDt;
}
}

View File

@ -0,0 +1,24 @@
package kcc.com.uss.ion.hld.service.impl;
import java.util.List;
import org.springframework.stereotype.Repository;
import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
import kcc.com.uss.ion.hld.service.HolidayVO;
@Repository("holidayDAO")
public class HolidayDAO extends EgovAbstractDAO {
public List<HolidayVO> selectHolidayList(HolidayVO holidayVO) throws Exception {
return (List<HolidayVO>) list("holidayDAO.selectHolidayList", holidayVO);
}
public void deleteHoliday(HolidayVO holidayVO) throws Exception {
update("holidayDAO.deleteHoliday", holidayVO);
}
public void insertHoliday(HolidayVO holidayVO) throws Exception {
update("holidayDAO.insertHoliday", holidayVO);
}
}

View File

@ -0,0 +1,33 @@
package kcc.com.uss.ion.hld.service.impl;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
import kcc.com.uss.ion.hld.service.HolidayService;
import kcc.com.uss.ion.hld.service.HolidayVO;
@Service("holidayService")
public class HolidayServiceImpl extends EgovAbstractServiceImpl implements HolidayService{
@Resource(name="holidayDAO")
private HolidayDAO holidayDAO;
@Override
public List<HolidayVO> selectHolidayList(HolidayVO holidayVO) throws Exception {
return holidayDAO.selectHolidayList(holidayVO);
}
@Override
public void deleteHoliday(HolidayVO holidayVO) throws Exception {
holidayDAO.deleteHoliday(holidayVO);
}
@Override
public void insertHoliday(HolidayVO holidayVO) throws Exception {
holidayDAO.insertHoliday(holidayVO);
}
}

View File

@ -0,0 +1,123 @@
package kcc.com.uss.ion.hld.web;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import kcc.com.uss.ion.hld.service.HolidayService;
import kcc.com.uss.ion.hld.service.HolidayVO;
@Controller
public class HolidayController {
@Resource(name = "holidayService")
private HolidayService holidayService;
@RequestMapping(value="/uss/holiday/selectHolidayList.do")
public String selectHolidayList(@ModelAttribute("holidayVO") HolidayVO holidayVO,ModelMap model, HttpSession session)throws Exception{
//현재년도 가져오기
LocalDate now = LocalDate.now();
int nowYear = now.getYear();
String nowYearStr = String.valueOf(nowYear);
model.addAttribute("nowYearStr", nowYearStr);
if("".equals(holidayVO.getSearchYear())) {
holidayVO.setSearchYear(nowYearStr);
}
List<HolidayVO> holidayList = holidayService.selectHolidayList(holidayVO);
model.addAttribute("holidayList", holidayList);
return "/com/holiday/holidayList";
}
@RequestMapping(value="/uss/holiday/deleteHoliday.do")
public String deleteHoliday(@ModelAttribute("holidayVO") HolidayVO holidayVO, RedirectAttributes redirectAttributes)throws Exception{
holidayService.deleteHoliday(holidayVO);
redirectAttributes.addAttribute("searchYear", holidayVO.getSearchYear());
return "redirect:/uss/holiday/selectHolidayList.do";
}
@RequestMapping(value="/uss/holiday/insertViewHoliday.do")
public String insertViewHoliday(@ModelAttribute("holidayVO") HolidayVO holidayVO)throws Exception{
return "/com/holiday/holidayInsert";
}
@RequestMapping(value="/uss/holiday/insertHoliday.do")
public String insertHoliday(@ModelAttribute("holidayVO") HolidayVO holidayVO, RedirectAttributes redirectAttributes)throws Exception{
holidayService.insertHoliday(holidayVO);
return "redirect:/uss/holiday/selectHolidayList.do";
}
@RequestMapping(value="/uss/holiday/insertHolidayAPI.do")
public String insertHolidayAPI(@ModelAttribute("holidayVO") HolidayVO holidayVO, RedirectAttributes redirectAttributes)throws Exception{
StringBuilder urlBuilder = new StringBuilder("http://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService/getRestDeInfo"); /*URL*/
urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + "=qC21K3oaxizQNSTba2aKLXQY8PdMn8N0GPYtjhnOUETJIlvcZ4bmeyJz2eyBQ9hCe%2B9v7A3ZINAKTWaofuR%2Fjw%3D%3D"); /*Service Key*/
urlBuilder.append("&" + URLEncoder.encode("numOfRows","UTF-8") + "=" + URLEncoder.encode("100", "UTF-8")); /*한 페이지 결과 수*/
urlBuilder.append("&" + URLEncoder.encode("solYear","UTF-8") + "=" + URLEncoder.encode(holidayVO.getSearchYear(), "UTF-8")); /*연*/
URL url = new URL(urlBuilder.toString());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-type", "application/json");
System.out.println("Response code: " + conn.getResponseCode());
BufferedReader rd;
if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
} else {
rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
}
StringBuilder sb = new StringBuilder();
String line;
while ((line = rd.readLine()) != null) {
sb.append(line);
}
rd.close();
conn.disconnect();
/*파싱 후 insert 반복*/
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputSource is = new InputSource(new StringReader(sb.toString()));
Document doc = builder.parse(is);
NodeList itemList = doc.getElementsByTagName("item");
List<HolidayVO> holidayList = new ArrayList<>();
for(int i=0; i <itemList.getLength(); i++ ) {
Element item = (Element) itemList.item(i);
HolidayVO holidayItem = new HolidayVO();
holidayItem.setLocdate(item.getElementsByTagName("locdate").item(0).getTextContent());
holidayItem.setDateKind(item.getElementsByTagName("dateKind").item(0).getTextContent().replace("0",""));
holidayItem.setDateName(item.getElementsByTagName("dateName").item(0).getTextContent());
holidayItem.setHolidayYn(item.getElementsByTagName("isHoliday").item(0).getTextContent());
holidayList.add(holidayItem);
}
for (HolidayVO holiday : holidayList) {
holidayService.insertHoliday(holiday);
}
return "redirect:/uss/holiday/selectHolidayList.do";
}
}

View File

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="holiday">
<typeAlias alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap"/>
<typeAlias alias="holidayVO" type="kcc.com.uss.ion.hld.service.HolidayVO"/>
<select id="holidayDAO.selectHolidayList" parameterClass="holidayVO" resultClass="holidayVO">
SELECT
A.LOCDATE AS locdate,
A.DATE_KIND AS dateKind,
A.DATE_NAME AS dateName,
A.HOLIDAY_YN AS holidayYn,
A.DEL_YN AS delYn,
A.REG_DT AS regDt,
A.UPD_DT AS updDt
FROM
C_RESTDEINFO A
WHERE
A.DEL_YN = 'N'
AND SUBSTR(A.LOCDATE, 0, 4) = #searchYear#
ORDER BY
A.LOCDATE ASC
</select>
<update id="holidayDAO.deleteHoliday" parameterClass="holidayVO">
UPDATE C_RESTDEINFO
SET
DEL_YN = 'Y',
UPD_DT = sysdate
WHERE LOCDATE = #locdate#
AND DATE_NAME = #dateName#
</update>
<insert id="holidayDAO.insertHoliday" parameterClass="holidayVO">
INSERT INTO C_RESTDEINFO (LOCDATE, DATE_KIND, DATE_NAME, HOLIDAY_YN, DEL_YN, REG_DT )
SELECT
#locdate#,
#dateKind#,
#dateName#,
'Y',
'N',
SYSDATE
FROM dual
WHERE NOT EXISTS (
SELECT 1
FROM C_RESTDEINFO
WHERE LOCDATE = #locdate# AND DATE_NAME = #dateName#
)
</insert>
</sqlMap>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<sqlMap resource="egovframework/sqlmap/com/uss/ion/hld/Holiday_SQL_Oracle.xml"/><!-- 배너 추가 -->
</sqlMapConfig>

View File

@ -0,0 +1,94 @@
<%@ page contentType="text/html; charset=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" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html lang="ko">
<head>
<title>공휴일 관리</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javaScript" language="javascript">
function fn_insert(){
if($("#dateName").val() == ''){
alert("공휴일 이름을 입력해 주세요.")
return false;
}
if(!/^\d{8}$/.test($("#locdate").val())){
alert("날짜는 YYYYMMdd 양식으로 작성해 주세요.");
return false;
}
var frm = document.holidayVO;
frm.action = "<c:url value='/uss/holiday/insertHoliday.do'/>";
frm.submit();
}
</script>
</head>
<body>
<form name="holidayVO" action="${pageContext.request.contextPath}/uss/holiday/selectHolidayList.do" method="post">
<!-- cont -->
<div class="cont_wrap">
<div class="box">
<!-- cont_tit -->
<div class="cont_tit">
<h2>공휴일 등록</h2>
<ul class="cont_nav">
<li class="home"><a href="/"><i></i></a></li>
<li>
<p>공휴일관리</p>
</li>
<li>
<p>공휴일관리</p>
</li>
<li><span class="cur_nav">공휴일 등록</span></li>
</ul>
</div>
<!-- //cont_tit -->
<div class="cont">
<!-- list_상세 -->
<div class="tbType02 col-table data-table">
<table>
<colgroup>
<col style="width: 20%">
<col style="width: 80%">
</colgroup>
<tbody>
<tr>
<th><span class="reqArea">공휴일 이름</span></th>
<td class="txaIpt">
<input type="text" name="dateName" id="dateName" maxlength="30" class="txaIpt w100per"/>
</td>
</tr>
<tr>
<th><span class="reqArea">날짜</span></th>
<td>
<input type="text" name="locdate" id="locdate" maxlength="8" placeholder="YYYYMMdd" class="txaIpt w100per"/>
</td>
</tr>
</tbody>
</table>
</div>
<!-- //list_상세 -->
<!-- btn_wrap -->
<div class="btn_wrap">
<div class="area_right">
<button class="btn btn_text btn_46 gray_fill btnType03" onclick="location.href='/uss/holiday/selectHolidayList.do'; return false;">목 록</button>
<button class="btn btn_text btn_46 blue_fill btnType02" onclick="fn_insert(); return false;">등 록</button>
</div>
</div>
<!-- //btn_wrap -->
</div>
</div>
</div>
<!-- //cont -->
</form>
</body>
</html>

View File

@ -0,0 +1,136 @@
<%@ page 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="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Language" content="ko" >
<title>공휴일 관리</title>
<script type="text/javaScript" language="javascript">
$(document).ready(function(){
var nowYear = ${nowYearStr};
var years = [nowYear -1, nowYear, nowYear +1, nowYear+2];
var searchYearSelect = $("#searchYear");
var selectedYear = '${holidayVO.searchYear}';
years.forEach(year =>{
var option = $('<option></option>'); // jQuery를 사용하여 option 요소 생성
option.val(year); // value 설정
option.text(year + '년'); // 텍스트 설정
if (year == selectedYear) {
option.attr('selected', 'selected'); // selected 속성 설정
}
searchYearSelect.append(option); // jQuery의 append 메서드 사용
});
});
function linkPage(pageNo){
var listForm = document.listForm ;
listForm.action = "<c:url value='/uss/holiday/selectHolidayList.do'/>";
listForm.submit();
}
function fn_delete(locdate, dateName){
if(confirm("삭제하시겠습니까?")) {
var frm = document.listForm ;
frm.locdate.value = locdate;
frm.dateName.value = dateName;
frm.action = "<c:url value='/uss/holiday/deleteHoliday.do'/>";
frm.submit();
}
}
function fn_holdayAPI(){
if(confirm($("#searchYear option:selected").text() + " 공휴일을 연동하시겠습니까?")){
var frm = document.listForm ;
frm.action = "<c:url value='/uss/holiday/insertHolidayAPI.do'/>";
frm.submit();
}
}
</script>
</head>
<body>
<form id="listForm" name="listForm" action="" method="post">
<input type="hidden" name="locdate" value=""/>
<input type="hidden" name="dateName" value=""/>
<!-- cont -->
<div class="cont_wrap">
<div class="box">
<div class="cont_tit">
<h2>공휴일관리</h2>
<ul class="cont_nav">
<li class="home"><a href="/"><i></i></a></li>
<li>
<p>공휴일관리</p>
</li>
<li><span class="cur_nav">공휴일관리</span></li>
</ul>
</div>
<!-- cont -->
<div class="cont">
<!-- list_top -->
<div class="list_top table_top">
<p><span class="color_blue fw_bold"></span></p>
<div class="list_util search_wrap">
<select class="sel2" name="searchYear" id="searchYear" onchange="linkPage(1);" title="년도 선택" style="width: 140px">
</select>
<button class="btn btn_text blue_border" onclick="fn_holdayAPI(); return false;">공휴일 API 연동</button>
</div>
</div>
<!-- //list_top -->
<!-- list -->
<div class="table-layout mt15">
<table>
<colgroup>
<col style="width: 25%">
<col style="width: 25%">
<col style="width: 25%">
<col style="width: 25%">
</colgroup>
<thead>
<tr>
<th scope="col">날짜<button class="sort sortBtn" id="sort_cntId">▲</button></th>
<th scope="col">공휴일 이름<button class="sort sortBtn" id="sort_cntName">▲</button></th>
<th scope="col">등록일<button class="sort sortBtn" id="sort_registerId">▲</button></th>
<th scope="col">삭제</th>
</tr>
</thead>
<tbody>
<c:forEach var="result" items="${holidayList}" varStatus="status">
<tr>
<td><c:out value="${result.locdate}"/></td>
<td><c:out value="${result.dateName}"/></td>
<td><c:out value="${result.regDt}"/></td>
<td>
<button type="button" class="btn btn_text btn_30 orange_border btnType01" onclick="fn_delete('<c:out value="${result.locdate}"/>','<c:out value="${result.dateName}"/>'); return false;">삭제 </button>
</td>
</tr>
</c:forEach>
<c:if test="${empty holidayList}">
<tr><td colspan="4"><spring:message code="common.nodata.msg" /></td></tr>
</c:if>
</tbody>
</table>
</div>
<!-- //list -->
<!-- btn_wrap -->
<div class="btn_wrap">
<button type="button" class="btn btn_text btn_46 blue_fill" onclick="location.href='/uss/holiday/insertViewHoliday.do'; return false;">등록</button>
</div>
<!-- //btn_wrap -->
</div>
</div>
</div>
<!-- //cont -->
</form>
</body>
</html>