diff --git a/src/main/java/kcc/com/utl/fcc/service/EgovDateUtil.java b/src/main/java/kcc/com/utl/fcc/service/EgovDateUtil.java
index 8a3dcbb6..3aedc11a 100644
--- a/src/main/java/kcc/com/utl/fcc/service/EgovDateUtil.java
+++ b/src/main/java/kcc/com/utl/fcc/service/EgovDateUtil.java
@@ -1,865 +1,869 @@
-package kcc.com.utl.fcc.service;
-
-import java.security.SecureRandom;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-import java.util.TimeZone;
-
-import com.ibm.icu.util.ChineseCalendar;
-
-/**
- *
- * Date 에 대한 Util 클래스
- * @author 공통서비스 개발팀 이중호
- * @since 2009.02.01
- * @version 1.0
- * @see
- *
- *
- * << 개정이력(Modification Information) >>
- *
- * 수정일 수정자 수정내용
- * ------- -------- ---------------------------
- * 2009.02.01 이중호 최초 생성
- *
- *
- */
-public class EgovDateUtil {
-
- /**
- * yyyyMMdd 혹은 yyyy-MM-dd 형식의 날짜 문자열을 입력 받아 년, 월, 일을
- * 증감한다. 년, 월, 일은 가감할 수를 의미하며, 음수를 입력할 경우 감한다.
- *
- *
- * DateUtil.addYearMonthDay("19810828", 0, 0, 19) = "19810916"
- * DateUtil.addYearMonthDay("20060228", 0, 0, -10) = "20060218"
- * DateUtil.addYearMonthDay("20060228", 0, 0, 10) = "20060310"
- * DateUtil.addYearMonthDay("20060228", 0, 0, 32) = "20060401"
- * DateUtil.addYearMonthDay("20050331", 0, -1, 0) = "20050228"
- * DateUtil.addYearMonthDay("20050301", 0, 2, 30) = "20050531"
- * DateUtil.addYearMonthDay("20050301", 1, 2, 30) = "20060531"
- * DateUtil.addYearMonthDay("20040301", 2, 0, 0) = "20060301"
- * DateUtil.addYearMonthDay("20040229", 2, 0, 0) = "20060228"
- * DateUtil.addYearMonthDay("20040229", 2, 0, 1) = "20060301"
- *
- *
- * @param dateStr 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식)
- * @param year 가감할 년. 0이 입력될 경우 가감이 없다
- * @param month 가감할 월. 0이 입력될 경우 가감이 없다
- * @param day 가감할 일. 0이 입력될 경우 가감이 없다
- * @return yyyyMMdd 형식의 날짜 문자열
- * @throws IllegalArgumentException 날짜 포맷이 정해진 바와 다를 경우.
- * 입력 값이 null인 경우.
- */
- public static String addYearMonthDay(String sDate, int year, int month, int day) {
-
- String dateStr = validChkDate(sDate);
-
- Calendar cal = Calendar.getInstance();
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd", Locale.getDefault());
- try {
- cal.setTime(sdf.parse(dateStr));
- } catch (ParseException e) {
- throw new IllegalArgumentException("Invalid date format: " + dateStr);
- }
-
- if (year != 0) {
- cal.add(Calendar.YEAR, year);
- }
- if (month != 0) {
- cal.add(Calendar.MONTH, month);
- }
- if (day != 0) {
- cal.add(Calendar.DATE, day);
- }
-
- return sdf.format(cal.getTime());
- }
-
- /**
- * yyyyMMdd 혹은 yyyy-MM-dd 형식의 날짜 문자열을 입력 받아 년을
- * 증감한다. year는 가감할 수를 의미하며, 음수를 입력할 경우 감한다.
- *
- *
- * DateUtil.addYear("20000201", 62) = "20620201"
- * DateUtil.addYear("20620201", -62) = "20000201"
- * DateUtil.addYear("20040229", 2) = "20060228"
- * DateUtil.addYear("20060228", -2) = "20040228"
- * DateUtil.addYear("19000101", 200) = "21000101"
- *
- *
- * @param dateStr 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식)
- * @param year 가감할 년. 0이 입력될 경우 가감이 없다
- * @return yyyyMMdd 형식의 날짜 문자열
- * @throws IllegalArgumentException 날짜 포맷이 정해진 바와 다를 경우.
- * 입력 값이 null인 경우.
- */
- public static String addYear(String dateStr, int year) {
- return addYearMonthDay(dateStr, year, 0, 0);
- }
-
- /**
- * yyyyMMdd 혹은 yyyy-MM-dd 형식의 날짜 문자열을 입력 받아 월을
- * 증감한다. month는 가감할 수를 의미하며, 음수를 입력할 경우 감한다.
- *
- *
- * DateUtil.addMonth("20010201", 12) = "20020201"
- * DateUtil.addMonth("19800229", 12) = "19810228"
- * DateUtil.addMonth("20040229", 12) = "20050228"
- * DateUtil.addMonth("20050228", -12) = "20040228"
- * DateUtil.addMonth("20060131", 1) = "20060228"
- * DateUtil.addMonth("20060228", -1) = "20060128"
- *
- *
- * @param dateStr 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식)
- * @param month 가감할 월. 0이 입력될 경우 가감이 없다
- * @return yyyyMMdd 형식의 날짜 문자열
- * @throws IllegalArgumentException 날짜 포맷이 정해진 바와 다를 경우.
- * 입력 값이 null인 경우.
- */
- public static String addMonth(String dateStr, int month) {
- return addYearMonthDay(dateStr, 0, month, 0);
- }
-
- /**
- * yyyyMMdd 혹은 yyyy-MM-dd 형식의 날짜 문자열을 입력 받아 일(day)를
- * 증감한다. day는 가감할 수를 의미하며, 음수를 입력할 경우 감한다.
- *
- * 위에 정의된 addDays 메서드는 사용자가 ParseException을 반드시 처리해야 하는 불편함이
- * 있기 때문에 추가된 메서드이다.
- *
- *
- * DateUtil.addDay("19991201", 62) = "20000201"
- * DateUtil.addDay("20000201", -62) = "19991201"
- * DateUtil.addDay("20050831", 3) = "20050903"
- * DateUtil.addDay("20050831", 3) = "20050903"
- * // 2006년 6월 31일은 실제로 존재하지 않는 날짜이다 -> 20060701로 간주된다
- * DateUtil.addDay("20060631", 1) = "20060702"
- *
- *
- * @param dateStr 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식)
- * @param day 가감할 일. 0이 입력될 경우 가감이 없다
- * @return yyyyMMdd 형식의 날짜 문자열
- * @throws IllegalArgumentException 날짜 포맷이 정해진 바와 다를 경우.
- * 입력 값이 null인 경우.
- */
- public static String addDay(String dateStr, int day) {
- return addYearMonthDay(dateStr, 0, 0, day);
- }
-
- /**
- * yyyyMMdd 혹은 yyyy-MM-dd 형식의 날짜 문자열 dateStr1과
- * dateStr2 사이의 일 수를 구한다.
- * dateStr2가 dateStr1 보다 과거 날짜일 경우에는
- * 음수를 반환한다. 동일한 경우에는 0을 반환한다.
- *
- *
- * DateUtil.getDaysDiff("20060228","20060310") = 10
- * DateUtil.getDaysDiff("20060101","20070101") = 365
- * DateUtil.getDaysDiff("19990228","19990131") = -28
- * DateUtil.getDaysDiff("20060801","20060802") = 1
- * DateUtil.getDaysDiff("20060801","20060801") = 0
- *
- *
- * @param dateStr1 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식)
- * @param dateStr2 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식)
- * @return 일 수 차이.
- * @throws IllegalArgumentException 날짜 포맷이 정해진 바와 다를 경우.
- * 입력 값이 null인 경우.
- */
- public static int getDaysDiff(String sDate1, String sDate2) {
- String dateStr1 = validChkDate(sDate1);
- String dateStr2 = validChkDate(sDate2);
-
- if (!checkDate(sDate1) || !checkDate(sDate2)) {
- throw new IllegalArgumentException("Invalid date format: args[0]=" + sDate1 + " args[1]=" + sDate2);
- }
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd", Locale.getDefault());
-
- Date date1 = null;
- Date date2 = null;
- try {
- date1 = sdf.parse(dateStr1);
- date2 = sdf.parse(dateStr2);
- } catch (ParseException e) {
- throw new IllegalArgumentException("Invalid date format: args[0]=" + dateStr1 + " args[1]=" + dateStr2);
- }
-
- if (date1 != null && date2 != null) {
- int days1 = (int) ((date1.getTime() / 3600000) / 24);
- int days2 = (int) ((date2.getTime() / 3600000) / 24);
- return days2 - days1;
- } else {
- return 0;
- }
-
- }
-
- /**
- * yyyyMMdd 혹은 yyyy-MM-dd 형식의 날짜 문자열을 입력 받아 유효한 날짜인지 검사.
- *
- *
- * DateUtil.checkDate("1999-02-35") = false
- * DateUtil.checkDate("2000-13-31") = false
- * DateUtil.checkDate("2006-11-31") = false
- * DateUtil.checkDate("2006-2-28") = false
- * DateUtil.checkDate("2006-2-8") = false
- * DateUtil.checkDate("20060228") = true
- * DateUtil.checkDate("2006-02-28") = true
- *
- *
- * @param dateStr 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식)
- * @return 유효한 날짜인지 여부
- */
- public static boolean checkDate(String sDate) {
- String dateStr = validChkDate(sDate);
-
- String year = dateStr.substring(0, 4);
- String month = dateStr.substring(4, 6);
- String day = dateStr.substring(6);
-
- return checkDate(year, month, day);
- }
-
- /**
- * 입력한 년, 월, 일이 유효한지 검사.
- *
- * @param year 연도
- * @param month 월
- * @param day 일
- * @return 유효한 날짜인지 여부
- */
- public static boolean checkDate(String year, String month, String day) {
- try {
- SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd", Locale.getDefault());
-
- Date result = formatter.parse(year + "." + month + "." + day);
- String resultStr = formatter.format(result);
- if (resultStr.equalsIgnoreCase(year + "." + month + "." + day))
- return true;
- else
- return false;
- } catch (ParseException e) {
- return false;
- }
- }
-
- /**
- * 날짜형태의 String의 날짜 포맷 및 TimeZone을 변경해 주는 메서드
- *
- * @param strSource 바꿀 날짜 String
- * @param fromDateFormat 기존의 날짜 형태
- * @param toDateFormat 원하는 날짜 형태
- * @param strTimeZone 변경할 TimeZone(""이면 변경 안함)
- * @return 소스 String의 날짜 포맷을 변경한 String
- */
- public static String convertDate(String strSource, String fromDateFormat, String toDateFormat, String strTimeZone) {
- SimpleDateFormat simpledateformat = null;
- Date date = null;
- String fromFormat = "";
- String toFormat = "";
-
- if (EgovStringUtil.isNullToString(strSource).trim().equals("")) {
- return "";
- }
- if (EgovStringUtil.isNullToString(fromDateFormat).trim().equals(""))
- fromFormat = "yyyyMMddHHmmss"; // default값
- if (EgovStringUtil.isNullToString(toDateFormat).trim().equals(""))
- toFormat = "yyyy-MM-dd HH:mm:ss"; // default값
-
- try {
- simpledateformat = new SimpleDateFormat(fromFormat, Locale.getDefault());
- date = simpledateformat.parse(strSource);
- if (!EgovStringUtil.isNullToString(strTimeZone).trim().equals("")) {
- simpledateformat.setTimeZone(TimeZone.getTimeZone(strTimeZone));
- }
- simpledateformat = new SimpleDateFormat(toFormat, Locale.getDefault());
- } catch (ParseException exception) {
- throw new RuntimeException(exception);
- }
-
- return simpledateformat.format(date);
-
- }
-
- /**
- * yyyyMMdd 형식의 날짜문자열을 원하는 캐릭터(ch)로 쪼개 돌려준다
- *
- * ex) 20030405, ch(.) -> 2003.04.05
- * ex) 200304, ch(.) -> 2003.04
- * ex) 20040101,ch(/) --> 2004/01/01 로 리턴
- *
- *
- * @param date yyyyMMdd 형식의 날짜문자열
- * @param ch 구분자
- * @return 변환된 문자열
- */
- public static String formatDate(String sDate, String ch) {
- String dateStr = validChkDate(sDate);
-
- String str = dateStr.trim();
- String yyyy = "";
- String mm = "";
- String dd = "";
-
- if (str.length() == 8) {
- yyyy = str.substring(0, 4);
- if (yyyy.equals("0000")) {
- return "";
- }
-
- mm = str.substring(4, 6);
- if (mm.equals("00")) {
- return yyyy;
- }
-
- dd = str.substring(6, 8);
- if (dd.equals("00")) {
- return yyyy + ch + mm;
- }
-
- return yyyy + ch + mm + ch + dd;
-
- } else if (str.length() == 6) {
- yyyy = str.substring(0, 4);
- if (yyyy.equals("0000")) {
- return "";
- }
-
- mm = str.substring(4, 6);
- if (mm.equals("00")) {
- return yyyy;
- }
-
- return yyyy + ch + mm;
-
- } else if (str.length() == 4) {
- yyyy = str.substring(0, 4);
- if (yyyy.equals("0000")) {
- return "";
- } else {
- return yyyy;
- }
- } else {
- return "";
- }
- }
-
- /**
- * HH24MISS 형식의 시간문자열을 원하는 캐릭터(ch)로 쪼개 돌려준다
- *
- * ex) 151241, ch(/) -> 15/12/31
- *
- *
- * @param str HH24MISS 형식의 시간문자열
- * @param ch 구분자
- * @return 변환된 문자열
- */
- public static String formatTime(String sTime, String ch) {
- String timeStr = validChkTime(sTime);
- return timeStr.substring(0, 2) + ch + timeStr.substring(2, 4) + ch + timeStr.substring(4, 6);
- }
-
- /**
- * 연도를 입력 받아 해당 연도 2월의 말일(일수)를 문자열로 반환한다.
- *
- * @param year
- * @return 해당 연도 2월의 말일(일수)
- */
- public String leapYear(int year) {
- if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
- return "29";
- }
-
- return "28";
- }
-
- /**
- * 입력받은 연도가 윤년인지 아닌지 검사한다.
- *
- *
- * DateUtil.isLeapYear(2004) = false
- * DateUtil.isLeapYear(2005) = true
- * DateUtil.isLeapYear(2006) = true
- *
- *
- * @param year 연도
- * @return 윤년 여부
- */
- public static boolean isLeapYear(int year) {
- if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
- return false;
- }
- return true;
- }
-
- /**
- * 현재(한국기준) 날짜정보를 얻는다.
- * 표기법은 yyyy-mm-dd
- * @return String yyyymmdd형태의 현재 한국시간.
- */
- public static String getToday() {
- return getCurrentDate("");
- }
-
- /**
- * 현재(한국기준) 날짜정보를 얻는다.
- * 표기법은 yyyy-mm-dd
- * @return String yyyymmdd형태의 현재 한국시간.
- */
- public static String getCurrentDate(String dateType) {
- Calendar aCalendar = Calendar.getInstance();
-
- int year = aCalendar.get(Calendar.YEAR);
- int month = aCalendar.get(Calendar.MONTH) + 1;
- int date = aCalendar.get(Calendar.DATE);
- String strDate = Integer.toString(year)
- + ((month < 10) ? "0" + Integer.toString(month) : Integer.toString(month))
- + ((date < 10) ? "0" + Integer.toString(date) : Integer.toString(date));
-
- if (!"".equals(dateType)) {
- strDate = convertDate(strDate, "yyyyMMdd", dateType);
- }
-
- return strDate;
- }
-
- /**
- * 날짜형태의 String의 날짜 포맷만을 변경해 주는 메서드
- * @param sDate 날짜
- * @param sTime 시간
- * @param sFormatStr 포멧 스트링 문자열
- * @return 지정한 날짜/시간을 지정한 포맷으로 출력
- * @See Letter Date or Time Component Presentation Examples
- G Era designator Text AD
- y Year Year 1996; 96
- M Month in year Month July; Jul; 07
- w Week in year Number 27
- W Week in month Number 2
- D Day in year Number 189
- d Day in month Number 10
- F Day of week in month Number 2
- E Day in week Text Tuesday; Tue
- a Am/pm marker Text PM
- H Hour in day (0-23) Number 0
- k Hour in day (1-24) Number 24
- K Hour in am/pm (0-11) Number 0
- h Hour in am/pm (1-12) Number 12
- m Minute in hour Number 30
- s Second in minute Number 55
- S Millisecond Number 978
- z Time zone General time zone Pacific Standard Time; PST; GMT-08:00
- Z Time zone RFC 822 time zone -0800
-
- Date and Time Pattern Result
- "yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT
- "EEE, MMM d, ''yy" Wed, Jul 4, '01
- "h:mm a" 12:08 PM
- "hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
- "K:mm a, z" 0:08 PM, PDT
- "yyyyy.MMMMM.dd GGG hh:mm aaa" 02001.July.04 AD 12:08 PM
- "EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700
- "yyMMddHHmmssZ" 010704120856-0700
-
- */
- public static String convertDate(String sDate, String sTime, String sFormatStr) {
- String dateStr = validChkDate(sDate);
- String timeStr = validChkTime(sTime);
-
- Calendar cal = null;
- cal = Calendar.getInstance();
-
- cal.set(Calendar.YEAR, Integer.parseInt(dateStr.substring(0, 4)));
- cal.set(Calendar.MONTH, Integer.parseInt(dateStr.substring(4, 6)) - 1);
- cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dateStr.substring(6, 8)));
- cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(timeStr.substring(0, 2)));
- cal.set(Calendar.MINUTE, Integer.parseInt(timeStr.substring(2, 4)));
-
- SimpleDateFormat sdf = new SimpleDateFormat(sFormatStr, Locale.ENGLISH);
-
- return sdf.format(cal.getTime());
- }
-
- /**
- * 입력받은 일자 사이의 임의의 일자를 반환
- * @param sDate1 시작일자
- * @param sDate2 종료일자
- * @return 임의일자
- */
- public static String getRandomDate(String sDate1, String sDate2) {
- String dateStr1 = validChkDate(sDate1);
- String dateStr2 = validChkDate(sDate2);
-
- String randomDate = null;
-
- int sYear, sMonth, sDay;
- int eYear, eMonth, eDay;
-
- sYear = Integer.parseInt(dateStr1.substring(0, 4));
- sMonth = Integer.parseInt(dateStr1.substring(4, 6));
- sDay = Integer.parseInt(dateStr1.substring(6, 8));
-
- eYear = Integer.parseInt(dateStr2.substring(0, 4));
- eMonth = Integer.parseInt(dateStr2.substring(4, 6));
- eDay = Integer.parseInt(dateStr2.substring(6, 8));
-
- GregorianCalendar beginDate = new GregorianCalendar(sYear, sMonth - 1, sDay, 0, 0);
- GregorianCalendar endDate = new GregorianCalendar(eYear, eMonth - 1, eDay, 23, 59);
-
- if (endDate.getTimeInMillis() < beginDate.getTimeInMillis()) {
- throw new IllegalArgumentException("Invalid input date : " + sDate1 + "~" + sDate2);
- }
-
- SecureRandom r = new SecureRandom();
-
- r.setSeed(new Date().getTime());
-
- long rand = ((r.nextLong() >>> 1) % (endDate.getTimeInMillis() - beginDate.getTimeInMillis() + 1)) + beginDate.getTimeInMillis();
-
- GregorianCalendar cal = new GregorianCalendar();
- //SimpleDateFormat calformat = new SimpleDateFormat("yyyy-MM-dd");
- SimpleDateFormat calformat = new SimpleDateFormat("yyyyMMdd", Locale.ENGLISH);
- cal.setTimeInMillis(rand);
- randomDate = calformat.format(cal.getTime());
-
- // 랜덤문자열를 리턴
- return randomDate;
- }
-
- /**
- * 입력받은 양력일자를 변환하여 음력일자로 반환
- * @param sDate 양력일자
- * @return 음력일자
- */
- public static Map toLunar(String sDate) {
- String dateStr = validChkDate(sDate);
-
- Map hm = new HashMap();
- hm.put("day", "");
- hm.put("leap", "0");
-
- if (dateStr.length() != 8) {
- return hm;
- }
-
- Calendar cal;
- ChineseCalendar lcal;
-
- cal = Calendar.getInstance();
- lcal = new ChineseCalendar();
-
- cal.set(Calendar.YEAR, Integer.parseInt(dateStr.substring(0, 4)));
- cal.set(Calendar.MONTH, Integer.parseInt(dateStr.substring(4, 6)) - 1);
- cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dateStr.substring(6, 8)));
-
- lcal.setTimeInMillis(cal.getTimeInMillis());
-
- String year = String.valueOf(lcal.get(ChineseCalendar.EXTENDED_YEAR) - 2637);
- String month = String.valueOf(lcal.get(ChineseCalendar.MONTH) + 1);
- String day = String.valueOf(lcal.get(ChineseCalendar.DAY_OF_MONTH));
- String leap = String.valueOf(lcal.get(ChineseCalendar.IS_LEAP_MONTH));
-
- String pad4Str = "0000";
- String pad2Str = "00";
-
- String retYear = (pad4Str + year).substring(year.length());
- String retMonth = (pad2Str + month).substring(month.length());
- String retDay = (pad2Str + day).substring(day.length());
-
- String SDay = retYear + retMonth + retDay;
-
- hm.put("day", SDay);
- hm.put("leap", leap);
-
- return hm;
- }
-
- /**
- * 입력받은 음력일자를 변환하여 양력일자로 반환
- * @param sDate 음력일자
- * @param iLeapMonth 음력윤달여부(IS_LEAP_MONTH)
- * @return 양력일자
- */
- public static String toSolar(String sDate, int iLeapMonth) {
- String dateStr = validChkDate(sDate);
-
- Calendar cal;
- ChineseCalendar lcal;
-
- cal = Calendar.getInstance();
- lcal = new ChineseCalendar();
-
- lcal.set(ChineseCalendar.EXTENDED_YEAR, Integer.parseInt(dateStr.substring(0, 4)) + 2637);
- lcal.set(ChineseCalendar.MONTH, Integer.parseInt(dateStr.substring(4, 6)) - 1);
- lcal.set(ChineseCalendar.DAY_OF_MONTH, Integer.parseInt(dateStr.substring(6, 8)));
- lcal.set(ChineseCalendar.IS_LEAP_MONTH, iLeapMonth);
-
- cal.setTimeInMillis(lcal.getTimeInMillis());
-
- String year = String.valueOf(cal.get(Calendar.YEAR));
- String month = String.valueOf(cal.get(Calendar.MONTH) + 1);
- String day = String.valueOf(cal.get(Calendar.DAY_OF_MONTH));
-
- String pad4Str = "0000";
- String pad2Str = "00";
-
- String retYear = (pad4Str + year).substring(year.length());
- String retMonth = (pad2Str + month).substring(month.length());
- String retDay = (pad2Str + day).substring(day.length());
-
- return retYear + retMonth + retDay;
- }
-
- /**
- * 입력받은 요일의 영문명을 국문명의 요일로 반환
- * @param sWeek 영문 요일명
- * @return 국문 요일명
- */
- public static String convertWeek(String sWeek) {
- String retStr = null;
-
- if (sWeek.equals("SUN")) {
- retStr = "일요일";
- } else if (sWeek.equals("MON")) {
- retStr = "월요일";
- } else if (sWeek.equals("TUE")) {
- retStr = "화요일";
- } else if (sWeek.equals("WED")) {
- retStr = "수요일";
- } else if (sWeek.equals("THR")) {
- retStr = "목요일";
- } else if (sWeek.equals("FRI")) {
- retStr = "금요일";
- } else if (sWeek.equals("SAT")) {
- retStr = "토요일";
- }
-
- return retStr;
- }
-
- /**
- * 입력일자의 유효 여부를 확인
- * @param sDate 일자
- * @return 유효 여부
- */
- public static boolean validDate(String sDate) {
- String dateStr = validChkDate(sDate);
-
- Calendar cal;
- boolean ret = false;
-
- cal = Calendar.getInstance();
-
- cal.set(Calendar.YEAR, Integer.parseInt(dateStr.substring(0, 4)));
- cal.set(Calendar.MONTH, Integer.parseInt(dateStr.substring(4, 6)) - 1);
- cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dateStr.substring(6, 8)));
-
- String year = String.valueOf(cal.get(Calendar.YEAR));
- String month = String.valueOf(cal.get(Calendar.MONTH) + 1);
- String day = String.valueOf(cal.get(Calendar.DAY_OF_MONTH));
-
- String pad4Str = "0000";
- String pad2Str = "00";
-
- String retYear = (pad4Str + year).substring(year.length());
- String retMonth = (pad2Str + month).substring(month.length());
- String retDay = (pad2Str + day).substring(day.length());
-
- String retYMD = retYear + retMonth + retDay;
-
- if (sDate.equals(retYMD)) {
- ret = true;
- }
-
- return ret;
- }
-
- /**
- * 입력일자, 요일의 유효 여부를 확인
- * @param sDate 일자
- * @param sWeek 요일 (DAY_OF_WEEK)
- * @return 유효 여부
- */
- public static boolean validDate(String sDate, int sWeek) {
- String dateStr = validChkDate(sDate);
-
- Calendar cal;
- boolean ret = false;
-
- cal = Calendar.getInstance();
-
- cal.set(Calendar.YEAR, Integer.parseInt(dateStr.substring(0, 4)));
- cal.set(Calendar.MONTH, Integer.parseInt(dateStr.substring(4, 6)) - 1);
- cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dateStr.substring(6, 8)));
-
- int Week = cal.get(Calendar.DAY_OF_WEEK);
-
- if (validDate(sDate)) {
- if (sWeek == Week) {
- ret = true;
- }
- }
-
- return ret;
- }
-
- /**
- * 입력시간의 유효 여부를 확인
- * @param sTime 입력시간
- * @return 유효 여부
- */
- public static boolean validTime(String sTime) {
- String timeStr = validChkTime(sTime);
-
- Calendar cal;
- boolean ret = false;
-
- cal = Calendar.getInstance();
-
- cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(timeStr.substring(0, 2)));
- cal.set(Calendar.MINUTE, Integer.parseInt(timeStr.substring(2, 4)));
-
- String HH = String.valueOf(cal.get(Calendar.HOUR_OF_DAY));
- String MM = String.valueOf(cal.get(Calendar.MINUTE));
-
- String pad2Str = "00";
-
- String retHH = (pad2Str + HH).substring(HH.length());
- String retMM = (pad2Str + MM).substring(MM.length());
-
- String retTime = retHH + retMM;
-
- if (sTime.equals(retTime)) {
- ret = true;
- }
-
- return ret;
- }
-
- /**
- * 입력된 일자에 연, 월, 일을 가감한 날짜의 요일을 반환
- * @param sDate 날짜
- * @param year 연
- * @param month 월
- * @param day 일
- * @return 계산된 일자의 요일(DAY_OF_WEEK)
- */
- public static String addYMDtoWeek(String sDate, int year, int month, int day) {
- String dateStr = validChkDate(sDate);
-
- dateStr = addYearMonthDay(dateStr, year, month, day);
-
- Calendar cal = Calendar.getInstance();
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd", Locale.ENGLISH);
- try {
- cal.setTime(sdf.parse(dateStr));
- } catch (ParseException e) {
- throw new IllegalArgumentException("Invalid date format: " + dateStr);
- }
-
- SimpleDateFormat rsdf = new SimpleDateFormat("E", Locale.ENGLISH);
-
- return rsdf.format(cal.getTime());
- }
-
- /**
- * 입력된 일자에 연, 월, 일, 시간, 분을 가감한 날짜, 시간을 포멧스트링 형식으로 반환
- * @param sDate 날짜
- * @param sTime 시간
- * @param year 연
- * @param month 월
- * @param day 일
- * @param hour 시간
- * @param minute 분
- * @param formatStr 포멧스트링
- * @return
- */
- public static String addYMDtoDayTime(String sDate, String sTime, int year, int month, int day, int hour, int minute, String formatStr) {
- String dateStr = validChkDate(sDate);
- String timeStr = validChkTime(sTime);
-
- dateStr = addYearMonthDay(dateStr, year, month, day);
-
- dateStr = convertDate(dateStr, timeStr, "yyyyMMddHHmm");
-
- Calendar cal = Calendar.getInstance();
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm", Locale.ENGLISH);
-
- try {
- cal.setTime(sdf.parse(dateStr));
- } catch (ParseException e) {
- throw new IllegalArgumentException("Invalid date format: " + dateStr);
- }
-
- if (hour != 0) {
- cal.add(Calendar.HOUR, hour);
- }
-
- if (minute != 0) {
- cal.add(Calendar.MINUTE, minute);
- }
-
- SimpleDateFormat rsdf = new SimpleDateFormat(formatStr, Locale.ENGLISH);
-
- return rsdf.format(cal.getTime());
- }
-
- /**
- * 입력된 일자를 int 형으로 반환
- * @param sDate 일자
- * @return int(일자)
- */
- public static int datetoInt(String sDate) {
- return Integer.parseInt(convertDate(sDate, "0000", "yyyyMMdd"));
- }
-
- /**
- * 입력된 시간을 int 형으로 반환
- * @param sTime 시간
- * @return int(시간)
- */
- public static int timetoInt(String sTime) {
- return Integer.parseInt(convertDate("00000101", sTime, "HHmm"));
- }
-
- /**
- * 입력된 일자 문자열을 확인하고 8자리로 리턴
- * @param sDate
- * @return
- */
- public static String validChkDate(String dateStr) {
- if (dateStr == null || !(dateStr.trim().length() == 8 || dateStr.trim().length() == 10)) {
- throw new IllegalArgumentException("Invalid date format: " + dateStr);
- }
-
- if (dateStr.length() == 10) {
- return EgovStringUtil.removeMinusChar(dateStr);
- }
-
- return dateStr;
- }
-
- /**
- * 입력된 일자 문자열을 확인하고 8자리로 리턴
- * @param sDate
- * @return
- */
- public static String validChkTime(String timeStr) {
- if (timeStr == null || !(timeStr.trim().length() == 4)) {
- throw new IllegalArgumentException("Invalid time format: " + timeStr);
- }
-
- if (timeStr.length() == 5) {
- timeStr = EgovStringUtil.remove(timeStr, ':');
- }
-
- return timeStr;
- }
-
-}
+package kcc.com.utl.fcc.service;
+
+import java.security.SecureRandom;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.TimeZone;
+
+import com.ibm.icu.util.ChineseCalendar;
+
+/**
+ *
+ * Date 에 대한 Util 클래스
+ * @author 공통서비스 개발팀 이중호
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ *
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.02.01 이중호 최초 생성
+ *
+ *
+ */
+public class EgovDateUtil {
+
+ /**
+ * yyyyMMdd 혹은 yyyy-MM-dd 형식의 날짜 문자열을 입력 받아 년, 월, 일을
+ * 증감한다. 년, 월, 일은 가감할 수를 의미하며, 음수를 입력할 경우 감한다.
+ *
+ *
+ * DateUtil.addYearMonthDay("19810828", 0, 0, 19) = "19810916"
+ * DateUtil.addYearMonthDay("20060228", 0, 0, -10) = "20060218"
+ * DateUtil.addYearMonthDay("20060228", 0, 0, 10) = "20060310"
+ * DateUtil.addYearMonthDay("20060228", 0, 0, 32) = "20060401"
+ * DateUtil.addYearMonthDay("20050331", 0, -1, 0) = "20050228"
+ * DateUtil.addYearMonthDay("20050301", 0, 2, 30) = "20050531"
+ * DateUtil.addYearMonthDay("20050301", 1, 2, 30) = "20060531"
+ * DateUtil.addYearMonthDay("20040301", 2, 0, 0) = "20060301"
+ * DateUtil.addYearMonthDay("20040229", 2, 0, 0) = "20060228"
+ * DateUtil.addYearMonthDay("20040229", 2, 0, 1) = "20060301"
+ *
+ *
+ * @param dateStr 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식)
+ * @param year 가감할 년. 0이 입력될 경우 가감이 없다
+ * @param month 가감할 월. 0이 입력될 경우 가감이 없다
+ * @param day 가감할 일. 0이 입력될 경우 가감이 없다
+ * @return yyyyMMdd 형식의 날짜 문자열
+ * @throws IllegalArgumentException 날짜 포맷이 정해진 바와 다를 경우.
+ * 입력 값이 null인 경우.
+ */
+ public static String addYearMonthDay(String sDate, int year, int month, int day) {
+
+ String dateStr = validChkDate(sDate);
+
+ Calendar cal = Calendar.getInstance();
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd", Locale.getDefault());
+ try {
+ cal.setTime(sdf.parse(dateStr));
+ } catch (ParseException e) {
+ throw new IllegalArgumentException("Invalid date format: " + dateStr);
+ }
+
+ if (year != 0) {
+ cal.add(Calendar.YEAR, year);
+ }
+ if (month != 0) {
+ cal.add(Calendar.MONTH, month);
+ }
+ if (day != 0) {
+ cal.add(Calendar.DATE, day);
+ }
+
+ return sdf.format(cal.getTime());
+ }
+
+ /**
+ * yyyyMMdd 혹은 yyyy-MM-dd 형식의 날짜 문자열을 입력 받아 년을
+ * 증감한다. year는 가감할 수를 의미하며, 음수를 입력할 경우 감한다.
+ *
+ *
+ * DateUtil.addYear("20000201", 62) = "20620201"
+ * DateUtil.addYear("20620201", -62) = "20000201"
+ * DateUtil.addYear("20040229", 2) = "20060228"
+ * DateUtil.addYear("20060228", -2) = "20040228"
+ * DateUtil.addYear("19000101", 200) = "21000101"
+ *
+ *
+ * @param dateStr 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식)
+ * @param year 가감할 년. 0이 입력될 경우 가감이 없다
+ * @return yyyyMMdd 형식의 날짜 문자열
+ * @throws IllegalArgumentException 날짜 포맷이 정해진 바와 다를 경우.
+ * 입력 값이 null인 경우.
+ */
+ public static String addYear(String dateStr, int year) {
+ return addYearMonthDay(dateStr, year, 0, 0);
+ }
+
+ /**
+ * yyyyMMdd 혹은 yyyy-MM-dd 형식의 날짜 문자열을 입력 받아 월을
+ * 증감한다. month는 가감할 수를 의미하며, 음수를 입력할 경우 감한다.
+ *
+ *
+ * DateUtil.addMonth("20010201", 12) = "20020201"
+ * DateUtil.addMonth("19800229", 12) = "19810228"
+ * DateUtil.addMonth("20040229", 12) = "20050228"
+ * DateUtil.addMonth("20050228", -12) = "20040228"
+ * DateUtil.addMonth("20060131", 1) = "20060228"
+ * DateUtil.addMonth("20060228", -1) = "20060128"
+ *
+ *
+ * @param dateStr 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식)
+ * @param month 가감할 월. 0이 입력될 경우 가감이 없다
+ * @return yyyyMMdd 형식의 날짜 문자열
+ * @throws IllegalArgumentException 날짜 포맷이 정해진 바와 다를 경우.
+ * 입력 값이 null인 경우.
+ */
+ public static String addMonth(String dateStr, int month) {
+ return addYearMonthDay(dateStr, 0, month, 0);
+ }
+
+ /**
+ * yyyyMMdd 혹은 yyyy-MM-dd 형식의 날짜 문자열을 입력 받아 일(day)를
+ * 증감한다. day는 가감할 수를 의미하며, 음수를 입력할 경우 감한다.
+ *
+ * 위에 정의된 addDays 메서드는 사용자가 ParseException을 반드시 처리해야 하는 불편함이
+ * 있기 때문에 추가된 메서드이다.
+ *
+ *
+ * DateUtil.addDay("19991201", 62) = "20000201"
+ * DateUtil.addDay("20000201", -62) = "19991201"
+ * DateUtil.addDay("20050831", 3) = "20050903"
+ * DateUtil.addDay("20050831", 3) = "20050903"
+ * // 2006년 6월 31일은 실제로 존재하지 않는 날짜이다 -> 20060701로 간주된다
+ * DateUtil.addDay("20060631", 1) = "20060702"
+ *
+ *
+ * @param dateStr 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식)
+ * @param day 가감할 일. 0이 입력될 경우 가감이 없다
+ * @return yyyyMMdd 형식의 날짜 문자열
+ * @throws IllegalArgumentException 날짜 포맷이 정해진 바와 다를 경우.
+ * 입력 값이 null인 경우.
+ */
+ public static String addDay(String dateStr, int day) {
+ return addYearMonthDay(dateStr, 0, 0, day);
+ }
+
+ /**
+ * yyyyMMdd 혹은 yyyy-MM-dd 형식의 날짜 문자열 dateStr1과
+ * dateStr2 사이의 일 수를 구한다.
+ * dateStr2가 dateStr1 보다 과거 날짜일 경우에는
+ * 음수를 반환한다. 동일한 경우에는 0을 반환한다.
+ *
+ *
+ * DateUtil.getDaysDiff("20060228","20060310") = 10
+ * DateUtil.getDaysDiff("20060101","20070101") = 365
+ * DateUtil.getDaysDiff("19990228","19990131") = -28
+ * DateUtil.getDaysDiff("20060801","20060802") = 1
+ * DateUtil.getDaysDiff("20060801","20060801") = 0
+ *
+ *
+ * @param dateStr1 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식)
+ * @param dateStr2 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식)
+ * @return 일 수 차이.
+ * @throws IllegalArgumentException 날짜 포맷이 정해진 바와 다를 경우.
+ * 입력 값이 null인 경우.
+ */
+ public static int getDaysDiff(String sDate1, String sDate2) {
+ String dateStr1 = validChkDate(sDate1);
+ String dateStr2 = validChkDate(sDate2);
+
+ if (!checkDate(sDate1) || !checkDate(sDate2)) {
+ throw new IllegalArgumentException("Invalid date format: args[0]=" + sDate1 + " args[1]=" + sDate2);
+ }
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd", Locale.getDefault());
+
+ Date date1 = null;
+ Date date2 = null;
+ try {
+ date1 = sdf.parse(dateStr1);
+ date2 = sdf.parse(dateStr2);
+ } catch (ParseException e) {
+ throw new IllegalArgumentException("Invalid date format: args[0]=" + dateStr1 + " args[1]=" + dateStr2);
+ }
+
+ if (date1 != null && date2 != null) {
+ int days1 = (int) ((date1.getTime() / 3600000) / 24);
+ int days2 = (int) ((date2.getTime() / 3600000) / 24);
+ return days2 - days1;
+ } else {
+ return 0;
+ }
+
+ }
+
+ /**
+ * yyyyMMdd 혹은 yyyy-MM-dd 형식의 날짜 문자열을 입력 받아 유효한 날짜인지 검사.
+ *
+ *
+ * DateUtil.checkDate("1999-02-35") = false
+ * DateUtil.checkDate("2000-13-31") = false
+ * DateUtil.checkDate("2006-11-31") = false
+ * DateUtil.checkDate("2006-2-28") = false
+ * DateUtil.checkDate("2006-2-8") = false
+ * DateUtil.checkDate("20060228") = true
+ * DateUtil.checkDate("2006-02-28") = true
+ *
+ *
+ * @param dateStr 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식)
+ * @return 유효한 날짜인지 여부
+ */
+ public static boolean checkDate(String sDate) {
+ String dateStr = validChkDate(sDate);
+
+ String year = dateStr.substring(0, 4);
+ String month = dateStr.substring(4, 6);
+ String day = dateStr.substring(6);
+
+ return checkDate(year, month, day);
+ }
+
+ /**
+ * 입력한 년, 월, 일이 유효한지 검사.
+ *
+ * @param year 연도
+ * @param month 월
+ * @param day 일
+ * @return 유효한 날짜인지 여부
+ */
+ public static boolean checkDate(String year, String month, String day) {
+ try {
+ SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd", Locale.getDefault());
+
+ Date result = formatter.parse(year + "." + month + "." + day);
+ String resultStr = formatter.format(result);
+ if (resultStr.equalsIgnoreCase(year + "." + month + "." + day))
+ return true;
+ else
+ return false;
+ } catch (ParseException e) {
+ return false;
+ }
+ }
+
+ /**
+ * 날짜형태의 String의 날짜 포맷 및 TimeZone을 변경해 주는 메서드
+ *
+ * @param strSource 바꿀 날짜 String
+ * @param fromDateFormat 기존의 날짜 형태
+ * @param toDateFormat 원하는 날짜 형태
+ * @param strTimeZone 변경할 TimeZone(""이면 변경 안함)
+ * @return 소스 String의 날짜 포맷을 변경한 String
+ */
+ public static String convertDate(String strSource, String fromDateFormat, String toDateFormat, String strTimeZone) {
+ SimpleDateFormat simpledateformat = null;
+ Date date = null;
+ String fromFormat = "";
+ String toFormat = "";
+
+ if (EgovStringUtil.isNullToString(strSource).trim().equals("")) {
+ return "";
+ }
+ if (EgovStringUtil.isNullToString(fromDateFormat).trim().equals(""))
+ fromFormat = "yyyyMMddHHmmss"; // default값
+ if (EgovStringUtil.isNullToString(toDateFormat).trim().equals(""))
+ toFormat = "yyyy-MM-dd HH:mm:ss"; // default값
+
+ try {
+ simpledateformat = new SimpleDateFormat(fromFormat, Locale.getDefault());
+ date = simpledateformat.parse(strSource);
+ if (!EgovStringUtil.isNullToString(strTimeZone).trim().equals("")) {
+ simpledateformat.setTimeZone(TimeZone.getTimeZone(strTimeZone));
+ }
+ simpledateformat = new SimpleDateFormat(toFormat, Locale.getDefault());
+ } catch (ParseException exception) {
+ throw new RuntimeException(exception);
+ }
+
+ return simpledateformat.format(date);
+
+ }
+
+ /**
+ * yyyyMMdd 형식의 날짜문자열을 원하는 캐릭터(ch)로 쪼개 돌려준다
+ *
+ * ex) 20030405, ch(.) -> 2003.04.05
+ * ex) 200304, ch(.) -> 2003.04
+ * ex) 20040101,ch(/) --> 2004/01/01 로 리턴
+ *
+ *
+ * @param date yyyyMMdd 형식의 날짜문자열
+ * @param ch 구분자
+ * @return 변환된 문자열
+ */
+ public static String formatDate(String sDate, String ch) {
+ String dateStr = validChkDate(sDate);
+
+ String str = dateStr.trim();
+ String yyyy = "";
+ String mm = "";
+ String dd = "";
+
+ if (str.length() == 8) {
+ yyyy = str.substring(0, 4);
+ if (yyyy.equals("0000")) {
+ return "";
+ }
+
+ mm = str.substring(4, 6);
+ if (mm.equals("00")) {
+ return yyyy;
+ }
+
+ dd = str.substring(6, 8);
+ if (dd.equals("00")) {
+ return yyyy + ch + mm;
+ }
+
+ return yyyy + ch + mm + ch + dd;
+
+ } else if (str.length() == 6) {
+ yyyy = str.substring(0, 4);
+ if (yyyy.equals("0000")) {
+ return "";
+ }
+
+ mm = str.substring(4, 6);
+ if (mm.equals("00")) {
+ return yyyy;
+ }
+
+ return yyyy + ch + mm;
+
+ } else if (str.length() == 4) {
+ yyyy = str.substring(0, 4);
+ if (yyyy.equals("0000")) {
+ return "";
+ } else {
+ return yyyy;
+ }
+ } else {
+ return "";
+ }
+ }
+
+ /**
+ * HH24MISS 형식의 시간문자열을 원하는 캐릭터(ch)로 쪼개 돌려준다
+ *
+ * ex) 151241, ch(/) -> 15/12/31
+ *
+ *
+ * @param str HH24MISS 형식의 시간문자열
+ * @param ch 구분자
+ * @return 변환된 문자열
+ */
+ public static String formatTime(String sTime, String ch) {
+ String timeStr = validChkTime(sTime);
+ return timeStr.substring(0, 2) + ch + timeStr.substring(2, 4) + ch + timeStr.substring(4, 6);
+ }
+
+ /**
+ * 연도를 입력 받아 해당 연도 2월의 말일(일수)를 문자열로 반환한다.
+ *
+ * @param year
+ * @return 해당 연도 2월의 말일(일수)
+ */
+ public String leapYear(int year) {
+ if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
+ return "29";
+ }
+
+ return "28";
+ }
+
+ /**
+ * 입력받은 연도가 윤년인지 아닌지 검사한다.
+ *
+ *
+ * DateUtil.isLeapYear(2004) = false
+ * DateUtil.isLeapYear(2005) = true
+ * DateUtil.isLeapYear(2006) = true
+ *
+ *
+ * @param year 연도
+ * @return 윤년 여부
+ */
+ public static boolean isLeapYear(int year) {
+ if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * 현재(한국기준) 날짜정보를 얻는다.
+ * 표기법은 yyyy-mm-dd
+ * @return String yyyymmdd형태의 현재 한국시간.
+ */
+ public static String getToday() {
+ return getCurrentDate("");
+ }
+
+ /**
+ * 현재(한국기준) 날짜정보를 얻는다.
+ * 표기법은 yyyy-mm-dd
+ * @return String yyyymmdd형태의 현재 한국시간.
+ */
+ public static String getCurrentDate(String dateType) {
+ Calendar aCalendar = Calendar.getInstance();
+
+ int year = aCalendar.get(Calendar.YEAR);
+ int month = aCalendar.get(Calendar.MONTH) + 1;
+ int date = aCalendar.get(Calendar.DATE);
+ String strDate = Integer.toString(year)
+ + ((month < 10) ? "0" + Integer.toString(month) : Integer.toString(month))
+ + ((date < 10) ? "0" + Integer.toString(date) : Integer.toString(date));
+
+ if (!"".equals(dateType)) {
+ strDate = convertDate(strDate, "yyyyMMdd", dateType);
+ }
+
+ return strDate;
+ }
+
+ /**
+ * 날짜형태의 String의 날짜 포맷만을 변경해 주는 메서드
+ * @param sDate 날짜
+ * @param sTime 시간
+ * @param sFormatStr 포멧 스트링 문자열
+ * @return 지정한 날짜/시간을 지정한 포맷으로 출력
+ * @See Letter Date or Time Component Presentation Examples
+ G Era designator Text AD
+ y Year Year 1996; 96
+ M Month in year Month July; Jul; 07
+ w Week in year Number 27
+ W Week in month Number 2
+ D Day in year Number 189
+ d Day in month Number 10
+ F Day of week in month Number 2
+ E Day in week Text Tuesday; Tue
+ a Am/pm marker Text PM
+ H Hour in day (0-23) Number 0
+ k Hour in day (1-24) Number 24
+ K Hour in am/pm (0-11) Number 0
+ h Hour in am/pm (1-12) Number 12
+ m Minute in hour Number 30
+ s Second in minute Number 55
+ S Millisecond Number 978
+ z Time zone General time zone Pacific Standard Time; PST; GMT-08:00
+ Z Time zone RFC 822 time zone -0800
+
+ Date and Time Pattern Result
+ "yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT
+ "EEE, MMM d, ''yy" Wed, Jul 4, '01
+ "h:mm a" 12:08 PM
+ "hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
+ "K:mm a, z" 0:08 PM, PDT
+ "yyyyy.MMMMM.dd GGG hh:mm aaa" 02001.July.04 AD 12:08 PM
+ "EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700
+ "yyMMddHHmmssZ" 010704120856-0700
+
+ */
+ public static String convertDate(String sDate, String sTime, String sFormatStr) {
+ String dateStr = validChkDate(sDate);
+ String timeStr = validChkTime(sTime);
+
+ Calendar cal = null;
+ cal = Calendar.getInstance();
+
+ cal.set(Calendar.YEAR, Integer.parseInt(dateStr.substring(0, 4)));
+ cal.set(Calendar.MONTH, Integer.parseInt(dateStr.substring(4, 6)) - 1);
+ cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dateStr.substring(6, 8)));
+ cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(timeStr.substring(0, 2)));
+ cal.set(Calendar.MINUTE, Integer.parseInt(timeStr.substring(2, 4)));
+
+ SimpleDateFormat sdf = new SimpleDateFormat(sFormatStr, Locale.ENGLISH);
+
+ return sdf.format(cal.getTime());
+ }
+
+ /**
+ * 입력받은 일자 사이의 임의의 일자를 반환
+ * @param sDate1 시작일자
+ * @param sDate2 종료일자
+ * @return 임의일자
+ */
+ public static String getRandomDate(String sDate1, String sDate2) {
+ String dateStr1 = validChkDate(sDate1);
+ String dateStr2 = validChkDate(sDate2);
+
+ String randomDate = null;
+
+ int sYear, sMonth, sDay;
+ int eYear, eMonth, eDay;
+
+ sYear = Integer.parseInt(dateStr1.substring(0, 4));
+ sMonth = Integer.parseInt(dateStr1.substring(4, 6));
+ sDay = Integer.parseInt(dateStr1.substring(6, 8));
+
+ eYear = Integer.parseInt(dateStr2.substring(0, 4));
+ eMonth = Integer.parseInt(dateStr2.substring(4, 6));
+ eDay = Integer.parseInt(dateStr2.substring(6, 8));
+
+ GregorianCalendar beginDate = new GregorianCalendar(sYear, sMonth - 1, sDay, 0, 0);
+ GregorianCalendar endDate = new GregorianCalendar(eYear, eMonth - 1, eDay, 23, 59);
+
+ if (endDate.getTimeInMillis() < beginDate.getTimeInMillis()) {
+ throw new IllegalArgumentException("Invalid input date : " + sDate1 + "~" + sDate2);
+ }
+
+ SecureRandom r = new SecureRandom();
+
+ r.setSeed(new Date().getTime());
+
+ long rand = ((r.nextLong() >>> 1) % (endDate.getTimeInMillis() - beginDate.getTimeInMillis() + 1)) + beginDate.getTimeInMillis();
+
+ GregorianCalendar cal = new GregorianCalendar();
+ //SimpleDateFormat calformat = new SimpleDateFormat("yyyy-MM-dd");
+ SimpleDateFormat calformat = new SimpleDateFormat("yyyyMMdd", Locale.ENGLISH);
+ cal.setTimeInMillis(rand);
+ randomDate = calformat.format(cal.getTime());
+
+ // 랜덤문자열를 리턴
+ return randomDate;
+ }
+
+ /**
+ * 입력받은 양력일자를 변환하여 음력일자로 반환
+ * @param sDate 양력일자
+ * @return 음력일자
+ */
+ public static Map toLunar(String sDate) {
+ String dateStr = validChkDate(sDate);
+
+ Map hm = new HashMap();
+ hm.put("day", "");
+ hm.put("leap", "0");
+
+ if (dateStr.length() != 8) {
+ return hm;
+ }
+
+ Calendar cal;
+ ChineseCalendar lcal;
+
+ cal = Calendar.getInstance();
+ lcal = new ChineseCalendar();
+
+ cal.set(Calendar.YEAR, Integer.parseInt(dateStr.substring(0, 4)));
+ cal.set(Calendar.MONTH, Integer.parseInt(dateStr.substring(4, 6)) - 1);
+ cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dateStr.substring(6, 8)));
+
+ lcal.setTimeInMillis(cal.getTimeInMillis());
+
+ String year = String.valueOf(lcal.get(ChineseCalendar.EXTENDED_YEAR) - 2637);
+ String month = String.valueOf(lcal.get(ChineseCalendar.MONTH) + 1);
+ String day = String.valueOf(lcal.get(ChineseCalendar.DAY_OF_MONTH));
+ String leap = String.valueOf(lcal.get(ChineseCalendar.IS_LEAP_MONTH));
+
+ String pad4Str = "0000";
+ String pad2Str = "00";
+
+ String retYear = (pad4Str + year).substring(year.length());
+ String retMonth = (pad2Str + month).substring(month.length());
+ String retDay = (pad2Str + day).substring(day.length());
+
+ String SDay = retYear + retMonth + retDay;
+
+ hm.put("day", SDay);
+ hm.put("leap", leap);
+
+ return hm;
+ }
+
+ /**
+ * 입력받은 음력일자를 변환하여 양력일자로 반환
+ * @param sDate 음력일자
+ * @param iLeapMonth 음력윤달여부(IS_LEAP_MONTH)
+ * @return 양력일자
+ */
+ public static String toSolar(String sDate, int iLeapMonth) {
+ String dateStr = validChkDate(sDate);
+
+ Calendar cal;
+ ChineseCalendar lcal;
+
+ cal = Calendar.getInstance();
+ lcal = new ChineseCalendar();
+
+ lcal.set(ChineseCalendar.EXTENDED_YEAR, Integer.parseInt(dateStr.substring(0, 4)) + 2637);
+ lcal.set(ChineseCalendar.MONTH, Integer.parseInt(dateStr.substring(4, 6)) - 1);
+ lcal.set(ChineseCalendar.DAY_OF_MONTH, Integer.parseInt(dateStr.substring(6, 8)));
+ lcal.set(ChineseCalendar.IS_LEAP_MONTH, iLeapMonth);
+
+ cal.setTimeInMillis(lcal.getTimeInMillis());
+
+ String year = String.valueOf(cal.get(Calendar.YEAR));
+ String month = String.valueOf(cal.get(Calendar.MONTH) + 1);
+ String day = String.valueOf(cal.get(Calendar.DAY_OF_MONTH));
+
+ String pad4Str = "0000";
+ String pad2Str = "00";
+
+ String retYear = (pad4Str + year).substring(year.length());
+ String retMonth = (pad2Str + month).substring(month.length());
+ String retDay = (pad2Str + day).substring(day.length());
+
+ return retYear + retMonth + retDay;
+ }
+
+ /**
+ * 입력받은 요일의 영문명을 국문명의 요일로 반환
+ * @param sWeek 영문 요일명
+ * @return 국문 요일명
+ */
+ public static String convertWeek(String sWeek) {
+ String retStr = null;
+
+ if (sWeek.equals("SUN")) {
+ retStr = "일요일";
+ } else if (sWeek.equals("MON")) {
+ retStr = "월요일";
+ } else if (sWeek.equals("TUE")) {
+ retStr = "화요일";
+ } else if (sWeek.equals("WED")) {
+ retStr = "수요일";
+ } else if (sWeek.equals("THR")) {
+ retStr = "목요일";
+ } else if (sWeek.equals("FRI")) {
+ retStr = "금요일";
+ } else if (sWeek.equals("SAT")) {
+ retStr = "토요일";
+ }
+
+ return retStr;
+ }
+
+ /**
+ * 입력일자의 유효 여부를 확인
+ * @param sDate 일자
+ * @return 유효 여부
+ */
+ public static boolean validDate(String sDate) {
+ String dateStr = validChkDate(sDate);
+
+ Calendar cal;
+ boolean ret = false;
+
+ cal = Calendar.getInstance();
+
+ cal.set(Calendar.YEAR, Integer.parseInt(dateStr.substring(0, 4)));
+ cal.set(Calendar.MONTH, Integer.parseInt(dateStr.substring(4, 6)) - 1);
+ cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dateStr.substring(6, 8)));
+
+ String year = String.valueOf(cal.get(Calendar.YEAR));
+ String month = String.valueOf(cal.get(Calendar.MONTH) + 1);
+ String day = String.valueOf(cal.get(Calendar.DAY_OF_MONTH));
+
+ String pad4Str = "0000";
+ String pad2Str = "00";
+
+ String retYear = (pad4Str + year).substring(year.length());
+ String retMonth = (pad2Str + month).substring(month.length());
+ String retDay = (pad2Str + day).substring(day.length());
+
+ String retYMD = retYear + retMonth + retDay;
+
+ if (sDate.equals(retYMD)) {
+ ret = true;
+ }
+
+ return ret;
+ }
+
+ /**
+ * 입력일자, 요일의 유효 여부를 확인
+ * @param sDate 일자
+ * @param sWeek 요일 (DAY_OF_WEEK)
+ * @return 유효 여부
+ */
+ public static boolean validDate(String sDate, int sWeek) {
+ String dateStr = validChkDate(sDate);
+
+ Calendar cal;
+ boolean ret = false;
+
+ cal = Calendar.getInstance();
+
+ cal.set(Calendar.YEAR, Integer.parseInt(dateStr.substring(0, 4)));
+ cal.set(Calendar.MONTH, Integer.parseInt(dateStr.substring(4, 6)) - 1);
+ cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dateStr.substring(6, 8)));
+
+ int Week = cal.get(Calendar.DAY_OF_WEEK);
+
+ if (validDate(sDate)) {
+ if (sWeek == Week) {
+ ret = true;
+ }
+ }
+
+ return ret;
+ }
+
+ /**
+ * 입력시간의 유효 여부를 확인
+ * @param sTime 입력시간
+ * @return 유효 여부
+ */
+ public static boolean validTime(String sTime) {
+ String timeStr = validChkTime(sTime);
+
+ Calendar cal;
+ boolean ret = false;
+
+ cal = Calendar.getInstance();
+
+ cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(timeStr.substring(0, 2)));
+ cal.set(Calendar.MINUTE, Integer.parseInt(timeStr.substring(2, 4)));
+
+ String HH = String.valueOf(cal.get(Calendar.HOUR_OF_DAY));
+ String MM = String.valueOf(cal.get(Calendar.MINUTE));
+
+ String pad2Str = "00";
+
+ String retHH = (pad2Str + HH).substring(HH.length());
+ String retMM = (pad2Str + MM).substring(MM.length());
+
+ String retTime = retHH + retMM;
+
+ if (sTime.equals(retTime)) {
+ ret = true;
+ }
+
+ return ret;
+ }
+
+ /**
+ * 입력된 일자에 연, 월, 일을 가감한 날짜의 요일을 반환
+ * @param sDate 날짜
+ * @param year 연
+ * @param month 월
+ * @param day 일
+ * @return 계산된 일자의 요일(DAY_OF_WEEK)
+ */
+ public static String addYMDtoWeek(String sDate, int year, int month, int day) {
+ String dateStr = validChkDate(sDate);
+
+ dateStr = addYearMonthDay(dateStr, year, month, day);
+
+ Calendar cal = Calendar.getInstance();
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd", Locale.ENGLISH);
+ try {
+ cal.setTime(sdf.parse(dateStr));
+ } catch (ParseException e) {
+ throw new IllegalArgumentException("Invalid date format: " + dateStr);
+ }
+
+ SimpleDateFormat rsdf = new SimpleDateFormat("E", Locale.ENGLISH);
+
+ return rsdf.format(cal.getTime());
+ }
+
+ /**
+ * 입력된 일자에 연, 월, 일, 시간, 분을 가감한 날짜, 시간을 포멧스트링 형식으로 반환
+ * @param sDate 날짜
+ * @param sTime 시간
+ * @param year 연
+ * @param month 월
+ * @param day 일
+ * @param hour 시간
+ * @param minute 분
+ * @param formatStr 포멧스트링
+ * @return
+ */
+ public static String addYMDtoDayTime(String sDate, String sTime, int year, int month, int day, int hour, int minute, String formatStr) {
+ String dateStr = validChkDate(sDate);
+ String timeStr = validChkTime(sTime);
+
+ dateStr = addYearMonthDay(dateStr, year, month, day);
+
+ dateStr = convertDate(dateStr, timeStr, "yyyyMMddHHmm");
+
+ Calendar cal = Calendar.getInstance();
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm", Locale.ENGLISH);
+
+ try {
+ cal.setTime(sdf.parse(dateStr));
+ } catch (ParseException e) {
+ throw new IllegalArgumentException("Invalid date format: " + dateStr);
+ }
+
+ if (hour != 0) {
+ cal.add(Calendar.HOUR, hour);
+ }
+
+ if (minute != 0) {
+ cal.add(Calendar.MINUTE, minute);
+ }
+
+ SimpleDateFormat rsdf = new SimpleDateFormat(formatStr, Locale.ENGLISH);
+
+ return rsdf.format(cal.getTime());
+ }
+
+ /**
+ * 입력된 일자를 int 형으로 반환
+ * @param sDate 일자
+ * @return int(일자)
+ */
+ public static int datetoInt(String sDate) {
+ return Integer.parseInt(convertDate(sDate, "0000", "yyyyMMdd"));
+ }
+
+ /**
+ * 입력된 시간을 int 형으로 반환
+ * @param sTime 시간
+ * @return int(시간)
+ */
+ public static int timetoInt(String sTime) {
+ return Integer.parseInt(convertDate("00000101", sTime, "HHmm"));
+ }
+
+ /**
+ * 입력된 일자 문자열을 확인하고 8자리로 리턴
+ * @param sDate
+ * @return
+ */
+ public static String validChkDate(String dateStr) {
+ if (dateStr == null || !(dateStr.trim().length() == 8 || dateStr.trim().length() == 10)) {
+ throw new IllegalArgumentException("Invalid date format: " + dateStr);
+ }
+
+ if (dateStr.length() == 10) {
+ return EgovStringUtil.removeMinusChar(dateStr);
+ }
+
+ return dateStr;
+ }
+
+ /**
+ * 입력된 일자 문자열을 확인하고 8자리로 리턴
+ * @param sDate
+ * @return
+ */
+ public static String validChkTime(String timeStr) {
+ if (timeStr == null || !(timeStr.trim().length() == 4)) {
+ throw new IllegalArgumentException("Invalid time format: " + timeStr);
+ }
+
+ if (timeStr.length() == 5) {
+ timeStr = EgovStringUtil.remove(timeStr, ':');
+ }
+
+ return timeStr;
+ }
+
+ public static String getYear() {
+ return Integer.toString(LocalDate.now().getYear());
+ }
+}
diff --git a/src/main/java/kcc/let/my/web/MyPageController.java b/src/main/java/kcc/let/my/web/MyPageController.java
new file mode 100644
index 00000000..dfb82706
--- /dev/null
+++ b/src/main/java/kcc/let/my/web/MyPageController.java
@@ -0,0 +1,218 @@
+package kcc.let.my.web;
+
+import java.io.OutputStream;
+import java.security.SecureRandom;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.stream.Collectors;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.Font;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.ui.ModelMap;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.support.SessionStatus;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+import org.springmodules.validation.commons.DefaultBeanValidator;
+
+import com.penta.scpdb.ScpDbAgent;
+import com.sci.v2.pcc.secu.SciSecuManager;
+import com.sci.v2.pcc.secu.hmac.SciHmac;
+
+import NiceID.Check.CPClient;
+import egovframework.rte.fdl.property.EgovPropertyService;
+import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
+import egovframework.rte.psl.dataaccess.util.EgovMap;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+import kcc.com.cmm.ComDefaultCodeVO;
+import kcc.com.cmm.EgovMessageSource;
+import kcc.com.cmm.EgovMultiPartEmail;
+import kcc.com.cmm.LoginVO;
+import kcc.com.cmm.ReadVO;
+import kcc.com.cmm.UserVO;
+import kcc.com.cmm.service.EgovCmmUseService;
+import kcc.com.cmm.service.EgovFileMngService;
+import kcc.com.cmm.service.EgovFileMngUtil;
+import kcc.com.cmm.service.FileVO;
+import kcc.com.cmm.service.ReadService;
+import kcc.com.cmm.util.StringUtil;
+import kcc.com.cmm.util.WebUtil;
+import kcc.com.uss.ion.cnf.service.ProhibitMngService;
+import kcc.com.uss.ion.cnf.service.WordFilterService;
+import kcc.com.uss.ion.cnf.service.WordFilterVO;
+import kcc.com.utl.fcc.service.EgovStringUtil;
+import kcc.com.utl.user.service.CheckLoginUtil;
+import kcc.let.cop.bbs.service.Board;
+import kcc.let.cop.bbs.service.BoardChgHst;
+import kcc.let.cop.bbs.service.BoardMaster;
+import kcc.let.cop.bbs.service.BoardMasterVO;
+import kcc.let.cop.bbs.service.BoardVO;
+import kcc.let.cop.bbs.service.EgovBBSAttributeManageService;
+import kcc.let.cop.bbs.service.EgovBBSManageService;
+import kcc.let.sym.mnu.mpm.service.EgovMenuManageService;
+import kcc.let.sym.mnu.mpm.service.MenuManageVO;
+import kcc.let.sym.site.service.EgovSiteManagerService;
+import kcc.let.sym.site.service.SiteManagerVO;
+import kcc.let.uat.uia.service.SsoLoginVO;
+import kcc.let.utl.sim.service.EgovClntInfo;
+import kcc.ve.cmm.VeConstants;
+import kcc.ve.instr.tngrVisitEdu.eduInfo.service.VEEduAplctVO;
+import kcc.ve.instr.tngrVisitEdu.eduInfo.service.VEEduChasiVO;
+import kcc.ve.instr.tngrVisitEdu.eduInfo.service.VEEduMIXService;
+
+/**
+ * 게시물 관리를 위한 컨트롤러 클래스
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009.03.19
+ * @version 1.0
+ * @see
+ *
+ *
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.19 이삼섭 최초 생성
+ * 2009.06.29 한성곤 2단계 기능 추가 (댓글관리, 만족도조사)
+ * 2011.08.31 JJY 경량환경 템플릿 커스터마이징버전 생성
+ *
+ *
+ */
+@Controller
+public class MyPageController {
+
+ // 로그인 체크 util
+ @Resource(name = "checkLoginUtil")
+ private CheckLoginUtil checkLoginUtil;
+
+ // 교육과정신청
+ @Resource(name = "vEEduMIXService")
+ private VEEduMIXService vEEduMIXService;
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(MyPageController.class);
+
+ @RequestMapping(value = { "/web/my/myPageDashBoard.do" })
+ public String selectFaqListWeb(HttpServletRequest request, @ModelAttribute("searchVO") BoardMasterVO boardMasterVO,
+ ModelMap model, BoardVO boardVO, RedirectAttributes redirectAttributes) throws Exception {
+
+ LoginVO loginVO = checkLoginUtil.getAuthLoginVO(); // 권한에 따른 로그인 정보 가져오기
+ SsoLoginVO ssoLoginVO = checkLoginUtil.getSSOLoginVO(request); // SSO 로그인 정보 가져오기
+
+ if (loginVO == null || ssoLoginVO == null) {
+ // 이전 url 처리(beforeSiteUrl)_이준호_220228추가
+ return checkLoginUtil.getUserLoginPage(model, request); // 로그인 정보가 없으면 로그인 페이지로 이동한다.
+// return checkLoginUtil.getUserLoginPage(model); //로그인 정보가 없으면 로그인 페이지로 이동한다.
+ }
+
+ /*
+ * 청소년 진행목록
+ */
+ {
+ VEEduAplctVO vEEduAplctVO = new VEEduAplctVO();
+ // 청소년
+
+ // 사용자 교육신청 차시 리스트
+ VEEduChasiVO vEEduChasiVO = new VEEduChasiVO();
+ vEEduChasiVO.setEduAplctOrd(vEEduAplctVO.getEduAplctOrd());
+ vEEduChasiVO.setLctrDivCd(VeConstants.LCTR_DIV_CD_10);
+ vEEduChasiVO.setAprvlCd(VeConstants.STATUS_CD_EDU_SELCT);
+ vEEduChasiVO.setUserId(loginVO.getUniqId());
+ vEEduChasiVO.setRecordCountPerPage(1000000);
+ vEEduChasiVO.setFirstIndex(0);
+ // List vEEduChasiVOList =
+ // vEEduMIXService.selectChasiList(vEEduChasiVO);
+
+ vEEduChasiVO.setPageIndex(vEEduAplctVO.getPageIndex());
+ vEEduChasiVO.setPageUnit(vEEduAplctVO.getPageUnit());
+ vEEduChasiVO.setPageSize(vEEduAplctVO.getPageSize());
+
+ List tngrList = vEEduMIXService.selectChasiListMypage(vEEduChasiVO);
+
+
+ Map tngrMap = tngrList.stream()
+ .collect(Collectors.partitioningBy(vo -> "30".equals(vo.getAsgnmAprvlCd()), Collectors.counting()))
+ .entrySet().stream()
+ .collect(Collectors.toMap(
+ entry -> entry.getKey() ? "tngrEnd" : "tngrIng",
+ entry -> entry.getValue().toString()
+ )
+ );
+
+ model.addAttribute("tngrMap", tngrMap);
+ model.addAttribute("vtngrList", tngrList);
+ }
+
+ /*
+ * 성인 진행목록
+ */
+ {
+ VEEduAplctVO vEEduAplctVO = new VEEduAplctVO();
+ // 청소년
+
+ // 사용자 교육신청 차시 리스트
+ VEEduChasiVO vEEduChasiVO = new VEEduChasiVO();
+ vEEduChasiVO.setEduAplctOrd(vEEduAplctVO.getEduAplctOrd());
+ vEEduChasiVO.setLctrDivCd(VeConstants.LCTR_DIV_CD_20);
+ vEEduChasiVO.setAprvlCd(VeConstants.STATUS_CD_EDU_SELCT);
+ vEEduChasiVO.setUserId(loginVO.getUniqId());
+ vEEduChasiVO.setRecordCountPerPage(1000000);
+ vEEduChasiVO.setFirstIndex(0);
+ // List vEEduChasiVOList =
+ // vEEduMIXService.selectChasiList(vEEduChasiVO);
+
+ vEEduChasiVO.setPageIndex(vEEduAplctVO.getPageIndex());
+ vEEduChasiVO.setPageUnit(vEEduAplctVO.getPageUnit());
+ vEEduChasiVO.setPageSize(vEEduAplctVO.getPageSize());
+
+ List vEEduChasiVOList = vEEduMIXService.selectChasiListMypage(vEEduChasiVO);
+
+
+ Map tngrMap = vEEduChasiVOList.stream()
+ .collect(Collectors.partitioningBy(vo -> "30".equals(vo.getAsgnmAprvlCd()), Collectors.counting()))
+ .entrySet().stream()
+ .collect(Collectors.toMap(
+ entry -> entry.getKey() ? "adultEnd" : "adultIng",
+ entry -> entry.getValue().toString()
+ )
+ );
+
+ model.addAttribute("adultMap", tngrMap);
+ }
+// return "/web/cop/bbs/FaqListAjax";
+ return "web/my/myPageDashBoard";
+ }
+
+}
diff --git a/src/main/java/kcc/ve/instr/tngrVisitEdu/eduInfo/service/VEEduAplctVO.java b/src/main/java/kcc/ve/instr/tngrVisitEdu/eduInfo/service/VEEduAplctVO.java
index 121982e1..c8c21428 100644
--- a/src/main/java/kcc/ve/instr/tngrVisitEdu/eduInfo/service/VEEduAplctVO.java
+++ b/src/main/java/kcc/ve/instr/tngrVisitEdu/eduInfo/service/VEEduAplctVO.java
@@ -1,6 +1,7 @@
package kcc.ve.instr.tngrVisitEdu.eduInfo.service;
import java.io.Serializable;
+import java.util.List;
import kcc.com.cmm.ComDefaultVO;
import kcc.com.cmm.service.FileVO;
@@ -156,6 +157,13 @@ public class VEEduAplctVO extends ComDefaultVO implements Serializable {
private String qustnrRsltCnt; //설문응답 수량
+ private String eduCmpltCrtfcNmbr;
+
+
+
+ private List eduAplctOrdList; //교육신청순번
+ private List sspnIdtmtTrgtOrdList; //교육신청순번
+
public int getChasi() {
return chasi;
}
@@ -1807,6 +1815,24 @@ public class VEEduAplctVO extends ComDefaultVO implements Serializable {
public void setPrvsQs(String prvsQs) {
this.prvsQs = prvsQs;
}
+ public String getEduCmpltCrtfcNmbr() {
+ return eduCmpltCrtfcNmbr;
+ }
+ public void setEduCmpltCrtfcNmbr(String eduCmpltCrtfcNmbr) {
+ this.eduCmpltCrtfcNmbr = eduCmpltCrtfcNmbr;
+ }
+ public List getEduAplctOrdList() {
+ return eduAplctOrdList;
+ }
+ public void setEduAplctOrdList(List eduAplctOrdList) {
+ this.eduAplctOrdList = eduAplctOrdList;
+ }
+ public List getSspnIdtmtTrgtOrdList() {
+ return sspnIdtmtTrgtOrdList;
+ }
+ public void setSspnIdtmtTrgtOrdList(List sspnIdtmtTrgtOrdList) {
+ this.sspnIdtmtTrgtOrdList = sspnIdtmtTrgtOrdList;
+ }
}
diff --git a/src/main/java/kcc/ve/instr/tngrVisitEdu/eduInfo/service/VEEduMIXService.java b/src/main/java/kcc/ve/instr/tngrVisitEdu/eduInfo/service/VEEduMIXService.java
index 655997d2..3b48d1e3 100644
--- a/src/main/java/kcc/ve/instr/tngrVisitEdu/eduInfo/service/VEEduMIXService.java
+++ b/src/main/java/kcc/ve/instr/tngrVisitEdu/eduInfo/service/VEEduMIXService.java
@@ -42,6 +42,8 @@ public interface VEEduMIXService {
List selectChasiList(VEEduChasiVO vEEduChasiVO) throws Exception;
+ List selectChasiListMypage(VEEduChasiVO vEEduChasiVO) throws Exception;
+
//설문지 분리 정보 추가(기본, 신청인)
List selectChasiList202312(VEEduChasiVO vEEduChasiVO) throws Exception;
@@ -92,4 +94,6 @@ public interface VEEduMIXService {
//저작권 체험교실 이력 과정 목록
List selectExprnHstryPagingList(VEEduAplctVO paramVO) throws Exception;
+
+ List selectEduCmpltCrtfcNmbrList(VEEduAplctVO vEEduAplctVO) throws Exception;
}
diff --git a/src/main/java/kcc/ve/instr/tngrVisitEdu/eduInfo/service/impl/VEEduMIXDAO.java b/src/main/java/kcc/ve/instr/tngrVisitEdu/eduInfo/service/impl/VEEduMIXDAO.java
index 186e8b36..d0a0bcd1 100644
--- a/src/main/java/kcc/ve/instr/tngrVisitEdu/eduInfo/service/impl/VEEduMIXDAO.java
+++ b/src/main/java/kcc/ve/instr/tngrVisitEdu/eduInfo/service/impl/VEEduMIXDAO.java
@@ -105,6 +105,13 @@ public class VEEduMIXDAO extends EgovAbstractDAO {
List tlist = (List) list("VEEduMIXDAO.selectChasiList", vEEduChasiVO);
return tlist;
}
+
+ //차시별 강사배치 리스트
+ public List selectChasiListMypage(VEEduChasiVO vEEduChasiVO) throws Exception {
+ @SuppressWarnings("unchecked")
+ List tlist = (List) list("VEEduMIXDAO.selectChasiListMypage", vEEduChasiVO);
+ return tlist;
+ }
//차시별 강사배치 리스트
public List selectChasiList202312(VEEduChasiVO vEEduChasiVO) throws Exception {
@@ -228,5 +235,9 @@ public class VEEduMIXDAO extends EgovAbstractDAO {
List tlist = (List) list("VEEduMIXDAO.selectExprnHstryPagingList", paramVO);
return tlist;
}
+
+ public List selectEduCmpltCrtfcNmbrList(VEEduAplctVO vEEduAplctVO) {
+ return (List) list("VEEduMIXDAO.selectEduCmpltCrtfcNmbrList", vEEduAplctVO);
+ }
}
diff --git a/src/main/java/kcc/ve/instr/tngrVisitEdu/eduInfo/service/impl/VEEduMIXServiceImpl.java b/src/main/java/kcc/ve/instr/tngrVisitEdu/eduInfo/service/impl/VEEduMIXServiceImpl.java
index cec2ee61..13c56126 100644
--- a/src/main/java/kcc/ve/instr/tngrVisitEdu/eduInfo/service/impl/VEEduMIXServiceImpl.java
+++ b/src/main/java/kcc/ve/instr/tngrVisitEdu/eduInfo/service/impl/VEEduMIXServiceImpl.java
@@ -90,6 +90,11 @@ public class VEEduMIXServiceImpl implements VEEduMIXService {
public List selectChasiList(VEEduChasiVO vEEduChasiVO) throws Exception {
return vEEduMIXDAO.selectChasiList(vEEduChasiVO);
}
+
+ @Override
+ public List selectChasiListMypage(VEEduChasiVO vEEduChasiVO) throws Exception {
+ return vEEduMIXDAO.selectChasiListMypage(vEEduChasiVO);
+ }
@Override
public List selectChasiList202312(VEEduChasiVO vEEduChasiVO) throws Exception {
@@ -200,5 +205,10 @@ public class VEEduMIXServiceImpl implements VEEduMIXService {
public List selectExprnHstryPagingList(VEEduAplctVO paramVO) throws Exception{
return vEEduMIXDAO.selectExprnHstryPagingList(paramVO);
+ }
+
+ @Override
+ public List selectEduCmpltCrtfcNmbrList(VEEduAplctVO vEEduAplctVO) throws Exception {
+ return vEEduMIXDAO.selectEduCmpltCrtfcNmbrList(vEEduAplctVO);
}
}
diff --git a/src/main/java/kcc/ve/oprtn/cndtnSspnIdtmt/web/CndtnPrcsInfoMngController.java b/src/main/java/kcc/ve/oprtn/cndtnSspnIdtmt/web/CndtnPrcsInfoMngController.java
index d4dc79d6..e2c117a3 100644
--- a/src/main/java/kcc/ve/oprtn/cndtnSspnIdtmt/web/CndtnPrcsInfoMngController.java
+++ b/src/main/java/kcc/ve/oprtn/cndtnSspnIdtmt/web/CndtnPrcsInfoMngController.java
@@ -1,6 +1,8 @@
package kcc.ve.oprtn.cndtnSspnIdtmt.web;
+import java.util.Comparator;
import java.util.List;
+import java.util.Optional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
@@ -26,6 +28,7 @@ import kcc.com.cmm.service.EgovFileMngService;
import kcc.com.cmm.service.FileVO;
import kcc.com.cmm.service.impl.CmmUseDAO;
import kcc.com.cmm.util.StringUtil;
+import kcc.com.utl.fcc.service.EgovDateUtil;
import kcc.com.utl.user.service.CheckLoginUtil;
import kcc.let.uat.uia.service.SsoLoginVO;
import kcc.let.utl.fcc.service.EgovCryptoUtil;
@@ -887,7 +890,14 @@ public class CndtnPrcsInfoMngController {
LoginVO loginVO = checkLoginUtil.getAuthLoginVO(); //권한에 따른 로그인 정보 가져오기
SsoLoginVO ssoLoginVO = checkLoginUtil.getSSOLoginVO(request); //SSO 로그인 정보 가져오기
-
+
+// System.out.println("vEEduAplctVO.getPrcsAplctPrdOrd() : "+ vEEduAplctVO.getPrcsAplctPrdOrd());
+ System.out.println("vEEduAplctVO.getEduAplctOrd() : "+ vEEduAplctVO.getEduAplctOrd());
+ // 이수 상태라면
+ if("20".equals(vEEduAplctVO.getAplctStateCd())) {
+ vEEduAplctVO.setEduCmpltCrtfcNmbr(this.cmpltChkAndMakeNmber(vEEduAplctVO.getLctrDivCd()));
+ }
+
// 신청상세정보 상태값 update
vEEduAplctVO.setLastUpdusrId(loginVO.getUniqId());
vEEduMIXService.updateAplctStateCd(vEEduAplctVO);
@@ -905,6 +915,29 @@ public class CndtnPrcsInfoMngController {
return modelAndView;
}
+ private String cmpltChkAndMakeNmber(String lctrDivCd) throws Exception {
+ // 현재 년도
+ String currentYear = String.valueOf(java.time.Year.now());
+
+ VEEduAplctVO vEEduAplctVO = new VEEduAplctVO();
+
+ vEEduAplctVO.setLctrDivCd(lctrDivCd);
+
+ List vEEduAplctVOList = vEEduMIXService.selectEduCmpltCrtfcNmbrList(vEEduAplctVO);
+
+ // 값이 있으면 있는 값에 최대값 구하고
+ // 값이 없으면 초기값 설정
+ String maxCrtfcNmbr = vEEduAplctVOList.stream()
+ .map(VEEduAplctVO::getEduCmpltCrtfcNmbr)
+ .max(Comparator.comparingInt(item -> Integer.parseInt(item.split("-")[1])))
+ .orElse( currentYear + "-00000"); // 기본값 설정
+
+ int nextNumber = Integer.parseInt(maxCrtfcNmbr.split("-")[1]) + 1;
+
+ return currentYear + "-" + String.format("%05d", nextNumber);
+ }
+
+
/**
* 기소유예 신청자 상태값 변경
*/
@@ -980,11 +1013,48 @@ public class CndtnPrcsInfoMngController {
try {
vEPrcsDetailVO.setLastUpdusrId(loginVO.getUniqId());
- // 교육 신청 테이블에 신청자 상태값 update
- vEAPrcsAplctPrdInstrAsgnmService.updateAplctStateCdListAjax(vEPrcsDetailVO);
+
- // 대상자 테이블에 update
- vEAPrcsAplctPrdInstrAsgnmService.updateEduStateCdListAjax(vEPrcsDetailVO);
+// if("20".equals(vEPrcsDetailVO.getAplctStateCd())) {
+// vEPrcsDetailVO.setEduCmpltCrtfcNmbr(this.cmpltChkAndMakeNmber(vEPrcsDetailVO.getLctrDivCd()));
+// }
+//
+
+ String eduCmpltCrtfcNmbr = "";
+ String currentYear = String.valueOf(java.time.Year.now());
+ if("20".equals(vEPrcsDetailVO.getAplctStateCd())) {
+
+ for(String eduAplctOrd : vEPrcsDetailVO.getEduAplctOrdList()) {
+ VEEduAplctVO vEEduAplctVO = new VEEduAplctVO();
+
+ vEEduAplctVO.setAplctStateCd(vEPrcsDetailVO.getAplctStateCd());
+ vEEduAplctVO.setLastUpdusrId(loginVO.getUniqId());
+ vEEduAplctVO.setPrcsAplctPrdOrd(vEPrcsDetailVO.getPrcsAplctPrdOrd());
+ vEEduAplctVO.setEduAplctOrd(eduAplctOrd);
+
+ if(StringUtils.isEmpty(eduCmpltCrtfcNmbr)) {
+
+ eduCmpltCrtfcNmbr = this.cmpltChkAndMakeNmber(vEPrcsDetailVO.getLctrDivCd());
+ }else {
+ eduCmpltCrtfcNmbr = currentYear + "-" + String.format("%05d", Integer.parseInt(eduCmpltCrtfcNmbr.split("-")[1])+1);
+ }
+ vEEduAplctVO.setEduCmpltCrtfcNmbr(eduCmpltCrtfcNmbr);
+
+ vEEduMIXService.updateAplctStateCd(vEEduAplctVO);
+
+ }
+ }else {
+ vEAPrcsAplctPrdInstrAsgnmService.updateAplctStateCdListAjax(vEPrcsDetailVO);
+
+ }
+
+ // 교육 신청 테이블에 신청자 상태값 update
+
+ if(vEPrcsDetailVO.getSspnIdtmtTrgtOrdList() != null && !vEPrcsDetailVO.getSspnIdtmtTrgtOrdList().isEmpty())
+ {
+ // 대상자 테이블에 update
+ vEAPrcsAplctPrdInstrAsgnmService.updateEduStateCdListAjax(vEPrcsDetailVO);
+ }
modelAndView.addObject("result", "success");
} catch (Exception ex) {
diff --git a/src/main/resources/egovframework/sqlmap/ve/edu/VEEdu_MIX_SQL_Tibero.xml b/src/main/resources/egovframework/sqlmap/ve/edu/VEEdu_MIX_SQL_Tibero.xml
index 245107d7..005cbb38 100644
--- a/src/main/resources/egovframework/sqlmap/ve/edu/VEEdu_MIX_SQL_Tibero.xml
+++ b/src/main/resources/egovframework/sqlmap/ve/edu/VEEdu_MIX_SQL_Tibero.xml
@@ -3769,6 +3769,7 @@
ON (
B.EDU_APLCT_ORD=D0.EDU_APLCT_ORD
AND b.edu_chasi_ord=d0.edu_chasi_ord
+
AND d0.asgnm_aprvl_cd='30' /* 강사가 교육확정한 경우만 보여짐 */
)
@@ -3855,6 +3856,177 @@
+
+ /*
+ LIMIT recordCountPerPage OFFSET firstIndex
+ */
+ OFFSET #firstIndex# ROWS FETCH NEXT #recordCountPerPage# ROWS ONLY;
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/egovframework/sqlmap/ve/prcs/VEAPrcsAplctPrdInstrAsgnm_SQL_Tibero.xml b/src/main/resources/egovframework/sqlmap/ve/prcs/VEAPrcsAplctPrdInstrAsgnm_SQL_Tibero.xml
index dc4897f4..5adb786e 100644
--- a/src/main/resources/egovframework/sqlmap/ve/prcs/VEAPrcsAplctPrdInstrAsgnm_SQL_Tibero.xml
+++ b/src/main/resources/egovframework/sqlmap/ve/prcs/VEAPrcsAplctPrdInstrAsgnm_SQL_Tibero.xml
@@ -137,6 +137,7 @@
UPDATE VEA_APLCT_DETAIL_INFO
SET aplct_state_cd = #aplctStateCd#
,aplct_pnttm = SYSDATE
+ ,edu_cmplt_crtfc_nmbr = #eduCmpltCrtfcNmbr#
,last_updusr_id = #lastUpdusrId#
,last_updt_pnttm = sysdate
WHERE edu_aplct_ord IN
diff --git a/src/main/webapp/WEB-INF/jsp/oprtn/cndtnSspnIdtmt/cndtnEduPrcsAplctCfnMngDetail.jsp b/src/main/webapp/WEB-INF/jsp/oprtn/cndtnSspnIdtmt/cndtnEduPrcsAplctCfnMngDetail.jsp
index 910beb64..00db6ad9 100644
--- a/src/main/webapp/WEB-INF/jsp/oprtn/cndtnSspnIdtmt/cndtnEduPrcsAplctCfnMngDetail.jsp
+++ b/src/main/webapp/WEB-INF/jsp/oprtn/cndtnSspnIdtmt/cndtnEduPrcsAplctCfnMngDetail.jsp
@@ -100,10 +100,12 @@
function fn_statusChg(aplctStateCd, eduAplctOrd, sspnIdtmtTrgtOrd){
+
document.statusChgForm.eduAplctOrd.value = eduAplctOrd ;
document.statusChgForm.aplctStateCd.value = aplctStateCd ;
document.statusChgForm.eduStateCd.value = aplctStateCd ;
document.statusChgForm.sspnIdtmtTrgtOrd.value = sspnIdtmtTrgtOrd ;
+
var data = new FormData(document.getElementById("statusChgForm"));
if(confirm("상태변경을 하시겠습니까?")){
var url = "";
@@ -187,7 +189,8 @@
"sspnIdtmtTrgtOrdList": selectsspnIdtmtTrgtOrd,
"aplctStateCd": p_aplctStateCd,
"eduStateCd": p_aplctStateCd,
- "prcsAplctPrdOrd": p_prcsAplctPrdOrd
+ "prcsAplctPrdOrd": p_prcsAplctPrdOrd,
+ "lctrDivCd": '60'
};
var url = "";
@@ -246,6 +249,7 @@
+
@@ -492,6 +496,7 @@
+
|
diff --git a/src/main/webapp/WEB-INF/jsp/oprtn/fndthEnhanceTrn/fndthEduPrcsAplctCfnMngDetail.jsp b/src/main/webapp/WEB-INF/jsp/oprtn/fndthEnhanceTrn/fndthEduPrcsAplctCfnMngDetail.jsp
index 2091c9e6..304a213d 100644
--- a/src/main/webapp/WEB-INF/jsp/oprtn/fndthEnhanceTrn/fndthEduPrcsAplctCfnMngDetail.jsp
+++ b/src/main/webapp/WEB-INF/jsp/oprtn/fndthEnhanceTrn/fndthEduPrcsAplctCfnMngDetail.jsp
@@ -163,7 +163,8 @@
var dataToSend = {
"eduAplctOrdList": selectedEduAplctOrd,
"aplctStateCd": p_aplctStateCd,
- "prcsAplctPrdOrd": p_prcsAplctPrdOrd
+ "prcsAplctPrdOrd": p_prcsAplctPrdOrd,
+ "lctrDivCd": '50'
};
var url = "";
@@ -233,6 +234,7 @@
+
diff --git a/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp b/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp
index 93f7a9e3..1278da46 100644
--- a/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp
+++ b/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp
@@ -253,6 +253,7 @@ function usrJoin(){
님
+ " title="새창열림">마이페이지
회원정보 수정
diff --git a/src/main/webapp/WEB-INF/jsp/web/my/myPageDashBoard.jsp b/src/main/webapp/WEB-INF/jsp/web/my/myPageDashBoard.jsp
new file mode 100644
index 00000000..d14b2985
--- /dev/null
+++ b/src/main/webapp/WEB-INF/jsp/web/my/myPageDashBoard.jsp
@@ -0,0 +1,632 @@
+ <%--
+ Class Name : FaqListAjax.jsp
+ Description : (사용자)자주하는 질문 Ajax
+ Modification Information
+
+ 수정일 수정자 수정내용
+ ------- -------- ---------------------------
+ 2009.03.19 이삼섭 최초 생성
+ 2011.08.31 JJY 경량환경 버전 생성
+
+ author : 공통서비스 개발팀 이삼섭
+ since : 2009.03.19
+--%>
+<%@ page language="java" 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="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ taglib prefix="kc" uri="/WEB-INF/tlds/kcc_tld.tld"%>
+
+
+
+
+
+
+
+
+ 마이페이지
+
+
+
+
+
+
+ -
+
+
+ 찾교(청소년)
+
+
+
+
+ -
+
+
+ 찾교(성인)
+
+
+
+
+ -
+
+
+ 찾교(체험교실)
+
+
+
+
+ -
+
+
+ 실무역량강화
+
+
+
+
+
+
+
+
+
+
+ 찾아가는 교육 청소년 목록표
+
+
+
+
+
+
+
+
+ | 교육일 |
+ 신청유형 |
+ 신청상태 |
+ 설문 |
+
+
+
+
+ ', '');">
+
+ ${list.eduHopeDt} |
+ |
+
+
+
+ 대기
+
+
+ 교육신청
+
+
+ 교육승인
+
+
+ 교육반려
+
+
+ 교육취소
+
+
+ 선정완료
+
+
+ 수정요청
+
+
+ 수정완료
+
+
+ 교육확정
+
+
+ 대기
+
+
+ -
+
+
+ |
+
+
+
+ 제출
+
+
+ 미제출
+
+
+ |
+
+
+
+
+
+
+
+
+ 찾아가는 교육 성인 목록표
+
+
+
+
+
+
+
+
+ | 교육일 |
+ 신청유형 |
+ 신청상태 |
+ 설문 |
+
+
+
+
+ | 2023-07-26 |
+ 오프라인 |
+ 교육예정 |
+ 미완료 |
+
+
+ | 2023-07-26 |
+ 온라인 |
+ 교육완료 |
+ 완료 |
+
+
+ | 2023-07-21 |
+ 오프라인 |
+ 교육취소 |
+ - |
+
+
+
+
+
+
+
+
+
+ 체험교실 목록표
+
+
+
+
+
+
+
+
+ | 운영연도 |
+ 교육내용 |
+ 처리상태 |
+ 결과보고서 |
+
+
+
+
+ | 2023년 |
+ 담당교과 |
+ 운영확정 |
+ 미제출 |
+
+
+ | 2022년 |
+ 체육 |
+ 운영종료 |
+ 제출완료 |
+
+
+ | 2023년 |
+ 교과수업 |
+ 운영종료 |
+ 제출완료 |
+
+
+
+
+
+
+
+ 실무역량강화 교육 목록표
+
+
+
+
+
+
+
+
+ | 교육일 |
+ 신청상태 |
+ 설문 |
+ 이수증 |
+
+
+
+
+ | 2023-07-26 |
+ 오프라인 |
+ 교육예정 |
+ - |
+
+
+ | 2023-07-26 |
+ 온라인 |
+ 교육완료 |
+ 출력 |
+
+
+ | 2023-07-21 |
+ 오프라인 |
+ 교육취소 |
+ - |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/webapp/WEB-INF/jsp/web/ve/aplct/sspnIdtmt/eduInfo.jsp b/src/main/webapp/WEB-INF/jsp/web/ve/aplct/sspnIdtmt/eduInfo.jsp
index 92a536f2..0f452900 100644
--- a/src/main/webapp/WEB-INF/jsp/web/ve/aplct/sspnIdtmt/eduInfo.jsp
+++ b/src/main/webapp/WEB-INF/jsp/web/ve/aplct/sspnIdtmt/eduInfo.jsp
@@ -88,7 +88,7 @@
-
+ '">교육신청
diff --git a/src/main/webapp/WEB-INF/jsp/web/ve/aplct/tngrVisitEdu/eduEnd/eduEndList.jsp b/src/main/webapp/WEB-INF/jsp/web/ve/aplct/tngrVisitEdu/eduEnd/eduEndList.jsp
index 288ce0e1..96d43ff0 100644
--- a/src/main/webapp/WEB-INF/jsp/web/ve/aplct/tngrVisitEdu/eduEnd/eduEndList.jsp
+++ b/src/main/webapp/WEB-INF/jsp/web/ve/aplct/tngrVisitEdu/eduEnd/eduEndList.jsp
@@ -1,273 +1,274 @@
-<%--
-
- Class Name : eduEndList.jsp
- Description : 교육완료 리스트(청소년 찾아가는 교육)
- Modification Information
-
- 수정일 수정자 수정내용
- ------- -------- ---------------------------
- 2021.12.02 조용준 내용
-
- author : 조용준
- since : 2021.12.02
-/web/ve/aplct/cpyrgExprnClsrm/exprnClsrmInfo/exprnClsrmAplctReg
---%>
-<%@ 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="spring" uri="http://www.springframework.org/tags"%>
-<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
-<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
-<%@ taglib prefix="kc" uri="/WEB-INF/tlds/kcc_tld.tld"%>
-
-
- 교육신청 목록 > 청소년 찾아가는 저작권 교육 > 한국저작권위원회 저작권 교육 시스템
-
-
-
-
-
-
-
-
-
-
- " />
- " />
- " />
-
-
-
-
- 완료목록
-
-
-
-
-
-
-
-
-
-
-
- <%-- --%>
-
-
- ~
-
- <%-- --%>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- | 번호 |
- 교육일자 |
- 신청유형 |
- 차시 |
- 학교(기관)명 |
- 교육장소 |
- 강의평가 |
-
-
-
-
-
- |
- ', '');">
-
-
- |
-
- ', '');">
- ${list.eduHopeDt}
-
- |
-
- ', '');">
-
-
- |
-
- ', '');">
-
- ~
- (분)
-
- |
-
- ', '');">
-
-
- |
-
- ', '');">
-
-
- |
-
- ', '');">
-
-
- 제출
-
-
- 미제출
-
-
-
- |
-
-
-
- |
-
-
-
-
-
-
-
-
- -
- 번호
-
-
-
-
- -
- 교육일자
-
- ${list.eduHopeDt}
-
-
- -
- 신청유형
-
-
-
-
- -
- 차시
-
-
- ~
- (분)
-
-
- -
- 학교(기관)명
-
-
-
-
- -
- 교육장소
-
-
-
-
- -
- 강의 평가
-
-
-
- 제출
-
-
- 미제출
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+<%--
+
+ Class Name : eduEndList.jsp
+ Description : 교육완료 리스트(청소년 찾아가는 교육)
+ Modification Information
+
+ 수정일 수정자 수정내용
+ ------- -------- ---------------------------
+ 2021.12.02 조용준 내용
+
+ author : 조용준
+ since : 2021.12.02
+/web/ve/aplct/cpyrgExprnClsrm/exprnClsrmInfo/exprnClsrmAplctReg
+--%>
+<%@ 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="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
+<%@ taglib prefix="kc" uri="/WEB-INF/tlds/kcc_tld.tld"%>
+
+
+ 교육신청 목록 > 청소년 찾아가는 저작권 교육 > 한국저작권위원회 저작권 교육 시스템
+
+
+
+
+
+
+
+
+
+
+ " />
+ " />
+ " />
+
+
+
+
+ 완료목록
+
+
+
+
+
+
+
+
+
+
+
+ <%-- --%>
+
+
+ ~
+
+ <%-- --%>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | 번호 |
+ 교육일자 |
+ 신청유형 |
+ 차시 |
+ 학교(기관)명 |
+ 교육장소 |
+ 강의평가 |
+
+
+
+
+
+ |
+ ', '');">
+
+
+ |
+
+ ', '');">
+ ${list.eduHopeDt}
+
+ |
+
+ ', '');">
+
+
+ |
+
+ ', '');">
+
+ ~
+ (분)
+
+ |
+
+ ', '');">
+
+
+ |
+
+ ', '');">
+
+
+ |
+
+ ', '');">
+
+
+ 제출
+
+
+ 미제출
+
+
+
+ |
+
+
+
+ |
+
+
+
+
+
+
+
+
+ -
+ 번호
+
+
+
+
+ -
+ 교육일자
+
+ ${list.eduHopeDt}
+
+
+ -
+ 신청유형
+
+
+
+
+ -
+ 차시
+
+
+ ~
+ (분)
+
+
+ -
+ 학교(기관)명
+
+
+
+
+ -
+ 교육장소
+
+
+
+
+ -
+ 강의 평가
+
+
+
+ 제출
+
+
+ 미제출
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|