Compare commits

...

13 Commits

Author SHA1 Message Date
thkim 201698ccd9 feat: 관리자 - 위원회관리 - 위원회 일정관리 추가 건 2024-01-22 10:28:36 +09:00
thkim 1f20255dd9 feat: 관리자 - 위원회관리 - 위원회 일정관리 추가 건 2024-01-22 10:28:12 +09:00
thkim 8f6aa05847 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-01-22 09:25:04 +09:00
thkim 27c3377e8d Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-01-19 17:59:33 +09:00
thkim 18b6f702e2 build: 중간저장 2024-01-19 17:59:19 +09:00
thkim 42df5ab159 build: 중간저장 2024-01-19 16:46:50 +09:00
thkim 87c6a09aa4 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-01-19 16:32:07 +09:00
thkim 13c3bd88ca Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-01-19 11:22:58 +09:00
thkim e865725999 chore: 중간저장 2024-01-16 17:59:27 +09:00
thkim c3258630dc feat: 관리자 단에서 '위원회 관리' > '위원회 일정 관리'에 '등록' 버튼을 누른 후 '위원회 일정 등록' 페이지에서 항목 입력 후 '저장'을 버튼 누른 후 상세 정보 가져오기 중간 저장 2024-01-11 18:01:02 +09:00
thkim d00696c73e feat: 관리자 단에서 '위원회 관리' > '위원회 일정 관리'에 '등록' 버튼을 누른 후 '위원회 일정 등록' 페이지에서 항목 입력 후 '저장'을 버튼 누를 때 저장되도록 구현 2024-01-11 16:36:30 +09:00
thkim cdaaebd6d8 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-01-11 08:36:59 +09:00
thkim 788c6787d3 feat: 관리자 단에서 '위원회 관리' > '위원회 일정 관리'에 '등록' 버튼을 누른 후 '위원회 일정 등록' 페이지에서 항목 입력 후 '저장'을 버튼 누를 때 저장되도록 구현 2024-01-09 18:03:42 +09:00
12 changed files with 457 additions and 195 deletions

View File

@ -30,3 +30,6 @@ yarn-error.log*
# code
.history
# Develop environment
.env.development.local

View File

@ -19,6 +19,7 @@ function Schedules(props) {
const DATE = new Date();
const TODAY = new Date(DATE.getFullYear(), DATE.getMonth(), DATE.getDate());
//const TODAY = new Date(2023, 2, DATE.getDate());
const [searchCondition, setSearchCondition] = useState(location.state?.searchCondition || { schdulSe: '', year: TODAY.getFullYear(), month: TODAY.getMonth(), date: TODAY.getDate() });
const [calendarTag, setCalendarTag] = useState([]);
@ -150,23 +151,39 @@ function Schedules(props) {
if (day !== 0) {//
let sDate = day.toString().length === 1 ? "0" + day.toString() : day.toString();
let iUseDate = Number(mutsUseYearMonth + sDate);
if (scheduleList.length > 0 || sDate === "01") {//
if (scheduleList.length > 0) {//
return (
<td key={keyIdx++}>
<Link to={{pathname: URL.ADMIN__COMMITTEE__SCHEDULES__CREATE}} state={{iUseDate : mutsUseYearMonth + sDate + "000000"}} className="day" key={keyIdx++}>{day}</Link><br />
<Link to={{pathname: URL.ADMIN__COMMITTEE__SCHEDULES__CREATE}} state={{iUseDate: mutsUseYearMonth + sDate + "000000"}} className="day"
key={keyIdx++}>{day}</Link><br/>
{
<div>
<div>오후 03:00 [P] 해양경찰청</div>
<div>오후 05:00 [P] 미팅...</div>
</div>
scheduleList.map((schedule, scheduleIdx) => {
let test = schedule.evt_start_dt.replace('-','');
console.log( test );
let iBeginDate = Number(schedule.evt_start_dt.substring(0, 8));
let iEndDate = Number(schedule.evt_end_dt.substring(0, 8));
innerConsole("scheduleList ", day, scheduleIdx, iBeginDate, iUseDate, iEndDate, iUseDate >= iBeginDate && iUseDate <= iEndDate);
innerConsole("schedule.schdulId ", schedule.schdulId);
if (iUseDate >= iBeginDate && iUseDate <= iEndDate) {
return (
<>
<Link to={{pathname: URL.ADMIN__COMMITTEE__SCHEDULES__DETAIL}}
state={{schdulId: schedule.schdulId}}
key={keyIdx++}>{schedule.schdulNm}
</Link>
<br/>
</>
);
} else return <></>
})
}
</td>
);
} else {//
return (
<td key={keyIdx++}>
<Link to={{pathname: URL.ADMIN__COMMITTEE__SCHEDULES__CREATE}} state={{iUseDate : mutsUseYearMonth + sDate + "000000"}} className="day" key={keyIdx++}>{day}</Link><br />
<Link to={{pathname: URL.ADMIN__COMMITTEE__SCHEDULES__CREATE}} state={{iUseDate: mutsUseYearMonth + sDate + "000000"}} className="day"
key={keyIdx++}>{day}</Link><br/>
</td>);
}
} else if (day === 0) {// /

View File

@ -33,42 +33,23 @@ function SchedulesDetail(props) {
EgovNet.requestFetch(retrieveDetailURL,
requestOptions,
function (resp) {
let rawScheduleDetail = resp.result.scheduleDetail;
rawScheduleDetail.startDateTime = convertDate(rawScheduleDetail.schdulBgnde);
rawScheduleDetail.endDateTime = convertDate(rawScheduleDetail.schdulEndde);
rawScheduleDetail.reptitSeCodeNm = getCodeName(resp.result.reptitSeCode, resp.result.scheduleDetail.reptitSeCode);
rawScheduleDetail.schdulIpcrCodeNm = getCodeName(resp.result.schdulIpcrCode, resp.result.scheduleDetail.schdulIpcrCode);
rawScheduleDetail.schdulSeNm = getCodeName(resp.result.schdulSe, resp.result.scheduleDetail.schdulSe);
setScheduleDetail(rawScheduleDetail);
setUser(resp.result.user);
setBoardAttachFiles(resp.result.resultFiles);
/**
* dto.put("evtSeq", tnCmtEvent.getEvtSeq()); // sequence
dto.put("divMeet", tnCmtEvent.getEvtType()); //
dto.put("upCommittee", tnCmtEvent.getUpCmtSeq()); //
dto.put("committee", tnCmtEvent.getCmtSeq()); //
dto.put("title", tnCmtEvent.getEvtTitle()); //
dto.put("location", tnCmtEvent.getEvtLocation()); //
dto.put("contents", tnCmtEvent.getEvtContents()); //
dto.put("startDate", tnCmtEvent.getEvtStartDt()); // /
dto.put("endDate", tnCmtEvent.getEvtEndDt()); // /
*/
setScheduleDetail(resp.result);
}
);
}
const convertDate = (str) => {
let year = str.substring(0, 4);
let month = str.substring(4, 6);
let date = str.substring(6, 8);
let hour = str.substring(8, 10);
let minute = str.substring(10, 12);
return {
year: year,
month: month,
date: date,
hour: hour,
minute: minute,
dateForm: year + "년 " + month + "월 " + date + "일 " + hour + "시 " + minute + "분 "
}
}
const getCodeName = (codeArr, code) => {
return (
codeArr.map((codeObj) => {
if (codeObj.code === code.trim()) return codeObj.codeNm
else return "";
})
);
};
const onClickDeleteSchedule = (schdulId) => {
const deleteBoardURL = `/schedule/${schdulId}`;
@ -111,7 +92,8 @@ function SchedulesDetail(props) {
<ul>
<li><Link to={URL.MAIN} className="home">Home</Link></li>
<li><Link to={URL.ADMIN}>사이트관리</Link></li>
<li>일정관리</li>
<li>위원회관리</li>
<li>일정관리 상세보기</li>
</ul>
</div>
{/* <!--// Location --> */}
@ -125,48 +107,36 @@ function SchedulesDetail(props) {
{/* <!-- 본문 --> */}
<div className="top_tit">
<h1 className="tit_1">사이트관리</h1>
<h1 className="tit_1">일정관리 상세보기</h1>
</div>
<h2 className="tit_2">일정관리 상세보기</h2>
{/* <!-- 게시판 상세보기 --> */}
<div className="board_view2">
<dl>
<dt>일정구분</dt>
<dd>{scheduleDetail.schdulSeNm}</dd>
<dt>구분</dt>
<dd>{scheduleDetail.divMeetNm}</dd>
</dl>
<dl>
<dt>중요도</dt>
<dd>{scheduleDetail.schdulIpcrCodeNm}</dd>
<dt>심의위원회</dt>
<dd>{scheduleDetail.upCommitteeNm} - {scheduleDetail.committeeNm}</dd>
</dl>
<dl>
<dt>부서</dt>
<dd>{scheduleDetail.schdulDeptName}</dd>
<dt>제목</dt>
<dd>{scheduleDetail.title}</dd>
</dl>
<dl>
<dt>일정명</dt>
<dd>{scheduleDetail.schdulNm}</dd>
</dl>
<dl>
<dt>일정내용</dt>
<dd>{scheduleDetail.schdulCn}</dd>
</dl>
<dl>
<dt>반복구분</dt>
<dd>{scheduleDetail.reptitSeCodeNm}</dd>
<dt>장소</dt>
<dd>{scheduleDetail.location}</dd>
</dl>
<dl>
<dt>날짜/시간</dt>
<dd> {scheduleDetail.startDateTime?.dateForm} ~ {scheduleDetail.endDateTime?.dateForm}</dd>
<dd> {scheduleDetail.startDate} ~ {scheduleDetail.endDate}</dd>
</dl>
<dl>
<dt>담당자</dt>
<dd>{scheduleDetail.schdulChargerName}</dd>
<dt>내용</dt>
<dd>{scheduleDetail.contents}</dd>
</dl>
<EgovAttachFile boardFiles={boardAttachFiles} />
{/* <!-- 버튼영역 --> */}
<div className="board_btn_area">
{user.id &&
@ -180,11 +150,10 @@ function SchedulesDetail(props) {
onClick={(e) => {
onClickDeleteSchedule(location.state?.schdulId);
}}>삭제</button>
</div>
}
<div className="right_col btn1">
<Link to={URL.ADMIN_SCHEDULE} className="btn btn_blue_h46 w_100">목록</Link>
<Link to={URL.ADMIN__COMMITTEE__SCHEDULES} className="btn btn_blue_h46 w_100">목록</Link>
</div>
</div>
{/* <!--// 버튼영역 --> */}

View File

@ -61,12 +61,32 @@ function SchedulesEdit(props) {
const classes = useStyles();
const [isShake, setShake] = useState(false);
const getDateFourteenDigit = (date) => {
return `${getYYYY_MM_DD(date).toString()} ${makeTwoDigit(date.getHours())}:${makeTwoDigit(date.getMinutes())}:${makeTwoDigit(date.getSeconds())}`;
}
const getYYYY_MM_DD = (date) => {
return `${date.getFullYear().toString()}-${makeTwoDigit(Number(date.getMonth() + 1))}-${makeTwoDigit(date.getDate())}`;
}
const makeTwoDigit = (number) => {
return number < 10 ? "0" + number : number.toString();
}
const navigate = useNavigate();
const location = useLocation();
console.log("EgovAdminScheduleEdit [location] : ", location);
const [modeInfo, setModeInfo] = useState({ mode: props.mode });
const [scheduleDetail, setScheduleDetail] = useState({ startDate: new Date(), endDate: new Date() });
const [scheduleDetail, setScheduleDetail] = useState
(
{
startDate: new Date(),
endDate: new Date(),
eventId : 0,
}
);
const [schdulBgndeHH, setSchdulBgndeHH] = useState();
const [schdulBgndeMM, setSchdulBgndeMM] = useState();
@ -138,33 +158,20 @@ function SchedulesEdit(props) {
return;
}
const retrieveDetailURL = `/schedule/${location.state?.schdulId}`;
EgovNet.requestFetch(retrieveDetailURL,
requestOptions,
function (resp) {
let rawScheduleDetail = resp.result.scheduleDetail;
//
setScheduleDetail({
...scheduleDetail,
...rawScheduleDetail,
startDate: convertDate(rawScheduleDetail.schdulBgnde),
endDate: convertDate(rawScheduleDetail.schdulEndde),
atchFileId : rawScheduleDetail.atchFileId.trim(),
schdulIpcrCode : "B",
});
}
);
}
const updateSchedule = () => {
const formData = new FormData();
for (let key in scheduleDetail) {
if ( key === 'startDate' ) {
formData.append(key, getDateFourteenDigit( scheduleDetail[key] ));
} else if( key === 'endDate' ) {
formData.append(key, getDateFourteenDigit( scheduleDetail[key] ));
} else {
formData.append(key, scheduleDetail[key]);
}
console.log("scheduleDetail [%s] ", key, scheduleDetail[key]);
}
@ -181,7 +188,8 @@ function SchedulesEdit(props) {
requestOptions,
(resp) => {
if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) {
navigate({ pathname: URL.ADMIN_SCHEDULE });
alert('일정이 등록되었습니다.');
navigate({ pathname: URL.ADMIN__COMMITTEE__SCHEDULES__DETAIL }, {state: {schdulId : resp.result?.schdulId}});
} else {
navigate({pathname: URL.ERROR}, {state: {msg : resp.resultMessage}});
}
@ -194,40 +202,38 @@ function SchedulesEdit(props) {
const formValidator = (formData) => {
if (formData.get('divMeet') === null || formData.get('divMeet') === "") {
alert("일정구분은 필수 값입니다.");
alert("구분을 선택해 주세요.");
return false;
}
if (formData.get('schdulNm') === null || formData.get('schdulNm') === "") {
alert("일정명은 필수 값입니다.");
if (formData.get('upCommittee') === null || formData.get('upCommittee') === "") {
alert("심의위원회 첫 번째 값을 선택해 주세요.");
return false;
}
if (formData.get('schdulCn') === null || formData.get('schdulCn') === "") {
alert("일정내용은 필수 값입니다.");
if (formData.get('committee') === null || formData.get('committee') === "") {
alert("심의위원회 두 번째 값을 선택해 주세요.");
return false;
}
if (formData.get('schdulIpcrCode') === null || formData.get('schdulIpcrCode') === "") {
alert("중요도는 필수 값입니다.");
if (formData.get('title') === null || formData.get('title') === "") {
alert("제목을 입력해 주세요.");
return false;
}
if (formData.get('reptitSeCode') === null ||formData.get('reptitSeCode') === "") {
alert("반복구분은 필수 값입니다.");
if (formData.get('location') === null ||formData.get('location') === "") {
alert("장소를 입력해 주세요.");
return false;
}
if (formData.get('schdulBgnde') > formData.get('schdulEndde')) {
if (formData.get('contents') === null ||formData.get('contents') === "") {
alert("내용을 입력해 주세요.");
return false;
}
/*
if (formData.get('contents') > formData.get('schdulEndde')) {
alert("종료일시는 시작일시보다 앞 설 수 없습니다.");
return false;
}
*/
return true;
}
const getDateFourteenDigit = (date) => {
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 makeTwoDigit = (number) => {
return number < 10 ? "0" + number : number.toString();
}
useEffect(function () {
initMode();
@ -236,7 +242,7 @@ function SchedulesEdit(props) {
useEffect(function () {
EgovNet.requestFetch(`/schedule/api/org-api/depth/list?paramCodeGroup=${scheduleDetail.orgGroupId}`,
EgovNet.requestFetch(`/schedule/api/org-api/depth/list?paramCodeGroup=${scheduleDetail.upCommittee}`,
requestOptions,
function (resp) {
setScheduleApiOrgApiDepthList(
@ -245,9 +251,8 @@ function SchedulesEdit(props) {
}
);
console.log( `kimtheho %o`, scheduleDetail);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [scheduleDetail && scheduleDetail.orgGroupId]);
}, [scheduleDetail && scheduleDetail.upCommittee]);
console.log("------------------------------EgovAdminScheduleEdit [End]");
@ -354,7 +359,7 @@ function SchedulesEdit(props) {
showTimeInput
onChange={(date) => {
console.log("setStartDate : ", date);
setScheduleDetail({ ...scheduleDetail, schdulBgnde: getDateFourteenDigit(date), schdulBgndeYYYMMDD: getYYYYMMDD(date), schdulBgndeHH: date.getHours(), schdulBgndeMM: date.getMinutes(), startDate: date });
setScheduleDetail({ ...scheduleDetail, startDate: date });
setSchdulBgndeHH(date.getHours());
setSchdulBgndeMM(date.getMinutes());
}} />
@ -372,7 +377,7 @@ function SchedulesEdit(props) {
minDate={scheduleDetail.startDate}
onChange={(date) => {
console.log("setEndDate: ", date);
setScheduleDetail({ ...scheduleDetail, schdulEndde: getDateFourteenDigit(date), schdulEnddeYYYMMDD: getYYYYMMDD(date), schdulEnddeHH: date.getHours(), schdulEnddeMM: date.getMinutes(), endDate: date });
setScheduleDetail({ ...scheduleDetail, endDate: date });
setSchdulEnddeHH(date.getHours());
setSchdulEnddeMM(date.getMinutes());
}

View File

@ -4,6 +4,8 @@ package com.dbnt.kcscbackend.admin.committee.schedules.controller;
import com.dbnt.kcscbackend.admin.committee.schedules.model.CreateScheduleVO;
import com.dbnt.kcscbackend.admin.committee.schedules.service.EgovIndvdlSchdulManageService;
import com.dbnt.kcscbackend.auth.entity.LoginVO;
import com.dbnt.kcscbackend.config.common.ResponseCode;
import com.dbnt.kcscbackend.config.common.ResultVO;
import io.swagger.annotations.Api;
import io.swagger.v3.oas.annotations.Operation;
@ -11,6 +13,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.http.MediaType;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@ -93,6 +96,92 @@ public class SchedulesApiController {
}
@Operation(
summary = "일정 상세조회",
description = "일정 목록을 상세조회",
tags = {"SchedulesApiController"}
)
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "조회 성공")
})
@GetMapping(value = "/schedule/{scheduleId}")
public ResultVO scheduleDetail(
HttpServletRequest request,
@AuthenticationPrincipal LoginVO user,
@PathVariable("scheduleId") Long scheduleId
)
throws Exception {
ResultVO resultVO = new ResultVO();
try {
resultVO = egovIndvdlSchdulManageService.scheduleDetail(resultVO, request, user, scheduleId);
} catch (Exception e) {
resultVO.setResultCode(-1);
resultVO.setResultMessage(e.getMessage());
}
System.out.println(
"\n--------------------------------------------------------------\n" +
request.getRequestURI() + " OUT:" +
"\n--------------------------------------------------------------\n" +
"resultVO.toString():" + "\n" +
resultVO.toString() + "\n" +
"\n--------------------------------------------------------------\n"
);
return resultVO;
}
/**
* () .
* @param request
* @param commandMap
* @return resultVO
* @throws Exception
*/
@Operation(
summary = "월별 일정 조회",
description = "일정(월별) 목록을 조회",
tags = {"EgovIndvdlSchdulManageApiController"}
)
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "조회 성공"),
@ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
})
@GetMapping(value = "/schedule/month")
public ResultVO scheduleMonth(@AuthenticationPrincipal LoginVO user,
HttpServletRequest request,
@RequestParam Map<String, Object> commandMap) throws Exception {
ResultVO resultVO = new ResultVO();
try {
resultVO = egovIndvdlSchdulManageService.scheduleMonth(resultVO, request, user, commandMap);
} catch (Exception e) {
resultVO.setResultCode(-1);
resultVO.setResultMessage(e.getMessage());
}
System.out.println(
"\n--------------------------------------------------------------\n" +
request.getRequestURI() + " OUT:" +
"\n--------------------------------------------------------------\n" +
"resultVO.toString():" + "\n" +
resultVO.toString() + "\n" +
"\n--------------------------------------------------------------\n"
);
return resultVO;
}
}

View File

@ -2,11 +2,14 @@ package com.dbnt.kcscbackend.admin.committee.schedules.service;
import com.dbnt.kcscbackend.admin.committee.schedules.model.CreateScheduleVO;
import com.dbnt.kcscbackend.auth.entity.LoginVO;
import com.dbnt.kcscbackend.config.common.ResultVO;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.RequestBody;
import springfox.documentation.annotations.ApiIgnore;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
/**
*
@ -26,11 +29,16 @@ import javax.servlet.http.HttpServletRequest;
public interface EgovIndvdlSchdulManageService {
public ResultVO scheduleInit(ResultVO resultVO) throws Exception;
public ResultVO scheduleApiOrgApiDepthList(ResultVO resultVO, Long paramCodeGroup) throws Exception;
public ResultVO createSchedule(ResultVO resultVO, HttpServletRequest request, CreateScheduleVO createScheduleVO) throws Exception;
public ResultVO scheduleDetail(ResultVO resultVO, HttpServletRequest request, LoginVO user, Long scheduleId) throws Exception;
public ResultVO scheduleMonth(ResultVO resultVO, HttpServletRequest request, LoginVO user, Map<String, Object> scheduleId) throws Exception;
}

View File

@ -3,6 +3,11 @@ package com.dbnt.kcscbackend.admin.committee.schedules.service.impl;
import com.dbnt.kcscbackend.admin.committee.schedules.model.CreateScheduleVO;
import com.dbnt.kcscbackend.admin.committee.schedules.service.EgovIndvdlSchdulManageService;
import com.dbnt.kcscbackend.auth.entity.LoginVO;
import com.dbnt.kcscbackend.commonCode.entity.TcCodeItem;
import com.dbnt.kcscbackend.commonCode.entity.TnCmtEvent;
import com.dbnt.kcscbackend.commonCode.entity.TnCmtOrg;
import com.dbnt.kcscbackend.config.common.ResponseCode;
import com.dbnt.kcscbackend.commonCode.repository.TcCodeItemRepository;
import com.dbnt.kcscbackend.commonCode.repository.TnCmtEventRepository;
import com.dbnt.kcscbackend.commonCode.repository.TnCmtOrgRepository;
@ -10,15 +15,9 @@ import com.dbnt.kcscbackend.config.common.ResultVO;
import lombok.RequiredArgsConstructor;
import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletRequest;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
@ -83,6 +82,8 @@ public class EgovIndvdlSchdulManageServiceImpl extends EgovAbstractServiceImpl i
resultMap.put("listSubOrg", listSubOrg);
resultMap.put("listTopOrg", listTopOrg);
resultVO.setResult(resultMap);
resultVO.setResultCode(ResponseCode.SUCCESS.getCode());
resultVO.setResultMessage(ResponseCode.SUCCESS.getMessage());
return resultVO;
}
@ -109,7 +110,6 @@ public class EgovIndvdlSchdulManageServiceImpl extends EgovAbstractServiceImpl i
}
@Override
@Transactional(rollbackFor = {Exception.class})
public ResultVO createSchedule(ResultVO resultVO, HttpServletRequest request, CreateScheduleVO createScheduleVO) throws Exception {
System.out.println(
@ -121,29 +121,16 @@ public class EgovIndvdlSchdulManageServiceImpl extends EgovAbstractServiceImpl i
"\n--------------------------------------------------------------\n"
);
Locale currentLocale = new Locale("KOREAN", "KOREA");
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", currentLocale);
Date date = formatter.parse(createScheduleVO.getStartDate());
LocalDate startDate = date.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate();
LocalDateTime endDate = Instant.ofEpochMilli(date.getTime())
.atZone(ZoneId.systemDefault())
.toLocalDateTime();
Timestamp ts=new Timestamp(date.getTime());
tnCmtEventRepository.sp_add_tn_cmt_event(
createScheduleVO.getDivMeet(),
createScheduleVO.getUpCommittee(),
createScheduleVO.getCommittee(),
createScheduleVO.getTitle(),
createScheduleVO.getLocation(),
createScheduleVO.getContents(),
date,
date,
Map<String, Object> response = tnCmtEventRepository.spAddTnCmtEvent(
createScheduleVO.getDivMeet(), // 구분
createScheduleVO.getUpCommittee(), // 심의위원회 상위 코드 번호
createScheduleVO.getCommittee(), // 심의위원회 하위 코드 번호
createScheduleVO.getTitle(), // 제목
createScheduleVO.getLocation(), // 장소
createScheduleVO.getContents(), // 내용
createScheduleVO.getStartDate(), // 날짜/시간의 시작 일시
createScheduleVO.getEndDate(), // 날짜/시간의 종료 일시
"admin",
null,
null,
@ -151,12 +138,142 @@ public class EgovIndvdlSchdulManageServiceImpl extends EgovAbstractServiceImpl i
null
);
//resultVO.setResult();
resultVO.setResultMessage("OK");
resultVO.setResultCode(0);
Map<String, Object> dto = new HashMap<String, Object>();
dto.put("schdulId", response.get("_evt_seq") );
resultVO.setResult(dto);
resultVO.setResultCode(ResponseCode.SUCCESS.getCode());
resultVO.setResultMessage(ResponseCode.SUCCESS.getMessage());
return resultVO;
}
@Override
public ResultVO scheduleDetail(ResultVO resultVO, HttpServletRequest request, LoginVO user, Long scheduleId) throws Exception {
System.out.println(
"\n--------------------------------------------------------------\n" +
request.getRequestURI() + " IN:" +
"\n--------------------------------------------------------------\n" +
"scheduleId:" + "\n" +
scheduleId + "\n" +
"\n--------------------------------------------------------------\n"
);
int isValid = tnCmtEventRepository.sp_is_valid_tn_cmt_event_id( scheduleId.intValue() );
if( isValid == 0 ) {
throw new Exception("대상이 존재하지 않습니다.");
}
TnCmtEvent tnCmtEvent = tnCmtEventRepository.findByEvtSeq(scheduleId);
TcCodeItem tcCodeItem = tcCodeItemRepository.findByItemCdAndUseYn(tnCmtEvent.getEvtType(), "Y");
TnCmtOrg tnCmtOrgForUpCommitteeNm = tnCmtOrgRepository.findByUseYnAndCmtSeq("Y", tnCmtEvent.getUpCmtSeq());
TnCmtOrg tnCmtOrgForCommitteeNm = tnCmtOrgRepository.findByUseYnAndCmtSeq("Y", tnCmtEvent.getCmtSeq());
Map<String, Object> dto = new HashMap<String, Object>();
dto.put("evtSeq", tnCmtEvent.getEvtSeq()); // sequence
dto.put("divMeetNm", tcCodeItem.getItemNm()); // 구분
dto.put("upCommitteeNm", tnCmtOrgForUpCommitteeNm.getCmtNm()); // 심의위원회 상위 이름
dto.put("committeeNm", tnCmtOrgForCommitteeNm.getCmtNm()); // 심의위원회 하위 이름
dto.put("title", tnCmtEvent.getEvtTitle()); // 제목
dto.put("location", tnCmtEvent.getEvtLocation()); // 장소
dto.put("contents", tnCmtEvent.getEvtContents()); // 내용
dto.put("startDate", tnCmtEvent.getEvtStartDt()); // 날짜/시간의 시작 일시
dto.put("endDate", tnCmtEvent.getEvtEndDt()); // 날짜/시간의 종료 일시
// 문자열로 리턴하도록 수정해야 함.
resultVO.setResult(dto);
resultVO.setResultCode(ResponseCode.SUCCESS.getCode());
resultVO.setResultMessage(ResponseCode.SUCCESS.getMessage());
return resultVO;
}
@Override
public ResultVO scheduleMonth(ResultVO resultVO, HttpServletRequest request, LoginVO user, Map<String, Object> commandMap) throws Exception {
System.out.println(
"\n--------------------------------------------------------------\n" +
request.getRequestURI() + " IN:" +
"\n--------------------------------------------------------------\n" +
"String.valueOf(commandMap.get(\"year\")):" + "\n" +
String.valueOf(commandMap.get("year")) + "\n" +
"String.valueOf(commandMap.get(\"month\")):" + "\n" +
String.valueOf(commandMap.get("month")) + "\n" +
"\n--------------------------------------------------------------\n"
);
Map<String, Object> dto = new HashMap<String, Object>();
//일정구분 검색 유지
dto.put("searchKeyword",
commandMap.get("searchKeyword") == null ? "" : (String)commandMap.get("searchKeyword"));
dto.put("searchCondition",
commandMap.get("searchCondition") == null ? "" : (String)commandMap.get("searchCondition"));
Calendar cal = Calendar.getInstance();
String sYear = String.valueOf(commandMap.get("year")); // 예 "2024"
String sMonth = String.valueOf(commandMap.get("month")); // 예 "2" zeo-base. 0= 1월, 1=2월, 2=3월. 즉 "2"라면 3월
int iYear = cal.get(Calendar.YEAR);
int iMonth = cal.get(Calendar.MONTH);
//int iDate = cal.get(java.util.Calendar.DATE);
//검색 설정
String sSearchDate = "";
if (sYear == null || sMonth == null) {
sSearchDate += Integer.toString(iYear);
sSearchDate += Integer.toString(iMonth + 1).length() == 1 ? "0" + Integer.toString(iMonth + 1)
: Integer.toString(iMonth + 1);
} else {
iYear = Integer.parseInt(sYear);
iMonth = Integer.parseInt(sMonth);
sSearchDate += sYear;
sSearchDate += Integer.toString(iMonth + 1).length() == 1 ? "0" + Integer.toString(iMonth + 1)
: Integer.toString(iMonth + 1);
}
// sSearchDate는 검색할 월. 예 202403
commandMap.put("searchMonth", sSearchDate);
commandMap.put("searchMode", "MONTH");
List<Map<String, Object>> resultList = tnCmtEventRepository.getByYyyyMm(sSearchDate)
.stream()
.map(item -> {
Map<String, Object> mapDto = new HashMap<>();
mapDto.put("evt_start_dt", item.getEvtStartDt().format(DateTimeFormatter.ofPattern("yyyyMMdd HH:mm:ss.SSS")));
mapDto.put("evt_end_dt", item.getEvtEndDt().format(DateTimeFormatter.ofPattern("yyyyMMdd HH:mm:ss.SSS")));
mapDto.put("schdulId", item.getEvtSeq());
mapDto.put("schdulNm", item.getEvtTitle());
return mapDto;
})
.collect(Collectors.toList());
dto.put("prevRequest", commandMap);
dto.put("resultList", resultList);
resultVO.setResult(dto);
resultVO.setResultCode(ResponseCode.SUCCESS.getCode());
resultVO.setResultMessage(ResponseCode.SUCCESS.getMessage());
return resultVO;
}
}

View File

@ -21,57 +21,57 @@ public class TnCmtEvent {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "evt_seq")
private Long evt_seq;
private Long evtSeq;
@Column(name = "evt_type")
private String evt_type;
private String evtType;
@Column(name = "up_cmt_seq")
private Long up_cmt_seq;
private Long upCmtSeq;
@Column(name = "cmt_seq")
private Long cmt_seq;
private Long cmtSeq;
@Column(name = "evt_title")
private String evt_title;
private String evtTitle;
@Column(name = "evt_location")
private String evt_location;
private String evtLocation;
@Column(name = "evt_contents")
private String evt_contents;
private String evtContents;
@Column(name = "evt_start_dt")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime evt_start_dt;
private LocalDateTime evtStartDt;
@Column(name = "evt_end_dt")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime evt_end_dt;
private LocalDateTime evtEndDt;
@Column(name = "frst_crt_id")
private String frst_crt_id;
private String frstCrtId;
@Column(name = "frst_crt_dt")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime frst_crt_dt;
private LocalDateTime frstCrtDt;
@Column(name = "last_chg_id")
private String last_chg_id;
private String lastChgId;
@Column(name = "last_chg_dt")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime last_chg_dt;
private LocalDateTime lastChgDt;
@Column(name = "use_yn")
private String use_yn;
private String useYn;
@Embeddable
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class TnCmtEventId implements Serializable {
private Long evt_seq;
private Long evtSeq;
}
}

View File

@ -7,4 +7,5 @@ import java.util.List;
public interface TcCodeItemRepository extends JpaRepository<TcCodeItem, TcCodeItem.TcCodeItemId> {
List<TcCodeItem> findByGrpCdAndUseYnOrderByGrpOrder(String grpCd, String useYn);
TcCodeItem findByItemCdAndUseYn(String itemCd, String useYn);
}

View File

@ -1,43 +1,93 @@
package com.dbnt.kcscbackend.commonCode.repository;
import com.dbnt.kcscbackend.commonCode.entity.TnCmtEvent;
import com.dbnt.kcscbackend.commonCode.entity.TnCmtOrg;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.jpa.repository.query.Procedure;
import org.springframework.data.repository.query.Param;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
import java.util.Map;
public interface TnCmtEventRepository extends JpaRepository<TnCmtEvent, TnCmtEvent.TnCmtEventId> {
@Procedure
int sp_add_tn_cmt_event(
String evtType,
Integer upCmtSeq,
Integer cmtSeq,
String evtTitle,
String evtLocation,
String evtContents,
Date evtStartDt,
Date evtEndDt,
String modiId,
Integer _evt_seq,
Integer _result_count,
String _result_code,
String _error_message
@Query(value = "CALL sp_add_tn_cmt_event (" +
":_evt_type, " +
":_up_cmt_seq, " +
":_cmt_seq, " +
":_evt_title, " +
":_evt_location, " +
":_evt_contents, " +
"TO_TIMESTAMP(" +
" :_evt_start_dt," +
" 'YYYY-MM-DD HH24:MI:SS'" +
")::::timestamptz AT TIME ZONE 'UTC', " +
"TO_TIMESTAMP(" +
" :_evt_end_dt," +
" 'YYYY-MM-DD HH24:MI:SS'" +
")::::timestamptz AT TIME ZONE 'UTC', " +
":_modi_id, " +
":_evt_seq, " +
":_result_count, " +
":_result_code, " +
":_error_message)",
nativeQuery = true)
Map<String, Object> spAddTnCmtEvent(
@Param("_evt_type") String evtType,
@Param("_up_cmt_seq") Integer upCmtSeq,
@Param("_cmt_seq") Integer cmtSeq,
@Param("_evt_title") String evtTitle,
@Param("_evt_location") String evtLocation,
@Param("_evt_contents") String evtContents,
@Param("_evt_start_dt") String evtStartDt,
@Param("_evt_end_dt") String evtEndDt,
@Param("_modi_id") String modiId,
@Param("_evt_seq") Integer evtSeq,
@Param("_result_count") Integer resultCount,
@Param("_result_code") String resultCode,
@Param("_error_message") String errorMessage
);
/*
//@Procedure
//Map<String, Object> sp_is_valid_tn_cmt_event_id( @Param("_evt_seq") Long evtSeq );
@Procedure
int sp_add_tn_cmt_event(
String _evt_type,
Integer _up_cmt_seq,
Integer _cmt_seq,
String _evt_title,
String _evt_location,
String _evt_contents,
String _evt_start_dt,
String _evt_end_dt,
String _modi_id
int sp_is_valid_tn_cmt_event_id( Integer evtSeq );
TnCmtEvent findByEvtSeq(Long evtSeq);
@Query(value = "\n" +
"SELECT" + " \n" +
" *" + " \n" +
"FROM" + " \n" +
" tn_cmt_event tce" + " \n" +
"WHERE" + " " +
" TO_TIMESTAMP(" + " \n" +
" :sSearchDate," + " \n" +
" 'YYYYMM'" + " \n" +
" ) <= tce.evt_start_dt AND" + " \n" +
" tce.evt_start_dt < TO_TIMESTAMP(" + " \n" +
" :sSearchDate," + " \n" +
" 'YYYYMM'" + " \n" +
" ) + INTERVAL '1 MONTH';\n",
nativeQuery = true)
List<TnCmtEvent> getByYyyyMm(
@Param("sSearchDate") String sSearchDate
);
*/
}

View File

@ -7,5 +7,6 @@ import java.util.List;
public interface TnCmtOrgRepository extends JpaRepository<TnCmtOrg, TnCmtOrg.TnCmtOrgId> {
List<TnCmtOrg> findByUseYnAndUpCmtSeqOrderByCmtOrder(String useYn, Long upCmtSeq);
TnCmtOrg findByUseYnAndCmtSeq(String useYn, Long cmtSeq);
}

View File

@ -18,6 +18,7 @@ spring.datasource.url=jdbc:log4jdbc:postgresql://127.0.0.1:5432/kcsc
spring.datasource.username=dbnt0031
spring.datasource.password=dbnt0928!
#jpa
spring.jpa.show-sql=true
spring.jpa.generate-ddl=false
@ -25,6 +26,7 @@ spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.
spring.jpa.properties.hibernate.proc.param_null_passing=true
# MyBatis
mybatis.mapper-locations: mybatisMapper/*.xml
mybatis.configuration.map-underscore-to-camel-case=true