강석 최 2024-01-23 17:22:04 +09:00
commit f67c3ee502
6 changed files with 233 additions and 94 deletions

View File

@ -64,7 +64,10 @@ function SchedulesEdit(props) {
//${location.state?.schdulId //${location.state?.schdulId
const getDateFourteenDigit = (date) => { const getDateFourteenDigit = (date) => {
return `${getYYYY_MM_DD(date).toString()} ${makeTwoDigit(date.getHours())}:${makeTwoDigit(date.getMinutes())}:${makeTwoDigit(date.getSeconds())}`; return `${getYYYYMMDD(date).toString()}${makeTwoDigit(date.getHours())}${makeTwoDigit(date.getMinutes())}${makeTwoDigit(date.getSeconds())}`;
}
const getYYYYMMDD = (date) => {
return date.getFullYear().toString() + makeTwoDigit(Number(date.getMonth() + 1)) + makeTwoDigit(date.getDate());
} }
const getYYYY_MM_DD = (date) => { const getYYYY_MM_DD = (date) => {
return `${date.getFullYear().toString()}-${makeTwoDigit(Number(date.getMonth() + 1))}-${makeTwoDigit(date.getDate())}`; return `${date.getFullYear().toString()}-${makeTwoDigit(Number(date.getMonth() + 1))}-${makeTwoDigit(date.getDate())}`;
@ -249,14 +252,11 @@ function SchedulesEdit(props) {
if (formData.get('contents') === null ||formData.get('contents') === "") { if (formData.get('contents') === null ||formData.get('contents') === "") {
alert("내용을 입력해 주세요."); alert("내용을 입력해 주세요.");
return false; return false;
} }
if (formData.get('schdulBgnde') > formData.get('schdulEndde')) {
/*
if (formData.get('contents') > formData.get('schdulEndde')) {
alert("종료일시는 시작일시보다 앞 설 수 없습니다."); alert("종료일시는 시작일시보다 앞 설 수 없습니다.");
return false; //return false;
} }
*/
return true; return true;
} }
@ -285,6 +285,31 @@ function SchedulesEdit(props) {
}, [scheduleDetail && scheduleDetail.upCommittee]); }, [scheduleDetail && scheduleDetail.upCommittee]);
const onClickDeleteSchedule = (schdulId) => {
const deleteBoardURL = `/schedule/${schdulId}`;
const requestOptions = {
method: "DELETE",
headers: {
'Content-type': 'application/json',
}
}
EgovNet.requestFetch(deleteBoardURL,
requestOptions,
(resp) => {
console.log("====>>> Schdule delete= ", resp);
if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) {
alert("게시글이 삭제되었습니다.")
navigate(URL.ADMIN__COMMITTEE__SCHEDULES ,{ replace: true });
} else {
navigate({pathname: URL.ERROR}, {state: {msg : resp.resultMessage}});
}
}
);
}
console.log("------------------------------EgovAdminScheduleEdit [End]"); console.log("------------------------------EgovAdminScheduleEdit [End]");
console.groupEnd("EgovAdminScheduleEdit"); console.groupEnd("EgovAdminScheduleEdit");
return ( return (
@ -389,7 +414,7 @@ function SchedulesEdit(props) {
showTimeInput showTimeInput
onChange={(date) => { onChange={(date) => {
console.log("setStartDate : ", date); console.log("setStartDate : ", date);
setScheduleDetail({ ...scheduleDetail, startDate: date }); setScheduleDetail({ ...scheduleDetail, schdulBgnde: getDateFourteenDigit(date), schdulBgndeYYYMMDD: getYYYYMMDD(date), schdulBgndeHH: date.getHours(), schdulBgndeMM: date.getMinutes(), startDate: date });
setSchdulBgndeHH(date.getHours()); setSchdulBgndeHH(date.getHours());
setSchdulBgndeMM(date.getMinutes()); setSchdulBgndeMM(date.getMinutes());
}} /> }} />
@ -407,7 +432,7 @@ function SchedulesEdit(props) {
minDate={scheduleDetail.startDate} minDate={scheduleDetail.startDate}
onChange={(date) => { onChange={(date) => {
console.log("setEndDate: ", date); console.log("setEndDate: ", date);
setScheduleDetail({ ...scheduleDetail, endDate: date }); setScheduleDetail({ ...scheduleDetail, schdulEndde: getDateFourteenDigit(date), schdulEnddeYYYMMDD: getYYYYMMDD(date), schdulEnddeHH: date.getHours(), schdulEnddeMM: date.getMinutes(), endDate: date });
setSchdulEnddeHH(date.getHours()); setSchdulEnddeHH(date.getHours());
setSchdulEnddeMM(date.getMinutes()); setSchdulEnddeMM(date.getMinutes());
} }
@ -433,7 +458,13 @@ function SchedulesEdit(props) {
<button className="btn btn_skyblue_h46 w_100" <button className="btn btn_skyblue_h46 w_100"
onClick={() => updateSchedule()} onClick={() => updateSchedule()}
> 저장</button> > 저장</button>
<a href="#!" className="btn btn_skyblue_h46 w_100">삭제</a> {modeInfo.mode === CODE.MODE_MODIFY &&
<button className="btn btn_skyblue_h46 w_100"
onClick={(e) => {
onClickDeleteSchedule(location.state?.schdulId);
}}>삭제</button>
}
</div> </div>
<div className="right_col btn1"> <div className="right_col btn1">

View File

@ -129,81 +129,81 @@ function EgovMain(props) {
</Row> </Row>
</div> </div>
<div className="right_col"> {/*<div className="right_col">*/}
<div className="mini_board"> {/* <div className="mini_board">*/}
<ul className="tab"> {/* <ul className="tab">*/}
<li><a href="#공지사항" className="on">공지사항</a></li> {/* <li><a href="#공지사항" className="on">공지사항</a></li>*/}
<li><a href="#갤러리">갤러리</a></li> {/* <li><a href="#갤러리">갤러리</a></li>*/}
</ul> {/* </ul>*/}
<div className="list"> {/* <div className="list">*/}
<div className="notice"> {/* <div className="notice">*/}
<h2 className="blind">공지사항</h2> {/* <h2 className="blind">공지사항</h2>*/}
<ul> {/* <ul>*/}
{noticeListTag} {/* {noticeListTag}*/}
</ul> {/* </ul>*/}
<Link to={URL.INFORM_NOTICE} className="more">더보기</Link> {/* <Link to={URL.INFORM_NOTICE} className="more">더보기</Link>*/}
</div> {/* </div>*/}
<div className="gallary"> {/* <div className="gallary">*/}
<h2 className="blind">갤러리</h2> {/* <h2 className="blind">갤러리</h2>*/}
<ul> {/* <ul>*/}
{gallaryListTag} {/* {gallaryListTag}*/}
</ul> {/* </ul>*/}
<Link to={URL.INFORM_GALLERY} className="more">더보기</Link> {/* <Link to={URL.INFORM_GALLERY} className="more">더보기</Link>*/}
</div> {/* </div>*/}
</div> {/* </div>*/}
</div> {/* </div>*/}
<div className="banner"> {/* <div className="banner">*/}
<Link to={URL.SUPPORT_DOWNLOAD} className="bn1"> {/* <Link to={URL.SUPPORT_DOWNLOAD} className="bn1">*/}
<strong>자료실</strong> {/* <strong>자료실</strong>*/}
<span>다양한 자료를<br />다운로드 받으실 있습니다.</span> {/* <span>다양한 자료를<br />다운로드 받으실 수 있습니다.</span>*/}
</Link> {/* </Link>*/}
<Link to={URL.ABOUT} className="bn2"> {/* <Link to={URL.ABOUT} className="bn2">*/}
<strong>국가건설기준센터</strong> {/* <strong>국가건설기준센터</strong>*/}
<span>국가건설기준센터의<br />약도 등의 정보를 제공합니다.</span> {/* <span>국가건설기준센터의<br />약도 등의 정보를 제공합니다.</span>*/}
</Link> {/* </Link>*/}
</div> {/* </div>*/}
</div> {/*</div>*/}
</div> </div>
<div className="banner_bot"> {/*<div className="banner_bot">*/}
<div className="b1"> {/* <div className="b1">*/}
<div> {/* <div>*/}
<h2>주요사업 소개</h2> {/* <h2>주요사업 소개</h2>*/}
<p>국가건설기준센터가 제공하는<br /> {/* <p>국가건설기준센터가 제공하는<br />*/}
주요 사업을 소개합니다.</p> {/* 주요 사업을 소개합니다.</p>*/}
</div> {/* </div>*/}
<Link to={URL.INTRO_WORKS}>자세히 보기</Link> {/* <Link to={URL.INTRO_WORKS}>자세히 보기</Link>*/}
</div> {/* </div>*/}
<div className="b2"> {/* <div className="b2">*/}
<div> {/* <div>*/}
<h2>대표서비스 소개</h2> {/* <h2>대표서비스 소개</h2>*/}
<p>국가건설기준센터 실행환경의<br /> {/* <p>국가건설기준센터 실행환경의<br />*/}
서비스 그룹에서 제공하는<br /> {/* 서비스 그룹에서 제공하는<br />*/}
대표서비스입니다.</p> {/* 대표서비스입니다.</p>*/}
</div> {/* </div>*/}
<Link to={URL.INTRO_SERVICE}>자세히 보기</Link> {/* <Link to={URL.INTRO_SERVICE}>자세히 보기</Link>*/}
</div> {/* </div>*/}
<div className="b3"> {/* <div className="b3">*/}
<div> {/* <div>*/}
<h2>서비스 신청</h2> {/* <h2>서비스 신청</h2>*/}
<p>국가건설기준센터 경량환경<br /> {/* <p>국가건설기준센터 경량환경<br />*/}
홈페이지의 다양한 서비스를<br /> {/* 홈페이지의 다양한 서비스를<br />*/}
신청 하실 있습니다.</p> {/* 신청 하실 수 있습니다.</p>*/}
</div> {/* </div>*/}
<Link to={URL.SUPPORT_APPLY}>자세히 보기</Link> {/* <Link to={URL.SUPPORT_APPLY}>자세히 보기</Link>*/}
</div> {/* </div>*/}
<div className="b4"> {/* <div className="b4">*/}
<div> {/* <div>*/}
<h2>일정 현황</h2> {/* <h2>일정 현황</h2>*/}
<p>국가건설기준센터 경량환경<br /> {/* <p>국가건설기준센터 경량환경<br />*/}
홈페이지의 전체적인 일정<br /> {/* 홈페이지의 전체적인 일정<br />*/}
현황을 조회하실 있습니다.</p> {/* 현황을 조회하실 수 있습니다.</p>*/}
</div> {/* </div>*/}
<Link to={URL.INFORM}>자세히 보기</Link> {/* <Link to={URL.INFORM}>자세히 보기</Link>*/}
</div> {/* </div>*/}
</div> {/*</div>*/}
</div> </div>
</div> </div>

View File

@ -79,7 +79,7 @@ public class SchedulesApiController {
try { try {
resultVO = egovIndvdlSchdulManageService.createSchedule(resultVO, request, createScheduleVO); resultVO = egovIndvdlSchdulManageService.createSchedule(resultVO, request, createScheduleVO);
} catch (Exception e) { } catch (Exception e) {
resultVO.setResultCode(-1); resultVO.setResultCode(ResponseCode.FAILED.getCode());
resultVO.setResultMessage(e.getMessage()); resultVO.setResultMessage(e.getMessage());
} }
@ -119,7 +119,47 @@ public class SchedulesApiController {
try { try {
resultVO = egovIndvdlSchdulManageService.updateSchedule(resultVO, request, updateScheduleVO); resultVO = egovIndvdlSchdulManageService.updateSchedule(resultVO, request, updateScheduleVO);
} catch (Exception e) { } catch (Exception e) {
resultVO.setResultCode(-1); resultVO.setResultCode(ResponseCode.FAILED.getCode());
resultVO.setResultMessage(e.getMessage());
}
System.out.println(
"\n--------------------------------------------------------------\n" +
request.getRequestURI() + " OUT:" +
"\n--------------------------------------------------------------\n" +
"resultVO.toString():" + "\n" +
resultVO.toString() + "\n" +
"\n--------------------------------------------------------------\n"
);
return resultVO;
}
@Operation(
summary = "'위원회 일정 등록' 페이지에서 일정 삭제하는 API",
description = "관리자 단에서 '위원회 관리' > '위원회 일정 관리'에서 특정 일정을 삭제하는 API",
tags = {"SchedulesApiController"}
)
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "등록 성공"),
@ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
})
@DeleteMapping(value = "/schedule/{scheduleId}")
public ResultVO deleteSchedule
(
@AuthenticationPrincipal LoginVO user,
HttpServletRequest request,
@PathVariable("scheduleId") String schdulId
) throws Exception {
ResultVO resultVO = new ResultVO();
Long test = Long.valueOf(schdulId);
try {
resultVO = egovIndvdlSchdulManageService.deleteSchedule(resultVO, request, test);
} catch (Exception e) {
resultVO.setResultCode(ResponseCode.FAILED.getCode());
resultVO.setResultMessage(e.getMessage()); resultVO.setResultMessage(e.getMessage());
} }
@ -158,7 +198,7 @@ public class SchedulesApiController {
try { try {
resultVO = egovIndvdlSchdulManageService.scheduleDetail(resultVO, request, user, scheduleId); resultVO = egovIndvdlSchdulManageService.scheduleDetail(resultVO, request, user, scheduleId);
} catch (Exception e) { } catch (Exception e) {
resultVO.setResultCode(-1); resultVO.setResultCode(ResponseCode.FAILED.getCode());
resultVO.setResultMessage(e.getMessage()); resultVO.setResultMessage(e.getMessage());
} }
@ -204,7 +244,7 @@ public class SchedulesApiController {
try { try {
resultVO = egovIndvdlSchdulManageService.scheduleMonth(resultVO, request, user, commandMap); resultVO = egovIndvdlSchdulManageService.scheduleMonth(resultVO, request, user, commandMap);
} catch (Exception e) { } catch (Exception e) {
resultVO.setResultCode(-1); resultVO.setResultCode(ResponseCode.FAILED.getCode());
resultVO.setResultMessage(e.getMessage()); resultVO.setResultMessage(e.getMessage());
} }

View File

@ -36,6 +36,8 @@ public interface EgovIndvdlSchdulManageService {
public ResultVO createSchedule(ResultVO resultVO, HttpServletRequest request, CreateScheduleVO createScheduleVO) throws Exception; public ResultVO createSchedule(ResultVO resultVO, HttpServletRequest request, CreateScheduleVO createScheduleVO) throws Exception;
public ResultVO updateSchedule(ResultVO resultVO, HttpServletRequest request, UpdateScheduleVO updateScheduleVO) throws Exception; public ResultVO updateSchedule(ResultVO resultVO, HttpServletRequest request, UpdateScheduleVO updateScheduleVO) throws Exception;
public ResultVO deleteSchedule(ResultVO resultVO, HttpServletRequest request, Long scheduleId) throws Exception;
public ResultVO scheduleDetail(ResultVO resultVO, HttpServletRequest request, LoginVO user, Long scheduleId) throws Exception; public ResultVO scheduleDetail(ResultVO resultVO, HttpServletRequest request, LoginVO user, Long scheduleId) throws Exception;

View File

@ -122,6 +122,11 @@ public class EgovIndvdlSchdulManageServiceImpl extends EgovAbstractServiceImpl i
"\n--------------------------------------------------------------\n" "\n--------------------------------------------------------------\n"
); );
// 유효성 검사 실시
if( Long.parseLong(createScheduleVO.getStartDate()) > Long.parseLong(createScheduleVO.getEndDate()) ) {
throw new Exception("종료일시는 시작일시보다 앞 설 수 없습니다.");
}
Map<String, Object> response = tnCmtEventRepository.spAddTnCmtEvent( Map<String, Object> response = tnCmtEventRepository.spAddTnCmtEvent(
createScheduleVO.getDivMeet(), // 구분 createScheduleVO.getDivMeet(), // 구분
@ -162,12 +167,22 @@ public class EgovIndvdlSchdulManageServiceImpl extends EgovAbstractServiceImpl i
"\n--------------------------------------------------------------\n" "\n--------------------------------------------------------------\n"
); );
// 유효성 검사 실시
int isValid = tnCmtEventRepository.sp_is_valid_tn_cmt_event_id( updateScheduleVO.getEvtSeq() );
if( isValid == 0 ) {
throw new Exception("대상이 존재하지 않습니다.");
}
if( Long.parseLong(updateScheduleVO.getStartDate()) > Long.parseLong(updateScheduleVO.getEndDate()) ) {
throw new Exception("종료일시는 시작일시보다 앞 설 수 없습니다.");
}
Map<String, Object> response = tnCmtEventRepository.spUpdateTnCmtEvent( Map<String, Object> response = tnCmtEventRepository.spUpdateTnCmtEvent(
updateScheduleVO.getEvtSeq().intValue(), updateScheduleVO.getEvtSeq(),
updateScheduleVO.getDivMeet(), // 구분 updateScheduleVO.getDivMeet(), // 구분
updateScheduleVO.getUpCommittee().intValue(), // 심의위원회 상위 코드 번호 updateScheduleVO.getUpCommittee(), // 심의위원회 상위 코드 번호
updateScheduleVO.getCommittee().intValue(), // 심의위원회 하위 코드 번호 updateScheduleVO.getCommittee(), // 심의위원회 하위 코드 번호
updateScheduleVO.getTitle(), // 제목 updateScheduleVO.getTitle(), // 제목
updateScheduleVO.getLocation(), // 장소 updateScheduleVO.getLocation(), // 장소
updateScheduleVO.getContents(), // 내용 updateScheduleVO.getContents(), // 내용
@ -190,6 +205,38 @@ public class EgovIndvdlSchdulManageServiceImpl extends EgovAbstractServiceImpl i
return resultVO; return resultVO;
} }
@Override
public ResultVO deleteSchedule(ResultVO resultVO, HttpServletRequest request, Long scheduleId) throws Exception {
System.out.println(
"\n--------------------------------------------------------------\n" +
request.getRequestURI() + " IN:" +
"\n--------------------------------------------------------------\n" +
"scheduleId:" + "\n" +
scheduleId + "\n" +
"\n--------------------------------------------------------------\n"
);
Map<String, Object> response = tnCmtEventRepository.spDeleteTnCmtEvent(
scheduleId.intValue(),
"admin",
null,
null,
null
);
Map<String, Object> dto = new HashMap<String, Object>();
dto.put("errorMessage", response.get("_error_message") );
dto.put("schdulId", scheduleId );
resultVO.setResult(dto);
resultVO.setResultCode(ResponseCode.SUCCESS.getCode());
resultVO.setResultMessage(ResponseCode.SUCCESS.getMessage());
return resultVO;
}

View File

@ -27,11 +27,11 @@ public interface TnCmtEventRepository extends JpaRepository<TnCmtEvent, TnCmtEve
":_evt_contents, " + ":_evt_contents, " +
"TO_TIMESTAMP(" + "TO_TIMESTAMP(" +
" :_evt_start_dt," + " :_evt_start_dt," +
" 'YYYY-MM-DD HH24:MI:SS'" + " 'YYYYMMDDHH24MISS'" +
")::::timestamptz AT TIME ZONE 'UTC', " + ")::::timestamptz AT TIME ZONE 'UTC', " +
"TO_TIMESTAMP(" + "TO_TIMESTAMP(" +
" :_evt_end_dt," + " :_evt_end_dt," +
" 'YYYY-MM-DD HH24:MI:SS'" + " 'YYYYMMDDHH24MISS'" +
")::::timestamptz AT TIME ZONE 'UTC', " + ")::::timestamptz AT TIME ZONE 'UTC', " +
":_modi_id, " + ":_modi_id, " +
":_evt_seq, " + ":_evt_seq, " +
@ -66,11 +66,11 @@ public interface TnCmtEventRepository extends JpaRepository<TnCmtEvent, TnCmtEve
":_evt_contents, " + ":_evt_contents, " +
"TO_TIMESTAMP(" + "TO_TIMESTAMP(" +
" :_evt_start_dt," + " :_evt_start_dt," +
" 'YYYY-MM-DD HH24:MI:SS'" + " 'YYYYMMDDHH24MISS'" +
")::::timestamptz AT TIME ZONE 'UTC', " + ")::::timestamptz AT TIME ZONE 'UTC', " +
"TO_TIMESTAMP(" + "TO_TIMESTAMP(" +
" :_evt_end_dt," + " :_evt_end_dt," +
" 'YYYY-MM-DD HH24:MI:SS'" + " 'YYYYMMDDHH24MISS'" +
")::::timestamptz AT TIME ZONE 'UTC', " + ")::::timestamptz AT TIME ZONE 'UTC', " +
":_modi_id, " + ":_modi_id, " +
":_result_count, " + ":_result_count, " +
@ -94,6 +94,23 @@ public interface TnCmtEventRepository extends JpaRepository<TnCmtEvent, TnCmtEve
); );
@Query(value = "CALL sp_delete_tn_cmt_event (" +
":_evt_seq, " +
":_modi_id, " +
":_result_count, " +
":_result_code, " +
":_error_message)",
nativeQuery = true)
Map<String, Object> spDeleteTnCmtEvent(
@Param("_evt_seq") Integer evtSeq,
@Param("_modi_id") String modiId,
@Param("_result_count") Integer resultCount,
@Param("_result_code") String resultCode,
@Param("_error_message") String errorMessage
);
//@Procedure //@Procedure
//Map<String, Object> sp_is_valid_tn_cmt_event_id( @Param("_evt_seq") Long evtSeq ); //Map<String, Object> sp_is_valid_tn_cmt_event_id( @Param("_evt_seq") Long evtSeq );
@ -111,11 +128,13 @@ public interface TnCmtEventRepository extends JpaRepository<TnCmtEvent, TnCmtEve
"FROM" + " \n" + "FROM" + " \n" +
" tn_cmt_event tce" + " \n" + " tn_cmt_event tce" + " \n" +
"WHERE" + " " + "WHERE" + " " +
" tce.use_yn = 'Y'" + " \n" +
" AND" + " \n" +
" TO_TIMESTAMP(" + " \n" + " TO_TIMESTAMP(" + " \n" +
" :sSearchDate," + " \n" + " :sSearchDate," + " \n" +
" 'YYYYMM'" + " \n" + " 'YYYYMM'" + " \n" +
" ) AT TIME ZONE 'UTC+9' <= tce.evt_start_dt AND" + " \n" + " ) AT TIME ZONE 'UTC+9' <= tce.evt_start_dt" + " \n" +
" AND" + " \n" +
" tce.evt_start_dt < TO_TIMESTAMP(" + " \n" + " tce.evt_start_dt < TO_TIMESTAMP(" + " \n" +
" :sSearchDate," + " \n" + " :sSearchDate," + " \n" +
" 'YYYYMM'" + " \n" + " 'YYYYMM'" + " \n" +