--- src/main/java/itn/com/cmm/util/DateUtil.java
+++ src/main/java/itn/com/cmm/util/DateUtil.java
... | ... | @@ -6,6 +6,7 @@ |
| 6 | 6 |
import java.time.LocalDateTime; |
| 7 | 7 |
import java.time.Month; |
| 8 | 8 |
import java.time.format.DateTimeFormatter; |
| 9 |
+import java.time.temporal.ChronoUnit; |
|
| 9 | 10 |
import java.util.Date; |
| 10 | 11 |
|
| 11 | 12 |
/** |
... | ... | @@ -23,7 +24,9 @@ |
| 23 | 24 |
* |
| 24 | 25 |
*/ |
| 25 | 26 |
public final class DateUtil {
|
| 26 |
- |
|
| 27 |
+ |
|
| 28 |
+ // 날짜를 포맷하는 포맷터 정의 |
|
| 29 |
+ private static final DateTimeFormatter SLUSH_FORMATTER = DateTimeFormatter.ofPattern("yyyy/MM/dd");
|
|
| 27 | 30 |
|
| 28 | 31 |
/** |
| 29 | 32 |
* @methodName : getTodayYearAndMonthAndFirstDay |
... | ... | @@ -108,5 +111,70 @@ |
| 108 | 111 |
} |
| 109 | 112 |
|
| 110 | 113 |
|
| 111 |
- |
|
| 114 |
+ // 현재 날짜를 기본 포맷으로 반환 |
|
| 115 |
+ public static String getCurrentDate() {
|
|
| 116 |
+ return getCurrentDate(SLUSH_FORMATTER); |
|
| 117 |
+ } |
|
| 118 |
+ |
|
| 119 |
+ // 현재 날짜를 지정된 포맷으로 반환 |
|
| 120 |
+ public static String getCurrentDate(DateTimeFormatter formatter) {
|
|
| 121 |
+ LocalDate today = LocalDate.now(); |
|
| 122 |
+ return today.format(formatter); |
|
| 123 |
+ } |
|
| 124 |
+ |
|
| 125 |
+ // 현재 날짜에서 특정 일수 전 날짜를 기본 포맷으로 반환 |
|
| 126 |
+ public static String getDateDaysAgo(int days) {
|
|
| 127 |
+ return getDateDaysAgo(days, SLUSH_FORMATTER); |
|
| 128 |
+ } |
|
| 129 |
+ |
|
| 130 |
+ // 현재 날짜에서 특정 일수 전 날짜를 지정된 포맷으로 반환 |
|
| 131 |
+ public static String getDateDaysAgo(int days, DateTimeFormatter formatter) {
|
|
| 132 |
+ LocalDate today = LocalDate.now(); |
|
| 133 |
+ LocalDate daysAgo = today.minusDays(days); |
|
| 134 |
+ return daysAgo.format(formatter); |
|
| 135 |
+ } |
|
| 136 |
+ |
|
| 137 |
+ |
|
| 138 |
+ public static boolean dateChk365AndValueChk(String searchStartDate, String searchEndDate) {
|
|
| 139 |
+ |
|
| 140 |
+ |
|
| 141 |
+ boolean isValid = true; |
|
| 142 |
+ |
|
| 143 |
+ // 날짜 형식 지정 |
|
| 144 |
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
|
|
| 145 |
+ |
|
| 146 |
+ //날짜 검증 |
|
| 147 |
+ LocalDate startDate = null; |
|
| 148 |
+ LocalDate endDate = null; |
|
| 149 |
+ |
|
| 150 |
+ // 검색 시작일자와 종료일자가 있는지 체크 |
|
| 151 |
+ if (searchStartDate == null || searchStartDate.isEmpty() || searchEndDate == null || searchEndDate.isEmpty()) {
|
|
| 152 |
+ isValid = false; |
|
| 153 |
+ } |
|
| 154 |
+ |
|
| 155 |
+ // 날짜 형식으로 변환 |
|
| 156 |
+ if (isValid) {
|
|
| 157 |
+ try {
|
|
| 158 |
+ startDate = LocalDate.parse(searchStartDate, formatter); |
|
| 159 |
+ endDate = LocalDate.parse(searchEndDate, formatter); |
|
| 160 |
+ } catch (Exception e) {
|
|
| 161 |
+ isValid = false; |
|
| 162 |
+ } |
|
| 163 |
+ } |
|
| 164 |
+ |
|
| 165 |
+ // 시작일자가 종료일자보다 이후인지 확인 |
|
| 166 |
+ if (isValid && startDate.isAfter(endDate)) {
|
|
| 167 |
+ isValid = false; |
|
| 168 |
+ } |
|
| 169 |
+ |
|
| 170 |
+ // 총 기간이 365일을 넘는지 확인 |
|
| 171 |
+ if (isValid) {
|
|
| 172 |
+ long daysBetween = ChronoUnit.DAYS.between(startDate, endDate); |
|
| 173 |
+ if (daysBetween > 365) {
|
|
| 174 |
+ isValid = false; |
|
| 175 |
+ } |
|
| 176 |
+ } |
|
| 177 |
+ |
|
| 178 |
+ return isValid; |
|
| 179 |
+ } |
|
| 112 | 180 |
} |
--- src/main/java/itn/let/mjo/msgCustom/web/MjonMsgCustomWebController.java
+++ src/main/java/itn/let/mjo/msgCustom/web/MjonMsgCustomWebController.java
... | ... | @@ -3,6 +3,9 @@ |
| 3 | 3 |
import java.math.BigDecimal; |
| 4 | 4 |
import java.math.RoundingMode; |
| 5 | 5 |
import java.text.SimpleDateFormat; |
| 6 |
+import java.time.LocalDate; |
|
| 7 |
+import java.time.format.DateTimeFormatter; |
|
| 8 |
+import java.time.temporal.ChronoUnit; |
|
| 6 | 9 |
import java.util.Date; |
| 7 | 10 |
import java.util.List; |
| 8 | 11 |
import java.util.Map; |
... | ... | @@ -32,6 +35,7 @@ |
| 32 | 35 |
import itn.com.cmm.service.EgovFileMngService; |
| 33 | 36 |
import itn.com.cmm.service.EgovFileMngUtil; |
| 34 | 37 |
import itn.com.cmm.service.FileVO; |
| 38 |
+import itn.com.cmm.util.DateUtil; |
|
| 35 | 39 |
import itn.com.utl.fcc.service.EgovStringUtil; |
| 36 | 40 |
import itn.let.lett.service.HashConfVO; |
| 37 | 41 |
import itn.let.lett.service.LetterService; |
... | ... | @@ -136,6 +140,15 @@ |
| 136 | 140 |
model.addAttribute("customEditPrice", customEditPrice);
|
| 137 | 141 |
model.addAttribute("customEdit3Price", customEdit3Price);
|
| 138 | 142 |
model.addAttribute("customTextPrice", customTextPrice);
|
| 143 |
+ |
|
| 144 |
+ |
|
| 145 |
+ // 내 보관함 - 기본 날짜 검색 셋팅 |
|
| 146 |
+ // 오늘 날짜에서 365일 날짜 가져와서 |
|
| 147 |
+ // 검색날짜에 입력 |
|
| 148 |
+ model.addAttribute("myStartDate", DateUtil.getDateDaysAgo(365));
|
|
| 149 |
+ model.addAttribute("myEndDate", DateUtil.getCurrentDate());
|
|
| 150 |
+ |
|
| 151 |
+ |
|
| 139 | 152 |
|
| 140 | 153 |
return "/web/custom/MsgCustomView"; |
| 141 | 154 |
} |
... | ... | @@ -212,6 +225,19 @@ |
| 212 | 225 |
// 문자 종류 정보가 없으면 단문문자로 셋팅 |
| 213 | 226 |
mjonMsgCustomVO.setLetterType("C");
|
| 214 | 227 |
|
| 228 |
+ |
|
| 229 |
+ // 검색 데이터가 없거나 |
|
| 230 |
+ // 시작일자가 종료일자보다 이후이거나 |
|
| 231 |
+ // 총 기간이 365일이 넘으면 현재일부터 365일 전 날짜를 넣어서 검색 |
|
| 232 |
+ if(!DateUtil.dateChk365AndValueChk(mjonMsgCustomVO.getSearchStartDate(),mjonMsgCustomVO.getSearchEndDate() )) {
|
|
| 233 |
+ |
|
| 234 |
+ mjonMsgCustomVO.setSearchStartDate(DateUtil.getDateDaysAgo(365)); |
|
| 235 |
+ mjonMsgCustomVO.setSearchEndDate(DateUtil.getCurrentDate()); |
|
| 236 |
+ |
|
| 237 |
+ }; |
|
| 238 |
+ |
|
| 239 |
+ |
|
| 240 |
+ |
|
| 215 | 241 |
// 내 보관함 이미지 목록 조회 |
| 216 | 242 |
mjonMsgCustomVO.setUserId(userId); |
| 217 | 243 |
List<MjonMsgCustomVO> resultCustomImgList = mjonMsgCustomService.selectMjonMsgMyCustomImgList(mjonMsgCustomVO); |
... | ... | @@ -223,7 +249,8 @@ |
| 223 | 249 |
|
| 224 | 250 |
return "/web/custom/MsgMyCustomListAjax"; |
| 225 | 251 |
} |
| 226 |
- |
|
| 252 |
+ |
|
| 253 |
+ |
|
| 227 | 254 |
/** 사용자 맞춤제작 내보관함 삭제 - LETTNFILEDETAIL 테이블 FILE_DELETE_YN 컬럼 업데이트*/ |
| 228 | 255 |
@RequestMapping(value= {"/web/mjon/custom/deleteMsgMyCustomAjax.do"})
|
| 229 | 256 |
public ModelAndView deleteMsgMyCustomAjax(@RequestParam("chk") String[] chk, @ModelAttribute("searchVO") MjonMsgCustomVO mjonMsgCustomVO
|
--- src/main/webapp/WEB-INF/jsp/web/custom/MsgCustomView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/custom/MsgCustomView.jsp
... | ... | @@ -128,11 +128,54 @@ |
| 128 | 128 |
|
| 129 | 129 |
//맞춤제작 내보관함 리스트 |
| 130 | 130 |
function myCustomListAjax(pageNo){
|
| 131 |
+ |
|
| 132 |
+ if(!fn_dataValueChk()){
|
|
| 133 |
+ return; |
|
| 134 |
+ }; |
|
| 135 |
+ |
|
| 131 | 136 |
document.myCustomForm.pageIndex.value = pageNo; |
| 132 | 137 |
var sendData= $(document.myCustomForm).serializeArray(); |
| 133 | 138 |
$("#myCustomLoad").load("/web/mjon/custom/selectMsgMyCustomListAjax.do", sendData ,function(response, status, xhr){
|
| 134 | 139 |
photoLayerView(); |
| 135 | 140 |
}); |
| 141 |
+} |
|
| 142 |
+ |
|
| 143 |
+function fn_dataValueChk(){
|
|
| 144 |
+ // 시작일자와 종료일자를 가져오기 |
|
| 145 |
+ var startDate = document.getElementById("startDate").value;
|
|
| 146 |
+ var endDate = document.getElementById("endDate").value;
|
|
| 147 |
+ |
|
| 148 |
+ // 날짜가 입력되었는지 확인 |
|
| 149 |
+ if (!startDate || !endDate) {
|
|
| 150 |
+ alert("검색 시작일자와 종료일자를 입력해주세요.");
|
|
| 151 |
+ return false; |
|
| 152 |
+ } |
|
| 153 |
+ |
|
| 154 |
+ // 날짜 형식으로 변환 |
|
| 155 |
+ var start = new Date(startDate); |
|
| 156 |
+ var end = new Date(endDate); |
|
| 157 |
+ |
|
| 158 |
+ // 날짜 유효성 체크 |
|
| 159 |
+ if (isNaN(start.getTime()) || isNaN(end.getTime())) {
|
|
| 160 |
+ alert("유효한 날짜 형식을 입력해주세요.");
|
|
| 161 |
+ return false; |
|
| 162 |
+ } |
|
| 163 |
+ |
|
| 164 |
+ // 시작일자가 종료일자보다 이후인지 확인 |
|
| 165 |
+ if (start > end) {
|
|
| 166 |
+ alert("검색 시작일자는 종료일자보다 이전이어야 합니다.");
|
|
| 167 |
+ return false; |
|
| 168 |
+ } |
|
| 169 |
+ |
|
| 170 |
+ // 총 기간이 365일을 넘는지 확인 |
|
| 171 |
+ var diffTime = Math.abs(end - start); |
|
| 172 |
+ var diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); |
|
| 173 |
+ if (diffDays > 365) {
|
|
| 174 |
+ alert("총 검색 기간은 1년을 넘을 수 없습니다.");
|
|
| 175 |
+ return false; |
|
| 176 |
+ } |
|
| 177 |
+ |
|
| 178 |
+ return true; |
|
| 136 | 179 |
} |
| 137 | 180 |
|
| 138 | 181 |
//맞춤제작 내보관함 정렬 조회 |
... | ... | @@ -430,9 +473,9 @@ |
| 430 | 473 |
<div class="btn_left"> |
| 431 | 474 |
<span>· 기간</span> |
| 432 | 475 |
<div class="calendar_wrap"> |
| 433 |
- <input type="text" class="startDate inp calendar" title="검색 시작일" id="startDate" name="searchStartDate" value="" data-datecontrol="true"> |
|
| 476 |
+ <input type="text" class="startDate inp calendar" title="검색 시작일" id="startDate" name="searchStartDate" value="${myStartDate}" data-datecontrol="true">
|
|
| 434 | 477 |
<span class="dateEtc">~</span> |
| 435 |
- <input type="text" class="endDate inp calendar" title="검색 종료일" id="endDate" name="searchEndDate" value="" data-datecontrol="true"> |
|
| 478 |
+ <input type="text" class="endDate inp calendar" title="검색 종료일" id="endDate" name="searchEndDate" value="${myEndDate}" data-datecontrol="true">
|
|
| 436 | 479 |
</div> |
| 437 | 480 |
<div class="search"> |
| 438 | 481 |
<!-- <label for="searchWord" class="label"></label> --> |
--- src/main/webapp/WEB-INF/jsp/web/custom/MsgMyCustomListAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/custom/MsgMyCustomListAjax.jsp
... | ... | @@ -7,6 +7,10 @@ |
| 7 | 7 |
<head> |
| 8 | 8 |
<script type="text/javascript"> |
| 9 | 9 |
$(document).ready(function (){
|
| 10 |
+ |
|
| 11 |
+ $('#startDate').val('${mjonMsgCustomVO.searchStartDate}');
|
|
| 12 |
+ $('#endDate').val('${mjonMsgCustomVO.searchEndDate}');
|
|
| 13 |
+ |
|
| 10 | 14 |
var checkYn = true; |
| 11 | 15 |
$("#allCheck").click(function(){
|
| 12 | 16 |
if(checkYn){
|
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?