어드민 메뉴 관리, 파티션 관리 추가

This commit is contained in:
Jeon
2023-07-20 10:23:08 +09:00
parent 1b0576a0a6
commit d26b7e28d2
23 changed files with 1858 additions and 4 deletions

View File

@@ -1914,6 +1914,32 @@ textarea:focus{
padding-top: 8px; padding-top: 8px;
} }
.contents .search_check input[type="checkbox"] {
display: none;
}
.contents .search_check input[type="checkbox"] + div > label:first-child {
width: 20px;
height: 30px;
display: block;
background: url(../images/icon-chk-n-square.png) no-repeat center/100% auto;
margin-right: 10px;
}
.contents .search_check input[type="checkbox"]:checked + div > label:first-child {
background: url(../images/icon-chk-square.png) no-repeat center/100% auto;
margin-right: 10px;
}
.contents .search_check .label_group {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
}
@keyframes spScaleAlpha { @keyframes spScaleAlpha {
0% { 0% {
opacity: 1; opacity: 1;

View File

@@ -0,0 +1,292 @@
<template>
<!-- <div class="wrap bg-wrap"> -->
<div>
<div class="dimmed modal20" @click="ModalClose();"></div>
<div class="popup-wrap modal20">
<!-- 메뉴 등록 -->
<div class="popup modal20 popup_form">
<div class="pop-head">
<h3 class="pop-tit" v-if="popType == 'reg'">메뉴 등록</h3>
<h3 class="pop-tit" v-else>메뉴 수정</h3>
</div>
<table>
<tbody>
<tr>
<th>메뉴명</th>
<td>
<input type="text" placeholder="메뉴명 입력" v-model.trim="menuNm" ref="_menuNm">
</td>
</tr>
<tr>
<th>상위메뉴</th>
<td>
<div v:class="select_box">
<select name="" v-model="prntsMenuNo" ref="_prntsMenuNo" v-if="popType == 'reg'">
<option value="">선택</option>
<option v-for="(option, i) in menuCate" v-bind:value="option.menuNo" v-bind:key="i">
{{ option.menuNm }}
</option>
</select>
<select name="" v-model="prntsMenuNo" ref="_prntsMenuNo" disabled v-else>
<option value="">선택</option>
<option v-for="(option, i) in menuCate" v-bind:value="option.menuNo" v-bind:key="i">
{{ option.menuNm }}
</option>
</select>
</div>
</td>
</tr>
<tr>
<th>URL</th>
<td><input type="text" v-model.trim="menuUrl" ref="_menuUrl"></td>
</tr>
<tr v-if="popType == 'modi'">
<th>순번</th>
<td>
<select name="" v-model="menuOdrg" ref="_menuOdrg">
<option value="">선택</option>
<option v-for="i in maxMenuOdrg" v-bind:value="(i)" v-bind:key="i">
{{ (i) }}
</option>
</select>
</td>
</tr>
<tr>
<th class="center">상태</th>
<td>
<input type="radio" name="useYn" value="Y" id="popup_radio1" v-model="useYn" ref="_useYn">
<label for="popup_radio1">사용</label>
<input type="radio" name="useYn" value="N" id="popup_radio2" v-model="useYn">
<label for="popup_radio2">정지</label>
</td>
</tr>
<tr>
<th class="center">그룹</th>
<td><input type="text" placeholder="숫자만 입력" v-model.trim="autchkGrpno" @keypress="onlyNum" @input="onlyNum" maxlength="2"></td>
</tr>
</tbody>
</table>
<div class="popup-btn2">
<button class="btn-pcolor" @click="addMenu" v-if="popType == 'reg'">저장</button>
<button class="btn-pcolor" @click="modiMenu" v-else>수정</button>
<button class="btn-default" @click="ModalClose();">취소</button>
</div>
</div>
</div>
<common-modal ref="commmonSysModal"></common-modal>
</div>
</template>
<script>
import api from '@/service/api';
import sysMgtApi from "../service/sysMgtApi.js";
import commonModal from "../components/commonModal";
import {utils_mixin, chkPattern2} from '../service/mixins';
export default {
name: "menuPop",
mixins: [utils_mixin, chkPattern2],
data() {
return {
row: {},
menuNo: '',
menuNm: '',
menuUrl: '',
prntsMenuNo: '',
menuOdrg: '',
useYn: '',
autchkGrpno: '',
props: {},
menuCate: [],
maxMenuOdrg: 0,
popType: ''
}
},
components: {
commonModal
},
created() {
this.formReset();
},
methods: {
async ModalOpen(param) {
this.formReset();
this.popType = param.popType;
this.row.menuNo = param.menuNo;
var dimmed = document.getElementsByClassName('modal20');
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'block';
}
try {
const response = await sysMgtApi.menuCate(this.row);
const result = response.data;
if (result != null && result.retCode == '0000') {
this.menuCate = result.data.list;
}
} catch(err){
this.row.title = '상위 메뉴 목록 조회 실패';
this.row.msg1 = err;
this.$parent.$refs.alertSysModalOpen.alertSysModalOpen(this.row);
return false;
}
if(this.popType == 'modi'){
this.getMenuDetail();
}
},
ModalClose() {
var dimmed = document.getElementsByClassName('modal20');
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'none';
}
},
async getMenuDetail() {
try {
const response = await sysMgtApi.getMenuDetail(this.row);
const result = response.data;
if (result != null && result.retCode == '0000') {
this.maxMenuOdrg = result.data.data.maxMenuOdrg;
this.menuNm = result.data.data.menuNm;
this.menuNo = result.data.data.menuNo;
this.menuOdrg = result.data.data.menuOdrg;
this.prntsMenuNo = result.data.data.prntsMenuNo;
this.menuUrl = result.data.data.menuUrl;
this.useYn = result.data.data.useYn;
this.autchkGrpno = result.data.data.autchkGrpno;
}
} catch(err){
this.row.title = '상위 메뉴 목록 조회 실패';
this.row.msg1 = err;
this.$parent.$refs.alertSysModalOpen.alertSysModalOpen(this.row);
return false;
}
},
formReset() {
Object.assign(this.$data, this.$options.data());
},
doValidate() {
if (this.isNull(this.menuNm)) {
this.row.title = '메뉴 관리';
this.row.msg1 = '메뉴명을 입력해 주세요.';
this.$refs.commmonSysModal.alertSysModalOpen(this.row);
this.row.focusTaget = '1';
return false;
}
if (this.isNull(this.prntsMenuNo)) {
this.row.title = '메뉴 관리';
this.row.msg1 = '상위 메뉴를 선택해 주세요.';
this.$refs.commmonSysModal.alertSysModalOpen(this.row);
this.row.focusTaget = '2';
return false;
}
if (this.isNull(this.menuUrl)) {
this.row.title = '메뉴 관리';
this.row.msg1 = 'URL을 입력해 주세요.';
this.$refs.commmonSysModal.alertSysModalOpen(this.row);
this.row.focusTaget = '3';
return false;
}
if (this.popType == "modi" && this.isNull(this.menuOdrg)) {
this.row.title = '메뉴 관리';
this.row.msg1 = '순번를 선택해 주세요.';
this.$refs.commmonSysModal.alertSysModalOpen(this.row);
this.row.focusTaget = '4';
return false;
}
if (this.isNull(this.useYn)) {
this.row.title = '메뉴 관리';
this.row.msg1 = '사용 여부를 선택해 주세요.';
this.$refs.commmonSysModal.alertSysModalOpen(this.row);
this.row.focusTaget = '5';
return false;
}
return true;
},
async addMenu() {
if(this.doValidate()){
this.row.menuNm = this.menuNm;
this.row.prntsMenuNo = this.prntsMenuNo;
this.row.menuUrl = this.menuUrl;
this.row.useYn = this.useYn;
this.row.autchkGrpno = this.autchkGrpno;
try {
const response = await sysMgtApi.insertMenu(this.row);
const result = response.data;
if (result != null && result.retCode == '0000') {
this.ModalClose();
this.$parent.getMenuList();
}
} catch(err){
this.row.title = '메뉴 저장 실패';
this.row.msg1 = err;
this.$parent.$refs.alertSysModalOpen.alertSysModalOpen(this.row);
return false;
}
}
},
async modiMenu() {
if(this.doValidate()){
this.row.menuNo = this.menuNo;
this.row.menuNm = this.menuNm;
this.row.menuUrl = this.menuUrl;
this.row.menuOdrg = this.menuOdrg;
this.row.useYn = this.useYn;
this.row.autchkGrpno = this.autchkGrpno;
try {
const response = await sysMgtApi.updateMenu(this.row);
const result = response.data;
if (result != null && result.retCode == '0000') {
this.ModalClose();
this.$parent.getMenuList();
}
} catch(err){
this.row.title = '메뉴 저장 실패';
this.row.msg1 = err;
this.$parent.$refs.alertSysModalOpen.alertSysModalOpen(this.row);
return false;
}
}
},
checkFocus () {
if (this.row.focusTaget === '1') {
this.$refs._menuNm.focus();
} else if (this.row.focusTaget === '2') {
this.$refs._prntsMenuNo.focus();
}else if(this.row.focusTaget === '3'){
this.$refs._menuUrl.focus();
}else if(this.row.focusTaget === '4'){
this.$refs._menuOdrg.focus();
}else if(this.row.focusTaget === '5'){
this.$refs._useYn.focus();
}
}
}
}
</script>

View File

@@ -6,6 +6,8 @@ import BatchList from '../views/BatchList'
import BatchDetail from '../views/BatchDetail' import BatchDetail from '../views/BatchDetail'
import NotiList from '../views/NotiList' import NotiList from '../views/NotiList'
import WorkState from '../views/WorkState' import WorkState from '../views/WorkState'
import PartitionList from '../views/PartitionList'
import MenuList from '../views/MenuList'
export default [ export default [
{ {
@@ -56,6 +58,18 @@ export default [
component: WorkState, component: WorkState,
name: 'workState', name: 'workState',
meta: { public: false } meta: { public: false }
},
{
path: '/sysMgt/partition',
component: PartitionList,
name: 'partitionList',
meta: { public: false }
},
{
path: '/sysMgt/menuList',
component: MenuList,
name: 'menuList',
meta: { public: false }
} }
] ]

View File

@@ -97,6 +97,37 @@ const athMenuList = (params) => {
return httpClient.post('/api/v1/bo/sysMgt/selectAuthMemuListForAddAuth', params, { withCredentials: false }) return httpClient.post('/api/v1/bo/sysMgt/selectAuthMemuListForAddAuth', params, { withCredentials: false })
} }
const partitionCate = (params) => {
return httpClient.post('/api/v1/bo/sysMgt/partitionCate', params, { withCredentials: false })
}
const deletePartition = (params) => {
return httpClient.post('/api/v1/bo/sysMgt/deletePartition', params, { withCredentials: false })
}
const menuList = (params) => {
return httpClient.post('/api/v1/bo/sysMgt/menuList', params, { withCredentials: false })
}
const menuCate = (params) => {
return httpClient.post('/api/v1/bo/sysMgt/menuCate', params, { withCredentials: false })
}
const getMenuDetail = (params) => {
return httpClient.post('/api/v1/bo/sysMgt/menuDetail', params, { withCredentials: false })
}
const insertMenu = (params) => {
return httpClient.post('/api/v1/bo/sysMgt/insertMenu', params, { withCredentials: false })
}
const updateMenu = (params) => {
return httpClient.post('/api/v1/bo/sysMgt/updateMenu', params, { withCredentials: false })
}
const deleteMenu = (params) => {
return httpClient.post('/api/v1/bo/sysMgt/deleteMenu', params, { withCredentials: false })
}
export default { export default {
insertAdmin, insertAdmin,
@@ -119,5 +150,13 @@ export default {
notiList, notiList,
setWorkState, setWorkState,
svcCheckList, svcCheckList,
athMenuList athMenuList,
partitionCate,
deletePartition,
menuList,
menuCate,
getMenuDetail,
insertMenu,
updateMenu,
deleteMenu
} }

View File

@@ -0,0 +1,195 @@
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">메뉴 관리</h3>
<p class="breadcrumb">운영 관리 &gt; 메뉴 관리</p>
</div>
<div class="search_wrap">
<div class="select_box">
<label for="right" class="label">상위 메뉴 </label>
<select name="" id="right" v-model="params.searchText" @change="getMenuList">
<option value="">전체</option>
<option v-for="(option, i) in menuCate" v-bind:value="option.menuNo" v-bind:key="i">
{{ option.menuNm }}
</option>
</select>
</div>
</div>
<div class="info">
<div class="count">
<span>{{ totalCnt }}</span
>
</div>
<div class="button_group">
<button type="button" class="button blue add" @click="menuRegPopOpen">메뉴 추가</button>
</div>
</div>
<div class="table">
<table>
<colgroup>
<col width="10%" />
<col width="15%" />
<col width="15%" />
<col width="5%" />
<col width="5%" />
<col width="17%" />
<col width="5%" />
<col width="13%" />
<col width="15%" />
</colgroup>
<thead>
<tr>
<th>메뉴번호</th>
<th>메뉴명</th>
<th>상위 메뉴명</th>
<th>상태</th>
<th>그룹</th>
<th>URL</th>
<th>메뉴순번</th>
<th>등록일</th>
<th></th>
</tr>
</thead>
<tbody>
<tr v-for="(option, i) in list" v-bind:key="i">
<td>{{ option.menuNo }}</td>
<td>{{ option.menuNm }}</td>
<td>{{ option.prntsMenuNm }}</td>
<td>{{ option.useYn }}</td>
<td>{{ option.autchkGrpno }}</td>
<td>{{ option.menuUrl }}</td>
<td>{{ option.menuOdrg }}</td>
<td>{{ option.regDt }}</td>
<td class="two_btn_group">
<button type="button" class="button grey" @click="menuModiPopOpen(option.menuNo)">수정</button>
<button type="button" class="button white delete" @click="menuDelete(option.menuNo)">삭제</button>
</td>
</tr>
</tbody>
</table>
</div>
<menu-pop ref="menuModal"></menu-pop>
<common-modal ref="commmonModal"></common-modal>
</div>
</div>
</template>
<script>
import sysMgtApi from '../service/sysMgtApi.js';
import commonModal from '@/components/modal/commonModal';
import MenuPop from '../components/MenuPop';
export default {
name: 'menuList',
data() {
return {
row: {},
list: [],
menuCate: [],
totalCnt: '',
popParam:{},
params: {
searchText: '',
},
};
},
components: {
commonModal,
MenuPop
},
created() {},
destroyed() {},
mounted() {
this.setMenuCate();
this.getMenuList();
},
methods: {
async getMenuList() {
try {
const response = await sysMgtApi.menuList(this.params);
const result = response.data;
if (result != null && result.retCode == '0000') {
this.list = result.data.list;
this.totalCnt = result.data.list.length;
} else {
this.row.title = '메뉴 관리';
this.row.msg1 = '조회정보가 없습니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
}
} catch (err) {
this.row.title = '메뉴 관리';
this.row.msg1 = '실패 하였습니다.'
this.$refs.commmonModal.alertModalOpen(this.row);
}
},
async setMenuCate() {
try {
const response = await sysMgtApi.menuCate(this.params);
const result = response.data;
if (result != null && result.retCode == '0000') {
this.menuCate = result.data.list;
}
} catch(err){
this.row.title = '상위 메뉴 목록 조회 실패';
this.row.msg1 = err;
this.$parent.$refs.commmonModal.alertModalOpen(this.row);
return false;
}
},
menuRegPopOpen: function () {
this.popParam.popType = 'reg';
this.$refs.menuModal.ModalOpen(this.popParam);
},
menuModiPopOpen: function (menuNo) {
this.popParam.popType = 'modi';
this.popParam.menuNo = menuNo;
this.$refs.menuModal.ModalOpen(this.popParam);
},
ModalOpen: function (target) {},
menuDelete(target) {
const obj = this.list.filter(e => { if(e.menuNo == target) return true; else return false});
if(obj.length < 1) {
this.row = {};
this.row.title = '메뉴 관리';
this.row.msg1 = '삭제 대상이 없습니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
}else{
this.row.menuNo = target;
this.row.title = '메뉴 관리';
this.row.msg1 = obj[0].menuNm + ' 메뉴를 삭제 하시겠습니까?';
this.$refs.commmonModal.confirmModalOpen2(this.row);
}
},
async deleteMenu() {
try {
let response = await sysMgtApi.deleteMenu(this.row);
const result = response.data;
if (result != null && result.retCode == '0000') {
this.getMenuList();
return;
} else {
this.row = {};
this.row.title = '메뉴 관리';
this.row.msg1 = '실패 하였습니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
}
} catch (err) {
this.row = {};
this.row.title = '메뉴 관리';
this.row.msg1 = '실패 하였습니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
}
},
confirmCalbackFnc(props) {
if (props.result) {
this.deleteMenu();
}
},
},
};
</script>

View File

@@ -0,0 +1,219 @@
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">파티션 관리</h3>
<p class="breadcrumb">운영 관리 &gt; 파티션 관리</p>
</div>
<div class="search_wrap">
<div class="select_box">
<label for="right" class="label">테이블 </label>
<select name="" id="right" v-model="searchText" @change="search">
<option value="">전체</option>
<option v-for="(option, i) in partitionCate" v-bind:value="option.tableName" v-bind:key="i">
{{ option.tableName }}
</option>
</select>
</div>
<div class="search_check">
<input type="checkbox" id="right_check" value="Y" v-model="deleteListView" @change="search"/>
<div class="label_group">
<label for="right_check"></label>
<label for="right_check">삭제 대상 목록</label>
</div>
</div>
</div>
<div class="info">
<div class="count">
<span>{{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</span
>
<div class="select_box NumberSe">
<select name="" id="perpage" v-model="perPageCnt" @change="changePerPage()">
<option v-for="option in options" v-bind:value="option.value" v-bind:key="option.value">
{{ option.text }}
</option>
</select>
</div>
</div>
<div class="title" v-if="deleteListView">
3년 경과 삭제 대상 파티션 목록(주의 삭제 복구 불가능)
</div>
<div class="button_group">
<button type="button" class="button white delete del" @click="rowDelete()" v-if="deleteListView">삭제</button>
</div>
</div>
<div class="table">
<custom-grid
ref="table"
:totalItems="'totalItems'"
:url="grid.url"
:pagePerRows="grid.pagePerRows"
:initialRequest="grid.initialRequest"
:pagination="grid.pagination"
:isCheckbox="grid.isCheckbox"
:columns="grid.columns"
:noDataStr="grid.noDataStr"
:addCls="grid.addCls"
:header="grid.headder"
></custom-grid>
</div>
<common-modal ref="commmonModal"></common-modal>
</div>
</div>
</template>
<script>
import customGrid from '@/components/CustomGrid';
import commonModal from '@/components/modal/commonModal';
import sysMgtApi from '../service/sysMgtApi.js';
export default {
name: 'partitionList',
data() {
return {
isFocused: false,
row: {},
totalItems: 0,
// 테이블 리스트 데이터
perPageCnt: 50,
options: [
{ text: '20', value: 20 },
{ text: '50', value: 50 },
{ text: '100', value: 100 },
],
partitionCate: [],
searchText: '',
deleteListView:false,
grid: {
url: '/api/v1/bo/sysMgt/partitionList',
pagePerRows: 50,
pagination: true,
isCheckbox: true, // true:첫번째 컬럼 앞에 체크박스 생성 / false:체크박스 제거
initialRequest: false,
addCls: 'box_OFvis',
columns: [
{ name: 'no', header: 'No', align: 'center', width: '6%' },
{ name: 'tableName', header: '테이블명', align: 'center', width: '25%' },
{ name: 'partitionName', header: '파티션명', align: 'center', width: '30%' },
{ name: 'partitionExp', header: '분할비교대상', align: 'center', width: '15%' },
{ name: 'partitionDesc', header: '분할비교대값', align: 'center', width: '20%' },
{ name: 'partitionOrdPos', header: '분할순번', align: 'center', width: '10%' },
],
noDataStr: '검색 결과가 없습니다.',
params: {
searchText: '',
},
excelHeader: [],
},
};
},
components: {
customGrid: customGrid,
commonModal
},
created() {
},
destroyed() {},
mounted() {
this.setPartitionCate();
let page = 1;
// 페이지 정보 및 검색 조건
const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
// store에 저장된 페이지 정보 및 검색 조건을 불러오기
let isKeep = false;
/*
if (getCondition) {
this.grid.pagePerRows = getCondition.perPage;
this.grid.params = getCondition.params;
page = getCondition.page;
isKeep = true;
}
*/
this.grid.pagePerRows = 50;
page = 1;
this.search(isKeep);
},
methods: {
search: function (isKeep) {
this.grid.params.searchText = this.searchText;
this.grid.params.deleteListView = this.deleteListView;
this.$refs.table.search(this.grid.params, isKeep);
this.sendStoreData();
},
sendStoreData: function () {
const getP = this.$refs.table.getPagination();
this.$store.commit('searchcondition/updateSearchCondition', {
page: getP._currentPage,
perPage: this.perPageCnt,
params: this.grid.params,
});
const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
},
async setPartitionCate() {
try {
const response = await sysMgtApi.partitionCate(this.params);
const result = response.data;
if (result != null && result.retCode == '0000') {
this.partitionCate = result.data.list;
}
} catch(err){
this.row.title = '파티션 목록 조회 실패';
this.row.msg1 = err;
this.$parent.$refs.commmonModal.alertModalOpen(this.row);
return false;
}
},
rowDelete() {
var chkList = this.$refs.table.checkedElementDatas();
if (chkList.length == 0) {
this.row.title = '파티션 관리';
this.row.msg1 = '삭제대상을 체크 해주세요.';
this.$refs.commmonModal.alertModalOpen(this.row);
return false;
}else{
const param = chkList.map((row) => ({ partitionName: row.partitionName, tableName: row.tableName }));
this.row.list = param;
this.row.title = '파티션 관리';
this.row.msg1 = '삭제 하시겠습니까?';
this.$refs.commmonModal.confirmModalOpen2(this.row);
}
},
async deleteRow() {
try {
let response = await sysMgtApi.deletePartition(this.row);
const result = response.data;
if (result != null && result.retCode == '0000') {
this.$refs.table.reloadData();
return;
}
this.row.title = '파티션 관리';
this.row.msg1 = '실패 하였습니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
} catch (err) {
this.row.title = '파티션 관리';
this.row.msg1 = '실패 하였습니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
}
},
confirmCalbackFnc(props) {
if (props.result) {
this.deleteRow();
}
},
changePerPage: function () {
// 페이지당 조회할 개수
this.grid.pagePerRows = this.perPageCnt;
}
}
};
</script>

View File

@@ -177,6 +177,8 @@ router.beforeEach((to, from, next) => {
nextUrl == '/sysMgt/authAdd' || nextUrl == '/sysMgt/authAdd' ||
nextUrl == '/sysMgt/authModify' || nextUrl == '/sysMgt/authModify' ||
nextUrl == '/sysMgt/authModify' || nextUrl == '/sysMgt/authModify' ||
nextUrl == '/sysMgt/partition' ||
nextUrl == '/sysMgt/menuList' ||
nextUrl.indexOf('/sysMgt/batchDetail') > -1 nextUrl.indexOf('/sysMgt/batchDetail') > -1
) { ) {
for (var i = 0; i < menuUrls.length; i++) { for (var i = 0; i < menuUrls.length; i++) {

View File

@@ -507,7 +507,176 @@ public class SysMgtController {
return sysService.selectAuthMemuListForAddAuth(); return sysService.selectAuthMemuListForAddAuth();
} }
/**
* date : 2023. 7. 18.
* auth : Jeon
* desc : 삭제 대상(3년 경과) 파티션 목록 조회
* @param partitionListReqDto
* @param bindingResult
* @param response
* @return
*/
@ApiOperation(value = "partitionList", notes = "파티션 목록 조회")
@ApiResponses({ @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") })
@RequestMapping(value = "/partitionList", method = { RequestMethod.POST })
@ResponseBody
public PartitionListResDto partitionList(@RequestBody @Valid PartitionListReqDto partitionListReqDto, BindingResult bindingResult, HttpServletResponse response) {
if (validComponents.validParameter(bindingResult)) {
return new PartitionListResDto(ApiResponseCode.CM_PARAMETER_ERROR);
}
return sysService.partitionList(partitionListReqDto);
}
/**
* date : 2023. 7. 18.
* auth : Jeon
* desc : 삭제 대상(3년 경과) 파티션 조회를 위한 테이블 명의 카테고리(조회용 셀렉트 박스)
* @return
*/
@ApiOperation(value = "partitionCate", notes = "파티션 테이블 목록 조회")
@ApiResponses({ @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") })
@RequestMapping(value = "/partitionCate", method = { RequestMethod.POST })
@ResponseBody
public PartitionListResDto partitionCate() {
return sysService.partitionCate();
}
/**
* date : 2023. 7. 18.
* auth : Jeon
* desc : 삭제 대상(3년 경과) 파티션 삭제 실행
* @param deletePartitionReqDto
* @param bindingResult
* @return
*/
@ApiOperation(value = "deletePartition", notes = "관리자 삭제")
@ApiResponses({ @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") })
@RequestMapping(value = "/deletePartition", method = { RequestMethod.POST })
@ResponseBody
public DeletePartitionResDto deletePartition(@RequestBody @Valid DeletePartitionReqDto deletePartitionReqDto,
BindingResult bindingResult) {
if (validComponents.validParameter(bindingResult)) {
return new DeletePartitionResDto(ApiResponseCode.CM_PARAMETER_ERROR);
}
return sysService.deletePartition(deletePartitionReqDto);
}
/**
* date : 2023. 7. 18.
* auth : Jeon
* desc : 메뉴 목록
* @param menuListReqDto
* @param bindingResult
* @param response
* @return
*/
@ApiOperation(value = "menuList", notes = "메뉴 목록 조회")
@ApiResponses({ @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") })
@RequestMapping(value = "/menuList", method = { RequestMethod.POST })
@ResponseBody
public MenuListResDto menuList(@RequestBody @Valid MenuListReqDto menuListReqDto, BindingResult bindingResult, HttpServletResponse response) {
if (validComponents.validParameter(bindingResult)) {
return new MenuListResDto(ApiResponseCode.CM_PARAMETER_ERROR);
}
return sysService.menuList(menuListReqDto);
}
/**
* date : 2023. 7. 18.
* auth : Jeon
* desc : 상위 메뉴 목록
* @return
*/
@ApiOperation(value = "menuCate", notes = "메뉴 상위 목록")
@ApiResponses({ @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") })
@RequestMapping(value = "/menuCate", method = { RequestMethod.POST })
@ResponseBody
public MenuListResDto menuCate() {
return sysService.menuCate();
}
/**
* date : 2023. 7. 18.
* auth : Jeon
* desc : 메뉴 상세
* @param menuListReqDto
* @param bindingResult
* @param response
* @return
*/
@ApiOperation(value = "menuDetail", notes = "메뉴 상위 목록")
@ApiResponses({ @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") })
@RequestMapping(value = "/menuDetail", method = { RequestMethod.POST })
@ResponseBody
public MenuListResDto menuDetail(@RequestBody @Valid MenuListReqDto menuListReqDto, BindingResult bindingResult, HttpServletResponse response) {
if (validComponents.validParameter(bindingResult)) {
return new MenuListResDto(ApiResponseCode.CM_PARAMETER_ERROR);
}
return sysService.menuDetail(menuListReqDto);
}
/**
* date : 2023. 7. 18.
* auth : Jeon
* desc : 메뉴 입력
* @param menuListReqDto
* @param bindingResult
* @param response
* @return
*/
@ApiOperation(value = "insertMenu", notes = "메뉴 상위 목록")
@ApiResponses({ @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") })
@RequestMapping(value = "/insertMenu", method = { RequestMethod.POST })
@ResponseBody
public MenuListResDto insertMenu(@RequestBody @Valid MenuListReqDto menuListReqDto, BindingResult bindingResult, HttpServletResponse response) {
if (validComponents.validParameter(bindingResult)) {
return new MenuListResDto(ApiResponseCode.CM_PARAMETER_ERROR);
}
return sysService.insertMenu(menuListReqDto);
}
/**
* date : 2023. 7. 18.
* auth : Jeon
* desc : 메뉴 삭제
* @param menuListReqDto
* @param bindingResult
* @param response
* @return
*/
@ApiOperation(value = "deleteMenu", notes = "메뉴 상위 목록")
@ApiResponses({ @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") })
@RequestMapping(value = "/deleteMenu", method = { RequestMethod.POST })
@ResponseBody
public MenuListResDto deleteMenu(@RequestBody @Valid MenuListReqDto menuListReqDto, BindingResult bindingResult, HttpServletResponse response) {
if (validComponents.validParameter(bindingResult)) {
return new MenuListResDto(ApiResponseCode.CM_PARAMETER_ERROR);
}
return sysService.deleteMenu(menuListReqDto);
}
/**
* date : 2023. 7. 18.
* auth : Jeon
* desc : 메뉴 수정
* @param menuListReqDto
* @param bindingResult
* @param response
* @return
*/
@ApiOperation(value = "updateMenu", notes = "메뉴 상위 목록")
@ApiResponses({ @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") })
@RequestMapping(value = "/updateMenu", method = { RequestMethod.POST })
@ResponseBody
public MenuListResDto updateMenu(@RequestBody @Valid MenuListReqDto menuListReqDto, BindingResult bindingResult, HttpServletResponse response) {
if (validComponents.validParameter(bindingResult)) {
return new MenuListResDto(ApiResponseCode.CM_PARAMETER_ERROR);
}
return sysService.updateMenu(menuListReqDto);
}
} }

View File

@@ -64,5 +64,34 @@ public interface SysMgtMapper {
List<AuthMenuUpper> selectAuthMemuUpperList(); //권한 추가를 위한 메뉴 조회 List<AuthMenuUpper> selectAuthMemuUpperList(); //권한 추가를 위한 메뉴 조회
List<AuthMenu> selectAuthMemuChdList(AuthMenuUpper authMenuUpper); //권한 추가를 위한 메뉴 조회 List<AuthMenu> selectAuthMemuChdList(AuthMenuUpper authMenuUpper); //권한 추가를 위한 메뉴 조회
int selectPartitionTotalCnt(PartitionListReqDto partitionListReqDto);
List<Partition> selectPartitionList(PartitionListReqDto partitionListReqDto);
List<Partition> selectPartitionCate();
DeletePartition selectDeletePartition(DeletePartition deletePartition);
int deletePartition(DeletePartition deletePartition);
int selectMenuTotalCnt(MenuListReqDto menuListReqDto);
List<Menu> selectMenuList(MenuListReqDto menuListReqDto);
List<Menu> selectMenuCate();
Menu selectMenuDetail(MenuListReqDto menuListReqDto);
int insertMenu(MenuListReqDto menuListReqDto);
String getMenuNo();
int deleteMenu(MenuListReqDto menuListReqDto);
int updateMenuOdrg(MenuListReqDto menuListReqDto);
int updateMenu(MenuListReqDto menuListReqDto);
int deleteAuthMenuFromMenu(MenuListReqDto menuListReqDto);
} }

View File

@@ -6,6 +6,7 @@ import kr.co.uplus.ez.api.homeMgt.dto.NoticeListReqDto;
import kr.co.uplus.ez.api.sysMgt.dto.*; import kr.co.uplus.ez.api.sysMgt.dto.*;
import kr.co.uplus.ez.common.data.ApiResponseCode; import kr.co.uplus.ez.common.data.ApiResponseCode;
import kr.co.uplus.ez.common.data.Paging; import kr.co.uplus.ez.common.data.Paging;
import kr.co.uplus.ez.common.data.UserAuthCode;
import kr.co.uplus.ez.common.utils.EncryptionUtil; import kr.co.uplus.ez.common.utils.EncryptionUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -18,6 +19,8 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource; import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource; import org.springframework.core.io.UrlResource;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.io.BufferedReader; import java.io.BufferedReader;
@@ -792,4 +795,279 @@ public class SysMgtService {
return new AuthMenuResDto(ApiResponseCode.SUCCESS, authMenuData); return new AuthMenuResDto(ApiResponseCode.SUCCESS, authMenuData);
} }
/**
* date : 2023. 7. 18.
* auth : Jeon
* desc : 삭제 대상(3년 경과) 파티션 목록 조회
* @param partitionListReqDto
* @return
*/
public PartitionListResDto partitionList(PartitionListReqDto partitionListReqDto) {
SysMgtMapper sysMgtMapper = sqlSessionSlave.getMapper(SysMgtMapper.class);
String nowPage = String.valueOf(partitionListReqDto.getPage());
int totalCnt = sysMgtMapper.selectPartitionTotalCnt(partitionListReqDto);
if(totalCnt == 0) {
Paging paging = new Paging();
paging.setPage(nowPage);
paging.setTotalCnt(String.valueOf(totalCnt));
PartitionListRes partitionListRes = new PartitionListRes();
partitionListRes.setList(new ArrayList<>());
partitionListRes.setPaging(paging);
return new PartitionListResDto(ApiResponseCode.CM_NOT_FOUND, partitionListRes);
}
int page = partitionListReqDto.getPage();
int pagePerRows = partitionListReqDto.getPagePerRows();
page = (page -1) * pagePerRows;
partitionListReqDto.setPage(page);
List<Partition> partitions = sysMgtMapper.selectPartitionList(partitionListReqDto);
Paging paging = new Paging();
paging.setPage(nowPage);
paging.setTotalCnt(String.valueOf(totalCnt));
PartitionListRes partitionListRes = new PartitionListRes();
partitionListRes.setList(partitions);
partitionListRes.setPaging(paging);
return new PartitionListResDto(ApiResponseCode.SUCCESS, partitionListRes);
}
/**
* date : 2023. 7. 18.
* auth : Jeon
* desc : 삭제 대상(3년 경과) 파티션 조회를 위한 테이블 명의 카테고리(조회용 셀렉트 박스)
* @return
*/
public PartitionListResDto partitionCate() {
SysMgtMapper sysMgtMapper = sqlSessionSlave.getMapper(SysMgtMapper.class);
List<Partition> partitions = sysMgtMapper.selectPartitionCate();
PartitionListRes partitionListRes = new PartitionListRes();
partitionListRes.setList(partitions);
return new PartitionListResDto(ApiResponseCode.SUCCESS, partitionListRes);
}
/**
* date : 2023. 7. 18.
* auth : Jeon
* desc : 삭제 대상(3년 경과) 파티션 삭제 실행
* @param deletePartitionReqDto
* @return
*/
public DeletePartitionResDto deletePartition(DeletePartitionReqDto deletePartitionReqDto) {
SysMgtMapper sysMgtMapper = sqlSessionMaster.getMapper(SysMgtMapper.class);
try {
if(deletePartitionReqDto.getList() == null || deletePartitionReqDto.getList().size() == 0) {
return new DeletePartitionResDto(ApiResponseCode.CM_MISSING_REQUIRED);
}
for(DeletePartition partition : deletePartitionReqDto.getList()) {
DeletePartition target = sysMgtMapper.selectDeletePartition(partition);
if(target == null) {
return new DeletePartitionResDto(ApiResponseCode.CM_NOT_FOUND);
}
sysMgtMapper.deletePartition(target);
}
} catch (Exception e) {
return new DeletePartitionResDto(ApiResponseCode.CM_DB_QUERY_ERR);
}
DeletePartitionResDto result = new DeletePartitionResDto(ApiResponseCode.SUCCESS);
return result;
}
/**
* date : 2023. 7. 18.
* auth : Jeon
* desc : 메뉴 목록
* @param menuListReqDto
* @return
*/
public MenuListResDto menuList(MenuListReqDto menuListReqDto) {
SysMgtMapper sysMgtMapper = sqlSessionSlave.getMapper(SysMgtMapper.class);
int totalCnt = sysMgtMapper.selectMenuTotalCnt(menuListReqDto);
if(totalCnt == 0) {
MenuListRes menuListRes = new MenuListRes();
menuListRes.setList(new ArrayList<>());
return new MenuListResDto(ApiResponseCode.CM_NOT_FOUND, menuListRes);
}
List<Menu> menus = sysMgtMapper.selectMenuList(menuListReqDto);
MenuListRes menuListRes = new MenuListRes();
menuListRes.setList(menus);
menuListRes.setTotalCnt(totalCnt);
return new MenuListResDto(ApiResponseCode.SUCCESS, menuListRes);
}
/**
* date : 2023. 7. 18.
* auth : Jeon
* desc : 상위 메뉴 목록
* @return
*/
public MenuListResDto menuCate() {
SysMgtMapper sysMgtMapper = sqlSessionSlave.getMapper(SysMgtMapper.class);
List<Menu> menus = sysMgtMapper.selectMenuCate();
MenuListRes menuListRes = new MenuListRes();
menuListRes.setList(menus);
return new MenuListResDto(ApiResponseCode.SUCCESS, menuListRes);
}
/**
* date : 2023. 7. 18.
* auth : Jeon
* desc : 메뉴 상세(수정 시 사용)
* @param menuListReqDto
* @return
*/
public MenuListResDto menuDetail(MenuListReqDto menuListReqDto) {
SysMgtMapper sysMgtMapper = sqlSessionSlave.getMapper(SysMgtMapper.class);
Menu menu = sysMgtMapper.selectMenuDetail(menuListReqDto);
MenuListRes menuListRes = new MenuListRes();
menuListRes.setData(menu);
return new MenuListResDto(ApiResponseCode.SUCCESS, menuListRes);
}
/**
* date : 2023. 7. 18.
* auth : Jeon
* desc : 메뉴 입력
* @param menuListReqDto
* @return
*/
public MenuListResDto insertMenu(MenuListReqDto menuListReqDto) {
SysMgtMapper sysMgtMapper = sqlSessionSlave.getMapper(SysMgtMapper.class);
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
UserDetails userDetails = (UserDetails) principal;
menuListReqDto.setRegId(userDetails.getUsername());
menuListReqDto.setChgId(userDetails.getUsername());
String menuNo = sysMgtMapper.getMenuNo();
menuListReqDto.setMenuNo(menuNo);
int result = sysMgtMapper.insertMenu(menuListReqDto);
if(result < 1 ) {
return new MenuListResDto(ApiResponseCode.CM_DB_QUERY_ERR);
}
HashMap<String, Object> authMenuParamMap = new HashMap<String, Object>();
authMenuParamMap.put("authCd", UserAuthCode.SUPER_ADMIN_USER.getValue());
authMenuParamMap.put("regId", menuListReqDto.getRegId());
authMenuParamMap.put("menuNo", menuListReqDto.getMenuNo());
result = sysMgtMapper.insertAuthMenu(authMenuParamMap);
if(result < 1 ) {
return new MenuListResDto(ApiResponseCode.CM_DB_QUERY_ERR);
}
return new MenuListResDto(ApiResponseCode.SUCCESS);
}
/**
* date : 2023. 7. 18.
* auth : Jeon
* desc : 메뉴 삭제
* @param menuListReqDto
* @return
*/
public MenuListResDto deleteMenu(MenuListReqDto menuListReqDto) {
SysMgtMapper sysMgtMapper = sqlSessionSlave.getMapper(SysMgtMapper.class);
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
UserDetails userDetails = (UserDetails) principal;
menuListReqDto.setChgId(userDetails.getUsername());
Menu menu = sysMgtMapper.selectMenuDetail(menuListReqDto);
int result = sysMgtMapper.deleteMenu(menuListReqDto);
if(result < 1 ) {
return new MenuListResDto(ApiResponseCode.CM_DB_QUERY_ERR);
}
menuListReqDto.setPrntsMenuNo(menu.getPrntsMenuNo());
menuListReqDto.setMenuOdrg(menu.getMenuOdrg());
if(!menu.getMenuOdrg().equals(String.valueOf(menu.getMaxMenuOdrg()))) {
result = sysMgtMapper.updateMenuOdrg(menuListReqDto);
if(result < 1 ) {
return new MenuListResDto(ApiResponseCode.CM_DB_QUERY_ERR);
}
}
sysMgtMapper.deleteAuthMenuFromMenu(menuListReqDto);
return new MenuListResDto(ApiResponseCode.SUCCESS);
}
/**
* date : 2023. 7. 18.
* auth : Jeon
* desc : 메뉴 수정
* @param menuListReqDto
* @return
*/
public MenuListResDto updateMenu(MenuListReqDto menuListReqDto) {
SysMgtMapper sysMgtMapper = sqlSessionSlave.getMapper(SysMgtMapper.class);
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
UserDetails userDetails = (UserDetails) principal;
menuListReqDto.setChgId(userDetails.getUsername());
Menu menu = sysMgtMapper.selectMenuDetail(menuListReqDto);
menuListReqDto.setPrntsMenuNo(menu.getPrntsMenuNo());
menuListReqDto.setOldMenuOdrg(menu.getMenuOdrg());
int result = 0;
if(!(menuListReqDto.getMenuOdrg().equals(menuListReqDto.getOldMenuOdrg()))) {
result = sysMgtMapper.updateMenuOdrg(menuListReqDto);
if(result < 1 ) {
return new MenuListResDto(ApiResponseCode.CM_DB_QUERY_ERR);
}
}
result = sysMgtMapper.updateMenu(menuListReqDto);
if(result < 1 ) {
return new MenuListResDto(ApiResponseCode.CM_DB_QUERY_ERR);
}
return new MenuListResDto(ApiResponseCode.SUCCESS);
}
} }

View File

@@ -0,0 +1,23 @@
package kr.co.uplus.ez.api.sysMgt.dto;
import java.io.Serializable;
import javax.validation.constraints.NotNull;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@SuppressWarnings("serial")
@Data
public class DeletePartition implements Serializable {
@ApiModelProperty(example = "테이블명", name = "테이블명", dataType = "String")
private String tableName;
@ApiModelProperty(example = "테이블스키마", name = "테이블스키마", dataType = "String")
private String tableSchema;
@NotNull
@ApiModelProperty(example = "파티션명", name = "파티션명", dataType = "String")
private String partitionName;
}

View File

@@ -0,0 +1,15 @@
package kr.co.uplus.ez.api.sysMgt.dto;
import java.io.Serializable;
import java.util.List;
import lombok.Data;
@SuppressWarnings("serial")
@Data
public class DeletePartitionReqDto implements Serializable {
// 삭제 대상 List.
private List<DeletePartition> list;
}

View File

@@ -0,0 +1,31 @@
package kr.co.uplus.ez.api.sysMgt.dto;
import java.io.Serializable;
import kr.co.uplus.ez.common.data.ApiResponseCode;
import kr.co.uplus.ez.common.data.ResponseMessage;
import lombok.Data;
@SuppressWarnings("serial")
@Data
public class DeletePartitionResDto extends ResponseMessage implements Serializable{
// 데이터.
private Object data;
public DeletePartitionResDto() {
this.retCode = ApiResponseCode.SUCCESS.getResultCode();
this.retMsg = ApiResponseCode.SUCCESS.getResultMsg();
}
public DeletePartitionResDto(ApiResponseCode returnStr) {
this.retCode = returnStr.getResultCode();
this.retMsg = returnStr.getResultMsg();
}
public DeletePartitionResDto(ApiResponseCode returnStr, Object data) {
this.retCode = returnStr.getResultCode();
this.retMsg = returnStr.getResultMsg();
this.data = data;
}
}

View File

@@ -0,0 +1,32 @@
package kr.co.uplus.ez.api.sysMgt.dto;
import java.io.Serializable;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@SuppressWarnings("serial")
@Data
public class Menu implements Serializable {
@ApiModelProperty(example = "메뉴번호", name = "메뉴번호", dataType = "String")
private String menuNo;
@ApiModelProperty(example = "메뉴명", name = "메뉴명", dataType = "String")
private String menuNm;
@ApiModelProperty(example = "상위 메뉴명", name = "상위 메뉴명", dataType = "String")
private String prntsMenuNm;
@ApiModelProperty(example = "상위 메뉴번호", name = "상위 메뉴번호", dataType = "String")
private String prntsMenuNo;
@ApiModelProperty(example = "URL", name = "URL", dataType = "String")
private String menuUrl;
@ApiModelProperty(example = "메뉴순번", name = "메뉴순번", dataType = "String")
private String menuOdrg;
@ApiModelProperty(example = "상태", name = "상태", dataType = "String")
private String useYn;
@ApiModelProperty(example = "입력일자", name = "입력일자", dataType = "String")
private String regDt;
@ApiModelProperty(example = "마지막메뉴순번", name = "마지막메뉴순번", dataType = "String")
private int maxMenuOdrg;
@ApiModelProperty(example = "그룹", name = "그룹", dataType = "String")
private String autchkGrpno;
}

View File

@@ -0,0 +1,55 @@
package kr.co.uplus.ez.api.sysMgt.dto;
import java.io.Serializable;
import javax.validation.constraints.NotNull;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@SuppressWarnings("serial")
@Data
public class MenuListReqDto implements Serializable {
@ApiModelProperty(example = "검색값", name = "검색값", dataType = "String")
private String searchText;
@ApiModelProperty(example = "메뉴번호", name = "메뉴번호", dataType = "String")
private String menuNo;
@ApiModelProperty(example = "메뉴명", name = "메뉴명", dataType = "String")
private String menuNm;
@ApiModelProperty(example = "URL", name = "URL", dataType = "String")
private String menuUrl;
@ApiModelProperty(example = "사용여부", name = "사용여부", dataType = "String")
private String useYn;
@ApiModelProperty(example = "상위 메뉴 번호", name = "상위 메뉴 번호", dataType = "String")
private String prntsMenuNo;
@ApiModelProperty(example = "메뉴순번", name = "메뉴순번", dataType = "String")
private String menuOdrg;
@ApiModelProperty(example = "변경전 메뉴순번", name = "변경전 메뉴순번", dataType = "String")
private String oldMenuOdrg;
@ApiModelProperty(example = "그룹", name = "그룹", dataType = "String")
private String autchkGrpno;
@ApiModelProperty(example = "입력자", name = "입력자", dataType = "String")
private String regId;
@ApiModelProperty(example = "수정자", name = "수정자", dataType = "String")
private String chgId;
@NotNull
@ApiModelProperty(example = "페이지당 조회할 목록 수",notes = "페이지당 조회할 목록 수", name = "페이지당 조회할 목록 수", dataType = "int")
private int pagePerRows;
@NotNull
@ApiModelProperty(example = "현재 페이지", name = "현재 페이지", dataType = "int")
private int page;
}

View File

@@ -0,0 +1,16 @@
package kr.co.uplus.ez.api.sysMgt.dto;
import java.io.Serializable;
import java.util.List;
import kr.co.uplus.ez.common.data.Paging;
import lombok.Data;
@SuppressWarnings("serial")
@Data
public class MenuListRes implements Serializable{
private int totalCnt;
private List<Menu> list;
private Menu data;
}

View File

@@ -0,0 +1,31 @@
package kr.co.uplus.ez.api.sysMgt.dto;
import java.io.Serializable;
import kr.co.uplus.ez.common.data.ApiResponseCode;
import kr.co.uplus.ez.common.data.ResponseMessage;
import lombok.Data;
@SuppressWarnings("serial")
@Data
public class MenuListResDto extends ResponseMessage implements Serializable{
// 데이터.
private MenuListRes data;
public MenuListResDto() {
this.retCode = ApiResponseCode.SUCCESS.getResultCode();
this.retMsg = ApiResponseCode.SUCCESS.getResultMsg();
}
public MenuListResDto(ApiResponseCode returnStr) {
this.retCode = returnStr.getResultCode();
this.retMsg = returnStr.getResultMsg();
}
public MenuListResDto(ApiResponseCode returnStr, MenuListRes data) {
this.retCode = returnStr.getResultCode();
this.retMsg = returnStr.getResultMsg();
this.data = data;
}
}

View File

@@ -0,0 +1,25 @@
package kr.co.uplus.ez.api.sysMgt.dto;
import java.io.Serializable;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@SuppressWarnings("serial")
@Data
public class Partition implements Serializable {
@ApiModelProperty(example = "리스트번호", name = "리스트번호", dataType = "String")
private Integer no;
@ApiModelProperty(example = "테이블명", name = "테이블명", dataType = "String")
private String tableName;
@ApiModelProperty(example = "파티션명", name = "파티션명", dataType = "String")
private String partitionName;
@ApiModelProperty(example = "분할비교대상", name = "분할비교대상", dataType = "String")
private String partitionExp;
@ApiModelProperty(example = "분할비교값", name = "분할비교값", dataType = "String")
private String partitionDesc;
@ApiModelProperty(example = "분할순번", name = "분할순번", dataType = "String")
private String partitionOrdPos;
}

View File

@@ -0,0 +1,28 @@
package kr.co.uplus.ez.api.sysMgt.dto;
import java.io.Serializable;
import javax.validation.constraints.NotNull;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@SuppressWarnings("serial")
@Data
public class PartitionListReqDto implements Serializable {
@ApiModelProperty(example = "검색값", name = "검색값", dataType = "String")
private String searchText;
@ApiModelProperty(example = "조회 종류", name = "조회 종류", dataType = "String")
private String deleteListView;
@NotNull
@ApiModelProperty(example = "페이지당 조회할 목록 수",notes = "페이지당 조회할 목록 수", name = "페이지당 조회할 목록 수", dataType = "int")
private int pagePerRows;
@NotNull
@ApiModelProperty(example = "현재 페이지", name = "현재 페이지", dataType = "int")
private int page;
}

View File

@@ -0,0 +1,15 @@
package kr.co.uplus.ez.api.sysMgt.dto;
import java.io.Serializable;
import java.util.List;
import kr.co.uplus.ez.common.data.Paging;
import lombok.Data;
@SuppressWarnings("serial")
@Data
public class PartitionListRes implements Serializable{
private Paging paging;
private List<Partition> list;
}

View File

@@ -0,0 +1,31 @@
package kr.co.uplus.ez.api.sysMgt.dto;
import java.io.Serializable;
import kr.co.uplus.ez.common.data.ApiResponseCode;
import kr.co.uplus.ez.common.data.ResponseMessage;
import lombok.Data;
@SuppressWarnings("serial")
@Data
public class PartitionListResDto extends ResponseMessage implements Serializable{
// 데이터.
private PartitionListRes data;
public PartitionListResDto() {
this.retCode = ApiResponseCode.SUCCESS.getResultCode();
this.retMsg = ApiResponseCode.SUCCESS.getResultMsg();
}
public PartitionListResDto(ApiResponseCode returnStr) {
this.retCode = returnStr.getResultCode();
this.retMsg = returnStr.getResultMsg();
}
public PartitionListResDto(ApiResponseCode returnStr, PartitionListRes data) {
this.retCode = returnStr.getResultCode();
this.retMsg = returnStr.getResultMsg();
this.data = data;
}
}

View File

@@ -0,0 +1,30 @@
package kr.co.uplus.ez.common.data;
import java.util.HashMap;
import java.util.Map;
public enum UserAuthCode {
SUPER_ADMIN_USER("1001");
private String value;
private String desc;
private UserAuthCode(String value) {
this.value = value;
}
public String getValue() {
return value;
}
public String getDesc() {
return desc;
}
private static final Map<String, UserAuthCode> lookup = new HashMap<String, UserAuthCode>();
static {
for (UserAuthCode e : UserAuthCode.values()) {
lookup.put(e.getValue(), e);
}
}
public static UserAuthCode find(String value) {
return lookup.get(value);
}
}

View File

@@ -551,4 +551,263 @@
ORDER BY A.MENU_ODRG ASC ORDER BY A.MENU_ODRG ASC
</select> </select>
<select id="selectPartitionTotalCnt" parameterType="kr.co.uplus.ez.api.sysMgt.dto.PartitionListReqDto" resultType="int">
/* sysMgt-mapper.xml(selectPartitionTotalCnt) */
SELECT
COUNT(*)
FROM INFORMATION_SCHEMA.PARTITIONS
<include refid="partitionListCondition"></include>
</select>
<select id="selectPartitionList" parameterType="kr.co.uplus.ez.api.sysMgt.dto.PartitionListReqDto" resultType="kr.co.uplus.ez.api.sysMgt.dto.Partition">
/* sysMgt-mapper.xml(selectPartitionList) */
SELECT
@ROWNUM := @ROWNUM + 1 AS NO
,A.*
FROM(
SELECT
TABLE_NAME
,TABLE_SCHEMA
,PARTITION_NAME
,PARTITION_EXPRESSION AS PARTITION_EXP
,PARTITION_DESCRIPTION AS PARTITION_DESC
,PARTITION_ORDINAL_POSITION AS PARTITION_ORD_POS
FROM INFORMATION_SCHEMA.PARTITIONS
<include refid="partitionListCondition"></include>
LIMIT #{page}, #{pagePerRows}) A,
( SELECT @ROWNUM := #{page} ) AS R
</select>
<sql id="partitionListCondition">
WHERE PARTITION_NAME IS NOT NULL
AND PARTITION_DESCRIPTION IS NOT NULL
AND PARTITION_DESCRIPTION IS NOT NULL
AND (SUBSTRING_INDEX(PARTITION_NAME,'_',-1) REGEXP '^2[0-9]{3}$' OR SUBSTRING_INDEX(PARTITION_NAME,'_',-1) REGEXP '^2[0-9]{3}0[0-9]|^2[0-9]{3}1[0-2]')
<if test="deleteListView == 'true'">
AND STR_TO_DATE(IF(SUBSTRING_INDEX(PARTITION_NAME,'_',-1) REGEXP '^2[0-9]{3}$',CONCAT(SUBSTRING_INDEX(PARTITION_NAME,'_',-1),'0101'),CONCAT(SUBSTRING_INDEX(PARTITION_NAME,'_',-1),'01')),'%Y%m%d') <![CDATA[ < ]]> DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -3 YEAR),'%Y%m%d')
</if>
<if test="searchText != null and searchText != ''">
AND TABLE_NAME = #{searchText}
</if>
</sql>
<select id="selectPartitionCate" resultType="kr.co.uplus.ez.api.sysMgt.dto.Partition">
/* sysMgt-mapper.xml(selectPartitionCate) */
SELECT
TABLE_NAME
FROM INFORMATION_SCHEMA.PARTITIONS
WHERE PARTITION_NAME IS NOT NULL
AND PARTITION_DESCRIPTION IS NOT NULL
AND (SUBSTRING_INDEX(PARTITION_NAME,'_',-1) REGEXP '^2[0-9]{3}$' OR SUBSTRING_INDEX(PARTITION_NAME,'_',-1) REGEXP '^2[0-9]{3}0[0-9]|^2[0-9]{3}1[0-2]')
GROUP BY TABLE_NAME
ORDER BY TABLE_NAME ASC
</select>
<select id="selectDeletePartition" parameterType="kr.co.uplus.ez.api.sysMgt.dto.DeletePartition" resultType="kr.co.uplus.ez.api.sysMgt.dto.DeletePartition">
/* sysMgt-mapper.xml(selectDeletePartition) */
SELECT
TABLE_NAME
,TABLE_SCHEMA
,PARTITION_NAME
FROM INFORMATION_SCHEMA.PARTITIONS
WHERE PARTITION_NAME IS NOT NULL
AND PARTITION_DESCRIPTION IS NOT NULL
AND (SUBSTRING_INDEX(PARTITION_NAME,'_',-1) REGEXP '^2[0-9]{3}$' OR SUBSTRING_INDEX(PARTITION_NAME,'_',-1) REGEXP '^2[0-9]{3}0[0-9]|^2[0-9]{3}1[0-2]')
AND STR_TO_DATE(IF(SUBSTRING_INDEX(PARTITION_NAME,'_',-1) REGEXP '^2[0-9]{3}$',CONCAT(SUBSTRING_INDEX(PARTITION_NAME,'_',-1),'0101'),CONCAT(SUBSTRING_INDEX(PARTITION_NAME,'_',-1),'01')),'%Y%m%d') <![CDATA[ < ]]> DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -3 YEAR),'%Y%m%d')
AND TABLE_NAME = #{tableName}
AND PARTITION_NAME = #{partitionName}
</select>
<update id="deletePartition" parameterType="kr.co.uplus.ez.api.sysMgt.dto.DeletePartition">
/* sysMgt-mapper.xml(deletePartition) */
ALTER TABLE ${tableSchema}.${tableName} DROP PARTITION ${partitionName}
</update>
<select id="selectMenuTotalCnt" parameterType="kr.co.uplus.ez.api.sysMgt.dto.MenuListReqDto" resultType="int">
/* sysMgt-mapper.xml(selectMenuTotalCnt) */
SELECT
COUNT(A.MENU_NO)
FROM hubez_admin.EZ_ADM_MENU A
,(
SELECT
MENU_NO
, MENU_NM
, MENU_ODRG
FROM hubez_admin.EZ_ADM_MENU
WHERE MENU_LVL = '1'
) B
WHERE A.PRNTS_MENU_NO = B.MENU_NO
AND A.MENU_LVL = '2'
<include refid="menuListCondition"></include>
ORDER BY B.MENU_ODRG ASC, A.MENU_ODRG ASC
</select>
<select id="selectMenuList" parameterType="kr.co.uplus.ez.api.sysMgt.dto.MenuListReqDto" resultType="kr.co.uplus.ez.api.sysMgt.dto.Menu">
/* sysMgt-mapper.xml(selectMenuList) */
SELECT
A.*
FROM (
SELECT
A.MENU_NO
,A.MENU_NM
,B.MENU_NM AS PRNTS_MENU_NM
,A.USE_YN
,A.MENU_URL
,A.MENU_ODRG
,A.AUTCHK_GRPNO
,B.MENU_ODRG AS PRNTS_MENU_ODRG
,DATE_FORMAT(A.REG_DT,'%Y-%m-%d %H:%i:%s') AS REG_DT
FROM hubez_admin.EZ_ADM_MENU A
,(
SELECT
MENU_NO
, MENU_NM
, MENU_ODRG
FROM hubez_admin.EZ_ADM_MENU
WHERE MENU_LVL = '1'
) B
WHERE A.PRNTS_MENU_NO = B.MENU_NO
AND A.MENU_LVL = '2'
<include refid="menuListCondition"></include>
) A
ORDER BY A.PRNTS_MENU_ODRG ASC, A.MENU_ODRG ASC
</select>
<sql id="menuListCondition">
<if test="searchText != null and searchText != ''">
AND A.PRNTS_MENU_NO = #{searchText}
</if>
</sql>
<select id="selectMenuCate" resultType="kr.co.uplus.ez.api.sysMgt.dto.Menu">
/* sysMgt-mapper.xml(selectMenuCate) */
SELECT
MENU_NO
, MENU_NM
, MENU_ODRG
FROM hubez_admin.EZ_ADM_MENU
WHERE MENU_LVL = '1'
ORDER BY MENU_ODRG ASC
</select>
<select id="selectMenuDetail" parameterType="kr.co.uplus.ez.api.sysMgt.dto.MenuListReqDto" resultType="kr.co.uplus.ez.api.sysMgt.dto.Menu">
/* sysMgt-mapper.xml(selectMenuDetail) */
SELECT
A.MENU_NO
,A.MENU_NM
,A.MENU_URL
,A.USE_YN
,A.MENU_ODRG
,A.PRNTS_MENU_NO
,A.AUTCHK_GRPNO
,MAX(B.MENU_ODRG) AS MAX_MENU_ODRG
FROM hubez_admin.EZ_ADM_MENU A, hubez_admin.EZ_ADM_MENU B
WHERE A.PRNTS_MENU_NO = B.PRNTS_MENU_NO
AND A.MENU_NO = #{menuNo}
GROUP BY A.MENU_NO
</select>
<select id="getMenuNo" resultType="String">
/* sysMgt-mapper.xml(getMenuNo) */
SELECT (MAX(MENU_NO)+1) AS MENU_NO FROM hubez_admin.EZ_ADM_MENU A
</select>
<insert id="insertMenu" parameterType="kr.co.uplus.ez.api.sysMgt.dto.MenuListReqDto">
/* sysMgt-mapper.xml(insertMenu) */
INSERT INTO hubez_admin.EZ_ADM_MENU
(
MENU_NO
, PRNTS_MENU_NO
, MENU_NM
, MENU_ODRG
, USE_YN
, MENU_LVL
, MENU_URL
<if test="autchkGrpno != null and autchkGrpno != ''">
, AUTCHK_GRPNO
</if>
, REG_ID
, REG_DT
, CHG_ID
, CHG_DT
)
VALUES
(
#{menuNo}
, #{prntsMenuNo}
, #{menuNm}
, (SELECT MAX(MENU_ODRG)+1 FROM hubez_admin.EZ_ADM_MENU A WHERE PRNTS_MENU_NO = #{prntsMenuNo})
, #{useYn}
, 2
, #{menuUrl}
<if test="autchkGrpno != null and autchkGrpno != ''">
, #{autchkGrpno}
</if>
, #{regId}
, NOW()
, #{regId}
, NOW()
)
</insert>
<delete id="deleteMenu" parameterType="kr.co.uplus.ez.api.sysMgt.dto.MenuListReqDto">
/* sysMgt-mapper.xml(deleteMenu) */
DELETE FROM hubez_admin.EZ_ADM_MENU
WHERE MENU_NO = #{menuNo}
</delete>
<delete id="deleteAuthMenuFromMenu" parameterType="kr.co.uplus.ez.api.sysMgt.dto.MenuListReqDto">
/* sysMgt-mapper.xml(deleteAuthMenuFromMenu) */
DELETE FROM hubez_admin.EZ_ADM_AUTMENU
WHERE MENU_NO = #{menuNo}
</delete>
<update id="updateMenuOdrg" parameterType="kr.co.uplus.ez.api.sysMgt.dto.MenuListReqDto">
/* sysMgt-mapper.xml(updateMenuOdrg) */
UPDATE hubez_admin.EZ_ADM_MENU
SET
<choose>
<when test="oldMenuOdrg != null and oldMenuOdrg != ''">
<choose>
<when test="oldMenuOdrg lt menuOdrg">
MENU_ODRG = IF(MENU_ODRG <![CDATA[ <= ]]> #{menuOdrg} AND MENU_ODRG <![CDATA[ > ]]> #{oldMenuOdrg}, MENU_ODRG-1, IF(MENU_ODRG = #{oldMenuOdrg} , #{menuOdrg},MENU_ODRG))
</when>
<when test="oldMenuOdrg gt menuOdrg">
MENU_ODRG = IF(MENU_ODRG <![CDATA[ < ]]> #{oldMenuOdrg} AND MENU_ODRG <![CDATA[ >= ]]> #{menuOdrg}, MENU_ODRG+1, IF(MENU_ODRG = #{oldMenuOdrg} , #{menuOdrg},MENU_ODRG))
</when>
</choose>
</when>
<otherwise>
MENU_ODRG = MENU_ODRG - 1
</otherwise>
</choose>
,CHG_ID = #{chgId}
,CHG_DT = NOW()
WHERE PRNTS_MENU_NO = #{prntsMenuNo}
<if test="!(oldMenuOdrg != null and oldMenuOdrg != '')">
AND MENU_ODRG <![CDATA[ > ]]> #{menuOdrg}
</if>
</update>
<update id="updateMenu" parameterType="kr.co.uplus.ez.api.sysMgt.dto.MenuListReqDto">
/* sysMgt-mapper.xml(updateMenu) */
UPDATE hubez_admin.EZ_ADM_MENU
SET
MENU_NM = #{menuNm}
,MENU_URL = #{menuUrl}
,USE_YN = #{useYn}
<choose>
<when test="autchkGrpno != null and autchkGrpno != ''">
,AUTCHK_GRPNO = #{autchkGrpno}
</when>
<otherwise>
,AUTCHK_GRPNO = null
</otherwise>
</choose>
,CHG_ID = #{chgId}
,CHG_DT = NOW()
WHERE MENU_NO = #{menuNo}
</update>
</mapper> </mapper>