From d3bd8fe3ecf9278b963cbc69787589ec72a68e9f Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Tue, 19 Aug 2025 12:51:17 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B8=94=EB=A1=9C=EA=B7=B8=20=ED=8F=AC?= =?UTF-8?q?=EC=8A=A4=ED=8C=85=EC=9E=90=EB=8F=99=ED=99=94=EC=A7=84=ED=96=89?= =?UTF-8?q?=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/cmn/config/MainDatabaseConfig.java | 8 +-- .../itn/admin/cmn/config/UserInterceptor.java | 1 + .../itn/admin/cmn/util/slack/SlackUtil.java | 72 ++++++++++++++----- src/main/java/com/itn/admin/cmn/vo/CmnVO.java | 14 ++-- .../service/impl/CommuteServiceImpl.java | 4 +- .../itn/blog/service/BlogPosingService.java | 31 ++++++++ .../user/service/impl/UserServiceImpl.java | 2 +- src/main/resources/application-dev.properties | 25 ++++++- .../resources/application-prod.properties | 19 ++++- .../resources/docs/munjaon_tstory_state.json | 1 + .../mapper/gw/holiday/HolidayMapper.xml | 1 + src/main/resources/mybatis-config.xml | 29 ++++---- .../resources/templates/accessDenied.html | 12 ---- .../templates/commute/list_temp.html | 12 ---- .../resources/templates/fragments/header.html | 19 +++++ .../templates/fragments/mainsidebar.html | 35 +++++++++ .../resources/templates/itn/bizTrip/list.html | 12 ---- .../templates/itn/blog/posting/list.html | 71 +++++++++++------- .../templates/itn/commute/list_temp.html | 12 ---- .../resources/templates/itn/user/list.html | 12 ---- 20 files changed, 261 insertions(+), 131 deletions(-) create mode 100644 src/main/java/com/itn/admin/itn/blog/service/BlogPosingService.java create mode 100644 src/main/resources/docs/munjaon_tstory_state.json diff --git a/src/main/java/com/itn/admin/cmn/config/MainDatabaseConfig.java b/src/main/java/com/itn/admin/cmn/config/MainDatabaseConfig.java index eb6808c..9d63574 100644 --- a/src/main/java/com/itn/admin/cmn/config/MainDatabaseConfig.java +++ b/src/main/java/com/itn/admin/cmn/config/MainDatabaseConfig.java @@ -1,19 +1,15 @@ package com.itn.admin.cmn.config; -import com.zaxxer.hikari.HikariDataSource; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; -import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; -import org.springframework.jdbc.datasource.DataSourceTransactionManager; import javax.sql.DataSource; @@ -24,6 +20,7 @@ import javax.sql.DataSource; ,"com.itn.admin.itn.mjon.spam.mapper" ,"com.itn.admin.itn.user.mapper" ,"com.itn.admin.itn.code.mapper" + ,"com.itn.admin.itn.blog.mapper" } , sqlSessionFactoryRef = "factory") class MainDatabaseConfig { @@ -47,7 +44,8 @@ class MainDatabaseConfig { SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean(); sqlSessionFactory.setDataSource(dataSource); - sqlSessionFactory.setTypeAliasesPackage("com.itn.admin.itn.*"); +// sqlSessionFactory.setTypeAliasesPackage("com.itn.admin.itn.*"); +// sqlSessionFactory.setTypeAliasesPackage("com.itn.admin.itn"); sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/itn/**/*Mapper.xml")); sqlSessionFactory.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("classpath:mybatis-config.xml")); return sqlSessionFactory.getObject(); diff --git a/src/main/java/com/itn/admin/cmn/config/UserInterceptor.java b/src/main/java/com/itn/admin/cmn/config/UserInterceptor.java index 45e3571..e0ea730 100644 --- a/src/main/java/com/itn/admin/cmn/config/UserInterceptor.java +++ b/src/main/java/com/itn/admin/cmn/config/UserInterceptor.java @@ -28,6 +28,7 @@ public class UserInterceptor implements HandlerInterceptor { log.info(" :: Request URL: " + request.getRequestURL()); log.info(" :: Request Method: " + request.getMethod()); log.info(" :: Remote Address: " + request.getRemoteAddr()); + log.info(" :: modelAndView: " + modelAndView); if (modelAndView != null) { diff --git a/src/main/java/com/itn/admin/cmn/util/slack/SlackUtil.java b/src/main/java/com/itn/admin/cmn/util/slack/SlackUtil.java index 0f2354a..c8938f9 100644 --- a/src/main/java/com/itn/admin/cmn/util/slack/SlackUtil.java +++ b/src/main/java/com/itn/admin/cmn/util/slack/SlackUtil.java @@ -1,14 +1,20 @@ package com.itn.admin.cmn.util.slack; - +import lombok.extern.slf4j.Slf4j; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.PostMethod; import org.json.simple.JSONObject; +import org.springframework.stereotype.Component; import java.io.IOException; /** + * 레거시 Slack 유틸리티 클래스 + * + * @deprecated 새로운 프로젝트에서는 {@link SlackNotificationService}를 사용하세요. + * 기존 코드 호환성을 위해 유지됩니다. + * * packageName : com.itn.mjonApi.util.slack * fileName : Slack * author : hylee @@ -18,40 +24,74 @@ import java.io.IOException; * DATE AUTHOR NOTE * ----------------------------------------------------------- * 2023-08-28 hylee 최초 생성 + * 2025-01-16 claude SlackNotificationService 통합을 위한 리팩토링 */ - +@Slf4j +@Component +@Deprecated public class SlackUtil { + + /** + * 모락 메뉴 알림 발송 (레거시 메서드) + * @deprecated 새로운 알림은 {@link SlackNotificationService#sendCustomMessage}를 사용하세요. + */ + @Deprecated public static void sendMorakMenuToSlack(String sendMsg) { - String url = "https://hooks.slack.com/services/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"; + sendSlackMessage(url, "모락메뉴api", sendMsg, "모락 메뉴", ":bento:"); + } + + /** + * 범용 슬랙 메시지 발송 메서드 + * @param webhookUrl 웹훅 URL + * @param channel 채널명 + * @param message 메시지 내용 + * @param username 발송자명 + * @param iconEmoji 아이콘 이모지 + */ + public static void sendSlackMessage(String webhookUrl, String channel, String message, + String username, String iconEmoji) { HttpClient client = new HttpClient(); - PostMethod post = new PostMethod(url); + PostMethod post = new PostMethod(webhookUrl); JSONObject json = new JSONObject(); try { - String munjaText = sendMsg; - json.put("channel", "모락메뉴api"); - - json.put("text", munjaText); -// json.put("icon_emoji", ":원하는 아이콘:"); //커스터마이징으로 아이콘 만들수도 있다! - json.put("username", "모락 메뉴"); - + json.put("channel", channel); + json.put("text", message); + json.put("username", username); + if (iconEmoji != null && !iconEmoji.trim().isEmpty()) { + json.put("icon_emoji", iconEmoji); + } post.addParameter("payload", json.toString()); - // 처음에 utf-8로 content-type안넣어주니까 한글은 깨져서 content-type넣어줌 post.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); + int responseCode = client.executeMethod(post); String response = post.getResponseBodyAsString(); - if (responseCode != HttpStatus.SC_OK) { - System.out.println("Response: " + response); + + if (responseCode == HttpStatus.SC_OK) { + log.debug("Slack 메시지 발송 성공: {} to {}", message, channel); + } else { + log.warn("Slack 메시지 발송 실패 - Code: {}, Response: {}", responseCode, response); } } catch (IllegalArgumentException e) { - System.out.println("IllegalArgumentException posting to Slack " + e); + log.error("Slack 발송 중 잘못된 인자 오류: {}", e.getMessage(), e); } catch (IOException e) { - System.out.println("IOException posting to Slack " + e); + log.error("Slack 발송 중 IO 오류: {}", e.getMessage(), e); + } catch (Exception e) { + log.error("Slack 발송 중 예상치 못한 오류: {}", e.getMessage(), e); } finally { post.releaseConnection(); } } + + /** + * 단순 메시지 발송 (기본 설정 사용) + * @param webhookUrl 웹훅 URL + * @param message 메시지 내용 + */ + public static void sendSimpleMessage(String webhookUrl, String message) { + sendSlackMessage(webhookUrl, "general", message, "ITN-Admin", ":robot_face:"); + } } diff --git a/src/main/java/com/itn/admin/cmn/vo/CmnVO.java b/src/main/java/com/itn/admin/cmn/vo/CmnVO.java index f5a45c9..293792e 100644 --- a/src/main/java/com/itn/admin/cmn/vo/CmnVO.java +++ b/src/main/java/com/itn/admin/cmn/vo/CmnVO.java @@ -3,6 +3,8 @@ package com.itn.admin.cmn.vo; import lombok.*; import lombok.experimental.SuperBuilder; +import java.time.LocalDateTime; + @NoArgsConstructor @AllArgsConstructor @SuperBuilder @@ -19,10 +21,14 @@ public class CmnVO { private int totalPageCount; // 총 페이지 수 private int startPage; // 페이지네이션의 시작 페이지 번호 private int endPage; // 페이지네이션의 끝 페이지 번호 - private String frstRegisterId; - private String frstRegistPnttm; - private String lastUpdusrId; - private String lastUpdtPnttm; + private String createdBy; + private LocalDateTime frstRegistPnttm; + private String updatedBy; + private LocalDateTime lastUpdtPnttm; + + // 등록자/수정자 정보 + private String frstRegisterId; // 최초 등록자 ID + private String lastUpdusrId; // 최종 수정자 ID // 페이징을 위한 offset과 limit을 계산하는 메서드 diff --git a/src/main/java/com/itn/admin/commute/service/impl/CommuteServiceImpl.java b/src/main/java/com/itn/admin/commute/service/impl/CommuteServiceImpl.java index 66822dc..f53f05b 100644 --- a/src/main/java/com/itn/admin/commute/service/impl/CommuteServiceImpl.java +++ b/src/main/java/com/itn/admin/commute/service/impl/CommuteServiceImpl.java @@ -213,7 +213,7 @@ public class CommuteServiceImpl implements CommuteService { // 활동 시간이 기준 시간보다 이전이면 조기 퇴근 if (activityTime.isBefore(checkTime)) { - return "70"; //""조기퇴근"; + return "90"; //""조기퇴근"; } // 그렇지 않으면 빈 문자열 반환 return ""; @@ -228,7 +228,7 @@ public class CommuteServiceImpl implements CommuteService { // 활동 시간이 기준 시간보다 이후면 지각 if (activityTime.isAfter(checkTime)) { - return "60"; // 지각 시 60 반환 (공통코드 COMMUTE) + return "70"; // 지각 시 70 반환 (공통코드 COMMUTE) } // 그렇지 않으면 빈 문자열 반환 return ""; diff --git a/src/main/java/com/itn/admin/itn/blog/service/BlogPosingService.java b/src/main/java/com/itn/admin/itn/blog/service/BlogPosingService.java new file mode 100644 index 0000000..67d1ac3 --- /dev/null +++ b/src/main/java/com/itn/admin/itn/blog/service/BlogPosingService.java @@ -0,0 +1,31 @@ +package com.itn.admin.itn.blog.service; + +import com.itn.admin.itn.blog.mapper.domain.BlogAccountWithSourcesDTO; +import com.itn.admin.itn.blog.mapper.domain.BlogPostHistoryVO; + +import java.util.List; +import java.util.Map; + +public interface BlogPosingService { + BlogAccountWithSourcesDTO getAccountWithSources(Long blogId); + + /** + * 워크플로우 히스토리 조회 (페이징 지원) + */ + List getWorkflowHistory(String blogId, String urlId, String status, int limit, int offset); + + /** + * 워크플로우 통계 조회 + */ + Map getWorkflowStatistics(Long blogId); + + /** + * 실시간 진행상황 조회 + */ + BlogPostHistoryVO getPublishProgress(Long postId); + + /** + * 실패 원인별 분석 + */ + List> getFailureAnalysis(Long blogId, int days); +} \ No newline at end of file diff --git a/src/main/java/com/itn/admin/itn/user/service/impl/UserServiceImpl.java b/src/main/java/com/itn/admin/itn/user/service/impl/UserServiceImpl.java index e3e581c..00cde0e 100644 --- a/src/main/java/com/itn/admin/itn/user/service/impl/UserServiceImpl.java +++ b/src/main/java/com/itn/admin/itn/user/service/impl/UserServiceImpl.java @@ -180,7 +180,7 @@ public class UserServiceImpl implements UserService { return RestResponse.builder() .status(HttpStatus.BAD_REQUEST) // 실패 .data(userVO.getUserName()) - .msg("실패하였습니다.") + .msg("그룹웨어에 해당 이름으로 여러개 아이디가 등록되었습니다.\n확인해주세요") .build(); } userVO.setGwId(gwUserId); diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties index 8ce4307..7baaa55 100644 --- a/src/main/resources/application-dev.properties +++ b/src/main/resources/application-dev.properties @@ -1,2 +1,25 @@ agent.file.dir.path=X:\agent_file -spring.thymeleaf.cache=false \ No newline at end of file +spring.thymeleaf.cache=false + +# Tomcat 세션 영속화 비활성화 (개발 환경) +server.servlet.session.persistent=false + +# 블로그 발행 설정 +blog.generate.url=http://192.168.0.78:5000/blog/generate +blog.generate.timeout-ms=60000 + +# Python ?? ?? +python.base-url=http://192.168.0.78:5000 +python.path=/blog/generate +python.timeout-ms=20000 + +# Slack Notification Settings +slack.notification.enabled=true +slack.webhook.default=https://hooks.slack.com/services/YOUR_WEBHOOK_URL_HERE +slack.webhook.blog-schedule=https://hooks.slack.com/services/YOUR_BLOG_SCHEDULE_WEBHOOK_URL +slack.webhook.system-alert=https://hooks.slack.com/services/YOUR_SYSTEM_ALERT_WEBHOOK_URL +slack.channel.default=general +slack.channel.blog-schedule=blog-alerts +slack.channel.system-alert=system-alerts +slack.username=ITN-Admin +slack.icon.emoji=:robot_face: \ No newline at end of file diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties index 5c06626..d408bfd 100644 --- a/src/main/resources/application-prod.properties +++ b/src/main/resources/application-prod.properties @@ -1,2 +1,19 @@ agent.file.dir.path=/home/docker/tomcat_8081_to_8089_2022_0712/kcc_adr_volume/agent_file -spring.thymeleaf.cache=true \ No newline at end of file +spring.thymeleaf.cache=true + + +# Python ?? ?? +python.base-url=http://192.168.0.78:5000 +python.path=/blog/generate +python.timeout-ms=20000 + +# Slack Notification Settings +slack.notification.enabled=true +slack.webhook.default=https://hooks.slack.com/services/YOUR_PRODUCTION_WEBHOOK_URL_HERE +slack.webhook.blog-schedule=https://hooks.slack.com/services/YOUR_PROD_BLOG_SCHEDULE_WEBHOOK_URL +slack.webhook.system-alert=https://hooks.slack.com/services/YOUR_PROD_SYSTEM_ALERT_WEBHOOK_URL +slack.channel.default=general +slack.channel.blog-schedule=blog-alerts +slack.channel.system-alert=system-alerts +slack.username=ITN-Admin-PROD +slack.icon.emoji=:warning: \ No newline at end of file diff --git a/src/main/resources/docs/munjaon_tstory_state.json b/src/main/resources/docs/munjaon_tstory_state.json new file mode 100644 index 0000000..d916d01 --- /dev/null +++ b/src/main/resources/docs/munjaon_tstory_state.json @@ -0,0 +1 @@ +{"cookies": [{"name": "REACTION_GUEST", "value": "133b886648804339feadfd841302da6d05132347", "domain": "www.tistory.com", "path": "/api/v1/login", "expires": -1, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "__T_", "value": "1", "domain": ".www.tistory.com", "path": "/auth", "expires": -1, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "__T_SECURE", "value": "1", "domain": ".www.tistory.com", "path": "/auth", "expires": -1, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "TOP-XSRF-TOKEN", "value": "bd3287d1-d5b0-46d7-b7af-8765912404d4", "domain": "www.tistory.com", "path": "/", "expires": -1, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "TUID", "value": "w-LTkgti6AxsII_250812104212509", "domain": ".tiara.tistory.com", "path": "/", "expires": 1789523086.851005, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "TSID", "value": "w-LTkgti6AxsII_250812104212509", "domain": ".tiara.tistory.com", "path": "/", "expires": 1754964886.851043, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "UUID", "value": "vjVvjWQqCFgN7AMcjUqn7GSnaB2e4k1xdX4LCu.1VkAGyqpPHrSoPg00", "domain": ".tiara.tistory.com", "path": "/", "expires": 1789523086.851053, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "_SUID", "value": "w-YsxLLhLm3JL1_250812712764718", "domain": ".tiara.tistory.com", "path": "/", "expires": 1754964886.851061, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "_ISUID", "value": "w-IaLQrLzxdIgA_250812097826260", "domain": ".tiara.tistory.com", "path": "/", "expires": 1754964886.851069, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "_maldive_oauth_webapp_session_key", "value": "42e2e9ee5cfb5e4d7530be81845e3ed4", "domain": "accounts.kakao.com", "path": "/", "expires": -1, "httpOnly": true, "secure": true, "sameSite": "Lax"}, {"name": "__T_", "value": "1", "domain": ".accounts.kakao.com", "path": "/", "expires": -1, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "__T_SECURE", "value": "1", "domain": ".accounts.kakao.com", "path": "/", "expires": -1, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "TUID", "value": "w-yw8sPxfnuLFp_250812104214484", "domain": ".tiara.kakao.com", "path": "/", "expires": 1789522949.094937, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "TSID", "value": "w-yw8sPxfnuLFp_250812104214484", "domain": ".tiara.kakao.com", "path": "/", "expires": 1754964749.094981, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "UUID", "value": "-RAnOy_7RnQrDWHpMnhGiaqNvssKI.Sq_YVQujcSqz1cqZryGW-eoA00", "domain": ".tiara.kakao.com", "path": "/", "expires": 1789522949.094991, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "_SUID", "value": "w-fW1XhEi39Xs9_250812113831309", "domain": ".tiara.kakao.com", "path": "/", "expires": 1754964749.095, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "_ISUID", "value": "w-71jUpxNBHGvb_250812424598618", "domain": ".tiara.kakao.com", "path": "/", "expires": 1754964749.095008, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "_kawask", "value": "93609454-8bf5-4b44-bf85-0036b6c9e5c0", "domain": ".kakao.com", "path": "/", "expires": 1754963234.568146, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "_T_ANO", "value": "OPJFm6JMKVrZQDsvcJTRUN/X1dpYkeX/Vv3Z86RpIDgmAYkodOcPPKrD2a2ohynCbF499EBLyw1m3Ap/C9DFkMnGYBemRZzs/WG51C/UwcQhfuTQaHKUAFgpWIqypqyqHFMy4r0P5+ce77TGAMF3gEwghMb6Qc19D7mgSAv/g1qWiTbw+os+TRyS4z4EYc++oCK4Y+ohaLH80DKINFS4iC/qYynbQgpMstZ59CifVj2fr3CKX/IiKKR3uOzFLMt7sQRfii6cd1/BD1NJd1DjjidpMnDwbI4UdzK25KHgcbzANNAJ6HFkGPkqGCE/IHVmDbpUEa4rRHwxjNEmt6iMZQ==", "domain": ".kakao.com", "path": "/", "expires": 1789522949.095017, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "_kau", "value": "5665a827ed6648851c71e18f2b24e686f96342ffdf33ffa8d7a9b68bb996033aaf7edcbc5fbba65cdca027e955f99ffc1ceadb3d5f7436a58c3e09eec1b19b872221b0651e81fb7dbb4d427466bcaa1325e6c18694e9ed221a217d0ea10271f7f55a7463f63046d5cfb45173d5e0c2f09dd2a83641820579af3dead1d23235373338393139383636343039383037333230303533323734303736323730968fade6b728c14897ce5bfbdce493da", "domain": ".kakao.com", "path": "/", "expires": 1786499086.212034, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "_kawlt", "value": "7XTP5-ZX5fIeS_scYrTlL2WBAoBLzpCq5ISI9XkK9sE25GnKnr_pncnaTbXo7SG58kJ8_BtiUHfW4NQfPjmCGffTSCshG1E8PKxoRrbfFnXGnflTOygfyvJugPozHK4G", "domain": ".kakao.com", "path": "/", "expires": -1, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "_kawltea", "value": "1755038693", "domain": ".kakao.com", "path": "/", "expires": -1, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "_karmt", "value": "4cqfjLLqveGHwONsp3GVe0AF-z6Mcg_NulnJ811HSa0V4Ey_M11KAhbkeixDicSh", "domain": ".kakao.com", "path": "/", "expires": -1, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "_karmtea", "value": "1755049493", "domain": ".kakao.com", "path": "/", "expires": -1, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "_kahai", "value": "598ca8df9e669ac0972122e95ea993023979ed5b9d0724ae5b14b0d2621158c1", "domain": ".kakao.com", "path": "/", "expires": -1, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "_karb", "value": "dDLw5fcrg8imx855_1754963093187", "domain": ".kakao.com", "path": "/", "expires": 1762739086.212144, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "JSESSIONID", "value": "140FF42CD1417889BEEFB2F24CD9160A", "domain": "logins.daum.net", "path": "/", "expires": -1, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "TS", "value": "1754963093", "domain": ".daum.net", "path": "/", "expires": -1, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "HTS", "value": "tk9WE3DMkvVH-Z8HGjUGPg00", "domain": ".daum.net", "path": "/", "expires": -1, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "HM_CU", "value": "5Fkuo9FgpiW", "domain": ".daum.net", "path": "/", "expires": -1, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "PROF", "value": "0603012024024056024140UiQPJk7X-6w0-zE35fE7EtWDTWO2pljEtw00KuZP3z7wEl2W4..NYhR74w00HhOTWRadPF-WB8LR5EuQHuEu_z5.cpGk_OVd_89qYL2s2E.LOkAs9A00fIauQlo8OTLcCscrxJX8Uw00qoMUB8tkV_CZD5qGItfxAzmxAejbRGREFRqadmFzvheDTIiwz1pmnVqJ.kf_9GKegIHMMxeG5uhi-GigrV_VROQ6yz8WaiCaHu-kKp9xop7HykAifxJX39A-OFZjMZliwfgHfnhLK5I0", "domain": ".daum.net", "path": "/", "expires": -1, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "ALID", "value": "kOkszoFdMkua_598iIa1eYtxe_EF9apvtrsyRDV-vbIrmkh8DEnIN5oszMeiixP2w999UI", "domain": ".daum.net", "path": "/", "expires": -1, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "ENAI", "value": "LCdUUY+R2c+JOk87eaL9EQZhrQkI9WJqqhQR9MzWK2nm6ahtaMnPVmJXpqXIvdun", "domain": ".daum.net", "path": "/", "expires": -1, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "LSID", "value": "UgjzOgxhVcKOkl-POeyDdbkN1pkny2wXhXiulaUI9r0CJ5qKT1TCtG7z0weH6jHePqPcUaGVHfr_ZJFZO3iRcUZqPsk5S2HVo7OI-riGRHZy8sbqw", "domain": ".daum.net", "path": "/", "expires": -1, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "JSESSIONID", "value": "19D01C60B553F1F58AC5EDFAF8405F52", "domain": "kauth.kakao.com", "path": "/", "expires": -1, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "TSSESSION", "value": "4a199a85ae083bb47a913ede35fe32b5f4a9d389", "domain": ".tistory.com", "path": "/", "expires": -1, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "__T_", "value": "1", "domain": ".munjaon.tistory.com", "path": "/", "expires": -1, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "__T_SECURE", "value": "1", "domain": ".munjaon.tistory.com", "path": "/", "expires": -1, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "_T_ANO", "value": "k3ITjvyvg7TxqnUiI4XLZEyKvdjdPqFKQjpx5zV8KEFS631ZzQkbvOaj2xYxMx++CcV/AYRe8IOm3Wue/LKg7um8X1hNwRNWGC9AJz+9qB3IpLD8r2jXPh3eofE9ds/HTCI2nE9sgsbX6AkF8xwUIKUOV0mgX6rYvV8w8KzGLuGdrR8wdQ+REyXnQGczC0/ZOWLkqaoNF52J/cB1ZVWo5Z//n5vw/I707w5WAn3UmdbsWKMP45CMlR1QxXcPwYS3W1usmp15Op4G1cqVHmh/9sVVpcO/3TKzm1ytWh/UA7KEXnL2DkN/4zHgUhzyf5PeRkcYGZnGTrktq6ZgpRLozA==", "domain": ".tistory.com", "path": "/", "expires": 1789523086.851077, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "TSMT", "value": "1", "domain": "munjaon.tistory.com", "path": "/", "expires": 1786499087.434504, "httpOnly": false, "secure": false, "sameSite": "Lax"}], "origins": []} \ No newline at end of file diff --git a/src/main/resources/mapper/gw/holiday/HolidayMapper.xml b/src/main/resources/mapper/gw/holiday/HolidayMapper.xml index 8c70965..2054d80 100644 --- a/src/main/resources/mapper/gw/holiday/HolidayMapper.xml +++ b/src/main/resources/mapper/gw/holiday/HolidayMapper.xml @@ -49,6 +49,7 @@ USER_ID FROM INTRAWARE.USR_GLOBAL WHERE NAME = #{userName} + AND STATUS = 1 diff --git a/src/main/resources/mybatis-config.xml b/src/main/resources/mybatis-config.xml index fbef0c5..715cd4d 100644 --- a/src/main/resources/mybatis-config.xml +++ b/src/main/resources/mybatis-config.xml @@ -30,23 +30,18 @@ + + + + + + + + + + + + - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/templates/accessDenied.html b/src/main/resources/templates/accessDenied.html index a3731a6..0da7fb4 100644 --- a/src/main/resources/templates/accessDenied.html +++ b/src/main/resources/templates/accessDenied.html @@ -98,18 +98,6 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - \ No newline at end of file +g \ No newline at end of file diff --git a/src/main/resources/templates/itn/commute/list_temp.html b/src/main/resources/templates/itn/commute/list_temp.html index fe52522..514cf6d 100644 --- a/src/main/resources/templates/itn/commute/list_temp.html +++ b/src/main/resources/templates/itn/commute/list_temp.html @@ -148,18 +148,6 @@ - - - - - - - - - - - - - - - - - - - - - - -