발신번호 등록 수정

This commit is contained in:
USER
2022-08-17 12:03:45 +09:00
parent 26756f3e8e
commit 89c8d1eb68
34 changed files with 918 additions and 247 deletions

View File

@@ -67,7 +67,7 @@ header .user_wrap .user {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
width: 258px;
width: 308px; /*20220811 퍼블리싱 수정*/
height: 63px;
background: url(../images/user-bg.png) no-repeat center/100% auto;
}
@@ -405,7 +405,7 @@ header .user_wrap .user_info .logout {
-ms-flex-align: end;
align-items: flex-end;
border-radius: 4px;
margin-bottom: 50px;
margin: 0 40px 50px 40px; /*20220811 퍼블리싱 수정*/
flex-wrap: wrap;
}
@@ -844,7 +844,7 @@ header .user_wrap .user_info .logout {
.pagination {
display:flex;
justify-content: center;
margin-bottom: 50px;
margin: 65px 0 50px 0; /*20220811 퍼블리싱 수정*/
}
.pagination ul{
@@ -1373,6 +1373,10 @@ header .user_wrap .user_info .logout {
font-weight: 500;
}
.popup .button.Ty02 {
margin-left: 0px; padding: 0 20px;
}
/*customer popup*/
.popup.b-popup{
@@ -1702,9 +1706,11 @@ header .user_wrap .user_info .logout {
margin-bottom: 2%;
}
/* --- 삭제
.popup.popup_form table .registration ul li:nth-child(3n){
margin-right: 0;
margin-right: 0;
}
*/
.popup.popup_form table .registration ul li span{
min-height: 30px;

View File

@@ -226,7 +226,8 @@ export default {
let colGroup = '';
colGroup += '<colgroup>';
if (this.isCheckbox == true) {
colGroup += '<col style="width: 60px">';
//colGroup += '<col style="width: 60px">';
colGroup += '<col style="width: 4%">';
this.colsLen++;
}

View File

@@ -32,7 +32,7 @@
</span>
</div>
</div>
<div class="select_box id">
<div class="select_box">
<label for="subsSttusCd" class="label">상태</label>
<select name="subsSttusCd" id="subsSttusCd" v-model="grid.params.subsSttusCd" @keyup.enter="search">
<option value="" selected>전체</option>
@@ -266,6 +266,8 @@ export default {
console.log('this.perPageCnt' + this.perPageCnt);
console.log(this.grid.params);
this.grid.params.subsStDt = this.startDate;
this.grid.params.subsEdDt = this.endDate;
this.grid.params.searchType = this.searchType
this.$refs.table.search(this.grid.params, isKeep);
this.sendStoreData();
@@ -321,7 +323,7 @@ export default {
}
let today = moment().format('YYYYMMDDHHmmss');
const saveFileName = `유치채널현황_${today}.xlsx`;
const saveFileName = `유치채널현황_${today}.xls`;
const data = await this.getExcelDataDown();
console.log('-------------------------');

View File

@@ -24,7 +24,7 @@
<option value="tmpltNm">템플릿명</option>
</select>
</div>
<div class="input_box id">
<div class="input_box">
<label for="search" class="label">검색어</label>
<input type="text" id="id1" placeholder="검색어 입력" v-model.trim="grid.params.searchText1"
@keyup.enter="search" maxlength="100"/>
@@ -221,7 +221,7 @@ export default {
}
let today = moment().format('YYYYMMDDHHmmss');
const saveFileName = `알림톡템플릿목록_${today}.xlsx`;
const saveFileName = `알림톡템플릿목록_${today}.xls`;
const data = await this.getExcelDataDown();
let options = {

View File

@@ -12,7 +12,7 @@
<a href="javascript:void(0);" class="on">회원관리</a>
</div>
<div class="search_form">
<!-- <div class="search_form">-->
<div class="search_wrap">
<div class="group">
<div class="input_box cal">
@@ -75,7 +75,7 @@
<button type="button" class="button grey" @click="search">조회</button>
</div>
</div>
</div>
<!-- </div>-->
<div class="info">
<div class="count"> <span>{{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</span>

View File

@@ -12,7 +12,7 @@
<a href="javascript:void(0);" @click="toMove('memberList')">회원관리</a>
</div>
<div class="search_form">
<!-- <div class="search_form">-->
<div class="search_wrap">
<div class="group">
<div class="input_box cal">
@@ -40,7 +40,7 @@
</span>
</div>
</div>
<div class="select_box id">
<div class="select_box">
<label for="right" class="label">상태</label>
<select name="" id="" v-model="searchType1" @keyup.enter="search">
<option value="" selected>전체</option>
@@ -79,7 +79,7 @@
<button type="button" class="button grey" @click="search">조회</button>
</div>
</div>
</div>
<!-- </div>-->
<div class="info">
<div class="count"> <span>{{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</span>
@@ -353,7 +353,7 @@ export default {
}
let today = moment().format('YYYYMMDDHHmmss');
const saveFileName = `청약고객정보_${today}.xlsx`;
const saveFileName = `청약고객정보_${today}.xls`;
const data = await this.getExcelDataDown();
let options = {

View File

@@ -3,8 +3,8 @@
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">실시간발송현황</h3>
<p class="breadcrumb">모니터링 &gt; 실시간발송현황</p>
<h3 class="title">실시간발송내역</h3>
<p class="breadcrumb">모니터링 &gt; 실시간발송내역</p>
</div>
<div class="title_wrap">
<h3>발송집계</h3>

View File

@@ -21,7 +21,7 @@
></vuejs-datepicker>
</span>
</div>
<div class="select_box id">
<div class="select_box">
<label for="right" class="label">요청채널</label>
<select name="" id="" v-model="grid.params.searchType1" @keyup.enter="search">
<option value="" selected>전체</option>

View File

@@ -19,7 +19,7 @@
></vuejs-datepicker>
</div>
<button type="button" class="button grey btn-a" @click="todayDate">오늘</button>
<div class="select_box id">
<div class="select_box">
<label for="right" class="label">차단사유</label>
<select name="" id="" v-model="blckRsnCd">
<option value="" selected>전체</option>

View File

@@ -6,7 +6,7 @@
<h3 class="title">메시지 차단</h3>
<p class="breadcrumb">리스크관리 &gt; 메시지 차단</p>
</div>
<form autocomplete="off" class="search_form">
<!-- <form autocomplete="off" class="search_form">-->
<div class="search_wrap">
<div class="input_box">
<label for="regId" class="label">등록자</label>
@@ -32,7 +32,7 @@
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
</form>
<!-- </form>-->
<div class="info">
<div class="count"> <span> {{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }} </span>
<div class="select_box NumberSe">

View File

@@ -7,7 +7,7 @@
<h3 class="title">080 수신번호 차단</h3>
<p class="breadcrumb">리스크관리 &gt; 080 수신번호 차단</p>
</div>
<div class="search_form">
<!-- <div class="search_form">-->
<div class="search_wrap">
<div class="input_box">
<label for="search" class="label">고객사</label>
@@ -27,7 +27,7 @@
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
</div>
<!-- </div>-->
<div class="info">
<div class="count"> <span> {{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }} </span>
<div class="select_box NumberSe">

View File

@@ -65,13 +65,21 @@
<tr>
<th>제출서류</th>
<td class="sender">
<a v-for="(item, idx) in docList" v-if="item.docTpCd !== '06'">{{ item.docTitle }}</a>
<a href="javascript:void(0);" @click="download(item.filePath, item.fileNm, item.docTitle)" v-for="(item, idx) in docList" v-if="item.docTpCd !== '06' && item.docTpCd !== '07' && item.docTpCd !== '13' && item.docTpCd !== '14'">{{ item.docTitle }} <br></a>
</td>
</tr>
<tr>
<th>사업자등록증</th>
<td class="sender">
<p v-for="(item, idx) in docList" v-if="item.docTpCd === '06'">{{ item.docTitle }}</p>
<a href="javascript:void(0);" @click="download(item.filePath, item.fileNm, item.docTitle)" v-for="(item, idx) in docList" v-if="item.docTpCd === '06'">{{ item.docTitle }}<br></a>
<a href="javascript:void(0);" @click="download(item.filePath, item.fileNm, item.docTitle)" v-for="(item, idx) in docList" v-if="item.docTpCd === '07'">{{ item.docTitle }}<br></a>
</td>
</tr>
<tr>
<th>본인확인</th>
<td class="sender">
<a href="javascript:void(0);" @click="download(item.filePath, item.fileNm, item.docTitle)" v-for="(item, idx) in docList" v-if="item.docTpCd === '13'">{{ item.docTitle }}<br></a>
<a href="javascript:void(0);" @click="download(item.filePath, item.fileNm, item.docTitle)" v-for="(item, idx) in docList" v-if="item.docTpCd === '14'">{{ item.docTitle }}<br></a>
</td>
</tr>
<tr>
@@ -108,6 +116,7 @@ export default {
return{
row: {},
regReqNo:'',
docNo:'',
reqNo:'',
seqNo:'',
cmpltDt:'',
@@ -120,6 +129,7 @@ export default {
memo:'',
docList: [],
numList: [],
}
},
components: {
@@ -134,6 +144,14 @@ export default {
this.formReset();
},
methods :{
//파일 다운로드
download(filePath, fileName, docTitle){
this.row = {}
this.row.docTitle = docTitle
this.row.filePath = filePath
this.row.fileNm = fileName
sendNumMgtApi.fileDownload(this.row);
},
// 모달 띄우기
apprDetailPopOpen(props){
@@ -148,20 +166,24 @@ export default {
try {
console.log(props)
this.row.regReqNo = props.regReqNo
this.row.docNo = props.docNo
const response = await sendNumMgtApi.apprDetail(this.row);
const result = response.data;
console.log(result);
if (result != null && result.retCode == "0000") {
this.regRegNo = result.data.regReqNo
this.reqNo = result.data.regReqNo
this.regReqNo = result.data.regReqNo
this.docNo = result.data.docNo
// this.reqNo = result.data.regNo
// this.fileNm = result.data.fileNm
// this.filePath = result.data.filePath
this.docTitle = result.data.docTitle
this.regDt = result.data.regDt
this.custNm = result.data.custNm
this.adminId = result.data.adminId
this.chgDt = result.data.chgDt
this.bizrno = result.data.bizrno.substring(0,3)+'-'+result.data.bizrno.substring(3,5)+'-'+result.data.bizrno.substring(5,10)
this.nmineeDivCd = result.data.nmineeDivCd
this.regRegNo = result.data.regRegNo
this.slfAuthHp = result.data.slfAuthHp
this.docList = result.data.docList
this.numList = result.data.numList

View File

@@ -57,7 +57,7 @@
<th>제출서류</th>
<td>
<div class="sender">
<p v-for="(item, idx) in list" v-if="item.docTpcd !== '06'">{{ item.docTitle }} ({{ item.fileSize }}KB)</p>
<p v-for="(item, idx) in docList" v-if="item.docTpCd !== '06' && item.docTpCd !== '07' && item.docTpCd !== '13' && item.docTpCd !== '14'">{{ item.docTitle }} ({{ formatFileSize(item.fileSize) }})</p>
</div>
<p class="file">파일형식 : jpg, png, pdf, tiff (최대 5MB)</p>
</td>
@@ -66,8 +66,18 @@
<th>사업자등록증</th>
<td>
<div class="sender">
<!-- <p>사업자등록증.jpg (00KB)</p>-->
<p v-for="(item, idx) in list" v-if="item.docTpCd === '06'">{{ item.docTitle }} ({{ item.fileSize }}KB)</p>
<p v-for="(item, idx) in docList" v-if="item.docTpCd === '06'">{{ item.docTitle }} ({{ formatFileSize(item.fileSize) }}) <br></p>
<p v-for="(item, idx) in docList" v-if="item.docTpCd === '07'">{{ item.docTitle }} ({{ formatFileSize(item.fileSize) }})</p>
</div>
<p class="file">파일형식 : jpg, png, pdf, tiff (최대 5MB)</p>
</td>
</tr>
<tr>
<th>본인 확인</th>
<td>
<div class="sender">
<p v-for="(item, idx) in docList" v-if="item.docTpCd === '13'">{{ item.docTitle }} ({{ formatFileSize(item.fileSize) }}) <br></p>
<p v-for="(item, idx) in docList" v-if="item.docTpCd === '14'">{{ item.docTitle }} ({{ formatFileSize(item.fileSize) }})</p>
</div>
<p class="file">파일형식 : jpg, png, pdf, tiff (최대 5MB)</p>
</td>
@@ -107,8 +117,9 @@ export default {
sndrno:'',
sttusCd:'',
regDt:'',
list: [],
docList: [],
regRegNo:'',
}
},
components: {
@@ -125,6 +136,15 @@ export default {
},
methods :{
formatFileSize(bytes,decimalPoint) {
if(bytes == 0) return '0 Bytes';
var k = 1000,
dm = decimalPoint || 2,
sizes = ['Bytes', 'KB', 'MB'],
i = Math.floor(Math.log(bytes) / Math.log(k));
return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
},
// 모달 띄우기
numberDetailPopOpen(props){
@@ -162,7 +182,7 @@ export default {
this.sttusCd = result.data.sttusCd
this.regDt = result.data.regDt
// result.data.list.forEach()
this.list = result.data.list
this.docList = result.data.list
this.regRegNo = result.data.regRegNo
}
} catch (error) {

View File

@@ -58,41 +58,94 @@
<tr v-show="bizrAuthYn !== 'Y'">
<th>제출서류</th>
<td>
<p class="file">파일형식 : jpg, png, pdf, tiff (최대 5MB)</p>
<div class="attach" v-show="fileType === 2">
<p class="essential list"><span>*</span>위임-수임관계 확인 </p>
<input type="file" ref="trustFile" style="display: none" @change="readTrustFile"
<p class="essential list"><span>*</span>위임-수임사간 관계 확인 </p>
<input type="file" ref="delegationFile" style="display: none" @change="readDelegationFile"
accept=".jpg,.png,.pdf,.tiff"/>
<button class="button btn-p2color" @click="$refs.trustFile.click()">파일업로드</button>
<p class="file" id="trustNm"></p>
<button class="button btn-p2color" @click="$refs.delegationFile.click()">파일업로드</button>
<p class="file" id="delegationNm"></p>
</div>
<div class="attach" v-show="fileType === 2">
<p class="essential list"><span>*</span>위임장</p>
<input type="file" ref="warrantFile" style="display: none" @change="readWarrantFile"
<input type="file" ref="attorneyFile" style="display: none" @change="readAttorneyFile"
accept=".jpg,.png,.pdf,.tiff"/>
<button class="button btn-p2color" @click="$refs.warrantFile.click()">파일업로드</button>
<p class="file" id="warrantNm"></p>
<button class="button btn-p2color" @click="$refs.attorneyFile.click()">파일업로드</button>
<p class="file" id="attorneyNm"></p>
</div>
<div class="attach" v-show="fileType === 2">
<p class="essential list"><span>*</span>대리인 신분증 사본 인증</p>
<input type="file" ref="deputyFile" style="display: none" @change="readDeputyFile"
<p class="essential list"><span>*</span>법인인감증명서</p>
<input type="file" ref="corporateCertificateFile" style="display: none" @change="readCorporateCertificateFile"
accept=".jpg,.png,.pdf,.tiff"/>
<button class="button btn-p2color" @click="$refs.deputyFile.click()">파일업로드</button>
<p class="file" id="deputyNm"></p>
<button class="button btn-p2color" @click="$refs.corporateCertificateFile.click()">파일업로드</button>
<p class="file" id="corporateCertificateNm"></p>
</div>
<div class="attach" v-show="fileType === 2">
<p class="essential list"><span>*</span>위임사 사업자등록증</p>
<input type="file" ref="delegatedBusinessFile" style="display: none" @change="readDelegatedBusinessFile"
accept=".jpg,.png,.pdf,.tiff"/>
<button class="button btn-p2color" @click="$refs.delegatedBusinessFile.click()">파일업로드</button>
<p class="file" id="delegatedBusinessNm"></p>
</div>
<div class="attach" v-show="fileType === 2">
<p class="essential list"><span>*</span>수임사 사업자등록증</p>
<input type="file" ref="authorizedBusinessFile" style="display: none" @change="readAuthorizedBusinessFile"
accept=".jpg,.png,.pdf,.tiff"/>
<button class="button btn-p2color" @click="$refs.authorizedBusinessFile.click()">파일업로드</button>
<p class="file" id="authorizedBusinessNm"></p>
</div>
<div class="attach">
<p class="essential list"><span>*</span>통신서비스 이용증명원</p>
<p v-if="fileType === 1" class="essential list">통신서비스 이용증명원</p>
<p v-if="fileType === 2" class="essential list">발신번호의 통신서비스 이용증명원</p>
<input type="file" ref="communicationFile" style="display: none" @change="readCommunicationFile"
accept=".jpg,.png,.pdf,.tiff"/>
<button class="button btn-p2color" @click="$refs.communicationFile.click()">파일업로드</button>
<p class="file" id="communicationNm"></p>
</div>
<div class="attach">
<p class="essential list"><span>*</span>재직증명서</p>
<input type="file" ref="tenureFile" style="display: none" @change="readTenureFile"
<div class="attach" v-show="fileType === 1">
<p class="essential list"><span></span>재직증명서</p>
<input type="file" ref="tenureFile" style="display: none" @change="readTenureFile"
accept=".jpg,.png,.pdf,.tiff"/>
<button class="button btn-p2color" @click="$refs.tenureFile.click()">파일업로드</button>
<p class="file" id="tenureNm"></p>
</div>
<div class="attach" v-show="fileType === 2">
<p class="essential list"><span></span>위임사 재직증명서(임직원 신청시)</p>
<input type="file" ref="delegateCertificateFile" style="display: none" @change="readDelegateCertificateFile"
accept=".jpg,.png,.pdf,.tiff"/>
<button class="button btn-p2color" @click="$refs.tenureFile.click()">파일업로드</button>
<p class="file" id="tenureNm"></p>
<button class="button btn-p2color" @click="$refs.delegateCertificateFile.click()">파일업로드</button>
<p class="file" id="delegateCertificateNm"></p>
</div>
<div class="attach" v-show="fileType === 2">
<p class="essential list"><span></span>위임사 신분증(임직원 신청시)</p>
<input type="file" ref="delegatedIdentificationFile" style="display: none" @change="readDelegatedIdentificationFile"
accept=".jpg,.png,.pdf,.tiff"/>
<button class="button btn-p2color" @click="$refs.delegatedIdentificationFile.click()">파일업로드</button>
<p class="file" id="delegatedIdentificationNm"></p>
</div>
</td>
</tr>
<tr>
<th>사업자 등록증</th>
<td v-show="bizrAuthYn !== 'Y'">
<p class="file">파일형식 : jpg, png, pdf, tiff (최대 5MB)</p>
<div class="attach" v-show="fileType === 1">
<p class="essential list"><span>*</span>사업자등록증</p>
<input type="file" ref="businessFile" style="display: none" @change="readBusinessFile"
accept=".jpg,.png,.pdf,.tiff"/>
<button class="button btn-p2color" @click="$refs.businessFile.click()">파일업로드</button>
<p class="file" id="businessNm"></p>
</div>
<div class="attach" v-show="fileType === 2">
<p class="essential list"><span>*</span>사업자등록증</p>
<input type="file" ref="otherBusinessFile" style="display: none" @change="readOtherBusinessFile"
@@ -100,23 +153,31 @@
<button class="button btn-p2color" @click="$refs.otherBusinessFile.click()">파일업로드</button>
<p class="file" id="otherBusinessNm"></p>
</div>
<p class="file">파일형식 : jpg, png, pdf, tiff (최대 5MB)</p>
</td>
</tr>
<tr>
<th>사업자 등록증</th>
<td v-show="bizrAuthYn !== 'Y'">
<div class="attach">
<p class="essential list"><span>*</span>사업자등록증</p>
<input type="file" ref="businessFile" style="display: none" @change="readBusinessFile"
accept=".jpg,.png,.pdf,.tiff"/>
<button class="button btn-p2color" @click="$refs.businessFile.click()">파일업로드</button>
<p class="file" id="businessNm"></p>
</div>
<p class="file">파일형식 : jpg, png, pdf, tiff (최대 5MB)</p>
</td>
<td class="red" v-show="bizrAuthYn === 'Y'">인증 완료</td>
</tr>
<tr v-show="bizrAuthYn !== 'Y'">
<th>본인확인</th>
<td>
<p class="file">파일형식 : jpg, png, pdf, tiff (최대 5MB)</p>
<div class="attach">
<p class="essential list"><span></span>신분증</p>
<input type="file" ref="identificationCardFile" style="display: none" @change="readIdentificationCardFile"
accept=".jpg,.png,.pdf,.tiff"/>
<button class="button btn-p2color" @click="$refs.identificationCardFile.click()">파일업로드</button>
<p class="file" id="identificationCardNm"></p>
</div>
<div class="attach">
<p class="essential list"><span></span>재직증명서</p>
<input type="file" ref="identificationEvidenceFile" style="display: none" @change="readIdentificationEvidenceFile"
accept=".jpg,.png,.pdf,.tiff"/>
<button class="button btn-p2color" @click="$refs.identificationEvidenceFile.click()">파일업로드</button>
<p class="file" id="identificationEvidenceNm"></p>
</div>
</td>
</tr>
</tbody>
</table>
<div class="popup-btn2">
@@ -156,13 +217,19 @@ export default {
numberInputs: [],
saveSendNums: [],
fileType: 1,
trustFile: null,
warrantFile: null,
deputyFile: null,
tenureFile: null,
businessFile: null,
communicationFile: null,
tenureFile: null,
delegationFile: null,
attorneyFile: null,
businessFile: null,
otherBusinessFile: null,
delegatedIdentificationFile: null,
delegateCertificateFile: null,
delegatedBusinessFile: null,
authorizedBusinessFile: null,
corporateCertificateFile: null,
identificationCardFile: null,
identificationEvidenceFile: null,
childData: 20,
reqCnt: 0,
}
@@ -233,10 +300,14 @@ export default {
let fileExt = file.name.substring(
file.name.lastIndexOf(".") + 1
)
// 소문자로 변환
fileExt = fileExt.toLowerCase()
var fileSize = file.size
var maxSize = 5 * 1024 * 1024;
// 이미지 확장자 체크, jpg, png, pdf, tiff
if (["jpg", "png", "pdf", "tiff"].includes(fileExt)) {
if (["jpg", "png", "pdf", "tiff"].includes(fileExt) && fileSize <= maxSize) {
return true;
} else {
this.row.title = '발신번호 파일 업로드';
@@ -246,13 +317,13 @@ export default {
return false
}
},
// 위임-수임
readTrustFile(event) {
// 위임-수임사간 관계 확인 문서
readDelegationFile(event) {
const file = event.target.files[0];
if(this.fileExtCheck(file)) {
if (file != null) {
this.delTrustFile(event);
this.delDelegationFile(event);
}
// inner Html.
@@ -260,30 +331,30 @@ export default {
const text = document.createElement('p');
text.innerText = file.name;
button.addEventListener('click', () => {
this.delTrustFile(event);
this.delDelegationFile(event);
})
button.innerText = 'X'
const root = document.getElementById('trustNm');
const root = document.getElementById('delegationNm');
root.appendChild(text);
root.appendChild(button);
this.trustFile = file;
this.delegationFile = file;
}
},
delTrustFile(event) {
delDelegationFile(event) {
const file = event.target.files[0];
this.$refs.trustFile.value = null;
let element = document.getElementById("trustNm");
this.$refs.delegationFile.value = null;
let element = document.getElementById("delegationNm");
while (element.firstChild) {
element.removeChild(element.firstChild);
}
this.trustFile = null;
this.delegationFile = null;
},
// 위임장
readWarrantFile(event) {
readAttorneyFile(event) {
const file = event.target.files[0];
if(this.fileExtCheck(file)) {
if (file != null) {
this.delWarrantFile(event);
this.delAttorneyFile(event);
}
// inner Html.
@@ -291,30 +362,31 @@ export default {
const text = document.createElement('p');
text.innerText = file.name;
button.addEventListener('click', () => {
this.delWarrantFile(event);
this.delAttorneyFile(event);
})
button.innerText = 'X'
const root = document.getElementById('warrantNm');
const root = document.getElementById('attorneyNm');
root.appendChild(text);
root.appendChild(button);
this.warrantFile = file;
this.attorneyFile = file;
}
},
delWarrantFile(event) {
delAttorneyFile(event) {
const file = event.target.files[0];
this.$refs.warrantFile.value = null;
let element = document.getElementById("warrantNm");
this.$refs.attorneyFile.value = null;
let element = document.getElementById("attorneyNm");
while (element.firstChild) {
element.removeChild(element.firstChild);
}
this.warrantFile = null;
this.attorneyFile = null;
},
// 대리인
readDeputyFile(event) {
// 법인인감증명서
readCorporateCertificateFile(event) {
const file = event.target.files[0];
if(this.fileExtCheck(file)) {
if (file != null) {
this.delDeputyFile(event);
this.delCorporateCertificateFile(event);
}
// inner Html.
@@ -322,25 +394,153 @@ export default {
const text = document.createElement('p');
text.innerText = file.name;
button.addEventListener('click', () => {
this.delDeputyFile(event);
this.delCorporateCertificateFile(event);
})
button.innerText = 'X'
const root = document.getElementById('deputyNm');
const root = document.getElementById('corporateCertificateNm');
root.appendChild(text);
root.appendChild(button);
this.deputyFile = file
this.corporateCertificateFile = file;
}
},
delDeputyFile(event) {
delCorporateCertificateFile(event) {
const file = event.target.files[0];
this.$refs.deputyFile.value = null;
let element = document.getElementById("deputyNm");
this.$refs.corporateCertificateFile.value = null;
let element = document.getElementById("corporateCertificateNm");
while (element.firstChild) {
element.removeChild(element.firstChild);
}
this.deputyFile = null;
this.corporateCertificateFile = null;
},
// 위임사 사업자 등록증
readDelegatedBusinessFile(event) {
const file = event.target.files[0];
if(this.fileExtCheck(file)) {
if (file != null) {
this.delDelegatedBusinessFile(event);
}
// inner Html.
const button = document.createElement('button');
const text = document.createElement('p');
text.innerText = file.name;
button.addEventListener('click', () => {
this.delDelegatedBusinessFile(event);
})
button.innerText = 'X'
const root = document.getElementById('delegatedBusinessNm');
root.appendChild(text);
root.appendChild(button);
this.delegatedBusinessFile = file;
}
},
delDelegatedBusinessFile(event) {
const file = event.target.files[0];
this.$refs.delegatedBusinessFile.value = null;
let element = document.getElementById("delegatedBusinessNm");
while (element.firstChild) {
element.removeChild(element.firstChild);
}
this.delegatedBusinessFile = null;
},
// 수임사 사업자 등록증
readAuthorizedBusinessFile(event) {
const file = event.target.files[0];
if(this.fileExtCheck(file)) {
if (file != null) {
this.delAuthorizedBusinessFile(event);
}
// inner Html.
const button = document.createElement('button');
const text = document.createElement('p');
text.innerText = file.name;
button.addEventListener('click', () => {
this.delAuthorizedBusinessFile(event);
})
button.innerText = 'X'
const root = document.getElementById('authorizedBusinessNm');
root.appendChild(text);
root.appendChild(button);
this.authorizedBusinessFile = file;
}
},
delAuthorizedBusinessFile(event) {
const file = event.target.files[0];
this.$refs.authorizedBusinessFile.value = null;
let element = document.getElementById("authorizedBusinessNm");
while (element.firstChild) {
element.removeChild(element.firstChild);
}
this.authorizedBusinessFile = null;
},
// 위임사 재직증명서(임직원 신청시)
readDelegateCertificateFile(event) {
const file = event.target.files[0];
if(this.fileExtCheck(file)) {
if (file != null) {
this.delDelegateCertificateFile(event);
}
// inner Html.
const button = document.createElement('button');
const text = document.createElement('p');
text.innerText = file.name;
button.addEventListener('click', () => {
this.delDelegateCertificateFile(event);
})
button.innerText = 'X'
const root = document.getElementById('delegateCertificateNm');
root.appendChild(text);
root.appendChild(button);
this.delegateCertificateFile = file;
}
},
delDelegateCertificateFile(event) {
const file = event.target.files[0];
this.$refs.delegateCertificateFile.value = null;
let element = document.getElementById("delegateCertificateNm");
while (element.firstChild) {
element.removeChild(element.firstChild);
}
this.delegateCertificateFile = null;
},
// 위임사 신분증(임직원 신청시)
readDelegatedIdentificationFile(event) {
const file = event.target.files[0];
if(this.fileExtCheck(file)) {
if (file != null) {
this.delDelegatedIdentificationFile(event);
}
// inner Html.
const button = document.createElement('button');
const text = document.createElement('p');
text.innerText = file.name;
button.addEventListener('click', () => {
this.delDelegatedIdentificationFile(event);
})
button.innerText = 'X'
const root = document.getElementById('delegatedIdentificationNm');
root.appendChild(text);
root.appendChild(button);
this.delegatedIdentificationFile = file;
}
},
delDelegatedIdentificationFile(event) {
const file = event.target.files[0];
this.$refs.delegatedIdentificationFile.value = null;
let element = document.getElementById("delegatedIdentificationNm");
while (element.firstChild) {
element.removeChild(element.firstChild);
}
this.delegatedIdentificationFile = null;
},
// 재직
readTenureFile(event) {
const file = event.target.files[0];
@@ -403,9 +603,73 @@ export default {
}
this.businessFile = null;
},
//신분증 (본인확인)
readIdentificationCardFile(event) {
const file = event.target.files[0];
if(this.fileExtCheck(file)) {
if (file != null) {
this.delIdentificationCardFile(event);
}
// inner Html.
const button = document.createElement('button');
const text = document.createElement('p');
text.innerText = file.name;
button.addEventListener('click', () => {
this.delIdentificationCardFile(event);
})
button.innerText = 'X'
const root = document.getElementById('identificationCardNm');
root.appendChild(text);
root.appendChild(button);
this.identificationCardFile = file;
}
},
delIdentificationCardFile(event) {
const file = event.target.files[0];
this.$refs.identificationCardFile.value = null;
let element = document.getElementById("identificationCardNm");
while (element.firstChild) {
element.removeChild(element.firstChild);
}
this.identificationCardFile = null;
},
//재직증명서 (본인확인)
readIdentificationEvidenceFile(event) {
const file = event.target.files[0];
if(this.fileExtCheck(file)) {
if (file != null) {
this.delIdentificationEvidenceFile(event);
}
// inner Html.
const button = document.createElement('button');
const text = document.createElement('p');
text.innerText = file.name;
button.addEventListener('click', () => {
this.delIdentificationEvidenceFile(event);
})
button.innerText = 'X'
const root = document.getElementById('identificationEvidenceNm');
root.appendChild(text);
root.appendChild(button);
this.identificationEvidenceFile = file;
}
},
delIdentificationEvidenceFile(event) {
const file = event.target.files[0];
this.$refs.identificationEvidenceFile.value = null;
let element = document.getElementById("identificationEvidenceNm");
while (element.firstChild) {
element.removeChild(element.firstChild);
}
this.identificationEvidenceFile = null;
},
//통신서비스 증명원
readCommunicationFile(event) {
const file = event.target.files[0];
if(this.fileExtCheck(file)) {
if (file != null) {
this.delCommunicationFile(event);
@@ -488,8 +752,12 @@ export default {
if (this.bizrAuthYn !== 'Y') {
if (this.nmineeDivCd === '01') {
// 사업자
const response = await sendNumMgtApi.insertNumber1(this.tenureFile, this.businessFile, this.communicationFile, this.adminId, this.custNm, this.bRegNo, this.nmineeDivCd, this.saveSendNums, this.bizrAuthYn, this.custSeq, this.bRegNo)
const response = await sendNumMgtApi.insertNumber1(this.communicationFile,this.tenureFile,this.businessFile, this.identificationCardFile, this.identificationEvidenceFile, this.adminId, this.custNm, this.bRegNo, this.nmineeDivCd, this.saveSendNums, this.bizrAuthYn, this.custSeq, this.bRegNo)
const result = response.data;
// if(this.communicationFile.size >= 1024){
// alert('파일용량test')
// return false;
// }
if (result != null && result.retCode == "0000") {
if(result.data.list != null && result.data.list.length > 0){
@@ -516,12 +784,11 @@ export default {
}
} else if (this.nmineeDivCd === '02') {
const response = await sendNumMgtApi.insertNumber2(this.trustFile, this.communicationFile, this.warrantFile, this.deputyFile, this.tenureFile, this.otherBusinessFile, this.businessFile, this.adminId, this.custNm, this.bRegNo, this.nmineeDivCd, this.saveSendNums, this.bizrAuthYn, this.custSeq, this.bRegNo)
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;
if (result != null && result.retCode == "0000") {
if(result.data.list != null){
if(result.data.list.length > 0){
if(result.data.list != null && result.data.list.length > 0){
this.row.title = '발신번호 등록';
var failMsg = "";
for(var i=0; i<result.data.list.length; i++){
@@ -529,7 +796,6 @@ export default {
}
this.row.failMsg = failMsg
this.$parent.$refs.commmonModal.sendNumFailMsgOpen(this.row);
}
}
this.toComplete()
}else if(result != null && result.retCode == "4021") {
@@ -599,12 +865,7 @@ export default {
this.$parent.$refs.commmonModal.alertModalOpen(this.row);
return false
}
if (this.tenureFile == null) {
this.row.title = '발신번호 등록';
this.row.msg1 = '재직증명서 파일을 업로드 하세요.';
this.$parent.$refs.commmonModal.alertModalOpen(this.row);
return false
}
if (this.businessFile == null) {
this.row.title = '발신번호 등록';
this.row.msg1 = '사업자등록증 파일을 업로드 하세요.';
@@ -613,33 +874,33 @@ export default {
}
} else {
if (this.trustFile == null) {
if (this.delegationFile == null) {
this.row.title = '발신번호 등록';
this.row.msg1 = '위임-수임관계 확인 서 파일을 업로드 하세요.';
this.row.msg1 = '위임-수임사간 관계 확인 서 파일을 업로드 하세요.';
this.$parent.$refs.commmonModal.alertModalOpen(this.row);
return false
}
if (this.warrantFile == null) {
if (this.attorneyFile == null) {
this.row.title = '발신번호 등록';
this.row.msg1 = '위임장 파일을 업로드 하세요.';
this.$parent.$refs.commmonModal.alertModalOpen(this.row);
return false
}
if (this.deputyFile == null) {
if (this.corporateCertificateFile == null) {
this.row.title = '발신번호 등록';
this.row.msg1 = '대리인 신분증 사본 인증 파일을 업로드 하세요.';
this.row.msg1 = '법인인감증명서 파일을 업로드 하세요.';
this.$parent.$refs.commmonModal.alertModalOpen(this.row);
return false
}
if (this.communicationFile == null) {
if (this.delegatedBusinessFile == null) {
this.row.title = '발신번호 등록';
this.row.msg1 = '통신서비스 이용증명원 파일을 업로드 하세요.';
this.row.msg1 = '위임사 사업자등록증 파일을 업로드 하세요.';
this.$parent.$refs.commmonModal.alertModalOpen(this.row);
return false
}
if (this.tenureFile == null) {
if (this.authorizedBusinessFile == null) {
this.row.title = '발신번호 등록';
this.row.msg1 = '재직증명서 파일을 업로드 하세요.';
this.row.msg1 = '수임사 사업자등록증 파일을 업로드 하세요.';
this.$parent.$refs.commmonModal.alertModalOpen(this.row);
return false
}
@@ -649,12 +910,6 @@ export default {
this.$parent.$refs.commmonModal.alertModalOpen(this.row);
return false
}
if (this.businessFile == null) {
this.row.title = '발신번호 등록';
this.row.msg1 = '사업자등록증 파일을 업로드 하세요.';
this.$parent.$refs.commmonModal.alertModalOpen(this.row);
return false
}
}
}
return true;

View File

@@ -1,4 +1,5 @@
import httpClient from '@/common/http-client';
import axios from 'axios';
// 공통 코드.
const getCommCode = (params) => {
@@ -46,11 +47,13 @@ const insertNumber = (adminId, custNm, bRegNo, nmineeDivCd, numberInputs, bizrAu
};
// 사업자가 등록 요청.
const insertNumber1 = (tenureFile, businessFile, communicationFile, adminId, custNm, bRegNo, nmineeDivCd, numberInputs, bizrAuthYn, custSeq) => {
const insertNumber1 = (communicationFile, tenureFile ,businessFile, identificationCardFile, identificationEvidenceFile,adminId, custNm, bRegNo, nmineeDivCd, numberInputs, bizrAuthYn, custSeq) => {
let formData = new FormData();
formData.append("communicationFile", communicationFile);
formData.append("tenureFile", tenureFile);
formData.append("businessFile", businessFile);
formData.append("communicationFile", communicationFile);
formData.append("identificationCardFile", identificationCardFile);
formData.append("identificationEvidenceFile", identificationEvidenceFile);
const row = {}
row.adminId = adminId
@@ -74,16 +77,19 @@ const insertNumber1 = (tenureFile, businessFile, communicationFile, adminId, cus
};
// 타사업자가 등록 요청.
const insertNumber2 = (trustFile, warrantFile, communicationFile, deputyFile, tenureFile, otherBusinessFile, businessFile, adminId, custNm, bRegNo, nmineeDivCd, numberInputs, bizrAuthYn, custSeq) => {
const insertNumber2 = (communicationFile, delegationFile, attorneyFile, otherBusinessFile, delegatedIdentificationFile, delegateCertificateFile, delegatedBusinessFile, authorizedBusinessFile, corporateCertificateFile, identificationCardFile, identificationEvidenceFile, adminId, custNm, bRegNo, nmineeDivCd, numberInputs, bizrAuthYn, custSeq) => {
let formData = new FormData();
formData.append("trustFile", trustFile);
formData.append("warrantFile", warrantFile);
formData.append("deputyFile", deputyFile);
formData.append("tenureFile", tenureFile);
formData.append("businessFile", businessFile);
formData.append("otherBusinessFile", otherBusinessFile);
formData.append("communicationFile", communicationFile);
formData.append("delegationFile", delegationFile);
formData.append("attorneyFile", attorneyFile);
formData.append("otherBusinessFile", otherBusinessFile);
formData.append("delegatedIdentificationFile", delegatedIdentificationFile);
formData.append("delegateCertificateFile", delegateCertificateFile);
formData.append("delegatedBusinessFile", delegatedBusinessFile);
formData.append("authorizedBusinessFile", authorizedBusinessFile);
formData.append("corporateCertificateFile", corporateCertificateFile);
formData.append("identificationCardFile", identificationCardFile);
formData.append("identificationEvidenceFile", identificationEvidenceFile);
const row = {}
row.adminId = adminId
row.custNm = custNm
@@ -110,6 +116,39 @@ const updateAppr = (params) => {
return httpClient.post('/api/v1/bo/sendNumMgt/updateAppr', params, {withCredentials: false});
}
const fileDownload = (params) => {
console.log(params)
axios({
method: 'POST',
url: '/api/v1/bo/sendNumMgt/filedownload',
responseType: 'blob',
headers: '',
data: params,
params: params
})
.then(response => {
const fileName = params.docTitle
const data = response.data
if (!data) {
return
}
console.log(response)
const url = window.URL.createObjectURL(new Blob([data]))
const a = document.createElement('a')
a.style.display = 'none'
a.href = url
a.setAttribute('download', fileName)
document.body.appendChild(a)
a.click()
document.body.removeChild(a)
window.URL.revokeObjectURL(url)
})
.catch(response => {
console.log(response)
alert(error);
})
}
export default {
getCommCode,
numberDetail,
@@ -120,4 +159,5 @@ export default {
apprDetail,
updateAppr,
deleteNumber,
fileDownload
}

View File

@@ -21,7 +21,7 @@
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model.trim="grid.params.searchText1"
@keypress="onlyNum" @input="onlyNum" maxlength="10" @keyup.enter="search"/>
</div>
<div class="select_box id">
<div class="select_box">
<label for="right" class="label">명의자 구분</label>
<select name="" id="" v-model="searchType2" @keyup.enter="search">
<option value="">전체</option>

View File

@@ -33,7 +33,7 @@
<option value="02">어드민</option>
</select>
</div>
<div class="select_box id">
<div class="select_box">
<label for="right" class="label">상세검색</label>
<select name="" id="category" v-model="searchType4" @keyup.enter="search">
<option value="regNo">발신번호</option>

View File

@@ -17,7 +17,7 @@
<option value="D">삭제</option>
</select>
</div>
<div class="select_box id">
<div class="select_box">
<label for="searchType" class="label">상세검색</label>
<select name="" id="searchType" v-model="searchType2" @keyup.enter="search">
<option value="custNm">고객사명</option>
@@ -25,7 +25,7 @@
<option value="sendProfile">발신프로필</option>
</select>
</div>
<div class="input_box id">
<div class="input_box">
<label for="search" class="label">검색어</label>
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model.trim="grid.params.searchText1"
maxlength="100" @keyup.enter="search"/>

View File

@@ -7,7 +7,7 @@
</div>
<div class="search_wrap">
<div class="select_box">
<label for="stat" class="label">사용상태</label>
<label for="stat" class="label">상태</label>
<select name="" id="stat" v-model="searchType1" @keyup.enter="search">
<option value="">전체</option>
<option value="Y">사용</option>
@@ -22,7 +22,7 @@
<option value="authCd">인증코드</option>
</select>
</div>
<div class="input_box id">
<div class="input_box">
<label for="search" class="label">검색어</label>
<input type="text" id="id1" placeholder="검색어 입력" v-model.trim="grid.params.searchText1"
@keyup.enter="search" maxlength="100"/>

View File

@@ -12,7 +12,7 @@
</div>
<div class="search_wrap">
<div class="input_box cal">
<label for="right" class="label txt">날짜</label>
<label for="right" class="label txt">조회기간</label>
<p> 최대 1개월까지 조회 가능합니다.</p>
<div class="term">
<!--
@@ -402,7 +402,7 @@ export default {
}
let today = moment().format('YYYYMMDDHHmmss');
const saveFileName = `사업자별 일별통계_${today}.xlsx`;
const saveFileName = `사업자별 일별통계_${today}.xls`;
const data = await this.getExcelDataDown();
let options = {

View File

@@ -12,7 +12,7 @@
</div>
<div class="search_wrap">
<div class="input_box cal">
<label for="right" class="label txt">날짜</label>
<label for="right" class="label txt">조회기간</label>
<p> 최대 3개월까지 조회 가능합니다.</p>
<div class="term">
<div class="group" style="width:500px;">
@@ -414,7 +414,7 @@ export default {
}
let today = moment().format('YYYYMMDDHHmmss');
const saveFileName = `사업자별 월별통계_${today}.xlsx`;
const saveFileName = `사업자별 월별통계_${today}.xls`;
const data = await this.getExcelDataDown();
let options = {

View File

@@ -11,7 +11,7 @@
</div>
<div class="search_wrap">
<div class="input_box cal">
<label for="right" class="label txt">날짜</label>
<label for="right" class="label txt">조회기간</label>
<p> 최대 1개월까지 조회 가능합니다.</p>
<div class="term">
<span class="custom_input icon_date">
@@ -281,7 +281,7 @@ export default {
}
let today = moment().format('YYYYMMDDHHmmss');
const saveFileName = `일별통계_${today}.xlsx`;
const saveFileName = `일별통계_${today}.xls`;
let options = {
header: this.excelHeader,

View File

@@ -11,7 +11,7 @@
</div>
<div class="search_wrap">
<div class="input_box cal">
<label for="right" class="label txt">날짜</label>
<label for="right" class="label txt">조회기간</label>
<p> 최대 3개월까지 조회 가능합니다.</p>
<div class="term">
<span class="custom_input icon_date">
@@ -253,7 +253,37 @@ export default {
}
let today = moment().format('YYYYMMDDHHmmss');
const saveFileName = `월별통계_${today}.xlsx`;
const saveFileName = `월별통계_${today}.xls`;
var styles = `<style>
.table{width: 100%;}
.head-title{border-top: 1px solid #dee2e6; border-bottom: 2px solid #dee2e6;}
.first-td{background-color: #F2F2F2;}
.last-td{background-color: #dee2e6;}
body {
font-size:12px;
font-family: 맑은 고딕;
}
table {
font-size:12px;
text-align:center;
}
table th {
text-align:center;
height:28px;
background-color: #f0f0f0;
}
table td {
text-align:left;
height:26px;
mso-number-format:"\@";
}
.number {
text-align:right !important;
mso-number-format:General !important;
white-space:nowrap !important;
}
</style>`;
let options = {
header: this.excelHeader,

View File

@@ -11,9 +11,13 @@ import io.swagger.annotations.ApiResponses;
import kr.co.uplus.ez.api.sendNumMgt.dto.*;
import kr.co.uplus.ez.common.components.ValidComponents;
import kr.co.uplus.ez.common.data.ApiResponseCode;
import kr.co.uplus.ez.common.utils.FileIoUtils;
import kr.co.uplus.ez.common.utils.FileUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartHttpServletRequest;
@@ -21,6 +25,9 @@ import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.File;
import java.io.IOException;
import java.util.LinkedHashMap;
@RestController
@RequestMapping(value = "api/v1/bo/sendNumMgt")
@@ -33,6 +40,12 @@ public class SendNumMgtController {
@Autowired
ValidComponents validComponents;
private static int BUFFERSIZE = 1024;
@Value("${file-resource.info.sendNumber.path:/efs/admin/sendNumber/}")
private String sendNumUploadPath;
/**
* date : 2022. 4. 25.
* auth : ckr
@@ -197,8 +210,19 @@ public class SendNumMgtController {
return sendNumService.updateAppr(updateApprReqDto);
}
/** 제출 서류 다운로드 */
public void downloadDoc(HttpServletRequest request, HttpServletResponse response, InsertNumberFile docFile) {
sendNumService.downloadDoc(request, response, docFile);
/**
* 파일 다운로드
* @throws IOException
*/
@SuppressWarnings("rawtypes")
@RequestMapping("/filedownload")
public void filedownload(@RequestBody LinkedHashMap param, HttpServletRequest request, HttpServletResponse response) throws IOException {
logger.debug(param.toString());
File file = new File(param.get("filePath") + File.separator + param.get("fileNm"));
if (file.exists()) {
FileIoUtils.fileDownload(file, request, response );
}
}
}

View File

@@ -56,4 +56,6 @@ interface SendNumMgtMapper {
int upddateSndrnoReg(UpdateApprReqDto updateApprReqDto);
int updateSvcUser(UpdateApprReqDto updateApprReqDto);
InsertNumberFile selectDownload(InsertNumberFile insertNumberFile);
}

View File

@@ -1,12 +1,19 @@
package kr.co.uplus.ez.api.sendNumMgt;
import kr.co.uplus.ez.api.sendNumMgt.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 kr.co.uplus.ez.common.utils.DateUtils;
import kr.co.uplus.ez.common.utils.FileIoUtils;
import kr.co.uplus.ez.common.utils.FileUtil;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
@@ -19,13 +26,46 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.co.uplus.ez.api.sendNumMgt.dto.DeleteNumberReqDto;
import kr.co.uplus.ez.api.sendNumMgt.dto.DeleteNumberResDto;
import kr.co.uplus.ez.api.sendNumMgt.dto.DetailNumber;
import kr.co.uplus.ez.api.sendNumMgt.dto.DetailNumberReqDto;
import kr.co.uplus.ez.api.sendNumMgt.dto.DetailNumberResDto;
import kr.co.uplus.ez.api.sendNumMgt.dto.InsertNumber;
import kr.co.uplus.ez.api.sendNumMgt.dto.InsertNumberFile;
import kr.co.uplus.ez.api.sendNumMgt.dto.InsertNumberReqDto;
import kr.co.uplus.ez.api.sendNumMgt.dto.InsertNumberRes;
import kr.co.uplus.ez.api.sendNumMgt.dto.InsertNumberResDto;
import kr.co.uplus.ez.api.sendNumMgt.dto.ProfileInfo;
import kr.co.uplus.ez.api.sendNumMgt.dto.ProfileListReqDto;
import kr.co.uplus.ez.api.sendNumMgt.dto.ProfileListRes;
import kr.co.uplus.ez.api.sendNumMgt.dto.ProfileListResDto;
import kr.co.uplus.ez.api.sendNumMgt.dto.SendAdminInfo;
import kr.co.uplus.ez.api.sendNumMgt.dto.SendAdminListReqDto;
import kr.co.uplus.ez.api.sendNumMgt.dto.SendAdminListRes;
import kr.co.uplus.ez.api.sendNumMgt.dto.SendAdminListResDto;
import kr.co.uplus.ez.api.sendNumMgt.dto.SendNumberApprDetailReqDto;
import kr.co.uplus.ez.api.sendNumMgt.dto.SendNumberApprDetailRes;
import kr.co.uplus.ez.api.sendNumMgt.dto.SendNumberApprDetailResDto;
import kr.co.uplus.ez.api.sendNumMgt.dto.SendNumberApprDoc;
import kr.co.uplus.ez.api.sendNumMgt.dto.SendNumberApprInfo;
import kr.co.uplus.ez.api.sendNumMgt.dto.SendNumberApprListReqDto;
import kr.co.uplus.ez.api.sendNumMgt.dto.SendNumberApprListRes;
import kr.co.uplus.ez.api.sendNumMgt.dto.SendNumberApprListResDto;
import kr.co.uplus.ez.api.sendNumMgt.dto.SendNumberApprNum;
import kr.co.uplus.ez.api.sendNumMgt.dto.SendNumberInfo;
import kr.co.uplus.ez.api.sendNumMgt.dto.SendNumberListReqDto;
import kr.co.uplus.ez.api.sendNumMgt.dto.SendNumberListRes;
import kr.co.uplus.ez.api.sendNumMgt.dto.SendNumberListResDto;
import kr.co.uplus.ez.api.sendNumMgt.dto.UpdateApprReqDto;
import kr.co.uplus.ez.api.sendNumMgt.dto.UpdateApprResDto;
import kr.co.uplus.ez.api.sendNumMgt.dto.UpdateApprSendNumber;
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 kr.co.uplus.ez.common.utils.DateUtils;
import kr.co.uplus.ez.common.utils.FileIoUtils;
import kr.co.uplus.ez.common.utils.FileUtil;
@Service
public class SendNumMgtService {
@@ -40,6 +80,8 @@ public class SendNumMgtService {
@Value("${file-resource.info.sendNumber.path:/efs/admin/sendNumber/}")
private String sendNumUploadPath;
private static int BUFFERSIZE = 1024;
/**
* date : 2022. 4. 25.
* auth : ckr
@@ -207,7 +249,6 @@ public class SendNumMgtService {
insertNumberReqDto.setReqSttusCd(Const.SNDRNO_REQ_STTUS_CD_COMPLETED); // 요청 상태 코드(01:승인대기, 02:처리완료)
insertNumberReqDto.setCmpltDt(nowDate); // 완료일시
// 2. 발신번호등록 테이블 저장. (EZ_SNDRNO_REG)
sendNumMgtMapper.insertNumber(insertNumberReqDto);
@@ -250,39 +291,87 @@ public class SendNumMgtService {
List<MultipartFile> multipartFiles = new ArrayList<>();
List<String> docTpCd = new ArrayList<>();
if(StringUtils.equals(Const.SNDRNO_TP_CD_SELF, insertNumberReqDto.getNmineeDivCd())) {
// 통신서비스이용 증명원 '01'
MultipartFile communicationFile = multipartRequest.getFile("communicationFile");
multipartFiles.add(communicationFile);
docTpCd.add(Const.SNDRNO_DOC_TP_CD_01);
// 통신서비스이용 증명 '01'
MultipartFile communicationFile = multipartRequest.getFile("communicationFile");
multipartFiles.add(communicationFile);
docTpCd.add(Const.SNDRNO_DOC_TP_CD_01);
// 재직증명 '02'
MultipartFile tenureFile = multipartRequest.getFile("tenureFile");
multipartFiles.add(tenureFile);
docTpCd.add(Const.SNDRNO_DOC_TP_CD_02);
// 재직증명서 '02'
MultipartFile tenureFile = multipartRequest.getFile("tenureFile");
multipartFiles.add(tenureFile);
docTpCd.add(Const.SNDRNO_DOC_TP_CD_02);
// 사업자등록증 '06'
MultipartFile businessFile = multipartRequest.getFile("businessFile");
multipartFiles.add(businessFile);
docTpCd.add(Const.SNDRNO_DOC_TP_CD_06);
// 사업자등록증 '06'
MultipartFile businessFile = multipartRequest.getFile("businessFile");
multipartFiles.add(businessFile);
docTpCd.add(Const.SNDRNO_DOC_TP_CD_06);
// 신분증(본인확인) '13'
MultipartFile identificationCardFile = multipartRequest.getFile("identificationCardFile");
multipartFiles.add(identificationCardFile);
docTpCd.add(Const.SNDRNO_DOC_TP_CD_13);
if(StringUtils.equals(Const.SNDRNO_TP_CD_OTHER, insertNumberReqDto.getNmineeDivCd())){
// 위임-수임관계 확인 서류 '03'
MultipartFile trustFile = multipartRequest.getFile("trustFile");
multipartFiles.add(trustFile);
// 재직증명서(본인확인) '14'
MultipartFile identificationEvidenceFile = multipartRequest.getFile("identificationEvidenceFile");
multipartFiles.add(identificationEvidenceFile);
docTpCd.add(Const.SNDRNO_DOC_TP_CD_14);
} else if(StringUtils.equals(Const.SNDRNO_TP_CD_OTHER, insertNumberReqDto.getNmineeDivCd())){
// 위임-수임사간 관계 확인 문서 '03'
MultipartFile delegationFile = multipartRequest.getFile("delegationFile");
multipartFiles.add(delegationFile);
docTpCd.add(Const.SNDRNO_DOC_TP_CD_03);
// 위임장 '04'
MultipartFile warrantFile = multipartRequest.getFile("warrantFile");
multipartFiles.add(warrantFile);
MultipartFile attorneyFile = multipartRequest.getFile("attorneyFile");
multipartFiles.add(attorneyFile);
docTpCd.add(Const.SNDRNO_DOC_TP_CD_04);
// 대리인신분증 사본인증 '05'
MultipartFile deputyFile = multipartRequest.getFile("deputyFile");
multipartFiles.add(deputyFile);
docTpCd.add(Const.SNDRNO_DOC_TP_CD_05);
// 타사업자등록증 '07'
// 법인인감증명서 '12'
MultipartFile corporateCertificateFile = multipartRequest.getFile("corporateCertificateFile");
multipartFiles.add(corporateCertificateFile);
docTpCd.add(Const.SNDRNO_DOC_TP_CD_12);
// 위임사 사업자등록증 '10'
MultipartFile delegatedBusinessFile = multipartRequest.getFile("delegatedBusinessFile");
multipartFiles.add(delegatedBusinessFile);
docTpCd.add(Const.SNDRNO_DOC_TP_CD_10);
// 수임사 사업자등록증 '11'
MultipartFile authorizedBusinessFile = multipartRequest.getFile("authorizedBusinessFile");
multipartFiles.add(authorizedBusinessFile);
docTpCd.add(Const.SNDRNO_DOC_TP_CD_11);
// 통신서비스이용 증명원 '01'
MultipartFile communicationFile = multipartRequest.getFile("communicationFile");
multipartFiles.add(communicationFile);
docTpCd.add(Const.SNDRNO_DOC_TP_CD_01);
// 위임사 재직증명서(임직원 신청시) '09'
MultipartFile delegateCertificateFile = multipartRequest.getFile("delegateCertificateFile");
multipartFiles.add(delegateCertificateFile);
docTpCd.add(Const.SNDRNO_DOC_TP_CD_09);
// 위임사 신분증(임직원 신청시) '08'
MultipartFile delegatedIdentificationFile = multipartRequest.getFile("delegatedIdentificationFile");
multipartFiles.add(delegatedIdentificationFile);
docTpCd.add(Const.SNDRNO_DOC_TP_CD_08);
// 사업자등록증(타사) '07'
MultipartFile otherBusinessFile = multipartRequest.getFile("otherBusinessFile");
multipartFiles.add(otherBusinessFile);
docTpCd.add(Const.SNDRNO_DOC_TP_CD_07);
// 신분증(본인확인) '13'
MultipartFile identificationCardFile = multipartRequest.getFile("identificationCardFile");
multipartFiles.add(identificationCardFile);
docTpCd.add(Const.SNDRNO_DOC_TP_CD_13);
// 재직증명서(본인확인) '14'
MultipartFile identificationEvidenceFile = multipartRequest.getFile("identificationEvidenceFile");
multipartFiles.add(identificationEvidenceFile);
docTpCd.add(Const.SNDRNO_DOC_TP_CD_14);
}
// 파일 업로드 및 테이블 저장 (등록 서류 관련).
@@ -294,13 +383,15 @@ public class SendNumMgtService {
String titleNm = multipartFiles.get(j).getOriginalFilename();
long fileSize = multipartFiles.get(j).getSize();
// File Upload.
FileUtil.upload(multipartFiles.get(j), fileNm, path);
// 발신번호 등록 서류 테이블 저장 (EZ_SNDRNO_DOC).
InsertNumberFile insertFile = new InsertNumberFile();
insertFile.setRegReqNo(regReqNo);
insertFile.setDocNo(docTpCd.get(j).substring(1,2));
insertFile.setDocNo("" + Integer.parseInt(docTpCd.get(j)));
//insertFile.setDocNo(docTpCd.get(j).substring(1,2));
insertFile.setDocTpCd(docTpCd.get(j));
insertFile.setDocTitle(titleNm);
insertFile.setFileNm(fileNm);
@@ -323,14 +414,6 @@ public class SendNumMgtService {
return new InsertNumberResDto(ApiResponseCode.SUCCESS, insertNumberRes);
}
// 다운로트 제출서류
public void downloadDoc(HttpServletRequest request, HttpServletResponse response, InsertNumberFile docFile) {
String fileName = "";
//FileUtil.download(request, response, sendNumUploadPath, fileName);
}
/**
* date : 2022. 4. 25.
* auth : ckr
@@ -449,9 +532,11 @@ public class SendNumMgtService {
// 발신번호 문서 목록 조회
List<SendNumberApprDoc> sendNumberApprDocs = sendNumMgtMapper.selectSndnoDocList(sendNumberApprDetailReqDto);
sendNumberApprDetailRes.setNumList(sendNumberApprNums);
sendNumberApprDetailRes.setDocList(sendNumberApprDocs);
return new SendNumberApprDetailResDto(ApiResponseCode.SUCCESS, sendNumberApprDetailRes);
}
@@ -523,6 +608,110 @@ public class SendNumMgtService {
return new UpdateApprResDto(ApiResponseCode.SUCCESS);
}
/**
* InputStream을 종료한다.
*/
public static void close(InputStream stream) {
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* OutputStream을 종료한다.
*/
public static void close(OutputStream stream) {
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* FileOutputStream을 종료한다.
*/
public static void close(FileOutputStream stream) {
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 다운로드 제출서류
public void downloadDoc(HttpServletRequest request, HttpServletResponse response, InsertNumberFile docFile) {
SendNumMgtMapper sendNumMgtMapper = sqlSessionSlave.getMapper(SendNumMgtMapper.class);
InsertNumberFile selectFile = sendNumMgtMapper.selectDownload(docFile);
String fileName = selectFile.getDocTitle();
String oriFileName = selectFile.getFileNm();
String filePath = selectFile.getFilePath();
StringBuilder sb = new StringBuilder("D:" + filePath + "/");
sb.append(oriFileName);
String saveFileName = sb.toString();
String contentType = request.getContentType();
File file = new File(saveFileName);
long fileLength = file.length();
String extension = FilenameUtils.getExtension(saveFileName).toLowerCase();
// 형태에 따른 컨텐트 타입 분류
if ("zip".equals(extension)) response.setContentType("application/zip");
else if ("xls".equals(extension) || "xlsx".equals(extension)) response.setContentType("application/vnd.ms-excel;charset=UTF-8");
else if ("ppt".equals(extension) || "pptx".equals(extension)) response.setContentType("application/x-mspowerpoint");
else if ("doc".equals(extension) || "docx".equals(extension)) response.setContentType("application/msword");
else if ("pdf".equals(extension)) response.setContentType("application/x-msdownload");
else if ("jpg".equals(extension)) response.setContentType("image/jpg");
else if ("gif".equals(extension)) response.setContentType("image/gif");
else if ("png".equals(extension)) response.setContentType("image/png");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ";");
response.setHeader("Content-Transfer-Encoding", "binary");
response.setHeader("Content-Type", contentType);
response.setHeader("Content-Length", "" + fileLength);
response.setHeader("Pragma", "no-cache;");
response.setHeader("Expires", "-1;");
try {
FileInputStream fis = new FileInputStream(saveFileName);
OutputStream out = response.getOutputStream();
int readCount = 0;
byte[] buffer = new byte[BUFFERSIZE];
while ((readCount = fis.read(buffer)) != -1 ) {
out.write(buffer, 0 , readCount);
}
out.flush();
}catch(Exception e) {
throw new RuntimeException("File load Error");
}
//String fileStr ="C:/efs/admin/sendNumber/2022/07/2022071018012_2_02.PNG.png";
//String fileStr = filePath + oriFileName;
// String fileStr = filePath + oriFileName;
// File file = new File(fileStr);
// FileUtil.download(request, response, fileName, file);
}
}

View File

@@ -15,4 +15,7 @@ public class InsertNumberFile implements Serializable{
private String filePath;
private long fileSize;
private String regId;
private String regDt;
private String chgId;
private String chgDt;
}

View File

@@ -24,29 +24,48 @@ public class InsertNumberReqDto implements Serializable{
@ApiModelProperty(example = "사업자인증여부", name = "사업자인증여부", dataType = "String")
private String bizrAuthYn;
private List<InsertNumber> list;
@ApiModelProperty(example = "file", name = "위임-수임관계 확인 서류", dataType = "String")
private MultipartFile trustFile;
@ApiModelProperty(example = "file", name = "위임장", dataType = "String")
private MultipartFile warrantFile;
@ApiModelProperty(example = "file", name = "대리인 신분증 사본 인증", dataType = "String")
private MultipartFile deputyFile;
@ApiModelProperty(example = "file", name = "통신서비스 이용증명원", dataType = "String")
private MultipartFile communicationFile;
@ApiModelProperty(example = "file", name = "재직증명서", dataType = "String")
private MultipartFile tenureFile;
@ApiModelProperty(example = "file", name = "통신서비스 이용증명원", dataType = "String")
private MultipartFile communicationFile;
@ApiModelProperty(example = "file", name = "위임-수임사간 관계 확인 문서", dataType = "String")
private MultipartFile delegationFile;
@ApiModelProperty(example = "file", name = "위임장", dataType = "String")
private MultipartFile attorneyFile;
@ApiModelProperty(example = "file", name = "사업자등록증", dataType = "String")
private MultipartFile businessFile;
@ApiModelProperty(example = "file", name = "사업자등록증", dataType = "String")
@ApiModelProperty(example = "file", name = "사업자등록증(타사)", dataType = "String")
private MultipartFile otherBusinessFile;
@ApiModelProperty(example = "file", name = "위임사 신분증(임직원 신청시)", dataType = "String")
private MultipartFile delegatedIdentificationFile;
@ApiModelProperty(example = "file", name = "위임사 재직증명서(임직원 신청시)", dataType = "String")
private MultipartFile delegateCertificateFile;
@ApiModelProperty(example = "file", name = "위임사 사업자등록증", dataType = "String")
private MultipartFile delegatedBusinessFile;
@ApiModelProperty(example = "file", name = "수임사 사업자등록증", dataType = "String")
private MultipartFile authorizedBusinessFile;
@ApiModelProperty(example = "file", name = "법인인감증명서", dataType = "String")
private MultipartFile corporateCertificateFile;
@ApiModelProperty(example = "file", name = "신분증(본인확인)", dataType = "String")
private MultipartFile identificationCardFile;
@ApiModelProperty(example = "file", name = "재직증명서(본인확인)", dataType = "String")
private MultipartFile identificationEvidenceFile;
// @ApiModelProperty(example = "발신번호 인증 파일", name = "발신번호 인증 파일", dataType = "String")
// private List<MultipartFile> authSendNum;

View File

@@ -32,5 +32,15 @@ public class SendNumberApprDetailRes implements Serializable{
private String slfAuthHp;
@ApiModelProperty(example = "메모", name = "메모", dataType = "String")
private String memo;
@ApiModelProperty(example = "파일이름", name = "파일이름", dataType = "String", hidden = true)
private String fileNm;
@ApiModelProperty(example = "서류 넘버", name = "서류 넘버", dataType = "String", hidden = true)
private String docNo;
@ApiModelProperty(example = "서류 제목", name = "서류 제목", dataType = "String", hidden = true)
private String docTitle;
@ApiModelProperty(example = "서류 유형 코드", name = "서류 유형 코드", dataType = "String", hidden = true)
private String docTpCd;
@ApiModelProperty(example = "파일 경로", name = "파일 경로", dataType = "String", hidden = true)
private String filePath;
}

View File

@@ -19,6 +19,8 @@ public class SendNumberApprDoc implements Serializable{
private String fileNm;
@ApiModelProperty(example = "파일 구분", name = "파일 구분", dataType = "String")
private String docTpCd;
@ApiModelProperty(example = "등록 요청 번호", name = "등록 요청 번호", dataType = "String", hidden = true)
private String regReqNo;
@ApiModelProperty(example = "서류 번호", name = "서류 번호", dataType = "String", hidden = true)
private String docNo;
}

View File

@@ -90,13 +90,34 @@ public class Const {
/** 가입 상태 코드(99:해지) */
public static final String SUBS_STTUS_CD_BREAK = "99";
/** 통신서비스 이용증명원 */
public static final String SNDRNO_DOC_TP_CD_01 = "01";
/** 재직증명서 */
public static final String SNDRNO_DOC_TP_CD_02 = "02";
/** 위임-수임사간 관계 확인 문서 */
public static final String SNDRNO_DOC_TP_CD_03 = "03";
/** 위임장 */
public static final String SNDRNO_DOC_TP_CD_04 = "04";
/** 삭제처리 */
public static final String SNDRNO_DOC_TP_CD_05 = "05";
/** 사업자등록증 */
public static final String SNDRNO_DOC_TP_CD_06 = "06";
/** 사업자등록증(타사) */
public static final String SNDRNO_DOC_TP_CD_07 = "07";
/** 위임사 신분증(임직원 신청시) */
public static final String SNDRNO_DOC_TP_CD_08 = "08";
/** 위임사 재직증명서(임직원 신청시) */
public static final String SNDRNO_DOC_TP_CD_09 = "09";
/** 위임사 사업자등록증 */
public static final String SNDRNO_DOC_TP_CD_10 = "10";
/** 수임사 사업자등록증 */
public static final String SNDRNO_DOC_TP_CD_11 = "11";
/** 법인인감증명서 */
public static final String SNDRNO_DOC_TP_CD_12 = "12";
/** 신분증 (본인확인) */
public static final String SNDRNO_DOC_TP_CD_13 = "13";
/** 재직증명서(본인확인) */
public static final String SNDRNO_DOC_TP_CD_14 = "14";
public static final String SNDRNO_TP_CD_SELF = "01";
public static final String SNDRNO_TP_CD_OTHER = "02";

View File

@@ -54,7 +54,8 @@ public class FileUtil {
boolean saved = true;
String extension = FilenameUtils.getExtension(file.getOriginalFilename()).toLowerCase();
String fos = path + File.separatorChar + filename + "." + extension;
// String fos = path + File.separatorChar + filename + "." + extension;
String fos = path + File.separatorChar + filename;
InputStream inputStream = null;
OutputStream outputStream = null;

View File

@@ -299,6 +299,7 @@
,DOC_TITLE
,FILE_NM
,FILE_PATH
,FILE_SIZE
,REG_ID
,REG_DT
,CHG_ID
@@ -311,6 +312,7 @@
,#{docTitle}
,#{fileNm}
,#{filePath}
,#{fileSize}
,#{regId}
,NOW()
,#{regId}
@@ -593,7 +595,9 @@
esd.DOC_TITLE ,
esd.FILE_PATH ,
esd.FILE_NM ,
esd.DOC_TP_CD
esd.DOC_TP_CD,
esd.REG_REQ_NO,
esd.DOC_NO
FROM
hubez_common.EZ_SNDRNO_DOC esd
WHERE
@@ -644,4 +648,23 @@
USER_ID = #{adminId}
</update>
<select id="selectDownload" parameterType="kr.co.uplus.ez.api.sendNumMgt.dto.InsertNumberFile" resultType="kr.co.uplus.ez.api.sendNumMgt.dto.InsertNumberFile">
/* sendNumMgt-mapper.xml(selectDownload) */
select
REG_REQ_NO,
DOC_NO ,
DOC_TP_CD ,
DOC_TITLE ,
FILE_NM ,
FILE_PATH ,
FILE_SIZE ,
REG_ID ,
REG_DT ,
CHG_ID ,
CHG_DT
from hubez_common.EZ_SNDRNO_DOC
WHERE REG_REQ_NO = #{regReqNo}
and DOC_NO = #{docNo}
</select>
</mapper>

View File

@@ -6,6 +6,7 @@ xssconfig :
- "/multiSendTemplateApi/insertMultiSendTemplate"
- "/projectApi/manage/saveProject"
- "/api/v1/bo/sendNumMgt/insertNumber"
- "/api/v1/bo/sendNumMgt/filedownload"
#- "/uc/test/testUrl" #테스트 URL
#xss 제외 방식(allow, except)
#allow - escape-characters 를 모두 적용 후 allow-elements 만 <, > 치환