Compare commits

..

No commits in common. "8ea8a97301e45389ada47c3cbc4207aa213b51a4" and "f502ca35240d895efe94fc09d43095555de6c97b" have entirely different histories.

23 changed files with 207 additions and 375 deletions

View File

@ -37,7 +37,7 @@ function SchedulesDetail(props) {
const deleteBoardURL = `/admin/committee/progress-status/${drftSeq}`;
const requestOptions = {
method: "POST",
method: "DELETE",
headers: {
'Content-type': 'application/json',
}

View File

@ -30,9 +30,6 @@ const useStyles = makeStyles(() => ({
}));
const StyledDiv = styled.div`
margin-bottom: 100px;
.f_select.w_250 {
@media only screen and (max-width: 768px) {
width: 100%;
@ -51,13 +48,6 @@ const StyledDiv = styled.div`
margin: 0px;
}
}
.right_col {
position: absolute;
right: 0px;
top: 0px;
text-align: right;
}
`;

View File

@ -9,11 +9,174 @@ import Paper from '@mui/material/Paper';
import ListSubheader from '@mui/material/ListSubheader';
import * as EgovNet from 'api/egovFetch';
import ReferenceCodePopupDialogCotentsHeader from './ReferenceCodePopupDialogCotentsHeader';
import ReferenceCodePopupDialogCotentsListItem from './ReferenceCodePopupDialogCotentsListItem';
const data = [
{
codeTitle: "KDS 10 00 00",
codeName: '설계기준',
depth: 1,
children: [
{
codeTitle: "KDS 10 10 00",
codeName: '공통편',
depth: 2,
children: [
{
codeTitle: "KDS 10 10 00",
codeName: '공통편',
depth: 3,
children: [
{
codeTitle: "KDS 10 00 00",
codeName: '공통 설계기준',
depth: 4,
children: [
]
},
{
codeTitle: "KDS 10 20 00",
codeName: '지반 설계 기준',
depth: 4,
children: [
]
},
{
codeTitle: "KDS 12 00 00",
codeName: '건설측량 설계기준',
depth: 4,
children: [
]
},
{
codeTitle: "KDS 14 00 00",
codeName: '구조 설계기준',
depth: 4,
children: [
]
},
{
codeTitle: "KDS 17 00 00",
codeName: '내진 설계기준',
depth: 4,
children: [
]
},
]
},
{
codeTitle: "KDS 10 20 00",
codeName: '시설물편',
depth: 3,
children: [
{
codeTitle: "TEST 17 00 00",
codeName: 'test',
depth: 4,
children: [
]
},
{
codeTitle: "TEST 17 00 00",
codeName: 'test',
depth: 4,
children: [
]
},
{
codeTitle: "TEST 17 00 00",
codeName: 'test',
depth: 4,
children: [
]
},
{
codeTitle: "TEST 17 00 00",
codeName: 'test',
depth: 4,
children: [
]
},
{
codeTitle: "TEST 17 00 00",
codeName: 'test',
depth: 4,
children: [
]
},
{
codeTitle: "TEST 17 00 00",
codeName: 'test',
depth: 4,
children: [
]
},
{
codeTitle: "TEST 17 00 00",
codeName: 'test',
depth: 4,
children: [
]
},
{
codeTitle: "TEST 17 00 00",
codeName: 'test',
depth: 4,
children: [
]
},
{
codeTitle: "TEST 17 00 00",
codeName: 'test',
depth: 4,
children: [
]
},
{
codeTitle: "TEST 17 00 00",
codeName: 'test',
depth: 4,
children: [
]
},
{
codeTitle: "TEST 17 00 00",
codeName: 'test',
depth: 4,
children: [
]
},
{
codeTitle: "TEST 17 00 00",
codeName: 'test',
depth: 4,
children: [
]
},
]
},
]
},
{
codeTitle: "KDS 10 20 00",
codeName: '시설물편',
depth: 2,
children: [
]
},
]
},
{ codeTitle: "KCS 20 00 00", codeName: '표준시방서', depth: 1, },
{ codeTitle: "SMCS 40 00 00", codeName: '서울시 전문시방서', depth: 1, },
{ codeTitle: "EXCS 50 00 00", codeName: '고속도로공사 전문시방서', depth: 1, },
{ codeTitle: "KRCCS 60 00 00", codeName: '농업생산기반시설 전문시방서', depth: 1, },
];
const FireNav = styled(List)({
'& .MuiListItemButton-root': {
paddingLeft: 0,
@ -31,37 +194,12 @@ const FireNav = styled(List)({
export default function ReferenceCodePopupDialogCotents() {
const [StandardCodeList, setSelectedValue] = React.useState(null);
const [standardCodeList, setStandardCodeList] = React.useState(null);
const [selectedValue, setSelectedValue] = React.useState('a');
const handleChange = (event) => {
setSelectedValue(event.target.value);
};
React.useEffect(function () {
getStandardCodeList();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
const requestOptions = {
method: "GET",
headers: {
'Content-type': 'application/json'
}
}
const getStandardCodeList = () => {
EgovNet.requestFetch(`/admin/committee/progress-status/standard-code-api/list`,
requestOptions,
function (resp) {
console.log('%o', resp);
setStandardCodeList(resp.result.items);
}
);
}
return (
@ -86,21 +224,22 @@ export default function ReferenceCodePopupDialogCotents() {
<FireNav
sx={{ my: 0, }}
component="nav" disablePadding>
<ListItemButton component="a" href="#customized-list">
<ListItemText
sx={{ my: 0 }}
primary="문서번호 또는 코드명을 선택 하시면 하위 문서를 검색 하실 수 있습니다"
primaryTypographyProps={{
backgroundColor: '#fafafa',
backgroundColor: '#ffffff',
color: '#333333',
border: '1px solid #eaeaea',
border: '1px solid #333333',
fontSize: 15,
fontWeight: 'bold',
fontWeight: 'medium',
letterSpacing: 0,
padding: '10px',
borderRadius: '6px',
marginBottom: '20px',
}}
/>
</ListItemButton>
<List
sx={{ width: '100%' }}
@ -122,7 +261,7 @@ export default function ReferenceCodePopupDialogCotents() {
}
>
<ReferenceCodePopupDialogCotentsListItem
data={standardCodeList}
data={data}
/>
</List>

View File

@ -19,7 +19,7 @@ export default function ReferenceCodePopupDialogCotentsHeader() {
fontSize: ' 16px',
display: 'grid',
gridAutoFlow: 'row',
gridTemplateColumns: 'auto 175px 60px',
gridTemplateColumns: 'auto 160px 90px',
gap: 1,
}}

View File

@ -59,10 +59,10 @@ const ItemComponent = (props) => {
}}
>
<Item
sx={{paddingLeft: `${Number(Number(item.docLevel)-1) * 20}px`,}}
sx={{paddingLeft: `${Number(Number(item.depth)-1) * 20}px`,}}
>
{
item.children && 0 < item.children.length
item.children && item.children.length > 0
?
<span>
{
@ -76,17 +76,11 @@ const ItemComponent = (props) => {
:
<span> <InsertDriveFileOutlinedIcon sx={{ color: '#777777', height: '30px;'}} /> </span>
}
&nbsp;{item.groupTitle}
&nbsp;{item.codeTitle}
</Item>
<Item>{item.groupNm}</Item>
<Item>{item.codeName}</Item>
<Item sx={{textAlign: 'center'}}>
{
item.children && 0 < item.children.length
?
<span>-</span>
:
<button type="button" class="btn btn_blue_h31 px-1">선택</button>
}
<button type="button" class="btn btn_blue_h31 px-1">선택</button>
</Item>
</Box>
</ListItemButton>
@ -94,7 +88,6 @@ const ItemComponent = (props) => {
{
item.children &&
item.children.map(function(item, index) {
console.log('thkim 2024-03-21 11:29 %o', item);
return (
<ItemComponent item={item} index={index} openSelf={open} />
);

View File

@ -1,24 +1,12 @@
import React, { useState, useEffect } from 'react';
import { Link, useLocation, useNavigate } from 'react-router-dom';
import styled from "styled-components";
import * as EgovNet from 'api/egovFetch';
import URL from 'constants/url';
import CODE from 'constants/code';
import { default as EgovLeftNav } from 'components/leftmenu/EgovLeftNavAdmin';
const StyledDiv = styled.div`
.right_col {
position: absolute;
right: 0px;
top: 0px;
text-align: right;
}
`;
function SchedulesDetail(props) {
console.group("EgovAdminScheduleDetail");
console.log("[Start] EgovAdminScheduleDetail ------------------------------");
@ -72,7 +60,7 @@ function SchedulesDetail(props) {
const deleteBoardURL = `/schedule/${schdulId}`;
const requestOptions = {
method: "POST",
method: "DELETE",
headers: {
'Content-type': 'application/json',
}
@ -102,7 +90,7 @@ function SchedulesDetail(props) {
console.log("------------------------------EgovAdminScheduleDetail [End]");
console.groupEnd("EgovAdminScheduleDetail");
return (
<StyledDiv className="container">
<div className="container">
<div className="c_wrap">
{/* <!-- Location --> */}
<div className="location">
@ -179,7 +167,7 @@ function SchedulesDetail(props) {
</div>
</div>
</div>
</StyledDiv>
</div>
);
}

View File

@ -31,7 +31,6 @@ const useStyles = makeStyles(() => ({
}));
const StyledDiv = styled.div`
margin-bottom: 70px;
.org-under-id {
margin-left: 20px;
@media only screen and (max-width: 768px) {
@ -52,12 +51,6 @@ const StyledDiv = styled.div`
width: 100%;
}
}
.right_col {
position: absolute;
right: 0px;
top: 0px;
text-align: right;
}
`;
function SchedulesEdit(props) {
@ -259,7 +252,7 @@ function SchedulesEdit(props) {
}
if (formData.get('schdulBgnde') > formData.get('schdulEndde')) {
alert("종료일시는 시작일시보다 앞 설 수 없습니다.");
return false;
//return false;
}
return true;
}
@ -293,7 +286,7 @@ function SchedulesEdit(props) {
const deleteBoardURL = `/schedule/${schdulId}`;
const requestOptions = {
method: "POST",
method: "DELETE",
headers: {
'Content-type': 'application/json',
}

View File

@ -155,7 +155,7 @@ function CommitteeCodeMgt(props) {
}
const requestOptions = {
method: "POST",
method: "DELETE",
headers: {
'Content-type': 'application/json',
}

View File

@ -218,7 +218,7 @@ function PopupEditor(props) {
const deleteBoardURL = `/contents/api/popup-manage/${popupId}`;
const requestOptions = {
method: "POST",
method: "DELETE",
headers: {
'Content-type': 'application/json',
}
@ -247,7 +247,7 @@ function PopupEditor(props) {
const deleteFileURL = `/contents/api/popup-manage/file/${fileSeq}`;
const requestOptions = {
method: "POST",
method: "DELETE",
headers: {
'Content-type': 'application/json',
}

View File

@ -223,7 +223,7 @@ function StandardResearchEditor(props) {
const deleteBoardURL = `/contents/standard-research/${rsId}`;
const requestOptions = {
method: "POST",
method: "DELETE",
headers: {
'Content-type': 'application/json',
}

View File

@ -3650,11 +3650,6 @@ cjs-module-lexer@^1.0.0:
resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz"
integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==
classnames@^2.2.5:
version "2.5.1"
resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b"
integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==
classnames@^2.2.6, classnames@^2.3.2:
version "2.3.2"
resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz"
@ -3909,11 +3904,6 @@ cosmiconfig@^7.0.0:
path-type "^4.0.0"
yaml "^1.10.0"
countup.js@^2.8.0:
version "2.8.0"
resolved "https://registry.yarnpkg.com/countup.js/-/countup.js-2.8.0.tgz#64951f2df3ede28839413d654d8fef28251c32a8"
integrity sha512-f7xEhX0awl4NOElHulrl4XRfKoNH3rB+qfNSZZyjSZhaAoUk6elvhH+MNxMmlmuUJ2/QNTWPSA7U4mNtIAKljQ==
cross-spawn@^7.0.2, cross-spawn@^7.0.3:
version "7.0.3"
resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz"
@ -4630,11 +4620,6 @@ enhanced-resolve@^5.10.0:
graceful-fs "^4.2.4"
tapable "^2.2.0"
enquire.js@^2.1.6:
version "2.1.6"
resolved "https://registry.yarnpkg.com/enquire.js/-/enquire.js-2.1.6.tgz#3e8780c9b8b835084c3f60e166dbc3c2a3c89814"
integrity sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw==
entities@^2.0.0:
version "2.2.0"
resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz"
@ -6890,13 +6875,6 @@ json-stable-stringify-without-jsonify@^1.0.1:
resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz"
integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
json2mq@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/json2mq/-/json2mq-0.2.0.tgz#b637bd3ba9eabe122c83e9720483aeb10d2c904a"
integrity sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==
dependencies:
string-convert "^0.2.0"
json5@^1.0.2:
version "1.0.2"
resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz"
@ -8585,13 +8563,6 @@ react-copy-to-clipboard@^5.1.0:
copy-to-clipboard "^3.3.1"
prop-types "^15.8.1"
react-countup@^6.5.3:
version "6.5.3"
resolved "https://registry.yarnpkg.com/react-countup/-/react-countup-6.5.3.tgz#e892aa3eab2d6ba9c3cdba30bf4ed6764826d848"
integrity sha512-udnqVQitxC7QWADSPDOxVWULkLvKUWrDapn5i53HE4DPRVgs+Y5rr4bo25qEl8jSh+0l2cToJgGMx+clxPM3+w==
dependencies:
countup.js "^2.8.0"
react-csv@^2.2.2:
version "2.2.2"
resolved "https://registry.npmjs.org/react-csv/-/react-csv-2.2.2.tgz"
@ -8810,17 +8781,6 @@ react-scripts@5.0.1:
optionalDependencies:
fsevents "^2.3.2"
react-slick@^0.30.2:
version "0.30.2"
resolved "https://registry.yarnpkg.com/react-slick/-/react-slick-0.30.2.tgz#b28e992f9c519bb516a0af8d37e82cb59fee08ce"
integrity sha512-XvQJi7mRHuiU3b9irsqS9SGIgftIfdV5/tNcURTb5LdIokRA5kIIx3l4rlq2XYHfxcSntXapoRg/GxaVOM1yfg==
dependencies:
classnames "^2.2.5"
enquire.js "^2.1.6"
json2mq "^0.2.0"
lodash.debounce "^4.0.8"
resize-observer-polyfill "^1.5.0"
react-smooth@^2.0.5:
version "2.0.5"
resolved "https://registry.npmjs.org/react-smooth/-/react-smooth-2.0.5.tgz"
@ -9046,11 +9006,6 @@ requires-port@^1.0.0:
resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz"
integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
resize-observer-polyfill@^1.5.0:
version "1.5.1"
resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
resolve-cwd@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz"
@ -9396,11 +9351,6 @@ slash@^4.0.0:
resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz"
integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
slick-carousel@^1.8.1:
version "1.8.1"
resolved "https://registry.yarnpkg.com/slick-carousel/-/slick-carousel-1.8.1.tgz#a4bfb29014887bb66ce528b90bd0cda262cc8f8d"
integrity sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA==
sockjs@^0.3.24:
version "0.3.24"
resolved "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz"
@ -9531,11 +9481,6 @@ stop-iteration-iterator@^1.0.0:
dependencies:
internal-slot "^1.0.4"
string-convert@^0.2.0:
version "0.2.1"
resolved "https://registry.yarnpkg.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97"
integrity sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==
string-length@^4.0.1:
version "4.0.2"
resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz"

View File

@ -112,42 +112,4 @@ public class AdminCommitteeController extends BaseController {
}
@Operation(
summary = "'진행현황 관리' 페이지에서 등록 또는 수정 시 '기준코드' 목록 불러오는 API",
description = "관리자 단에서 '위원회관리' > '진행현황 관리' 페이지에서 하단 '등록' 버튼 누른 후 '기준코드'에서 보여질 기준코드 목록 불러오는 API",
tags = {"AdminCommitteeController"}
)
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "조회 성공")
})
@GetMapping(value = "/progress-status/standard-code-api/list")
public ResultVO getCommitteeProgressStatusStandardCodeApiList(
HttpServletRequest request,
@AuthenticationPrincipal LoginVO user
)
throws Exception {
ResultVO resultVO = new ResultVO();
try {
resultVO = adminCommitteeProgressStatusService.getCommitteeProgressStatusStandardCodeApiList(resultVO, request, user);
} 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;
}
}

View File

@ -146,7 +146,7 @@ public class SchedulesApiController {
@ApiResponse(responseCode = "200", description = "등록 성공"),
@ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
})
@PostMapping(value = "/schedule/{scheduleId}")
@DeleteMapping(value = "/schedule/{scheduleId}")
public ResultVO deleteSchedule
(
@AuthenticationPrincipal LoginVO user,

View File

@ -15,7 +15,5 @@ public interface AdminCommitteeProgressStatusService {
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;
public ResultVO getCommitteeProgressStatusStandardCodeApiList(ResultVO resultVO, HttpServletRequest request, LoginVO user) throws Exception;
}

View File

@ -17,17 +17,12 @@ 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.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
@Service("adminCommitteeProgressStatusService")
@RequiredArgsConstructor
public class AdminCommitteeProgressStatusServiceImpl extends EgovAbstractServiceImpl implements AdminCommitteeProgressStatusService {
@ -197,12 +192,12 @@ public class AdminCommitteeProgressStatusServiceImpl extends EgovAbstractService
@Override
public ResultVO deleteCommitteeProgressStatus(ResultVO resultVO, HttpServletRequest request, LoginVO user, Long cmtSeq) throws Exception {
System.out.println(
"\n--------------------------------------------------------------\n" +
request.getRequestURI() + " IN:" +
"\n--------------------------------------------------------------\n" +
"cmtSeq:" + "\n" +
cmtSeq + "\n" +
"\n--------------------------------------------------------------\n"
"\n--------------------------------------------------------------\n" +
request.getRequestURI() + " IN:" +
"\n--------------------------------------------------------------\n" +
"cmtSeq:" + "\n" +
cmtSeq + "\n" +
"\n--------------------------------------------------------------\n"
);
@ -229,14 +224,14 @@ public class AdminCommitteeProgressStatusServiceImpl extends EgovAbstractService
@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"
"\n--------------------------------------------------------------\n" +
request.getRequestURI() + " IN:" +
"\n--------------------------------------------------------------\n" +
"user.getEmail():" + "\n" +
user.getEmail() + "\n" +
"drftSeq:" + "\n" +
drftSeq + "\n" +
"\n--------------------------------------------------------------\n"
);
Map<String, Object> item = tnCmtDraftRepository.getCommitteeProgressStatusDetail(drftSeq);
@ -250,99 +245,4 @@ public class AdminCommitteeProgressStatusServiceImpl extends EgovAbstractService
return resultVO;
}
@Override
public ResultVO getCommitteeProgressStatusStandardCodeApiList(ResultVO resultVO, HttpServletRequest request, LoginVO user) throws Exception {
System.out.println("\n--------------------------------------------------------------\n" +
request.getRequestURI() + " IN:" +
"\n--------------------------------------------------------------\n" +
"user.getEmail():" + "\n" +
user.getEmail() + "\n" +
"\n--------------------------------------------------------------\n");
long startTime = System.currentTimeMillis();
List<Map<String, Object>> standardCodeList = tnCmtDraftRepository.getCommitteeProgressStatusStandardCodeApiList();
Map<Integer, List<Map<String, Object>>> nodeMap = new HashMap<>();
// nodeMap 초기화
for (int i = 1; i <= 6; i++) {
nodeMap.put(i, new ArrayList<>());
}
// docLevel 별로 데이터 분류
for (Map<String, Object> standardCode : standardCodeList) {
int nDocLevel = (int) standardCode.get("doc_level");
nodeMap.get(nDocLevel).add(standardCode);
}
JSONArray items = buildJsonTree(nodeMap, 1, null); // 재귀 호출 시작 (루트 노드부터)
Map<String, Object> dto = new HashMap<>();
dto.put("items", items);
resultVO.setResult(dto);
resultVO.setResultCode(ResponseCode.SUCCESS.getCode());
resultVO.setResultMessage(ResponseCode.SUCCESS.getMessage());
long endTime = System.currentTimeMillis();
long elapsedTime = endTime - startTime;
System.out.println("처리 시간: " + elapsedTime + "ms");
return resultVO;
}
private JSONArray buildJsonTree(Map<Integer, List<Map<String, Object>>> nodeMap, int docLevel, Integer upperParentgroupSeq) {
JSONArray items = new JSONArray();
List<Map<String, Object>> currentNodes = nodeMap.get(docLevel);
for (Map<String, Object> node : currentNodes) {
Integer groupSeq = (Integer) node.get("group_seq");
Integer parentGroupSeq = (Integer) node.get("parent_group_seq");
JSONObject item = new JSONObject();
if( upperParentgroupSeq == null || upperParentgroupSeq.equals( parentGroupSeq) ) {
String kcscCd = (String)node.get("kcsc_cd");
String groupFullCd = (String) node.get("group_full_cd");
item.put("docLevel", node.get("doc_level"));
item.put("groupTitle", makeCode(kcscCd, groupFullCd, docLevel));
item.put("groupNm", node.get("group_nm"));
item.put("groupSeq", groupSeq);
if (nodeMap.containsKey(docLevel + 1)) { // 자식 노드 존재 여부 확인
item.put("children", buildJsonTree(nodeMap, docLevel + 1, groupSeq)); // 재귀 호출
} else {
item.put("children", new JSONArray());
}
items.add(item);
}
}
return items;
}
private String makeCode(String kcscCd, String groupFullCd, int docLevel) {
if( docLevel < 3 ) {
int codeLength = groupFullCd.length();
String firstWord = kcscCd.split(" ")[0]; // 공백을 기준으로 문자열을 분리하고 첫 번째 요소를 가져옴
if (codeLength == 2) {
return String.format("%s %s %s", firstWord, groupFullCd, "00 00");
} else {
return String.format("%s %s %s", spaceEveryTwoChars(firstWord), groupFullCd, "00");
}
} else {
return kcscCd;
}
}
public static String spaceEveryTwoChars(String input) {
StringBuilder result = new StringBuilder();
for (int i = 0; i < input.length(); i++) {
result.append(input.charAt(i));
if ((i + 1) % 2 == 0 && i != input.length() - 1) { // 짝수 번째 문자이고 마지막 문자가 아닌 경우
result.append(" "); // 띄어쓰기 추가
}
}
return result.toString();
}
}

View File

@ -464,7 +464,7 @@ public class AdminConfigController extends BaseController {
@ApiResponse(responseCode = "200", description = "등록 성공"),
@ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
})
@PostMapping(value = "/committee-code-mgt/{orgId}")
@DeleteMapping(value = "/committee-code-mgt/{orgId}")
public ResultVO deleteSchedule
(
@AuthenticationPrincipal LoginVO user,

View File

@ -167,7 +167,7 @@ public class PopUpApiController {
@ApiResponse(responseCode = "200", description = "등록 성공"),
@ApiResponse(responseCode = "403", description = "인가된 사용자가 아님"),
})
@PostMapping(value = "/contents/api/popup-manage/{popupId}")
@DeleteMapping(value = "/contents/api/popup-manage/{popupId}")
public ResultVO contentsApiPopUpManageDelete
(
@AuthenticationPrincipal LoginVO user,
@ -282,7 +282,7 @@ public class PopUpApiController {
@ApiResponse(responseCode = "200", description = "등록 성공"),
@ApiResponse(responseCode = "403", description = "인가된 사용자가 아님"),
})
@PostMapping(value = "/contents/api/popup-manage/file/{fileSeq}")
@DeleteMapping(value = "/contents/api/popup-manage/file/{fileSeq}")
public ResultVO deleteFileContentsApiPopUpManage
(
@AuthenticationPrincipal LoginVO user,

View File

@ -164,7 +164,7 @@ public class AdminStandardResearchController {
@ApiResponse(responseCode = "200", description = "등록 성공"),
@ApiResponse(responseCode = "403", description = "인가된 사용자가 아님"),
})
@PostMapping(value = "/contents/standard-research/{rsId}")
@DeleteMapping(value = "/contents/standard-research/{rsId}")
public ResultVO contentsStandardResearchDelete
(
@AuthenticationPrincipal LoginVO user,

View File

@ -282,26 +282,4 @@ public interface TnCmtDraftRepository extends JpaRepository<TnCmtDraft, Long> {
);
@Query(value =
"select\n" +
" tdg.group_seq,\n" +
" tdg.kcsc_cd,\n" +
" tdg.group_cur_cd,\n" +
" tdg.group_nm,\n" +
" tdg.group_full_cd,\n" +
" tdg.doc_level,\n" +
" tdg.parent_group_seq\n" +
"from\n" +
" tn_document_group tdg\n" +
" left join tc_code_item tci on tdg.item_cd = tci.item_cd\n" +
"where\n" +
" tdg.use_yn = 'Y' and\n" +
" tdg.item_cd <> '00'\n" +
"order by \n" +
" tdg.group_full_cd\n" +
"limit 10000",
nativeQuery = true)
List<Map<String, Object>> getCommitteeProgressStatusStandardCodeApiList( );
}

View File

@ -5,10 +5,6 @@ Globals.Allow.Origin = http://localhost:3000
spring.devtools.livereload.enabled=true
#Datasource Configuration
spring.sql.init.encoding=utf-8
spring.servlet.multipart.max-file-size=20MB
spring.servlet.multipart.max-request-size=50MB
#maximum-pool-size: CPU core count
spring.datasource.hikari.maximum-pool-size=4
#postgresql

View File

@ -1,44 +0,0 @@
# ??? ? ?? ?? properties ?? ?? ? ?? ??.
# Access-Control-Allow-Origin
Globals.Allow.Origin = https://back.dbnt.co.kr
server.port=50688
spring.devtools.livereload.enabled=false
server.error.path=/errors
logging.level.org.apache.tomcat: info
logging.level.org.apache.catalina: info
spring.servlet.multipart.max-file-size=20MB
spring.servlet.multipart.max-request-size=50MB
#Datasource Configuration
spring.sql.init.encoding=utf-8
#maximum-pool-size: CPU core count
spring.datasource.hikari.maximum-pool-size=4
#postgresql
spring.datasource.driverClassName=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/kcsc
spring.datasource.username=dbnt0031
spring.datasource.password=dbnt0928!
#jpa
spring.jpa.show-sql=false
spring.jpa.generate-ddl=false
spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.properties.hibernate.proc.param_null_passing=true
# MyBatis
mybatis.mapper-locations: mybatisMapper/*.xml
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.type-aliases-package=com.dbnt.kcscbackend.**.entity
logging.level.com.atoz_develop.mybatissample.repository=info
# File Config
Globals.posblAtchFileSize=5242880
Globals.fileStorePath=/kcscUploadFiles
Globals.addedOptions=false
kcsc.opensearch.url=http://192.168.0.89:8090

View File

@ -12,9 +12,6 @@ server.error.path=/errors
logging.level.org.apache.tomcat: info
logging.level.org.apache.catalina: info
spring.servlet.multipart.max-file-size=20MB
spring.servlet.multipart.max-request-size=50MB
#Datasource Configuration
spring.sql.init.encoding=utf-8
#maximum-pool-size: CPU core count

View File

@ -11,9 +11,6 @@ server.error.path=/errors
logging.level.org.apache.tomcat: info
logging.level.org.apache.catalina: info
spring.servlet.multipart.max-file-size=20MB
spring.servlet.multipart.max-request-size=50MB
#Datasource Configuration
spring.sql.init.encoding=utf-8
#maximum-pool-size: CPU core count