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 40ad06d..94ff4e8 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
@@ -8,6 +8,102 @@ import URL from 'constants/url';
import { default as EgovLeftNav } from 'components/leftmenu/EgovLeftNavAdmin';
import EgovPagingPaginationInfo from 'components/EgovPagingPaginationInfo';
+import styled from "styled-components";
+
+const StyledDiv = styled.div`
+.BRD008 {
+ .head {
+ span {
+ text-align: left;
+ &:nth-child(1) {
+ width: 32px;
+ text-align: center;
+ }
+ &:nth-child(2) {
+ width: 60px;
+ text-align: center;
+ }
+ &:nth-child(3) {
+ width: 300px;
+ }
+ &:nth-child(4) {
+ width: 120px;
+ }
+ &:nth-child(5) {
+ width: 80px;
+ }
+ &:nth-child(6) {
+ width: 70px;
+ }
+ &:nth-child(7) {
+ width: 50px;
+ text-align: center;
+ }
+ &:nth-child(8) {
+ width: 50px;
+ text-align: center;
+ }
+ }
+ }
+ .result .list_item {
+ & > div {
+ text-align: left;
+ &:nth-child(1) {
+ width: 32px;
+ text-align: center;
+ }
+ &:nth-child(2) {
+ width: 60px;
+ text-align: center;
+ }
+ &:nth-child(3) {
+ width: 300px;
+ }
+ &:nth-child(4) {
+ width: 120px;
+ }
+ &:nth-child(5) {
+ width: 80px;
+ }
+ &:nth-child(6) {
+ width: 70px;
+ }
+ &:nth-child(7) {
+ width: 50px;
+ text-align: center;
+ }
+ &:nth-child(8) {
+ width: 50px;
+ text-align: center;
+ }
+ }
+ }
+}
+
+.board-bot {
+ margin-top: 20px;
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+ align-items: stretch;
+ justify-content: center;
+
+ & > *:nth-child(1) {
+ width: 16%;
+ justify-content: left;
+ }
+ & > *:nth-child(2) {
+ width: 68%;
+ justify-content: center;
+ }
+ & > *:nth-child(3) {
+ width: 16%;
+ justify-content: right;
+ }
+}
+`;
+
function ProgressStatus(props) {
const location = useLocation();
@@ -16,6 +112,11 @@ function ProgressStatus(props) {
const [paginationInfo, setPaginationInfo] = useState({});
const [searchCondition, setSearchCondition] = useState(location.state?.searchCondition || { pageIndex: 1, searchCnd: '0', searchWrd: '' });
+ useEffect(function () {
+ getList(searchCondition);
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, []);
+
const requestOptions = {
method: "GET",
headers: {
@@ -25,11 +126,11 @@ function ProgressStatus(props) {
const getList = (searchCondition) => {
- EgovNet.requestFetch(`/contents/api/popup-manage/list?page=${searchCondition.pageIndex-1}&size=10&sort=popupSeq,desc`,
+ EgovNet.requestFetch(`/admin/committee/progress-status/list?page=${searchCondition.pageIndex-1}&size=10&sort=popupSeq,desc`,
requestOptions,
function (resp) {
console.log('%o', resp);
- setListItem(resp.result.listPopup);
+ setListItem(resp.result.list);
setPaginationInfo({...resp.result.paginationInfo});
}
);
@@ -63,17 +164,22 @@ function ProgressStatus(props) {
{/* */}
-
-
진행현황 관리
-
+
+
+
진행현황 관리
+
- {/* */}
-
+ {/* */}
+
- 번호
- 제목
- 기간
- 사용여부
+ #
+ 구분
+ 제목 / 코드명
+ 진행위원회
+ 진행단계
+ 등록일
+ 수정
+ 삭제
{/* */}
@@ -83,6 +189,13 @@ function ProgressStatus(props) {
{listItem.map((it)=>(
{it.number}
+
{it.drftTypeNm}
+
{it.categoryNm}
{it.title}
+
{it.orgNm}
+
진행단계표시
+
{it.regDate}
+
+
))}
@@ -105,6 +218,7 @@ function ProgressStatus(props) {
{/* */}
+
{/* */}
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
new file mode 100644
index 0000000..92412e5
--- /dev/null
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/committee/AdminCommitteeController.java
@@ -0,0 +1,606 @@
+package com.dbnt.kcscbackend.admin.config;
+
+import com.dbnt.kcscbackend.admin.config.entity.TcMenu;
+import com.dbnt.kcscbackend.admin.config.entity.TnPartnerSite;
+import com.dbnt.kcscbackend.admin.config.model.CreateCommitteeCodeManagementVO;
+import com.dbnt.kcscbackend.admin.config.model.SetCommitteeCodeManagementVO;
+import com.dbnt.kcscbackend.admin.config.service.AdminCommitteeCodeManagementService;
+import com.dbnt.kcscbackend.commonCode.entity.TcCodeGrp;
+import com.dbnt.kcscbackend.commonCode.entity.TcCodeItem;
+import com.dbnt.kcscbackend.admin.config.service.AdminConfigService;
+import com.dbnt.kcscbackend.auth.entity.LoginVO;
+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 io.swagger.annotations.ApiParam;
+import io.swagger.v3.oas.annotations.Operation;
+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 lombok.RequiredArgsConstructor;
+import org.springframework.http.MediaType;
+import org.springframework.security.core.annotation.AuthenticationPrincipal;
+import org.springframework.validation.Errors;
+import org.springframework.validation.FieldError;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.Map;
+
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/admin/config")
+@Tag(name="AdminConfigController", description = "사이트관리 환결설정 메뉴 컨트롤러")
+public class AdminConfigController extends BaseController {
+
+ private final AdminConfigService adminConfigService;
+ private final CommonCodeService commonCodeService;
+
+ @Resource(name = "adminCommitteeCodeManagementService")
+ private AdminCommitteeCodeManagementService adminCommitteeCodeManagementService;
+
+ @Operation(
+ summary = "기본코드 그룹 조회",
+ description = "기본코드 그룹 조회",
+ tags = {"AdminConfigController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "조회 성공"),
+ @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
+ })
+ @RequestMapping(method = RequestMethod.GET, value = "/code-grp")
+ public ResultVO getCodeGrp() throws Exception{
+ ResultVO resultVO = new ResultVO();
+ Map resultMap = new HashMap<>();
+ resultMap.put("codeGrpList", adminConfigService.selectCodeGrpList());
+ resultVO.setResult(resultMap);
+ return resultVO;
+ }
+
+ @Operation(
+ summary = "기본코드 그룹 저장",
+ description = "기본코드 그룹 저장",
+ tags = {"AdminConfigController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "저장 성공"),
+ @ApiResponse(responseCode = "303", description = "만료된 토큰"),
+ @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
+ })
+ @RequestMapping(method = RequestMethod.POST, value = "/code-grp", consumes = MediaType.APPLICATION_JSON_VALUE)
+ public ResultVO addCodeGrp(@RequestBody TcCodeGrp codeGrp, @AuthenticationPrincipal LoginVO user) throws Exception{
+ ResultVO resultVO = new ResultVO();
+ if(user == null){
+ resultVO.setResultCode(ResponseCode.TOKEN_EXPIRED.getCode());
+ }else{
+ if(!user.getUserSe().equals("ACC_TP01")){
+ resultVO.setResultCode(ResponseCode.AUTH_ERROR.getCode());
+ resultVO.setResultMessage(ResponseCode.AUTH_ERROR.getMessage());
+ }else if(codeGrp.getGrpCd().isEmpty()){
+ resultVO.setResultCode(ResponseCode.INPUT_CHECK_ERROR.getCode());
+ resultVO.setResultMessage(ResponseCode.INPUT_CHECK_ERROR.getMessage());
+ }else{
+ codeGrp.setFrstCrtDt(LocalDateTime.now());
+ codeGrp.setFrstCrtId(user.getId());
+ codeGrp.setUseYn("Y");
+ String result = adminConfigService.addCodeGrp(codeGrp);
+ if(result.equals("isSaved")){
+ resultVO.setResultCode(ResponseCode.SAVE_ERROR.getCode());
+ resultVO.setResultMessage("중복되는 코드그룹이 있습니다.");
+ }else{
+ resultVO.setResultCode(ResponseCode.SUCCESS.getCode());
+ }
+ }
+ }
+ return resultVO;
+ }
+
+ @Operation(
+ summary = "기본코드 그룹 수정",
+ description = "기본코드 그룹 수정",
+ tags = {"AdminConfigController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "수정 성공"),
+ @ApiResponse(responseCode = "303", description = "만료된 토큰"),
+ @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
+ })
+ @RequestMapping(method = RequestMethod.PUT, value = "/code-grp", consumes = MediaType.APPLICATION_JSON_VALUE)
+ public ResultVO modifyCodeGrp(@RequestBody TcCodeGrp codeGrp, @AuthenticationPrincipal LoginVO user) throws Exception{
+ ResultVO resultVO = new ResultVO();
+ if(user == null){
+ resultVO.setResultCode(ResponseCode.TOKEN_EXPIRED.getCode());
+ }else{
+ if(!user.getUserSe().equals("ACC_TP01")){
+ resultVO.setResultCode(ResponseCode.AUTH_ERROR.getCode());
+ resultVO.setResultMessage(ResponseCode.AUTH_ERROR.getMessage());
+ }else if(codeGrp.getGrpCd().isEmpty()){
+ resultVO.setResultCode(ResponseCode.INPUT_CHECK_ERROR.getCode());
+ resultVO.setResultMessage(ResponseCode.INPUT_CHECK_ERROR.getMessage());
+ }else{
+ codeGrp.setLastChgDt(LocalDateTime.now());
+ codeGrp.setLastChgId(user.getId());
+ String result = adminConfigService.modifyCodeGrp(codeGrp);
+ if(result.equals("modified")){
+ resultVO.setResultCode(ResponseCode.SUCCESS.getCode());
+ }else{
+ resultVO.setResultCode(ResponseCode.SAVE_ERROR.getCode());
+ }
+ }
+ }
+ return resultVO;
+ }
+
+ @Operation(
+ summary = "기본코드 아이템 조회",
+ description = "기본코드 아이템 조회",
+ tags = {"AdminConfigController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "조회 성공"),
+ @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
+ })
+ @RequestMapping(method = RequestMethod.GET, value = "/code-item")
+ public ResultVO getCodeItem(String grpCd) throws Exception{
+ ResultVO resultVO = new ResultVO();
+ Map resultMap = new HashMap<>();
+ resultMap.put("codeItemList", adminConfigService.selectCodeItemList(grpCd));
+ resultVO.setResult(resultMap);
+ return resultVO;
+ }
+
+ @Operation(
+ summary = "기본코드 아이템 저장",
+ description = "기본코드 아이템 저장",
+ tags = {"AdminConfigController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "저장 성공"),
+ @ApiResponse(responseCode = "303", description = "만료된 토큰"),
+ @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
+ })
+ @RequestMapping(method = RequestMethod.POST, value = "/code-item", consumes = MediaType.APPLICATION_JSON_VALUE)
+ public ResultVO addCodeItem(@RequestBody TcCodeItem codeItem, @AuthenticationPrincipal LoginVO user) throws Exception{
+ ResultVO resultVO = new ResultVO();
+ if(user == null){
+ resultVO.setResultCode(ResponseCode.TOKEN_EXPIRED.getCode());
+ }else{
+ if(!user.getUserSe().equals("ACC_TP01")){
+ resultVO.setResultCode(ResponseCode.AUTH_ERROR.getCode());
+ resultVO.setResultMessage(ResponseCode.AUTH_ERROR.getMessage());
+ }else if(codeItem.getGrpCd()==null || codeItem.getGrpCd().isEmpty()){
+ resultVO.setResultCode(ResponseCode.INPUT_CHECK_ERROR.getCode());
+ resultVO.setResultMessage(ResponseCode.INPUT_CHECK_ERROR.getMessage());
+ }else{
+ codeItem.setFrstCrtDt(LocalDateTime.now());
+ codeItem.setFrstCrtId(user.getId());
+ codeItem.setUseYn("Y");
+ String result = adminConfigService.addCodeItem(codeItem);
+ if(result.equals("isSaved")){
+ resultVO.setResultCode(ResponseCode.SAVE_ERROR.getCode());
+ resultVO.setResultMessage("중복되는 코드가 있습니다.");
+ }else{
+ resultVO.setResultCode(ResponseCode.SUCCESS.getCode());
+ }
+ }
+ }
+ return resultVO;
+ }
+
+ @Operation(
+ summary = "기본코드 아이템 수정",
+ description = "기본코드 아이템 수정",
+ tags = {"AdminConfigController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "수정 성공"),
+ @ApiResponse(responseCode = "303", description = "만료된 토큰"),
+ @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
+ })
+ @RequestMapping(method = RequestMethod.PUT, value = "/code-item", consumes = MediaType.APPLICATION_JSON_VALUE)
+ public ResultVO modifyCodeItem(@RequestBody TcCodeItem codeItem, @AuthenticationPrincipal LoginVO user) throws Exception{
+ ResultVO resultVO = new ResultVO();
+ if(user == null){
+ resultVO.setResultCode(ResponseCode.TOKEN_EXPIRED.getCode());
+ }else{
+ if(!user.getUserSe().equals("ACC_TP01")){
+ resultVO.setResultCode(ResponseCode.AUTH_ERROR.getCode());
+ resultVO.setResultMessage(ResponseCode.AUTH_ERROR.getMessage());
+ }else if(codeItem.getGrpCd().isEmpty()){
+ resultVO.setResultCode(ResponseCode.INPUT_CHECK_ERROR.getCode());
+ resultVO.setResultMessage(ResponseCode.INPUT_CHECK_ERROR.getMessage());
+ }else{
+ codeItem.setLastChgDt(LocalDateTime.now());
+ codeItem.setLastChgId(user.getId());
+ String result = adminConfigService.modifyCodeItem(codeItem);
+ if(result.equals("modified")){
+ resultVO.setResultCode(ResponseCode.SUCCESS.getCode());
+ }else{
+ resultVO.setResultCode(ResponseCode.SAVE_ERROR.getCode());
+ }
+ }
+ }
+ return resultVO;
+ }
+
+ @Operation(
+ summary = "메뉴 조회",
+ description = "메뉴 조회",
+ tags = {"AdminConfigController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "조회 성공"),
+ @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
+ })
+ @RequestMapping(method = RequestMethod.GET, value = "/menu-mgt")
+ public ResultVO getMenuMgt(){
+ ResultVO resultVO = new ResultVO();
+ Map resultMap = new HashMap<>();
+ resultMap.put("menuList", adminConfigService.selectMenuList());
+ resultVO.setResult(resultMap);
+ return resultVO;
+ }
+
+ @Operation(
+ summary = "메뉴 저장",
+ description = "메뉴 저장",
+ tags = {"AdminConfigController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "저장 성공"),
+ @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
+ })
+ @RequestMapping(method = RequestMethod.PUT, value = "/menu-mgt")
+ public ResultVO saveMenuMgt(@RequestBody @Valid TcMenu menu, Errors errors, @AuthenticationPrincipal LoginVO user){
+ ResultVO resultVO = new ResultVO();
+ if(user == null){
+ resultVO.setResultCode(ResponseCode.TOKEN_EXPIRED.getCode());
+ }else {
+ menu.setRoleGrpId(menu.getMenuTypeCd().equals("MNU_0000")?"ADMIN_USER":"ALL_USER");
+ 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 if (!user.getUserSe().equals("ACC_TP01")) {
+ resultVO.setResultCode(ResponseCode.AUTH_ERROR.getCode());
+ resultVO.setResultMessage(ResponseCode.AUTH_ERROR.getMessage());
+ } else {
+ adminConfigService.saveMenu(menu, user.getId());
+ resultVO.setResultCode(ResponseCode.SUCCESS.getCode());
+ }
+ }
+ return resultVO;
+ }
+
+ @Operation(
+ summary = "메뉴 삭제",
+ description = "메뉴 삭제",
+ tags = {"AdminConfigController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "삭제 성공"),
+ @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
+ })
+ @RequestMapping(method = RequestMethod.DELETE, value = "/menu-mgt")
+ public ResultVO removeMenuMgt(@RequestBody TcMenu menu, @AuthenticationPrincipal LoginVO user){
+ ResultVO resultVO = new ResultVO();
+ if(user == null){
+ resultVO.setResultCode(ResponseCode.TOKEN_EXPIRED.getCode());
+ }else {
+ if (!user.getUserSe().equals("ACC_TP01")) {
+ resultVO.setResultCode(ResponseCode.AUTH_ERROR.getCode());
+ resultVO.setResultMessage(ResponseCode.AUTH_ERROR.getMessage());
+ } else {
+ String result = adminConfigService.deleteMenu(menu.getMenuId(), 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;
+ }
+
+ @Operation(
+ summary = "메뉴 권한 조회",
+ description = "메뉴 권한 조회",
+ tags = {"AdminConfigController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "조회 성공"),
+ @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
+ })
+ @RequestMapping(method = RequestMethod.GET, value = "/menu-auth-mgt")
+ public ResultVO getMenuAuthMgt(){
+ ResultVO resultVO = new ResultVO();
+ Map resultMap = new HashMap<>();
+ resultMap.put("menuList", adminConfigService.selectMenuAuthList());
+ resultMap.put("roleList", commonCodeService.selectCodeItemList("ROLE"));
+ resultVO.setResult(resultMap);
+ return resultVO;
+ }
+
+ @Operation(
+ summary = "메뉴 권한 수정",
+ description = "메뉴 권한 수정",
+ tags = {"AdminConfigController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "수정 성공"),
+ @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
+ })
+ @RequestMapping(method = RequestMethod.PUT, value = "/menu-auth-mgt")
+ public ResultVO editMenuAuthMgt(@RequestBody TcMenu menu, @AuthenticationPrincipal LoginVO user){
+ ResultVO resultVO = new ResultVO();
+ if(user == null){
+ resultVO.setResultCode(ResponseCode.TOKEN_EXPIRED.getCode());
+ }else {
+ if (!user.getUserSe().equals("ACC_TP01")) {
+ resultVO.setResultCode(ResponseCode.AUTH_ERROR.getCode());
+ resultVO.setResultMessage(ResponseCode.AUTH_ERROR.getMessage());
+ } else {
+ adminConfigService.editMenuAuth(menu);
+ resultVO.setResultCode(ResponseCode.SUCCESS.getCode());
+ }
+ }
+ return resultVO;
+ }
+
+ @Operation(
+ summary = "'위원회 코드 관리' 페이지에서 목록 불러오는 API",
+ description = "관리자 단에서 '환경설정' > '위원회코드 관리' 페이지에서 목록 불러오는 API",
+ tags = {"AdminConfigController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "조회 성공"),
+ @ApiResponse(responseCode = "303", description = "만료된 토큰"),
+ @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
+ })
+ @GetMapping(value = "/committee-code-management")
+ public ResultVO getCommitteeCodeManagement(
+ @AuthenticationPrincipal LoginVO user,
+ HttpServletRequest request,
+ @ApiParam(value="상위 code") @RequestParam(required=true) String paramCodeGroup,
+ @ApiParam(value="code level") @RequestParam(required=true) String paramCodeLevel
+ ) throws Exception {
+
+ ResultVO resultVO = new ResultVO();
+ if(user == null) {
+ resultVO.setResultCode(ResponseCode.TOKEN_EXPIRED.getCode());
+ } else {
+ try {
+ Long upCmtSeq = null;
+ if (!paramCodeGroup.equals("null")) {
+ upCmtSeq = Long.parseLong(paramCodeGroup);
+ }
+ resultVO = adminCommitteeCodeManagementService.getCommitteeCodeManagement(resultVO, request, user, upCmtSeq, paramCodeLevel);
+ } 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;
+ }
+
+
+ @Operation(
+ summary = "'위원회 코드 관리' 페이지에서 위원회 코드 추가하는 API",
+ description = "관리자 단에서 '환경설정' > '위원회코드 관리' 페이지에서 +(추가) 버튼으로 항목 추가하는 API",
+ tags = {"AdminConfigController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "조회 성공"),
+ @ApiResponse(responseCode = "303", description = "만료된 토큰"),
+ @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
+ })
+ @PostMapping(value = "/committee-code-management")
+ public ResultVO createCommitteeCodeManagement(
+ @AuthenticationPrincipal LoginVO user,
+ HttpServletRequest request,
+ CreateCommitteeCodeManagementVO createCommitteeCodeManagementVO
+ ) throws Exception {
+
+ ResultVO resultVO = new ResultVO();
+ if(user == null) {
+ resultVO.setResultCode(ResponseCode.TOKEN_EXPIRED.getCode());
+ } else {
+ try {
+ resultVO = adminCommitteeCodeManagementService.createCommitteeCodeManagement(resultVO, request, user, createCommitteeCodeManagementVO);
+ } 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;
+ }
+
+ @Operation(
+ summary = "'위원회 코드 관리' 페이지에서 위원회 코드 삭제하는 API",
+ description = "관리자 단에서 '환경설정' > '위원회코드 관리' 페이지에서 휴지통 모양 삭제 버튼으로 항목 삭제하는 API",
+ tags = {"AdminConfigController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "등록 성공"),
+ @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
+ })
+ @DeleteMapping(value = "/committee-code-management/{orgId}")
+ public ResultVO deleteSchedule
+ (
+ @AuthenticationPrincipal LoginVO user,
+ HttpServletRequest request,
+ @PathVariable("orgId") String strOrgId
+ ) throws Exception {
+
+ ResultVO resultVO = new ResultVO();
+ Long orgId = Long.valueOf(strOrgId);
+ try {
+ resultVO = adminCommitteeCodeManagementService.deleteCommitteeCodeManagement(resultVO, request, user, orgId);
+ } 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;
+
+ }
+
+
+ /* ---- 관련사이트 관리 ----- */
+ @Operation(
+ summary = "관련사이트 목록 조회",
+ description = "관련사이트 목록 조회",
+ tags = {"AdminConfigController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "조회 성공"),
+ @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
+ })
+ @RequestMapping(method = RequestMethod.GET, value = "/partner-site-list", consumes = MediaType.APPLICATION_JSON_VALUE)
+ public ResultVO getPartnerSiteList() throws Exception {
+ ResultVO resultVO = new ResultVO();
+ Map resultMap = new HashMap<>();
+
+ resultMap.put("partnerSiteList", adminConfigService.selectPartnerSiteList());
+ resultVO.setResult(resultMap);
+ return resultVO;
+ }
+
+ @Operation(
+ summary = "관련사이트 저장",
+ description = "관련사이트 저장",
+ tags = {"AdminConfigController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "저장 성공"),
+ @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
+ })
+ @RequestMapping(method = RequestMethod.PUT, value = "/partner-site-mgt")
+ public ResultVO savePartnerSite(@RequestBody @Valid TnPartnerSite tnPartnerSite, 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("@@@ bbs.getBbsSeq() : " + tnPartnerSite.getSiteSeq());
+ adminConfigService.savePartnerSite(tnPartnerSite, user.getId());
+ resultVO.setResultCode(ResponseCode.SUCCESS.getCode());
+ }
+ }
+ return resultVO;
+ }
+
+ @Operation(
+ summary = "관련사이트 삭제",
+ description = "관련사이트 삭제",
+ tags = {"AdminConfigController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "삭제 성공"),
+ @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
+ })
+ @RequestMapping(method = RequestMethod.DELETE, value = "/partner-site-mgt")
+ public ResultVO removePartnerSite(@RequestBody TnPartnerSite tnPartnerSite, @AuthenticationPrincipal LoginVO user) {
+ ResultVO resultVO = new ResultVO();
+ if (user == null) {
+ resultVO.setResultCode(ResponseCode.TOKEN_EXPIRED.getCode());
+ } else {
+ String result = adminConfigService.deletePartnerSite(tnPartnerSite, 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;
+ }
+
+ @Operation(
+ summary = "'위원회 코드 관리' 페이지에서 위원회 코드 수정하는 API",
+ description = "관리자 단에서 '환경설정' > '위원회코드 관리' 페이지에서 연필 모양 수정 버튼으로 항목 수정하는 API",
+ tags = {"AdminConfigController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "등록 성공"),
+ @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님"),
+ })
+ @PutMapping(value = "/committee-code-management/{orgId}")
+ public ResultVO setCommitteeCodeManagement(
+ HttpServletRequest request,
+ @AuthenticationPrincipal LoginVO loginVO,
+ SetCommitteeCodeManagementVO setCommitteeCodeManagementVO,
+ @PathVariable("orgId") Long orgId
+ ) throws Exception {
+ ResultVO resultVO = new ResultVO();
+
+ try {
+ resultVO = adminCommitteeCodeManagementService.setCommitteeCodeManagement(resultVO, request, loginVO, setCommitteeCodeManagementVO, orgId);
+ } 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/entity/TnCmtDraft.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/committee/entity/TnCmtDraft.java
new file mode 100644
index 0000000..22e0205
--- /dev/null
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/committee/entity/TnCmtDraft.java
@@ -0,0 +1,39 @@
+package com.dbnt.kcscbackend.admin.config.entity;
+
+import lombok.*;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.persistence.*;
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Getter
+@Setter
+@Entity
+@NoArgsConstructor
+@DynamicInsert
+@DynamicUpdate
+@Table(name = "tb_menu_role")
+@IdClass(TbMenuRole.TbMenuRoleId.class)
+public class TbMenuRole {
+ @Id
+ @Column(name = "role_id")
+ private String roleId;
+ @Id
+ @Column(name = "menu_id")
+ private String menuId;
+ @Column(name = "write_yn")
+ private String writeYn;
+
+ @Embeddable
+ @Data
+ @NoArgsConstructor
+ @AllArgsConstructor
+ public static class TbMenuRoleId implements Serializable {
+ private String roleId;
+ private String menuId;
+ }
+}
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/committee/entity/TnCmtDraftAttend.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/committee/entity/TnCmtDraftAttend.java
new file mode 100644
index 0000000..ef8e53f
--- /dev/null
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/committee/entity/TnCmtDraftAttend.java
@@ -0,0 +1,93 @@
+package com.dbnt.kcscbackend.admin.committee.entity;
+
+import lombok.*;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+
+import javax.persistence.*;
+
+@Getter
+@Setter
+@Entity
+@NoArgsConstructor
+@DynamicInsert
+@DynamicUpdate
+@Table(name = "tn_cmt_draft")
+public class TnCmtDraft {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "drft_seq")
+ private String drftSeq;
+
+ @Column(name = "drft_title")
+ private String drftTitle;
+
+ @Column(name = "doc_info_seq")
+ private String docInfoSeq;
+
+ @Column(name = "drft_type_cd")
+ private String drftTypeCd;
+
+ @Column(name = "drft_dt")
+ private String drftDt;
+
+ @Column(name = "cmt_seq")
+ private String cmtSeq;
+
+ @Column(name = "measure_pre_data_file_grp_id")
+ private String measurePreDataFileGrpId;
+
+ @Column(name = "measure_pre_form_file_grp_id")
+ private String measurePreFormFileGrpId;
+
+ @Column(name = "measure_partner_file_grp_id")
+ private String measurePartnerFileGrpId;
+
+ @Column(name = "drft_confe_charger")
+ private String drftConfeCharger;
+
+ @Column(name = "drft_confe_pw")
+ private String drftConfePw;
+
+ @Column(name = "drft_confe_room")
+ private String drftConfeRoom;
+
+ @Column(name = "drft_stat_cd")
+ private String drftStatCd;
+
+ @Column(name = "drft_summery")
+ private String drftSummery;
+
+ @Column(name = "measure_plan_file_grp_id")
+ private String measurePlanFileGrpId;
+
+ @Column(name = "measure_result_file_grp_id")
+ private String measureResultFileGrpId;
+
+ @Column(name = "start_dt")
+ private String startDt;
+
+ @Column(name = "end_dt")
+ private String endDt;
+
+ @Column(name = "frst_crt_id")
+ private String frstCrtId;
+
+ @Column(name = "frst_crt_dt")
+ private String frstCrtDt;
+
+ @Column(name = "last_chg_id")
+ private String lastChgId;
+
+ @Column(name = "last_chg_dt")
+ private String lastChgDt;
+
+ @Column(name = "use_yn")
+ private String useYn;
+
+ @Column(name = "old_seq")
+ private String oldSeq;
+
+
+}
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/committee/entity/TnCmtDraftDetail.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/committee/entity/TnCmtDraftDetail.java
new file mode 100644
index 0000000..e34f4ef
--- /dev/null
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/committee/entity/TnCmtDraftDetail.java
@@ -0,0 +1,46 @@
+package com.dbnt.kcscbackend.admin.committee.entity;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+
+import javax.persistence.*;
+
+@Getter
+@Setter
+@Entity
+@NoArgsConstructor
+@DynamicInsert
+@DynamicUpdate
+@Table(name = "tn_cmt_draft_attend")
+public class TnCmtDraftAttend {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "drft_atd_seq")
+ private Long drftAtdSeq;
+
+ @Column(name = "drft_seq")
+ private Long drftSeq;
+
+ @Column(name = "drft_final_type")
+ private String drftFinalType;
+
+ @Column(name = "drft_final_comment")
+ private String drftFinalComment;
+
+ @Column(name = "user_id")
+ private String userId;
+
+ @Column(name = "nick_name")
+ private String nickName;
+
+ @Column(name = "write_dt")
+ private String writeDt;
+
+ @Column(name = "drft_file_grp_id")
+ private String drftFileGrpId;
+
+}
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
new file mode 100644
index 0000000..88112ac
--- /dev/null
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/committee/service/AdminCommitteeProgressStatusService.java
@@ -0,0 +1,23 @@
+package com.dbnt.kcscbackend.admin.config.service;
+
+import com.dbnt.kcscbackend.admin.config.model.CreateCommitteeCodeManagementVO;
+import com.dbnt.kcscbackend.admin.config.model.SetCommitteeCodeManagementVO;
+import com.dbnt.kcscbackend.admin.standardResearch.model.CreateStandardResearchVO;
+import com.dbnt.kcscbackend.admin.standardResearch.model.UpdateStandardResearchVO;
+import com.dbnt.kcscbackend.auth.entity.LoginVO;
+import com.dbnt.kcscbackend.config.common.ResultVO;
+import io.swagger.annotations.ApiParam;
+import org.springframework.data.domain.Pageable;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+
+import javax.servlet.http.HttpServletRequest;
+
+public interface AdminCommitteeCodeManagementService {
+ public ResultVO createCommitteeCodeManagement(ResultVO resultVO, HttpServletRequest request, LoginVO user, CreateCommitteeCodeManagementVO createCommitteeCodeManagementVO) throws Exception;
+ public ResultVO getCommitteeCodeManagement(ResultVO resultVO, HttpServletRequest request, LoginVO user, Long upCmtSeq, String cmtType) throws Exception;
+ public ResultVO setCommitteeCodeManagement(ResultVO resultVO, HttpServletRequest request, LoginVO user, SetCommitteeCodeManagementVO setCommitteeCodeManagementVO, Long cmtSeq) throws Exception;
+ public ResultVO deleteCommitteeCodeManagement(ResultVO resultVO, HttpServletRequest request, LoginVO user, Long cmtSeq) 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
new file mode 100644
index 0000000..24a6cbf
--- /dev/null
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/committee/service/impl/AdminCommitteeProgressStatusServiceImpl.java
@@ -0,0 +1,209 @@
+package com.dbnt.kcscbackend.admin.config.service.impl;
+
+import com.dbnt.kcscbackend.admin.config.model.CreateCommitteeCodeManagementVO;
+import com.dbnt.kcscbackend.admin.config.model.SetCommitteeCodeManagementVO;
+import com.dbnt.kcscbackend.admin.config.service.AdminCommitteeCodeManagementService;
+import com.dbnt.kcscbackend.admin.standardResearch.model.CreateStandardResearchVO;
+import com.dbnt.kcscbackend.admin.standardResearch.model.UpdateStandardResearchVO;
+import com.dbnt.kcscbackend.auth.entity.LoginVO;
+import com.dbnt.kcscbackend.commonCode.entity.TnCmtOrg;
+import com.dbnt.kcscbackend.commonCode.repository.TnCmtOrgRepository;
+import com.dbnt.kcscbackend.config.common.ResponseCode;
+import com.dbnt.kcscbackend.config.common.ResultVO;
+import lombok.RequiredArgsConstructor;
+import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import org.egovframe.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+
+import javax.servlet.http.HttpServletRequest;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Service("adminCommitteeCodeManagementService")
+@RequiredArgsConstructor
+public class AdminCommitteeCodeManagementServiceImpl extends EgovAbstractServiceImpl implements AdminCommitteeCodeManagementService {
+
+ private final TnCmtOrgRepository tnCmtOrgRepository;
+
+ @Override
+ public ResultVO createCommitteeCodeManagement(ResultVO resultVO, HttpServletRequest request, LoginVO user, CreateCommitteeCodeManagementVO createCommitteeCodeManagementVO) throws Exception {
+ System.out.println(
+ "\n--------------------------------------------------------------\n" +
+ request.getRequestURI() + " IN:" +
+ "\n--------------------------------------------------------------\n" +
+ "user.getEmail():" + "\n" +
+ user.getEmail() + "\n" +
+ "\n--------------------------------------------------------------\n"
+ );
+
+ // 아래 null로 전달 되는 부분 확인하기.
+ // 유효성 검사 실시
+ if(createCommitteeCodeManagementVO.getParamCodeLevel().trim().isEmpty()) {
+ throw new Exception("오류가 발생했습니다. 시스템 담당자에게 문의 바랍니다. paramCodeLevel is empty.");
+ }
+ Integer upCmtSeq = null;
+ if( createCommitteeCodeManagementVO.getParamOrgId().trim().equals("00") == false ) { // 00은 '중앙건설기술심의' 항목의 부모 sequnce이다. 그러나 DB에 실제 00이란 sequence는 존재하지 않는다.
+ upCmtSeq = Integer.parseInt(createCommitteeCodeManagementVO.getParamOrgId());
+ }
+
+ Map response = tnCmtOrgRepository.spAddTnCmtOrg(
+ createCommitteeCodeManagementVO.getParamOrgNm(), // 위원회 이름
+ createCommitteeCodeManagementVO.getParamCodeLevel(), // 위원회 등급
+ createCommitteeCodeManagementVO.getParamOrgDesc(), // 위원회 설명
+ upCmtSeq, // 상위 위원회 sequence
+ 1, // 정렬 순서
+ user.getId(),
+ null,
+ null,
+ null,
+ null
+ );
+
+ Map dto = new HashMap();
+ dto.put("id", response.get("_cmt_seq") );
+
+ resultVO.setResult(dto);
+ resultVO.setResultCode(ResponseCode.SUCCESS.getCode());
+ resultVO.setResultMessage(ResponseCode.SUCCESS.getMessage());
+
+ return resultVO;
+ }
+
+ @Override
+ public ResultVO getCommitteeCodeManagement(ResultVO resultVO, HttpServletRequest request, LoginVO user, Long upCmtSeq, String cmtType) throws Exception {
+
+ System.out.println(
+ "\n--------------------------------------------------------------\n" +
+ request.getRequestURI() + " IN:" +
+ "\n--------------------------------------------------------------\n" +
+ "user.getEmail():" + "\n" +
+ user.getEmail() + "\n" +
+ "\n--------------------------------------------------------------\n"
+ );
+
+ List