@@ -174,11 +137,6 @@ function EgovAdminBoardList(props) {
{/* */}
{/* */}
diff --git a/egovframe-template-simple-react-contribution/src/pages/admin/committee/ProgressStatus.jsx b/egovframe-template-simple-react-contribution/src/pages/admin/committee/ProgressStatus.jsx
index 94ff4e8..840a9b3 100644
--- a/egovframe-template-simple-react-contribution/src/pages/admin/committee/ProgressStatus.jsx
+++ b/egovframe-template-simple-react-contribution/src/pages/admin/committee/ProgressStatus.jsx
@@ -190,7 +190,7 @@ function ProgressStatus(props) {
{it.number}
{it.drftTypeNm}
-
{it.categoryNm}
{it.title}
+
{it.categoryNm}
{it.title}
{it.orgNm}
진행단계표시
{it.regDate}
diff --git a/egovframe-template-simple-react-contribution/src/pages/admin/committee/ProgressStatus/Detail.jsx b/egovframe-template-simple-react-contribution/src/pages/admin/committee/ProgressStatus/Detail.jsx
new file mode 100644
index 0000000..79f2bf4
--- /dev/null
+++ b/egovframe-template-simple-react-contribution/src/pages/admin/committee/ProgressStatus/Detail.jsx
@@ -0,0 +1,173 @@
+import React, { useState, useEffect } from 'react';
+import { Link, useLocation, useNavigate } from 'react-router-dom';
+
+import * as EgovNet from 'api/egovFetch';
+import URL from 'constants/url';
+import CODE from 'constants/code';
+
+import { default as EgovLeftNav } from 'components/leftmenu/EgovLeftNavAdmin';
+
+function SchedulesDetail(props) {
+ console.group("EgovAdmindetailItem");
+ console.log("EgovAdmindetailItem [props] : ", props);
+
+ const navigate = useNavigate();
+ const location = useLocation();
+
+ const [detailItem, setDetailItem] = useState({});
+
+ const retrieveDetail = () => {
+
+ const retrieveDetailURL = `/admin/committee/progress-status/${location.state?.drftSeq}`;
+ const requestOptions = {
+ method: "GET",
+ headers: {
+ 'Content-type': 'application/json',
+ }
+ }
+ EgovNet.requestFetch(retrieveDetailURL,
+ requestOptions,
+ function (resp) {
+ setDetailItem(resp.result.item);
+ }
+ );
+ }
+
+ const onClickDeleteSchedule = (drftSeq) => {
+ const deleteBoardURL = `/admin/committee/progress-status/${drftSeq}`;
+
+ 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 {
+ // alert("ERR : " + resp.message);
+ navigate({pathname: URL.ERROR}, {state: {msg : resp.resultMessage}});
+ }
+
+ }
+ );
+ }
+
+ useEffect(function () {
+ retrieveDetail();
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, []);
+
+ console.groupEnd("EgovAdmindetailItem");
+ return (
+
+
+ {/* */}
+
+
+ - Home
+ - 사이트관리
+ - 위원회관리
+ - 진행현황 관리
+
+
+ {/* */}
+
+
+ {/* */}
+
+ {/* */}
+
+
+ {/* */}
+
+
+
진행현황 관리
+
+
+ {/* */}
+
+
+ - 안건
+ - {detailItem.title}
+
+
+ - 기준코드
+ - {detailItem.standardCode}
+
+
+ - 구분
+ - {detailItem.drftTypeNm}
+
+
+ - 회의일자
+ - {detailItem.regDate}
+
+
+ - 위원회
+ - {detailItem.orgNm}
+
+
+ - 회의담당자
+ - {detailItem.drftConfeCharger}
+
+
+ - 회의실 비밀번호
+ - {detailItem.drftConfePw}
+
+
+ - 사전검토자료
+ - {detailItem.seq}
+
+
+ - 사전검토양식
+ - {detailItem.seq}
+
+
+ - 관계기관의견
+ - {detailItem.seq}
+
+
+ - 조치계획서
+ - {detailItem.seq}
+
+
+ - 조치결과서
+ - {detailItem.seq}
+
+
+ - 회의 안건
+ - {detailItem.drftSummery}
+
+
+ - 회의 내용
+ - {detailItem.seq}
+
+
+ {/* */}
+
+ {/* */}
+
+
+
+ {/* */}
+
+ {/* */}
+
+
+
+
+ );
+}
+
+export default SchedulesDetail;
\ No newline at end of file
diff --git a/egovframe-template-simple-react-contribution/src/pages/admin/committee/ProgressStatus/Edit.jsx b/egovframe-template-simple-react-contribution/src/pages/admin/committee/ProgressStatus/Edit.jsx
new file mode 100644
index 0000000..b5b570b
--- /dev/null
+++ b/egovframe-template-simple-react-contribution/src/pages/admin/committee/ProgressStatus/Edit.jsx
@@ -0,0 +1,483 @@
+import React, { useState, useEffect } from 'react';
+import { Link, useLocation, useNavigate } from 'react-router-dom';
+import DatePicker from "react-datepicker";
+
+
+
+import * as EgovNet from 'api/egovFetch';
+import URL from 'constants/url';
+import CODE from 'constants/code';
+
+import { default as EgovLeftNav } from 'components/leftmenu/EgovLeftNavAdmin';
+
+import 'react-datepicker/dist/react-datepicker.css';
+
+import styled from "styled-components";
+import { makeStyles } from "@mui/styles";
+
+const useStyles = makeStyles(() => ({
+ shake: {
+ animation: "$description 15s",
+ animationIterationCount: "1"
+ },
+ "@keyframes description": {
+ "0%": { opacity: 0, transform: "translateY(0)" },
+ "15%": { transform: "translateY(-4px, 0)" },
+ "30%": { transform: "translateY(6px, 0)" },
+ "45%": { transform: "translateY(-4px, 0)" },
+ "60%": { transform: "translateY(6px, 0)" },
+ "100%": { opacity: 1, transform: "translateY(0)" }
+ }
+ }));
+
+const StyledDiv = styled.div`
+ .org-under-id {
+ margin-left: 20px;
+ @media only screen and (max-width: 768px) {
+ display: block;
+ margin-left: 0px;
+ margin-top: 20px;
+ }
+ }
+
+ .f_select.w_250 {
+ @media only screen and (max-width: 768px) {
+ width: 100%;
+ }
+ }
+
+ .f_input {
+ @media only screen and (max-width: 768px) {
+ width: 100%;
+ }
+ }
+`;
+
+function SchedulesEdit(props) {
+ console.group("EgovAdminScheduleEdit");
+ console.log("[Start] EgovAdminScheduleEdit ------------------------------");
+ console.log("EgovAdminScheduleEdit [props] : ", props);
+
+ const classes = useStyles();
+ const [isShake, setShake] = useState(false);
+
+ //${location.state?.schdulId
+
+ 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();
+ }
+
+
+ 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(),
+ eventId : 0,
+ }
+ );
+
+ const [schdulBgndeHH, setSchdulBgndeHH] = useState();
+ const [schdulBgndeMM, setSchdulBgndeMM] = useState();
+ const [schdulEnddeHH, setSchdulEnddeHH] = useState();
+ const [schdulEnddeMM, setSchdulEnddeMM] = useState();
+
+ const [scheduleInit, setScheduleInit] = useState({});
+ const [scheduleApiOrgApiDepthList, setScheduleApiOrgApiDepthList] = useState({ });
+
+
+ const initMode = () => {
+
+ // props.mode 값이 없으면 에러가 발생한다.
+ switch (props.mode) {
+ case CODE.MODE_CREATE:
+ setModeInfo({
+ ...modeInfo,
+ modeTitle: "등록",
+ method : "POST",
+ editURL: '/schedule'
+ });
+ break;
+ case CODE.MODE_MODIFY:
+ setModeInfo({
+ ...modeInfo,
+ modeTitle: "수정",
+ method : "PUT",
+ editURL: '/schedule'
+ });
+ break;
+ default:
+ navigate({pathname: URL.ERROR}, {state: {msg : ""}});
+ }
+ retrieveDetail();
+ }
+
+ 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 new Date(year, month - 1, date, hour, minute)
+ }
+
+ const requestOptions = {
+ method: "GET",
+ headers: {
+ 'Content-type': 'application/json'
+ }
+ }
+
+ const retrieveDetail = () => {
+
+ EgovNet.requestFetch("/schedule/init",
+ requestOptions,
+ function (resp) {
+ setScheduleInit(
+ resp
+ );
+
+ if (modeInfo.mode === CODE.MODE_CREATE) {// 조회/등록이면 조회 안함
+ setScheduleDetail({
+ ...scheduleDetail,
+ schdulBgnde: location.state.iUseDate,
+ schdulEndde: location.state.iUseDate,
+ startDate: convertDate(location.state.iUseDate),
+ endDate: convertDate(location.state.iUseDate),
+ });
+ return;
+ }
+
+ const retrieveDetailURL = `/schedule/${location.state?.schdulId}`;
+ const requestOptions = {
+ method: "GET",
+ headers: {
+ 'Content-type': 'application/json'
+ }
+ }
+ EgovNet.requestFetch(retrieveDetailURL,
+ requestOptions,
+ function (resp) {
+
+ let rawScheduleDetail = resp.result;
+ //기본값 설정
+ setScheduleDetail({
+ ...scheduleDetail,
+ ...rawScheduleDetail,
+ startDate: convertDate(rawScheduleDetail.schdulBgnde),
+ endDate: convertDate(rawScheduleDetail.schdulEndde),
+ });
+ }
+ );
+ }
+ );
+
+ }
+
+ 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]);
+ }
+
+ if ( formValidator(formData) ) {
+ const requestOptions = {
+ method: modeInfo.method,
+ body: formData
+ }
+
+ if (modeInfo.mode === CODE.MODE_MODIFY) {
+ modeInfo.editURL = `${modeInfo.editURL}/${location.state?.schdulId}`;
+ }
+ EgovNet.requestFetch(modeInfo.editURL,
+ requestOptions,
+ (resp) => {
+ if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) {
+ alert('일정이 등록되었습니다.');
+ navigate({ pathname: URL.ADMIN__COMMITTEE__SCHEDULES__DETAIL }, {state: {schdulId : resp.result?.schdulId}});
+ } else {
+ navigate({pathname: URL.ERROR}, {state: {msg : resp.resultMessage}});
+ }
+ }
+ );
+ }
+
+ }
+
+ const formValidator = (formData) => {
+
+ if (formData.get('divMeet') === null || formData.get('divMeet') === "") {
+ alert("구분을 선택해 주세요.");
+ return false;
+ }
+ if (formData.get('upCommittee') === null || formData.get('upCommittee') === "") {
+ alert("심의위원회 첫 번째 값을 선택해 주세요.");
+ return false;
+ }
+ if (formData.get('committee') === null || formData.get('committee') === "") {
+ alert("심의위원회 두 번째 값을 선택해 주세요.");
+ return false;
+ }
+ if (formData.get('title') === null || formData.get('title') === "") {
+ alert("제목을 입력해 주세요.");
+ return false;
+ }
+ if (formData.get('location') === null ||formData.get('location') === "") {
+ alert("장소를 입력해 주세요.");
+ return false;
+ }
+ if (formData.get('contents') === null ||formData.get('contents') === "") {
+ alert("내용을 입력해 주세요.");
+ return false;
+ }
+ if (formData.get('schdulBgnde') > formData.get('schdulEndde')) {
+ alert("종료일시는 시작일시보다 앞 설 수 없습니다.");
+ //return false;
+ }
+ return true;
+ }
+
+ useEffect(function () {
+ initMode();
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, []);
+
+ useEffect(function () {
+ console.log("------------------------------EgovAdminScheduleEdit [%o]", scheduleDetail);
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [scheduleDetail]);
+
+ useEffect(function () {
+
+ EgovNet.requestFetch(`/schedule/api/org-api/depth/list?paramCodeGroup=${scheduleDetail.upCommittee}`,
+ requestOptions,
+ function (resp) {
+ setScheduleApiOrgApiDepthList(
+ resp
+ );
+ }
+ );
+ console.log("------------------------------EgovAdminScheduleEdit [%o]", scheduleDetail);
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [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.groupEnd("EgovAdminScheduleEdit");
+ return (
+
+
+ {/* */}
+
+
+ - Home
+ - 사이트 관리
+ - 위원회 관리
+ - 위원회 일정 관리
+
+
+ {/* */}
+
+
+ {/* */}
+
+ {/* */}
+
+
+ {/* */}
+
+
+
위원회 일정 관리
+
+
+ {/* */}
+
+ {/* */}
+
+
+ - 구분필수
+ -
+
+
+
+
+ - 심의위원회필수
+ -
+
+
+
+
+
+ - 필수
+ -
+ setScheduleDetail({ ...scheduleDetail, title: e.target.value })}
+ />
+
+
+
+ - 필수
+ -
+ setScheduleDetail({ ...scheduleDetail, location: e.target.value })} />
+
+
+
+ - 날짜/시간필수
+ -
+
+ {
+ console.log("setStartDate : ", date);
+ setScheduleDetail({ ...scheduleDetail, schdulBgnde: getDateFourteenDigit(date), schdulBgndeYYYMMDD: getYYYYMMDD(date), schdulBgndeHH: date.getHours(), schdulBgndeMM: date.getMinutes(), startDate: date });
+ setSchdulBgndeHH(date.getHours());
+ setSchdulBgndeMM(date.getMinutes());
+ }} />
+
+
+ ~
+
+
+ {
+ console.log("setEndDate: ", date);
+ setScheduleDetail({ ...scheduleDetail, schdulEndde: getDateFourteenDigit(date), schdulEnddeYYYMMDD: getYYYYMMDD(date), schdulEnddeHH: date.getHours(), schdulEnddeMM: date.getMinutes(), endDate: date });
+ setSchdulEnddeHH(date.getHours());
+ setSchdulEnddeMM(date.getMinutes());
+ }
+ } />
+
+
+
+
+
+
+ - 필수
+ -
+
+
+
+
+ {/* */}
+
+
+
+ {modeInfo.mode === CODE.MODE_MODIFY &&
+
+ }
+
+
+
+
+ 목록
+
+
+ {/* */}
+
+ {/* */}
+
+ {/* */}
+
+
+
+
+ );
+}
+
+export default SchedulesEdit;
\ No newline at end of file
diff --git a/egovframe-template-simple-react-contribution/src/routes/index.jsx b/egovframe-template-simple-react-contribution/src/routes/index.jsx
index d3dc967..10e53ce 100644
--- a/egovframe-template-simple-react-contribution/src/routes/index.jsx
+++ b/egovframe-template-simple-react-contribution/src/routes/index.jsx
@@ -97,7 +97,11 @@ import AdminContentsStandardResearchEditor from 'pages/admin/contents/StandardRe
// import AdminContentsTextMessages from 'pages/admin/contents/TextMessages'; // 관리자 - 컨텐츠 관리/문자 발송
// 관리자 - 위원회 관리
-import AdminCommitteeProgressStatus from 'pages/admin/committee/ProgressStatus'; // 관리자 - 위원회 관리/진행현황 관리
+import AdminCommitteeProgressStatus from 'pages/admin/committee/ProgressStatus'; // 관리자 - 위원회 관리/진행현황 관리
+import AdminCommitteeProgressStatusDetail from 'pages/admin/committee/ProgressStatus/Detail'; // 관리자 - 위원회 관리/진행현황 관리/진행현황 관리 상세
+import AdminCommitteeProgressStatusEdit from 'pages/admin/committee/ProgressStatus/Edit'; // 관리자 - 위원회 관리/진행현황 관리/진행현황 관리 생성 또는 수정
+
+
import AdminCommitteeSchedules from 'pages/admin/committee/Schedules'; // 관리자 - 위원회 관리/위원회 일정 관리
import AdminCommitteeSchedulesDetail from 'pages/admin/committee/Schedules/Detail'; // 관리자 - 위원회 관리/위원회 일정 관리/일정관리상세
import AdminCommitteeSchedulesEdit from 'pages/admin/committee/Schedules/Edit'; // 관리자 - 위원회 관리/위원회 일정 관리/일정관리생성 또는 수정
@@ -313,6 +317,10 @@ const SecondRoutes = () => {
{/* 관리자 - 위원회 관리 */}
} />
+
} />
+
} />
+
} />
+
} />
} />
} />
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/AdminBoardsController.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/AdminBoardsController.java
index 1a2ec86..8d4e9b8 100644
--- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/AdminBoardsController.java
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/AdminBoardsController.java
@@ -1,6 +1,7 @@
package com.dbnt.kcscbackend.admin.boards;
import com.dbnt.kcscbackend.admin.boards.entity.TnBbs;
+import com.dbnt.kcscbackend.admin.boards.entity.TnBbsContents;
import com.dbnt.kcscbackend.admin.boards.service.AdminBoardsService;
import com.dbnt.kcscbackend.admin.config.entity.TcMenu;
import com.dbnt.kcscbackend.auth.entity.LoginVO;
@@ -9,6 +10,7 @@ import com.dbnt.kcscbackend.commonCode.service.CommonCodeService;
import com.dbnt.kcscbackend.config.common.BaseController;
import com.dbnt.kcscbackend.config.common.ResponseCode;
import com.dbnt.kcscbackend.config.common.ResultVO;
+import com.dbnt.kcscbackend.config.util.ClientUtils;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
@@ -23,6 +25,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.util.HashMap;
import java.util.Map;
@@ -118,7 +122,7 @@ public class AdminBoardsController extends BaseController {
@ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
})
@RequestMapping(method = RequestMethod.DELETE, value = "/board-mgt")
- public ResultVO removeBoardMgt(@RequestBody TnBbs bbs, @AuthenticationPrincipal LoginVO user) {
+ public ResultVO deleteBoardMgt(@RequestBody TnBbs bbs, @AuthenticationPrincipal LoginVO user) {
ResultVO resultVO = new ResultVO();
if (user == null) {
resultVO.setResultCode(ResponseCode.TOKEN_EXPIRED.getCode());
@@ -154,4 +158,83 @@ public class AdminBoardsController extends BaseController {
return resultVO;
}
+ @Operation(
+ summary = "게시물 카테고리 셀렉트박스 옵션 조회",
+ description = "게시물 카테고리 셀렉트박스 옵션 조회",
+ tags = {"AdminBoardsController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "조회 성공"),
+ @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
+ })
+ @RequestMapping(method = RequestMethod.GET, value = "/get-category-list", consumes = MediaType.APPLICATION_JSON_VALUE)
+ public ResultVO getCategoryList() throws Exception {
+ ResultVO resultVO = new ResultVO();
+ Map
resultMap = new HashMap<>();
+
+ resultMap.put("categoryList", adminBoardsService.selectBoardList());
+ resultVO.setResult(resultMap);
+ return resultVO;
+ }
+
+ @Operation(
+ summary = "게시물 저장",
+ description = "게시물 저장",
+ tags = {"AdminBoardsController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "저장 성공"),
+ @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
+ })
+ @RequestMapping(method = RequestMethod.PUT, value = "/post-mgt")
+ public ResultVO savePostMgt(@RequestBody @Valid TnBbsContents contents, HttpServletRequest request, Errors errors, @AuthenticationPrincipal LoginVO user) {
+ ResultVO resultVO = new ResultVO();
+ if (user == null) {
+ resultVO.setResultCode(ResponseCode.TOKEN_EXPIRED.getCode());
+ } else {
+ if (errors.hasErrors()) {
+ StringBuilder msg = new StringBuilder();
+ for (FieldError error : errors.getFieldErrors()) {
+ msg.append(error.getDefaultMessage());
+ msg.append("\n");
+ }
+ resultVO.setResultCode(ResponseCode.INPUT_CHECK_ERROR.getCode());
+ resultVO.setResultMessage(msg.toString());
+ } else {
+ System.out.println("@@@ contents.getBbsSeq() : " + contents.getBbsContSeq());
+ contents.setIpAddress(ClientUtils.getRemoteIP(request));
+ adminBoardsService.savePost(contents, user.getId());
+ resultVO.setResultCode(ResponseCode.SUCCESS.getCode());
+ }
+ }
+ return resultVO;
+ }
+
+ @Operation(
+ summary = "게시물 삭제",
+ description = "게시물 삭제",
+ tags = {"AdminBoardsController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "삭제 성공"),
+ @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
+ })
+ @RequestMapping(method = RequestMethod.DELETE, value = "/post-mgt")
+ public ResultVO deletePostMgt(@RequestBody TnBbsContents contents, HttpServletRequest request, @AuthenticationPrincipal LoginVO user) {
+ ResultVO resultVO = new ResultVO();
+ if (user == null) {
+ resultVO.setResultCode(ResponseCode.TOKEN_EXPIRED.getCode());
+ } else {
+ contents.setIpAddress(ClientUtils.getRemoteIP(request));
+ String result = adminBoardsService.deletePost(contents, user.getId());
+ if (result == null) {
+ resultVO.setResultCode(ResponseCode.SUCCESS.getCode());
+ } else if (result.equals("notFind")) {
+ resultVO.setResultCode(ResponseCode.SAVE_ERROR.getCode());
+ resultVO.setResultMessage("대상이 존재하지 않습니다.");
+ }
+ }
+ return resultVO;
+ }
+
}
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/entity/TnBbsContents.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/entity/TnBbsContents.java
index e7cb424..42bd06c 100644
--- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/entity/TnBbsContents.java
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/entity/TnBbsContents.java
@@ -19,10 +19,10 @@ public class TnBbsContents {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "bbs_cont_seq")
- private Integer bbsContSeq;
+ private Long bbsContSeq;
@Column(name = "bbs_seq", nullable = false)
- private Integer bbsSeq;
+ private Long bbsSeq;
@Column(name = "bbs_cont_title")
private String bbsContTitle;
@@ -31,22 +31,22 @@ public class TnBbsContents {
private String bbsContents;
@Column(name = "bbs_cont_seq_group")
- private Integer bbsContSeqGroup;
+ private Long bbsContSeqGroup;
@Column(name = "bbs_cont_seq_parent")
- private Integer bbsContSeqParent;
+ private Long bbsContSeqParent;
@Column(name = "bbs_cont_level", nullable = false)
- private Integer bbsContLevel;
+ private Long bbsContLevel;
@Column(name = "bbs_cont_sort")
- private Integer bbsContSort;
+ private Long bbsContSort;
@Column(name = "file_grp_id")
private String fileGrpId;
@Column(name = "bbs_read_cnt", nullable = false)
- private Integer bbsReadCnt;
+ private Long bbsReadCnt;
@Column(name = "fixed_yn", nullable = false)
private String fixedYn;
@@ -58,7 +58,7 @@ public class TnBbsContents {
private String secretPwd;
@Column(name = "doc_info_seq")
- private Integer docInfoSeq;
+ private Long docInfoSeq;
@Column(name = "ip_address", nullable = false)
private String ipAddress;
@@ -79,5 +79,8 @@ public class TnBbsContents {
private String useYn;
@Column(name = "old_seq")
- private Integer oldSeq;
+ private Long oldSeq;
+
+ @Column(name = "bbs_id")
+ private String bbsId;
}
\ No newline at end of file
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/repository/TnBbsContentsRepository.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/repository/TnBbsContentsRepository.java
index d10ad7d..552f0da 100644
--- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/repository/TnBbsContentsRepository.java
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/repository/TnBbsContentsRepository.java
@@ -2,7 +2,17 @@ package com.dbnt.kcscbackend.admin.boards.repository;
import com.dbnt.kcscbackend.admin.boards.entity.TnBbsContents;
import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+
+import java.util.List;
public interface TnBbsContentsRepository extends JpaRepository {
+ @Query(value = "SELECT entity FROM TnBbsContents entity " +
+ "WHERE entity.useYn = 'Y' " +
+ "AND entity.bbsId = :bbsId " +
+ "ORDER BY entity.bbsContSeq DESC")
+ List findByBbsId(@Param("bbsId") String bbsId);
+
}
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/repository/TnBbsRepository.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/repository/TnBbsRepository.java
index 874c5f0..b700de4 100644
--- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/repository/TnBbsRepository.java
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/repository/TnBbsRepository.java
@@ -2,13 +2,11 @@ package com.dbnt.kcscbackend.admin.boards.repository;
import com.dbnt.kcscbackend.admin.boards.entity.TnBbs;
import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
import java.util.List;
public interface TnBbsRepository extends JpaRepository {
- @Query(value = "SELECT * FROM tn_bbs ORDER BY bbs_seq DESC", nativeQuery = true)
List findAllByOrderByBbsSeqDesc();
}
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/service/AdminBoardsService.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/service/AdminBoardsService.java
index 796d21f..3c50c8c 100644
--- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/service/AdminBoardsService.java
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/service/AdminBoardsService.java
@@ -25,10 +25,6 @@ public class AdminBoardsService extends EgovAbstractServiceImpl {
return tnBbsRepository.findAllByOrderByBbsSeqDesc();
}
- public Optional selectBoard(Long bbsSeq) {
- return tnBbsRepository.findById(bbsSeq);
- }
-
@Transactional
public void saveBoard(TnBbs bbs, String userId) {
if (bbs.getBbsSeq() == null) {
@@ -70,4 +66,45 @@ public class AdminBoardsService extends EgovAbstractServiceImpl {
return tnBbsContentsRepository.findAll();
}
+ @Transactional
+ public void savePost(TnBbsContents contents, String userId) {
+ if (contents.getBbsContSeq() == null) {
+ // TODO 하드코딩
+ contents.setBbsContLevel(1L);
+ contents.setBbsReadCnt(0L);
+ contents.setUseYn("Y");
+ contents.setFrstCrtDt(LocalDateTime.now());
+ contents.setFrstCrtId(userId);
+ tnBbsContentsRepository.save(contents);
+ } else {
+ TnBbsContents savedPost = tnBbsContentsRepository.findById(contents.getBbsContSeq()).orElse(null);
+ savedPost.setFixedYn(contents.getFixedYn());
+ savedPost.setSecretYn(contents.getSecretYn());
+ savedPost.setBbsId(contents.getBbsId());
+ savedPost.setBbsContTitle(contents.getBbsContTitle());
+ savedPost.setFileGrpId(contents.getFileGrpId());
+ savedPost.setBbsContents(contents.getBbsContents());
+ savedPost.setIpAddress(contents.getIpAddress());
+ savedPost.setUseYn("Y");
+ savedPost.setLastChgId(userId);
+ savedPost.setLastChgDt(LocalDateTime.now());
+ tnBbsContentsRepository.save(savedPost);
+ }
+ }
+
+ @Transactional
+ public String deletePost(TnBbsContents contents, String userId) {
+ TnBbsContents savedPost = tnBbsContentsRepository.findById(contents.getBbsContSeq()).orElse(null);
+ if (savedPost == null) {
+ return "notFind";
+ } else {
+ savedPost.setIpAddress(contents.getIpAddress());
+ savedPost.setUseYn("N");
+ savedPost.setLastChgDt(LocalDateTime.now());
+ savedPost.setLastChgId(userId);
+ tnBbsContentsRepository.save(savedPost);
+ return null;
+ }
+ }
+
}
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/committee/AdminCommitteeController.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/committee/AdminCommitteeController.java
index c57b67a..5aac4b0 100644
--- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/committee/AdminCommitteeController.java
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/committee/AdminCommitteeController.java
@@ -88,5 +88,43 @@ public class AdminCommitteeController extends BaseController {
return resultVO;
}
+ @Operation(
+ summary = "'진행현황 관리' 페이지에서 코드명 눌렀을 때 보여질 상세 페이지 불러오는 API",
+ description = "관리자 단에서 '위원회관리' > '진행현황 관리' 페이지에서 코드명 눌렀을 때 보여질 상세 페이지 목록 불러오는 API",
+ tags = {"AdminCommitteeController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "조회 성공")
+ })
+ @GetMapping(value = "/progress-status/{drftSeq}")
+ public ResultVO getCommitteeProgressStatusDetail(
+ HttpServletRequest request,
+ @AuthenticationPrincipal LoginVO user,
+ @PathVariable("drftSeq") Long drftSeq
+ )
+ throws Exception {
+
+ ResultVO resultVO = new ResultVO();
+
+ try {
+ resultVO = adminCommitteeProgressStatusService.getCommitteeProgressStatusDetail(resultVO, request, user, drftSeq);
+ } catch (Exception e) {
+ 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;
+ }
+
}
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/committee/service/AdminCommitteeProgressStatusService.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/committee/service/AdminCommitteeProgressStatusService.java
index be7a069..13871cd 100644
--- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/committee/service/AdminCommitteeProgressStatusService.java
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/committee/service/AdminCommitteeProgressStatusService.java
@@ -11,8 +11,9 @@ import javax.servlet.http.HttpServletRequest;
public interface AdminCommitteeProgressStatusService {
public ResultVO createCommitteeProgressStatus(ResultVO resultVO, HttpServletRequest request, LoginVO user, CreateCommitteeCodeManagementVO createCommitteeCodeManagementVO) throws Exception;
public ResultVO getCommitteeProgressStatus(ResultVO resultVO, HttpServletRequest request, LoginVO user, Pageable pageable) throws Exception;
- public ResultVO setCommitteeProgressStatus(ResultVO resultVO, HttpServletRequest request, LoginVO user, SetCommitteeCodeManagementVO setCommitteeCodeManagementVO, Long cmtSeq) throws Exception;
- public ResultVO deleteCommitteeProgressStatus(ResultVO resultVO, HttpServletRequest request, LoginVO user, Long cmtSeq) throws Exception;
+ public ResultVO setCommitteeProgressStatus(ResultVO resultVO, HttpServletRequest request, LoginVO user, SetCommitteeCodeManagementVO setCommitteeCodeManagementVO, Long drftSeq) throws Exception;
+ public ResultVO deleteCommitteeProgressStatus(ResultVO resultVO, HttpServletRequest request, LoginVO user, Long drftSeq) throws Exception;
+ public ResultVO getCommitteeProgressStatusDetail(ResultVO resultVO, HttpServletRequest request, LoginVO user, Long drftSeq) throws Exception;
}
\ No newline at end of file
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/committee/service/impl/AdminCommitteeProgressStatusServiceImpl.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/committee/service/impl/AdminCommitteeProgressStatusServiceImpl.java
index d90dce0..8e70936 100644
--- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/committee/service/impl/AdminCommitteeProgressStatusServiceImpl.java
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/committee/service/impl/AdminCommitteeProgressStatusServiceImpl.java
@@ -221,4 +221,28 @@ public class AdminCommitteeProgressStatusServiceImpl extends EgovAbstractService
return resultVO;
}
+ @Override
+ public ResultVO getCommitteeProgressStatusDetail(ResultVO resultVO, HttpServletRequest request, LoginVO user, Long drftSeq) throws Exception {
+ System.out.println(
+ "\n--------------------------------------------------------------\n" +
+ request.getRequestURI() + " IN:" +
+ "\n--------------------------------------------------------------\n" +
+ "user.getEmail():" + "\n" +
+ user.getEmail() + "\n" +
+ "drftSeq:" + "\n" +
+ drftSeq + "\n" +
+ "\n--------------------------------------------------------------\n"
+ );
+
+ Map item = tnCmtDraftRepository.getCommitteeProgressStatusDetail(drftSeq);
+ Map dto = new HashMap();
+
+ dto.put("item", item);
+ resultVO.setResult(dto);
+ resultVO.setResultCode(ResponseCode.SUCCESS.getCode());
+ resultVO.setResultMessage(ResponseCode.SUCCESS.getMessage());
+
+ return resultVO;
+ }
+
}
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/commonCode/repository/TnCmtDraftRepository.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/commonCode/repository/TnCmtDraftRepository.java
index 43e5a38..038ffd5 100644
--- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/commonCode/repository/TnCmtDraftRepository.java
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/commonCode/repository/TnCmtDraftRepository.java
@@ -208,5 +208,78 @@ public interface TnCmtDraftRepository extends JpaRepository {
@Param("offset") Integer offset
);
+ @Query(value =
+ "select " +
+ " tcd.drft_seq as \"seq\", " +
+ " tcd.doc_info_seq as \"categoryId\", " +
+ " tcd.drft_dt as \"drftDatetime\", " +
+ " tcd.drft_title as \"title\", " +
+ " null as \"drftCharger\", " +
+ " null as \"drftChargerEmail\", " +
+ " null as \"drftChargerPhone\", " +
+ " null as \"drftStatCode\", " +
+ " tcd.drft_type_cd as \"drftTypeCode\", " +
+ " tcd.cmt_seq as \"orgId\", " +
+ " null as \"startDatetime\", " +
+ " null as \"endDatetime\", " +
+ " null as \"closeDatetime\", " +
+ " tcd.frst_crt_dt as \"createDate\", " +
+ " tcd.last_chg_dt as \"updateDate\", " +
+ " null as \"createUserId\", " +
+ " null as \"updateUserId\", " +
+ " case when UPPER(tcd.use_yn) = 'Y' then 'N' else 'Y' end as \"delYn\", " +
+ " tcd.drft_summery as \"drftSummery\", " +
+ " tcd.drft_confe_charger as \"drftConfeCharger\", " +
+ " tcd.drft_confe_pw as \"drftConfePw\", " +
+ " tcd.drft_confe_room as \"drftConfeRoom\", " +
+ " null as \"drftMeasurePlanFileSeq\", " +
+ " null as \"drftMeasureResultFileSeq\", " +
+ " null as \"drftMeasurePlanFileName\", " +
+ " null as \"drftMeasureResultFileName\", " +
+ " null as \"drftMeasurePreDataFileName\", " +
+ " null as \"drftMeasurePreDataFileSeq\", " +
+ " null as \"drftMeasurePreFormFileName\", " +
+ " null as \"drftMeasurePreFormFileSeq\", " +
+ " null as \"drftMeasurePartnerFileName\", " +
+ " null as \"drftMeasurePartnerFileSeq\", " +
+ " null as \"drftProcess\", " +
+ " ( " +
+ " select tci.item_nm " +
+ " from tc_code_item tci " +
+ " where tci.item_cd = tcd.drft_type_cd " +
+ " limit 1 offset 0 " +
+ " ) as \"drftTypeNm\", " +
+ " concat(tdi.kcsc_cd, ' ', tdi.doc_nm) as \"categoryNm\", " +
+ " tco.cmt_nm as \"orgNm\", " +
+ " ( " +
+ " select tci.item_nm " +
+ " from tc_code_item tci " +
+ " where tci.item_cd = tcd.drft_stat_cd " +
+ " limit 1 offset 0 " +
+ " ) as \"drftStatNm\", " +
+ " null as \"categoryInfo\", " +
+ " null as \"orgType\", " +
+ " null as \"upOrgId\", " +
+ " null as \"orgList\", " +
+ " null as \"orgList1\", " +
+ " null as \"orgList2\", " +
+ " null as \"orgList3\", " +
+ " null as \"depthOrgId\", " +
+ " null as \"depthOrgId1\", " +
+ " null as \"depthOrgId2\", " +
+ " null as \"depthOrgId3\", " +
+ " tdi.kcsc_cd as \"standardCode\", " +
+ " to_char(tcd.frst_crt_dt, 'yyyy-mm-dd') as \"regDate\" " +
+ "from tn_cmt_draft tcd " +
+ "left join tn_document_info tdi on tcd.doc_info_seq = tdi.doc_info_seq " +
+ "left join tn_document_group tdg on tdi.group_seq = tdg.group_seq " +
+ "left join tn_cmt_org tco on tcd.cmt_seq = tco.cmt_seq " +
+ "where tcd.drft_seq = :drftSeq " +
+ "order by tcd.drft_seq desc ",
+ nativeQuery = true)
+ Map getCommitteeProgressStatusDetail(
+ @Param("drftSeq") Long drftSeq
+ );
+
}