From 8dcd9365b67011c17dbb061fae76fc0035ec2029 Mon Sep 17 00:00:00 2001 From: USER Date: Thu, 1 Sep 2022 16:54:21 +0900 Subject: [PATCH] =?UTF-8?q?=EC=88=98=EC=A0=95=EA=B1=B4=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/modules/calculate/views/CalcList.vue | 3 +- .../modules/channelMgt/views/TmpltList.vue | 2 +- .../custMgt/components/MemberBulkRegPop.vue | 82 +++++++++++++++++-- .../custMgt/components/MemberRegPop.vue | 26 +++++- .../src/modules/custMgt/service/custMgtApi.js | 6 ++ .../src/modules/riskMgt/views/IntrcpList.vue | 13 ++- .../sendNumMgt/components/NumberRegPop.vue | 8 ++ .../modules/sendNumMgt/views/NumberList.vue | 4 +- .../src/modules/sysMgt/views/AdminList.vue | 26 +++--- .../ez/api/custMgt/CustMgtController.java | 18 ++++ .../uplus/ez/api/custMgt/CustMgtService.java | 24 +++++- .../uplus/ez/api/riskMgt/RiskMgtService.java | 5 +- .../ez/api/sendNumMgt/SendNumMgtMapper.java | 2 + .../ez/api/sendNumMgt/SendNumMgtService.java | 17 +++- .../mysql/sendNumMgt/sendNumMgt-mapper.xml | 13 +++ 15 files changed, 216 insertions(+), 33 deletions(-) diff --git a/frontend/src/modules/calculate/views/CalcList.vue b/frontend/src/modules/calculate/views/CalcList.vue index dfa6697..0d57455 100644 --- a/frontend/src/modules/calculate/views/CalcList.vue +++ b/frontend/src/modules/calculate/views/CalcList.vue @@ -176,7 +176,8 @@ export default { { name: 'prodNm', header: '요금제', align: 'center', width: '160px' , formatter: props => { - let result = "

" + props.prodNm + "

\n

(" + props.prodAmt.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ")

"; + //let result = "

" + props.prodNm + "

\n

(" + props.prodAmt.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ")

"; + let result = "

" + props.prodNm + "

"; return result; } }, diff --git a/frontend/src/modules/channelMgt/views/TmpltList.vue b/frontend/src/modules/channelMgt/views/TmpltList.vue index 8e93690..e4d6079 100644 --- a/frontend/src/modules/channelMgt/views/TmpltList.vue +++ b/frontend/src/modules/channelMgt/views/TmpltList.vue @@ -3,7 +3,7 @@
-

알림톡 템플릿 목록 조회

+

알림톡 템플릿 관리

diff --git a/frontend/src/modules/custMgt/components/MemberBulkRegPop.vue b/frontend/src/modules/custMgt/components/MemberBulkRegPop.vue index c23ea7b..fc946a0 100644 --- a/frontend/src/modules/custMgt/components/MemberBulkRegPop.vue +++ b/frontend/src/modules/custMgt/components/MemberBulkRegPop.vue @@ -178,8 +178,11 @@ export default { if(fileExpend != "xlsx"){ //alert("파일은 (xlsx) 형식만 등록 가능합니다."); this.row.title = '파일 업로드'; - this.row.msg1 = '샘플과 동일한 확장자가 아닙니다.'; - this.row.msg1 = '다시 업로드 해주세요.'; + this.row.msg1 = '업로드 할 수 없는 파일 형식입니다.'; + this.row.msg2 = '샘플 파일을 내려 받아 사용해주세요.'; + // this.row.msg1 = '샘플과 동일한 확장자가 아닙니다.'; + // this.row.msg1 = '다시 업로드 해주세요.'; + this.$refs.commmonModal.alertModalOpen(this.row); return false; } @@ -205,26 +208,60 @@ export default { this.row.msg1 = '파일을 읽는 동안 에러가 발생 했습니다.'; this.$refs.commmonModal.alertModalOpen(this.row); }; - reader.onloadend = (e) => { - }; + // reader.onloadend = (e) => { + // }; reader.onload = (e) => { let data = reader.result; let workbook = XLSX.read(data, {type: 'binary'}); + + /** header 규격 비교 start */ + var readHeader = vm.get_header_row(workbook.Sheets["Sheet1"]); + var headersArr = []; + var excelHeaders = this.excelHeader[0]; + for(var i=0; i < excelHeaders.length; i++){ + var headerCol = excelHeaders[i]; + headersArr.push(headerCol.name); + } + + if(readHeader.length == headersArr.length){ + for(var i=0; i { const rowObj = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName], {raw: true}); - tmpResult = rowObj; + tmpResult = rowObj; const limitCnt = 100; this.totalCnt = Number(this.totalItems) + rowObj.length; - this.insertRowCnt = rowObj.length; + + this.insertRowCnt = rowObj.length; if (this.totalCnt > limitCnt) { this.row.title = '청약고객관리'; this.row.msg1 = '100건이상은 등록되지 않습니다.'; this.$refs.commmonModal.alertModalOpen(this.row); return false; } - for (const [idx, r] of rowObj.entries()) { if (idx > limitCnt - 1) { break; @@ -235,7 +272,7 @@ export default { 휴대폰번호 = '' + (vm.isNull(휴대폰번호) ? '' : 휴대폰번호); 이메일 = '' + (vm.isNull(이메일) ? '' : 이메일); ID잠금 = '' + (vm.isNull(ID잠금) ? '' : ID잠금); - + // 휴대폰번호=''+휴대폰번호; if (!vm.isMobile(휴대폰번호)) { if (vm.isMobile2(휴대폰번호)) { @@ -243,7 +280,7 @@ export default { } } - let {retVal, msg} = vm.validXlxs({ID, 이름, 휴대폰번호, 이메일, ID잠금}); + let {retVal, msg} = vm.validXlxs({ID, 이름, 휴대폰번호, 이메일, ID잠금}); if (retVal) { const pVal = [ {name: '이름', val: 이름, len: 20}, @@ -265,6 +302,23 @@ export default { }; reader.readAsBinaryString(file); }, + + // sheet에서 header만 읽어 오기 + get_header_row(sheet) { + var headers = []; + var range = XLSX.utils.decode_range(sheet['!ref']); + var C, R = range.s.r; /* start in the first row */ + /* walk every column in the range */ + for(C = range.s.c; C <= range.e.c; ++C) { + var cell = sheet[XLSX.utils.encode_cell({c:C, r:R})] /* find the cell in the first row */ + var hdr = "UNKNOWN " + C; // <-- replace with your desired default + if(cell && cell.t) hdr = XLSX.utils.format_cell(cell); + headers.push(hdr); + } + return headers; + }, + + validXlxs({이름, 휴대폰번호, 이메일}) { if (this.isNull(이름)) { return {retVal: false, msg: '이름 누락'}; @@ -311,6 +365,16 @@ export default { this.row.adminId = this.adminId; this.row.list = this.nData; + // 대량 ID 등록시 파일 여부 체크 + let element = document.getElementById('uploadFile'); + if(element.firstChild == null){ + this.row.title = '청약고객 관리'; + this.row.msg1 = '업로드 파일이 없습니다.'; + this.row.msg2 = '파일을 업로드 해주세요.'; + this.$refs.commmonModal.alertModalOpen(this.row); + return false; + } + try { const response = await custMgtApi.insertMassUser(this.row); const result = response.data; diff --git a/frontend/src/modules/custMgt/components/MemberRegPop.vue b/frontend/src/modules/custMgt/components/MemberRegPop.vue index fec588a..39aff15 100644 --- a/frontend/src/modules/custMgt/components/MemberRegPop.vue +++ b/frontend/src/modules/custMgt/components/MemberRegPop.vue @@ -106,10 +106,32 @@ export default { } }, //사용자ID 생성 Confirm - memberInsertConfirm() { + async memberInsertConfirm() { // confirm 팝업 노출 if (this.doValidate()) { - this.$refs.validationConfirmModalPop.confirmInsertOpen() + // ID 중복체크 + try{ + this.row.adminId = this.adminId; + this.row.userId = this.userId; + this.row.userNm = this.userNm; + this.row.userEmail = this.email; + this.row.mdn = this.mdn; + this.row.userStat = this.stat; + const response = await custMgtApi.duplicateCheckUserId(this.row); + const result = response.data; + if (result != null && result.retCode == "0000") { + this.$refs.validationConfirmModalPop.confirmInsertOpen(); + } else if (result != null && result.retCode == "4018") { + // 이미 사용중인 ID + this.row.title = '청약고객관리'; + this.row.msg1 = '중복된 아이디가 있습니다.'; + this.row.msg2 = '아이디를 다시 확인하여 등록 부탁드립니다.'; + this.$parent.$refs.commmonModal.alertModalOpen(this.row); + } + }catch(err){ + + } + } }, //사용자ID 수정 처리 diff --git a/frontend/src/modules/custMgt/service/custMgtApi.js b/frontend/src/modules/custMgt/service/custMgtApi.js index 8e153d4..a65a865 100644 --- a/frontend/src/modules/custMgt/service/custMgtApi.js +++ b/frontend/src/modules/custMgt/service/custMgtApi.js @@ -48,6 +48,11 @@ const insertUser = (params) => { return httpClient.post('/api/v1/bo/custMgt/insertUser', params); } +// 사용자 ID 중복 체크 +const duplicateCheckUserId = (params) => { + return httpClient.post('/api/v1/bo/custMgt/duplicateCheckUserId', params); +} + // 사용자 ID 수정 const updateUser = (params) => { return httpClient.post('/api/v1/bo/custMgt/updateUser', params); @@ -117,4 +122,5 @@ export default { updateAdminInfoTotal, deleteMemo, insertTestId, + duplicateCheckUserId, } diff --git a/frontend/src/modules/riskMgt/views/IntrcpList.vue b/frontend/src/modules/riskMgt/views/IntrcpList.vue index e1fe985..51e3b3a 100644 --- a/frontend/src/modules/riskMgt/views/IntrcpList.vue +++ b/frontend/src/modules/riskMgt/views/IntrcpList.vue @@ -130,6 +130,7 @@ export default { blckRsnCd: '', blckYn: '', sndblckTpCd: '', + isFirst:true, options: [ {text: '20', value: 20}, {text: '50', value: 50}, @@ -137,7 +138,7 @@ export default { ], grid: { url: '/api/v1/bo/riskMgt/sendNum/intrcpList', - pagePerRows: 50, + pagePerRows: 20, //perPage: 50, pagination: true, isCheckbox: false, @@ -177,7 +178,9 @@ export default { blckYn: '', sndblckTpCd: '', sndblckTpNm: '', - blckSndrno: '' + blckSndrno: '', + pagePerRows: '', + page: '' }, excelHeader: [] } @@ -217,8 +220,13 @@ export default { this.grid.params.blckYn = this.blckYn this.grid.params.sndblckTpCd = this.sndblckTpCd + if(this.isFirst){ + this.grid.pagePerRows = 50 + } + this.$refs.table.search(this.grid.params, isKeep); this.sendStoreData(); + this.isFirst=false; }, changePerPage: function () { // 페이지당 조회할 개수 this.grid.pagePerRows = this.perPageCnt; @@ -232,7 +240,6 @@ export default { params: this.grid.params }); - const getCondition = this.$store.getters['searchcondition/getSearchCondition']; }, setCodeData() { // 상태 옵션 셋팅. diff --git a/frontend/src/modules/sendNumMgt/components/NumberRegPop.vue b/frontend/src/modules/sendNumMgt/components/NumberRegPop.vue index ad520a6..9044383 100644 --- a/frontend/src/modules/sendNumMgt/components/NumberRegPop.vue +++ b/frontend/src/modules/sendNumMgt/components/NumberRegPop.vue @@ -51,6 +51,7 @@ +
@@ -272,11 +273,15 @@ export default { this.custSeq = data.custSeq }, addNumberInput() { + if(this.numberInputs.length == 9){ + return false; + } this.numberInputs.push({ sendNm: '', sendNum: '' }) }, + delNumberInput(index) { this.numberInputs.splice(index, 1) }, @@ -742,6 +747,8 @@ export default { } this.otherBusinessFile = null; }, + + /** 저장 */ async saveSendNum() { this.saveSendNums = [] this.saveSendNums.push({ @@ -797,6 +804,7 @@ export default { } } else if (this.nmineeDivCd === '02') { + // 타사업자 const response = await sendNumMgtApi.insertNumber2(this.communicationFile, this.delegationFile, this.attorneyFile, this.otherBusinessFile ,this.delegatedIdentificationFile, this.delegateCertificateFile, this.delegatedBusinessFile, this.authorizedBusinessFile, this.corporateCertificateFile, this.identificationCardFile, this.identificationEvidenceFile, this.adminId, this.custNm, this.bRegNo, this.nmineeDivCd, this.saveSendNums, this.bizrAuthYn, this.custSeq, this.bRegNo) const result = response.data; diff --git a/frontend/src/modules/sendNumMgt/views/NumberList.vue b/frontend/src/modules/sendNumMgt/views/NumberList.vue index 6eec2ea..c6107a3 100644 --- a/frontend/src/modules/sendNumMgt/views/NumberList.vue +++ b/frontend/src/modules/sendNumMgt/views/NumberList.vue @@ -3,8 +3,8 @@
-

문자 발신 번호 목록 조회

- +

문자 발신 번호 관리

+
diff --git a/frontend/src/modules/sysMgt/views/AdminList.vue b/frontend/src/modules/sysMgt/views/AdminList.vue index c791054..613a42e 100644 --- a/frontend/src/modules/sysMgt/views/AdminList.vue +++ b/frontend/src/modules/sysMgt/views/AdminList.vue @@ -27,12 +27,12 @@
+ @keyup.enter="search" :readonly="!isFocused" @focus="isFocused = true" @blur="isFocused = false"/>
+ @keyup.enter="search" :readonly="!isFocused" @focus="isFocused = true" @blur="isFocused = false"/>
@@ -101,6 +101,7 @@ export default { name: 'adminList', data() { return { + isFocused: false, row: {}, authType: [], statType: [], @@ -172,6 +173,7 @@ export default { isKeep = true; } this.search(isKeep); + }, methods: { search: function (isKeep) { @@ -224,18 +226,20 @@ export default { const getCondition = this.$store.getters['searchcondition/getSearchCondition']; }, async setCodeData() { - - // 상태 옵션 셋팅. - api.commCode({'grpCd': 'ADM_STTUS_CD'}).then(response => { - this.statType = response.data.dat.a.list; - }); - // api.commAuth().then(response => { - // this.authType = response.data.data.list; - // }); + // 상태 + try { + const res = await api.commCode({'grpCd': 'ADM_STTUS_CD'}); + if(res.data.retCode == '0000'){ + this.statType = res.data.data.list; + } + }catch(err){ + + } + // 권한 try { const response = await api.commAuth(); if(response.data.retCode == '0000'){ - this.authType = response.data.datalist; + this.authType = response.data.data.list; } }catch(err){ diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtController.java b/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtController.java index f7c2aaf..470fb46 100644 --- a/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtController.java +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtController.java @@ -458,5 +458,23 @@ public class CustMgtController { } return custService.updateAdminInfoTotal(updateAdminInfoTotalReqDto); } + + + /** + * date : 2022. 8. 31. + * auth : ckr + * desc : 사용자 ID 중복 체크 + * @param paramMap + * @return + * @ + */ + @RequestMapping(value = "/duplicateCheckUserId" , method = {RequestMethod.POST}) + @ResponseBody + public InsertUserResDto duplicateCheckUserId(@RequestBody @Valid InsertUserReqDto insertUserReqDto, BindingResult bindingResult) { + if(validComponents.validParameter(bindingResult)) { + return new InsertUserResDto(ApiResponseCode.CM_PARAMETER_ERROR); + } + return custService.duplicateCheckUserId(insertUserReqDto); + } } diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtService.java b/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtService.java index f2c7b60..07837d9 100644 --- a/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtService.java +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtService.java @@ -959,5 +959,27 @@ public class CustMgtService { return new UpdateAdminInfoTotalResDto(ApiResponseCode.SUCCESS); } - + + + /** + * date : 2022. 8. 31. + * auth : ckr + * desc : 사용자 ID 중복체크 + * + * @param insertUserReqDto + * @return + */ + public InsertUserResDto duplicateCheckUserId(InsertUserReqDto insertUserReqDto) { + CustMgtMapper custMgtMapper = sqlSessionSlave.getMapper(CustMgtMapper.class); + + String userId = insertUserReqDto.getUserId(); + int userCnt = 0; + userCnt = custMgtMapper.getUserIdCount(userId); + if (userCnt > 0) { + logger.debug("사용자 ID 중복 : {}",userId); + return new InsertUserResDto(ApiResponseCode.CE_DUPLICATE_ID); + } + + return new InsertUserResDto(ApiResponseCode.SUCCESS); + } } diff --git a/src/main/java/kr/co/uplus/ez/api/riskMgt/RiskMgtService.java b/src/main/java/kr/co/uplus/ez/api/riskMgt/RiskMgtService.java index 341b528..e85057e 100644 --- a/src/main/java/kr/co/uplus/ez/api/riskMgt/RiskMgtService.java +++ b/src/main/java/kr/co/uplus/ez/api/riskMgt/RiskMgtService.java @@ -4,6 +4,8 @@ import kr.co.uplus.ez.api.riskMgt.dto.*; import kr.co.uplus.ez.common.data.ApiResponseCode; import kr.co.uplus.ez.common.data.Const; import kr.co.uplus.ez.common.data.Paging; +import lombok.extern.slf4j.Slf4j; + import org.mybatis.spring.SqlSessionTemplate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -17,6 +19,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; +@Slf4j @Service public class RiskMgtService { @@ -60,7 +63,7 @@ public class RiskMgtService { int page = sendNumIntrcpListReqDto.getPage(); int pagePerRows = sendNumIntrcpListReqDto.getPagePerRows(); - page = (page - 1) * pagePerRows; + page = (page - 1) * pagePerRows; sendNumIntrcpListReqDto.setPage(page); List sendNumIntrcpListList = riskMgtMapper.selectSndrnoBlckList(sendNumIntrcpListReqDto); diff --git a/src/main/java/kr/co/uplus/ez/api/sendNumMgt/SendNumMgtMapper.java b/src/main/java/kr/co/uplus/ez/api/sendNumMgt/SendNumMgtMapper.java index f605467..5303a6a 100644 --- a/src/main/java/kr/co/uplus/ez/api/sendNumMgt/SendNumMgtMapper.java +++ b/src/main/java/kr/co/uplus/ez/api/sendNumMgt/SendNumMgtMapper.java @@ -58,4 +58,6 @@ interface SendNumMgtMapper { int updateSvcUser(UpdateApprReqDto updateApprReqDto); InsertNumberFile selectDownload(InsertNumberFile insertNumberFile); + + List selectSndrnoListAll(InsertNumberReqDto insertNumberReqDto); } diff --git a/src/main/java/kr/co/uplus/ez/api/sendNumMgt/SendNumMgtService.java b/src/main/java/kr/co/uplus/ez/api/sendNumMgt/SendNumMgtService.java index b521b51..1d484a4 100644 --- a/src/main/java/kr/co/uplus/ez/api/sendNumMgt/SendNumMgtService.java +++ b/src/main/java/kr/co/uplus/ez/api/sendNumMgt/SendNumMgtService.java @@ -206,11 +206,24 @@ public class SendNumMgtService { String regId = userDetails.getUsername(); // 2. 중복 발신번호 체크를 위한 조회. - List dbSendNumbers = sendNumMgtMapper.selectSndrnoList(insertNumberReqDto); + List dbSendNumbers = null; List sendNumbers = insertNumberReqDto.getList(); - List allSendNumbers = insertNumberReqDto.getList(); List duplicateSendNumList = new ArrayList<>(); + + String nmineeDivCd = insertNumberReqDto.getNmineeDivCd(); + if(StringUtils.equals(nmineeDivCd, "01")) { + // 사업자 - 발신 번호 전체 중복 체크 + dbSendNumbers = sendNumMgtMapper.selectSndrnoListAll(insertNumberReqDto); + }else { + // 타사업자 - 해당 사업자 발신 번호 한해서만 중복 체크 + dbSendNumbers = sendNumMgtMapper.selectSndrnoList(insertNumberReqDto); + } +// List dbSendNumbers = sendNumMgtMapper.selectSndrnoList(insertNumberReqDto); +// List sendNumbers = insertNumberReqDto.getList(); + +// List allSendNumbers = insertNumberReqDto.getList(); +// List duplicateSendNumList = new ArrayList<>(); for (int i=0; i + +