Merge remote-tracking branch 'origin/jenkins_with_weblogic' into jenkins_with_weblogic
This commit is contained in:
@@ -87,6 +87,12 @@
|
|||||||
resource="com/eactive/eai/rms/onl/statistics/backup/MonthlyBackup-oracle.xml" />
|
resource="com/eactive/eai/rms/onl/statistics/backup/MonthlyBackup-oracle.xml" />
|
||||||
<sqlMap
|
<sqlMap
|
||||||
resource="com/eactive/eai/rms/onl/statistics/backup/Tseaist01-oracle.xml" />
|
resource="com/eactive/eai/rms/onl/statistics/backup/Tseaist01-oracle.xml" />
|
||||||
|
|
||||||
|
<sqlMap
|
||||||
|
resource="com/eactive/eai/rms/onl/transaction/Layout.xml" />
|
||||||
|
<sqlMap
|
||||||
|
resource="com/eactive/eai/rms/onl/transaction/Layout-oracle.xml" />
|
||||||
|
|
||||||
|
|
||||||
<!-- 통계 -->
|
<!-- 통계 -->
|
||||||
<!-- 통계/매체별통계 -->
|
<!-- 통계/매체별통계 -->
|
||||||
|
|||||||
@@ -391,18 +391,28 @@
|
|||||||
postData.searchEndDateTime = searchEndDate;
|
postData.searchEndDateTime = searchEndDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var summaryPostData = getSearchForJqgrid("cmd", "LIST_SUMMARY");
|
||||||
|
if (searchStartDate) {
|
||||||
|
summaryPostData.searchStartDateTime = searchStartDate;
|
||||||
|
}
|
||||||
|
if (searchEndDate) {
|
||||||
|
summaryPostData.searchEndDateTime = searchEndDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
$("#gridSummary").setGridParam({ url: url, postData: summaryPostData, page: 1 }).trigger("reloadGrid");
|
||||||
$("#grid").setGridParam({ url: url, postData: postData, page: 1 }).trigger("reloadGrid");
|
$("#grid").setGridParam({ url: url, postData: postData, page: 1 }).trigger("reloadGrid");
|
||||||
fetchChartData();
|
fetchChartData();
|
||||||
}
|
}
|
||||||
|
|
||||||
function exportToExcel() {
|
function exportToExcel(isSummary) {
|
||||||
console.log('[Excel Export] Starting...');
|
var cmdType = isSummary ? 'EXCEL_EXPORT_SUMMARY' : 'EXCEL_EXPORT';
|
||||||
|
console.log('[Excel Export] Starting... (type: ' + cmdType + ')');
|
||||||
|
|
||||||
var searchStartDate = $("input[name=searchStartDateTime]").val().replace(/-/g, "");
|
var searchStartDate = $("input[name=searchStartDateTime]").val().replace(/-/g, "");
|
||||||
var searchEndDate = $("input[name=searchEndDateTime]").val().replace(/-/g, "");
|
var searchEndDate = $("input[name=searchEndDateTime]").val().replace(/-/g, "");
|
||||||
|
|
||||||
var postData = {
|
var postData = {
|
||||||
cmd: 'EXCEL_EXPORT',
|
cmd: cmdType,
|
||||||
searchApiName: $("input[name=searchApiName]").val(),
|
searchApiName: $("input[name=searchApiName]").val(),
|
||||||
searchGwInstanceId: $("input[name=searchGwInstanceId]").val(),
|
searchGwInstanceId: $("input[name=searchGwInstanceId]").val(),
|
||||||
searchBizDivCode: $("input[name=searchBizDivCode]").val(),
|
searchBizDivCode: $("input[name=searchBizDivCode]").val(),
|
||||||
@@ -517,6 +527,50 @@
|
|||||||
xhr.send(formData.join('&'));
|
xhr.send(formData.join('&'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function listSummary() {
|
||||||
|
var gridPostData = getSearchForJqgrid("cmd", "LIST_SUMMARY");
|
||||||
|
$('#gridSummary').jqGrid({
|
||||||
|
datatype: "json",
|
||||||
|
mtype: 'POST',
|
||||||
|
postData: gridPostData,
|
||||||
|
colNames: [
|
||||||
|
'API명',
|
||||||
|
'총건수', '성공', 'Timeout', '시스템오류', '업무오류',
|
||||||
|
'Seq900 Timeout', 'Seq900 시스템오류', 'Seq900 업무오류',
|
||||||
|
'평균응답(ms)', '최소응답(ms)', '최대응답(ms)'
|
||||||
|
],
|
||||||
|
colModel: [
|
||||||
|
{ name: 'apiName', align: 'left', width: '250', sortable: false },
|
||||||
|
{ name: 'totalCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'successCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'timeoutCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'systemErrCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'bizErrCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'seq900TimeoutCnt', align: 'right', width: '100', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'seq900SystemErrCnt', align: 'right', width: '120', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'seq900BizErrCnt', align: 'right', width: '100', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'avgRespTime', align: 'right', width: '90', formatter: decimalFormatter, sortable: false },
|
||||||
|
{ name: 'minRespTime', align: 'right', width: '90', formatter: decimalFormatter, sortable: false },
|
||||||
|
{ name: 'maxRespTime', align: 'right', width: '90', formatter: decimalFormatter, sortable: false }
|
||||||
|
],
|
||||||
|
jsonReader: { repeatitems: false },
|
||||||
|
pager: $('#pagerSummary'),
|
||||||
|
page: '${param.page}',
|
||||||
|
rowNum: '${rmsDefaultRowNum}',
|
||||||
|
autoheight: true,
|
||||||
|
height: 'auto',
|
||||||
|
autowidth: true,
|
||||||
|
viewrecords: true,
|
||||||
|
rowList: eval('[${rmsDefaultRowList}]'),
|
||||||
|
loadComplete: function(d) {
|
||||||
|
var colModel = $(this).getGridParam("colModel");
|
||||||
|
for (var i = 0; i < colModel.length; i++) {
|
||||||
|
$(this).setColProp(colModel[i].name, { sortable: false });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function list() {
|
function list() {
|
||||||
var gridPostData = getSearchForJqgrid("cmd", "LIST");
|
var gridPostData = getSearchForJqgrid("cmd", "LIST");
|
||||||
$('#grid').jqGrid({
|
$('#grid').jqGrid({
|
||||||
@@ -603,17 +657,23 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
initCharts();
|
initCharts();
|
||||||
|
listSummary();
|
||||||
list();
|
list();
|
||||||
search();
|
search();
|
||||||
fetchChartData();
|
fetchChartData();
|
||||||
|
resizeJqGridWidth('gridSummary', 'content_middle', '1200');
|
||||||
resizeJqGridWidth('grid', 'content_middle', '1200');
|
resizeJqGridWidth('grid', 'content_middle', '1200');
|
||||||
|
|
||||||
$("#btn_search").click(function() {
|
$("#btn_search").click(function() {
|
||||||
search();
|
search();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$("#btn_excel_export_summary").click(function() {
|
||||||
|
exportToExcel(true);
|
||||||
|
});
|
||||||
|
|
||||||
$("#btn_excel_export").click(function() {
|
$("#btn_excel_export").click(function() {
|
||||||
exportToExcel();
|
exportToExcel(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
$("input[name^=search]").keydown(function(key) {
|
$("input[name^=search]").keydown(function(key) {
|
||||||
@@ -646,9 +706,6 @@
|
|||||||
<button type="button" class="cssbtn" id="btn_search" level="R">
|
<button type="button" class="cssbtn" id="btn_search" level="R">
|
||||||
<i class="material-icons">search</i> <%= localeMessage.getString("button.search") %>
|
<i class="material-icons">search</i> <%= localeMessage.getString("button.search") %>
|
||||||
</button>
|
</button>
|
||||||
<button type="button" class="cssbtn" id="btn_excel_export" level="R">
|
|
||||||
<i class="material-icons">file_download</i> Excel 다운로드
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="title" id="title">API 일별 통계</div>
|
<div class="title" id="title">API 일별 통계</div>
|
||||||
<table class="search_condition" cellspacing="0">
|
<table class="search_condition" cellspacing="0">
|
||||||
@@ -704,8 +761,30 @@
|
|||||||
<div id="callChart" class="chart"></div>
|
<div id="callChart" class="chart"></div>
|
||||||
<div id="respChart" class="chart"></div>
|
<div id="respChart" class="chart"></div>
|
||||||
</div>
|
</div>
|
||||||
<table id="grid"></table>
|
|
||||||
<div id="pager"></div>
|
<!-- 요약 그리드 -->
|
||||||
|
<div style="margin-top: 20px;">
|
||||||
|
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;">
|
||||||
|
<div class="title" style="margin: 0;">API명별 요약 통계</div>
|
||||||
|
<button type="button" class="cssbtn" id="btn_excel_export_summary" level="R">
|
||||||
|
<i class="material-icons">file_download</i> Excel 다운로드 (요약)
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<table id="gridSummary"></table>
|
||||||
|
<div id="pagerSummary"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 상세 그리드 -->
|
||||||
|
<div style="margin-top: 20px;">
|
||||||
|
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;">
|
||||||
|
<div class="title" style="margin: 0;">상세 통계</div>
|
||||||
|
<button type="button" class="cssbtn" id="btn_excel_export" level="R">
|
||||||
|
<i class="material-icons">file_download</i> Excel 다운로드 (상세)
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<table id="grid"></table>
|
||||||
|
<div id="pager"></div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -403,15 +403,23 @@
|
|||||||
postData.searchEndDateTime = searchDate + "23";
|
postData.searchEndDateTime = searchDate + "23";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var summaryPostData = getSearchForJqgrid("cmd", "LIST_SUMMARY");
|
||||||
|
if (searchDate) {
|
||||||
|
summaryPostData.searchStartDateTime = searchDate + "00";
|
||||||
|
summaryPostData.searchEndDateTime = searchDate + "23";
|
||||||
|
}
|
||||||
|
|
||||||
|
$("#gridSummary").setGridParam({ url: url, postData: summaryPostData, page: 1 }).trigger("reloadGrid");
|
||||||
$("#grid").setGridParam({ url: url, postData: postData, page: 1 }).trigger("reloadGrid");
|
$("#grid").setGridParam({ url: url, postData: postData, page: 1 }).trigger("reloadGrid");
|
||||||
fetchChartData();
|
fetchChartData();
|
||||||
}
|
}
|
||||||
|
|
||||||
function exportToExcel() {
|
function exportToExcel(isSummary) {
|
||||||
console.log('[Excel Export] Starting...');
|
var cmdType = isSummary ? 'EXCEL_EXPORT_SUMMARY' : 'EXCEL_EXPORT';
|
||||||
|
console.log('[Excel Export] Starting... (type: ' + cmdType + ')');
|
||||||
|
|
||||||
var postData = {
|
var postData = {
|
||||||
cmd: 'EXCEL_EXPORT',
|
cmd: cmdType,
|
||||||
searchApiName: $("input[name=searchApiName]").val(),
|
searchApiName: $("input[name=searchApiName]").val(),
|
||||||
searchGwInstanceId: $("input[name=searchGwInstanceId]").val(),
|
searchGwInstanceId: $("input[name=searchGwInstanceId]").val(),
|
||||||
searchBizDivCode: $("input[name=searchBizDivCode]").val(),
|
searchBizDivCode: $("input[name=searchBizDivCode]").val(),
|
||||||
@@ -525,6 +533,50 @@
|
|||||||
xhr.send(formData.join('&'));
|
xhr.send(formData.join('&'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function listSummary() {
|
||||||
|
var gridPostData = getSearchForJqgrid("cmd", "LIST_SUMMARY");
|
||||||
|
$('#gridSummary').jqGrid({
|
||||||
|
datatype: "json",
|
||||||
|
mtype: 'POST',
|
||||||
|
postData: gridPostData,
|
||||||
|
colNames: [
|
||||||
|
'API명',
|
||||||
|
'총건수', '성공', 'Timeout', '시스템오류', '업무오류',
|
||||||
|
'Seq900 Timeout', 'Seq900 시스템오류', 'Seq900 업무오류',
|
||||||
|
'평균응답(ms)', '최소응답(ms)', '최대응답(ms)'
|
||||||
|
],
|
||||||
|
colModel: [
|
||||||
|
{ name: 'apiName', align: 'left', width: '250', sortable: false },
|
||||||
|
{ name: 'totalCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'successCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'timeoutCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'systemErrCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'bizErrCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'seq900TimeoutCnt', align: 'right', width: '100', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'seq900SystemErrCnt', align: 'right', width: '120', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'seq900BizErrCnt', align: 'right', width: '100', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'avgRespTime', align: 'right', width: '90', formatter: decimalFormatter, sortable: false },
|
||||||
|
{ name: 'minRespTime', align: 'right', width: '90', formatter: decimalFormatter, sortable: false },
|
||||||
|
{ name: 'maxRespTime', align: 'right', width: '90', formatter: decimalFormatter, sortable: false }
|
||||||
|
],
|
||||||
|
jsonReader: { repeatitems: false },
|
||||||
|
pager: $('#pagerSummary'),
|
||||||
|
page: '${param.page}',
|
||||||
|
rowNum: '${rmsDefaultRowNum}',
|
||||||
|
autoheight: true,
|
||||||
|
height: 'auto',
|
||||||
|
autowidth: true,
|
||||||
|
viewrecords: true,
|
||||||
|
rowList: eval('[${rmsDefaultRowList}]'),
|
||||||
|
loadComplete: function(d) {
|
||||||
|
var colModel = $(this).getGridParam("colModel");
|
||||||
|
for (var i = 0; i < colModel.length; i++) {
|
||||||
|
$(this).setColProp(colModel[i].name, { sortable: false });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function list() {
|
function list() {
|
||||||
var gridPostData = getSearchForJqgrid("cmd", "LIST");
|
var gridPostData = getSearchForJqgrid("cmd", "LIST");
|
||||||
$('#grid').jqGrid({
|
$('#grid').jqGrid({
|
||||||
@@ -589,17 +641,23 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
initCharts();
|
initCharts();
|
||||||
|
listSummary();
|
||||||
list();
|
list();
|
||||||
search();
|
search();
|
||||||
fetchChartData();
|
fetchChartData();
|
||||||
|
resizeJqGridWidth('gridSummary', 'content_middle', '1200');
|
||||||
resizeJqGridWidth('grid', 'content_middle', '1200');
|
resizeJqGridWidth('grid', 'content_middle', '1200');
|
||||||
|
|
||||||
$("#btn_search").click(function() {
|
$("#btn_search").click(function() {
|
||||||
search();
|
search();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$("#btn_excel_export_summary").click(function() {
|
||||||
|
exportToExcel(true);
|
||||||
|
});
|
||||||
|
|
||||||
$("#btn_excel_export").click(function() {
|
$("#btn_excel_export").click(function() {
|
||||||
exportToExcel();
|
exportToExcel(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
$("input[name^=search]").keydown(function(key) {
|
$("input[name^=search]").keydown(function(key) {
|
||||||
@@ -632,9 +690,6 @@
|
|||||||
<button type="button" class="cssbtn" id="btn_search" level="R">
|
<button type="button" class="cssbtn" id="btn_search" level="R">
|
||||||
<i class="material-icons">search</i> <%= localeMessage.getString("button.search") %>
|
<i class="material-icons">search</i> <%= localeMessage.getString("button.search") %>
|
||||||
</button>
|
</button>
|
||||||
<button type="button" class="cssbtn" id="btn_excel_export" level="R">
|
|
||||||
<i class="material-icons">file_download</i> Excel 다운로드
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="title" id="title">API 시간별 통계</div>
|
<div class="title" id="title">API 시간별 통계</div>
|
||||||
<table class="search_condition" cellspacing="0">
|
<table class="search_condition" cellspacing="0">
|
||||||
@@ -688,8 +743,30 @@
|
|||||||
<div id="callChart" class="chart"></div>
|
<div id="callChart" class="chart"></div>
|
||||||
<div id="respChart" class="chart"></div>
|
<div id="respChart" class="chart"></div>
|
||||||
</div>
|
</div>
|
||||||
<table id="grid"></table>
|
|
||||||
<div id="pager"></div>
|
<!-- 요약 그리드 -->
|
||||||
|
<div style="margin-top: 20px;">
|
||||||
|
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;">
|
||||||
|
<div class="title" style="margin: 0;">API명별 요약 통계</div>
|
||||||
|
<button type="button" class="cssbtn" id="btn_excel_export_summary" level="R">
|
||||||
|
<i class="material-icons">file_download</i> Excel 다운로드 (요약)
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<table id="gridSummary"></table>
|
||||||
|
<div id="pagerSummary"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 상세 그리드 -->
|
||||||
|
<div style="margin-top: 20px;">
|
||||||
|
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;">
|
||||||
|
<div class="title" style="margin: 0;">상세 통계</div>
|
||||||
|
<button type="button" class="cssbtn" id="btn_excel_export" level="R">
|
||||||
|
<i class="material-icons">file_download</i> Excel 다운로드 (상세)
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<table id="grid"></table>
|
||||||
|
<div id="pager"></div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -411,15 +411,23 @@
|
|||||||
postData.searchEndDateTime = range.end;
|
postData.searchEndDateTime = range.end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var summaryPostData = getSearchForJqgrid("cmd", "LIST_SUMMARY");
|
||||||
|
if (range) {
|
||||||
|
summaryPostData.searchStartDateTime = range.start;
|
||||||
|
summaryPostData.searchEndDateTime = range.end;
|
||||||
|
}
|
||||||
|
|
||||||
|
$("#gridSummary").setGridParam({ url: url, postData: summaryPostData, page: 1 }).trigger("reloadGrid");
|
||||||
$("#grid").setGridParam({ url: url, postData: postData, page: 1 }).trigger("reloadGrid");
|
$("#grid").setGridParam({ url: url, postData: postData, page: 1 }).trigger("reloadGrid");
|
||||||
fetchChartData(range);
|
fetchChartData(range);
|
||||||
}
|
}
|
||||||
|
|
||||||
function exportToExcel() {
|
function exportToExcel(isSummary) {
|
||||||
console.log('[Excel Export] Starting...');
|
var cmdType = isSummary ? 'EXCEL_EXPORT_SUMMARY' : 'EXCEL_EXPORT';
|
||||||
|
console.log('[Excel Export] Starting... (type: ' + cmdType + ')');
|
||||||
|
|
||||||
var postData = {
|
var postData = {
|
||||||
cmd: 'EXCEL_EXPORT',
|
cmd: cmdType,
|
||||||
searchApiName: $("input[name=searchApiName]").val(),
|
searchApiName: $("input[name=searchApiName]").val(),
|
||||||
searchGwInstanceId: $("input[name=searchGwInstanceId]").val(),
|
searchGwInstanceId: $("input[name=searchGwInstanceId]").val(),
|
||||||
searchBizDivCode: $("input[name=searchBizDivCode]").val(),
|
searchBizDivCode: $("input[name=searchBizDivCode]").val(),
|
||||||
@@ -536,7 +544,51 @@
|
|||||||
xhr.send(formData.join('&'));
|
xhr.send(formData.join('&'));
|
||||||
}
|
}
|
||||||
|
|
||||||
function list() {
|
function listSummary() {
|
||||||
|
var gridPostData = getSearchForJqgrid("cmd", "LIST_SUMMARY");
|
||||||
|
$('#gridSummary').jqGrid({
|
||||||
|
datatype: "json",
|
||||||
|
mtype: 'POST',
|
||||||
|
postData: gridPostData,
|
||||||
|
colNames: [
|
||||||
|
'API명',
|
||||||
|
'총건수', '성공', 'Timeout', '시스템오류', '업무오류',
|
||||||
|
'Seq900 Timeout', 'Seq900 시스템오류', 'Seq900 업무오류',
|
||||||
|
'평균응답(ms)', '최소응답(ms)', '최대응답(ms)'
|
||||||
|
],
|
||||||
|
colModel: [
|
||||||
|
{ name: 'apiName', align: 'left', width: '250', sortable: false },
|
||||||
|
{ name: 'totalCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'successCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'timeoutCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'systemErrCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'bizErrCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'seq900TimeoutCnt', align: 'right', width: '100', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'seq900SystemErrCnt', align: 'right', width: '120', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'seq900BizErrCnt', align: 'right', width: '100', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'avgRespTime', align: 'right', width: '90', formatter: decimalFormatter, sortable: false },
|
||||||
|
{ name: 'minRespTime', align: 'right', width: '90', formatter: decimalFormatter, sortable: false },
|
||||||
|
{ name: 'maxRespTime', align: 'right', width: '90', formatter: decimalFormatter, sortable: false }
|
||||||
|
],
|
||||||
|
jsonReader: { repeatitems: false },
|
||||||
|
pager: $('#pagerSummary'),
|
||||||
|
page: '${param.page}',
|
||||||
|
rowNum: '${rmsDefaultRowNum}',
|
||||||
|
autoheight: true,
|
||||||
|
height: 'auto',
|
||||||
|
autowidth: true,
|
||||||
|
viewrecords: true,
|
||||||
|
rowList: eval('[${rmsDefaultRowList}]'),
|
||||||
|
loadComplete: function(d) {
|
||||||
|
var colModel = $(this).getGridParam("colModel");
|
||||||
|
for (var i = 0; i < colModel.length; i++) {
|
||||||
|
$(this).setColProp(colModel[i].name, { sortable: false });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function listDetail() {
|
||||||
var gridPostData = getSearchForJqgrid("cmd", "LIST");
|
var gridPostData = getSearchForJqgrid("cmd", "LIST");
|
||||||
$('#grid').jqGrid({
|
$('#grid').jqGrid({
|
||||||
datatype: "json",
|
datatype: "json",
|
||||||
@@ -626,17 +678,23 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
initCharts();
|
initCharts();
|
||||||
list();
|
listSummary();
|
||||||
|
listDetail();
|
||||||
search();
|
search();
|
||||||
fetchChartData(validateAndAdjustDateRange());
|
fetchChartData(validateAndAdjustDateRange());
|
||||||
|
resizeJqGridWidth('gridSummary', 'content_middle', '1200');
|
||||||
resizeJqGridWidth('grid', 'content_middle', '1200');
|
resizeJqGridWidth('grid', 'content_middle', '1200');
|
||||||
|
|
||||||
$("#btn_search").click(function() {
|
$("#btn_search").click(function() {
|
||||||
search();
|
search();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$("#btn_excel_export_summary").click(function() {
|
||||||
|
exportToExcel(true);
|
||||||
|
});
|
||||||
|
|
||||||
$("#btn_excel_export").click(function() {
|
$("#btn_excel_export").click(function() {
|
||||||
exportToExcel();
|
exportToExcel(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
$("input[name^=search]").keydown(function(key) {
|
$("input[name^=search]").keydown(function(key) {
|
||||||
@@ -674,9 +732,6 @@
|
|||||||
<button type="button" class="cssbtn" id="btn_search" level="R">
|
<button type="button" class="cssbtn" id="btn_search" level="R">
|
||||||
<i class="material-icons">search</i> <%= localeMessage.getString("button.search") %>
|
<i class="material-icons">search</i> <%= localeMessage.getString("button.search") %>
|
||||||
</button>
|
</button>
|
||||||
<button type="button" class="cssbtn" id="btn_excel_export" level="R">
|
|
||||||
<i class="material-icons">file_download</i> Excel 다운로드
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="title" id="title">API 분단위 통계</div>
|
<div class="title" id="title">API 분단위 통계</div>
|
||||||
<table class="search_condition" cellspacing="0">
|
<table class="search_condition" cellspacing="0">
|
||||||
@@ -734,8 +789,30 @@
|
|||||||
<div id="callChart" class="chart"></div>
|
<div id="callChart" class="chart"></div>
|
||||||
<div id="respChart" class="chart"></div>
|
<div id="respChart" class="chart"></div>
|
||||||
</div>
|
</div>
|
||||||
<table id="grid"></table>
|
|
||||||
<div id="pager"></div>
|
<!-- 요약 그리드 -->
|
||||||
|
<div style="margin-top: 20px;">
|
||||||
|
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;">
|
||||||
|
<div class="title" style="margin: 0;">API명별 요약 통계</div>
|
||||||
|
<button type="button" class="cssbtn" id="btn_excel_export_summary" level="R">
|
||||||
|
<i class="material-icons">file_download</i> Excel 다운로드 (요약)
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<table id="gridSummary"></table>
|
||||||
|
<div id="pagerSummary"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 상세 그리드 -->
|
||||||
|
<div style="margin-top: 20px;">
|
||||||
|
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;">
|
||||||
|
<div class="title" style="margin: 0;">상세 통계</div>
|
||||||
|
<button type="button" class="cssbtn" id="btn_excel_export" level="R">
|
||||||
|
<i class="material-icons">file_download</i> Excel 다운로드 (상세)
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<table id="grid"></table>
|
||||||
|
<div id="pager"></div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -395,18 +395,28 @@
|
|||||||
postData.searchEndDateTime = searchEndDate;
|
postData.searchEndDateTime = searchEndDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var summaryPostData = getSearchForJqgrid("cmd", "LIST_SUMMARY");
|
||||||
|
if (searchStartDate) {
|
||||||
|
summaryPostData.searchStartDateTime = searchStartDate;
|
||||||
|
}
|
||||||
|
if (searchEndDate) {
|
||||||
|
summaryPostData.searchEndDateTime = searchEndDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
$("#gridSummary").setGridParam({ url: url, postData: summaryPostData, page: 1 }).trigger("reloadGrid");
|
||||||
$("#grid").setGridParam({ url: url, postData: postData, page: 1 }).trigger("reloadGrid");
|
$("#grid").setGridParam({ url: url, postData: postData, page: 1 }).trigger("reloadGrid");
|
||||||
fetchChartData();
|
fetchChartData();
|
||||||
}
|
}
|
||||||
|
|
||||||
function exportToExcel() {
|
function exportToExcel(isSummary) {
|
||||||
console.log('[Excel Export] Starting...');
|
var cmdType = isSummary ? 'EXCEL_EXPORT_SUMMARY' : 'EXCEL_EXPORT';
|
||||||
|
console.log('[Excel Export] Starting... (type: ' + cmdType + ')');
|
||||||
|
|
||||||
var searchStartDate = $("input[name=searchStartDateTime]").val().replace(/-/g, "");
|
var searchStartDate = $("input[name=searchStartDateTime]").val().replace(/-/g, "");
|
||||||
var searchEndDate = $("input[name=searchEndDateTime]").val().replace(/-/g, "");
|
var searchEndDate = $("input[name=searchEndDateTime]").val().replace(/-/g, "");
|
||||||
|
|
||||||
var postData = {
|
var postData = {
|
||||||
cmd: 'EXCEL_EXPORT',
|
cmd: cmdType,
|
||||||
searchApiName: $("input[name=searchApiName]").val(),
|
searchApiName: $("input[name=searchApiName]").val(),
|
||||||
searchGwInstanceId: $("input[name=searchGwInstanceId]").val(),
|
searchGwInstanceId: $("input[name=searchGwInstanceId]").val(),
|
||||||
searchBizDivCode: $("input[name=searchBizDivCode]").val(),
|
searchBizDivCode: $("input[name=searchBizDivCode]").val(),
|
||||||
@@ -521,6 +531,50 @@
|
|||||||
xhr.send(formData.join('&'));
|
xhr.send(formData.join('&'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function listSummary() {
|
||||||
|
var gridPostData = getSearchForJqgrid("cmd", "LIST_SUMMARY");
|
||||||
|
$('#gridSummary').jqGrid({
|
||||||
|
datatype: "json",
|
||||||
|
mtype: 'POST',
|
||||||
|
postData: gridPostData,
|
||||||
|
colNames: [
|
||||||
|
'API명',
|
||||||
|
'총건수', '성공', 'Timeout', '시스템오류', '업무오류',
|
||||||
|
'Seq900 Timeout', 'Seq900 시스템오류', 'Seq900 업무오류',
|
||||||
|
'평균응답(ms)', '최소응답(ms)', '최대응답(ms)'
|
||||||
|
],
|
||||||
|
colModel: [
|
||||||
|
{ name: 'apiName', align: 'left', width: '250', sortable: false },
|
||||||
|
{ name: 'totalCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'successCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'timeoutCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'systemErrCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'bizErrCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'seq900TimeoutCnt', align: 'right', width: '100', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'seq900SystemErrCnt', align: 'right', width: '120', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'seq900BizErrCnt', align: 'right', width: '100', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'avgRespTime', align: 'right', width: '90', formatter: decimalFormatter, sortable: false },
|
||||||
|
{ name: 'minRespTime', align: 'right', width: '90', formatter: decimalFormatter, sortable: false },
|
||||||
|
{ name: 'maxRespTime', align: 'right', width: '90', formatter: decimalFormatter, sortable: false }
|
||||||
|
],
|
||||||
|
jsonReader: { repeatitems: false },
|
||||||
|
pager: $('#pagerSummary'),
|
||||||
|
page: '${param.page}',
|
||||||
|
rowNum: '${rmsDefaultRowNum}',
|
||||||
|
autoheight: true,
|
||||||
|
height: 'auto',
|
||||||
|
autowidth: true,
|
||||||
|
viewrecords: true,
|
||||||
|
rowList: eval('[${rmsDefaultRowList}]'),
|
||||||
|
loadComplete: function(d) {
|
||||||
|
var colModel = $(this).getGridParam("colModel");
|
||||||
|
for (var i = 0; i < colModel.length; i++) {
|
||||||
|
$(this).setColProp(colModel[i].name, { sortable: false });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function list() {
|
function list() {
|
||||||
var gridPostData = getSearchForJqgrid("cmd", "LIST");
|
var gridPostData = getSearchForJqgrid("cmd", "LIST");
|
||||||
$('#grid').jqGrid({
|
$('#grid').jqGrid({
|
||||||
@@ -593,17 +647,23 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
initCharts();
|
initCharts();
|
||||||
|
listSummary();
|
||||||
list();
|
list();
|
||||||
search();
|
search();
|
||||||
fetchChartData();
|
fetchChartData();
|
||||||
|
resizeJqGridWidth('gridSummary', 'content_middle', '1200');
|
||||||
resizeJqGridWidth('grid', 'content_middle', '1200');
|
resizeJqGridWidth('grid', 'content_middle', '1200');
|
||||||
|
|
||||||
$("#btn_search").click(function() {
|
$("#btn_search").click(function() {
|
||||||
search();
|
search();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$("#btn_excel_export_summary").click(function() {
|
||||||
|
exportToExcel(true);
|
||||||
|
});
|
||||||
|
|
||||||
$("#btn_excel_export").click(function() {
|
$("#btn_excel_export").click(function() {
|
||||||
exportToExcel();
|
exportToExcel(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
$("input[name^=search]").keydown(function(key) {
|
$("input[name^=search]").keydown(function(key) {
|
||||||
@@ -636,9 +696,6 @@
|
|||||||
<button type="button" class="cssbtn" id="btn_search" level="R">
|
<button type="button" class="cssbtn" id="btn_search" level="R">
|
||||||
<i class="material-icons">search</i> <%= localeMessage.getString("button.search") %>
|
<i class="material-icons">search</i> <%= localeMessage.getString("button.search") %>
|
||||||
</button>
|
</button>
|
||||||
<button type="button" class="cssbtn" id="btn_excel_export" level="R">
|
|
||||||
<i class="material-icons">file_download</i> Excel 다운로드
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="title" id="title">API 월별 통계</div>
|
<div class="title" id="title">API 월별 통계</div>
|
||||||
<table class="search_condition" cellspacing="0">
|
<table class="search_condition" cellspacing="0">
|
||||||
@@ -694,8 +751,30 @@
|
|||||||
<div id="callChart" class="chart"></div>
|
<div id="callChart" class="chart"></div>
|
||||||
<div id="respChart" class="chart"></div>
|
<div id="respChart" class="chart"></div>
|
||||||
</div>
|
</div>
|
||||||
<table id="grid"></table>
|
|
||||||
<div id="pager"></div>
|
<!-- 요약 그리드 -->
|
||||||
|
<div style="margin-top: 20px;">
|
||||||
|
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;">
|
||||||
|
<div class="title" style="margin: 0;">API명별 요약 통계</div>
|
||||||
|
<button type="button" class="cssbtn" id="btn_excel_export_summary" level="R">
|
||||||
|
<i class="material-icons">file_download</i> Excel 다운로드 (요약)
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<table id="gridSummary"></table>
|
||||||
|
<div id="pagerSummary"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 상세 그리드 -->
|
||||||
|
<div style="margin-top: 20px;">
|
||||||
|
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;">
|
||||||
|
<div class="title" style="margin: 0;">상세 통계</div>
|
||||||
|
<button type="button" class="cssbtn" id="btn_excel_export" level="R">
|
||||||
|
<i class="material-icons">file_download</i> Excel 다운로드 (상세)
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<table id="grid"></table>
|
||||||
|
<div id="pager"></div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -369,18 +369,28 @@
|
|||||||
postData.searchEndDateTime = searchEndDate;
|
postData.searchEndDateTime = searchEndDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var summaryPostData = getSearchForJqgrid("cmd", "LIST_SUMMARY");
|
||||||
|
if (searchStartDate) {
|
||||||
|
summaryPostData.searchStartDateTime = searchStartDate;
|
||||||
|
}
|
||||||
|
if (searchEndDate) {
|
||||||
|
summaryPostData.searchEndDateTime = searchEndDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
$("#gridSummary").setGridParam({ url: url, postData: summaryPostData, page: 1 }).trigger("reloadGrid");
|
||||||
$("#grid").setGridParam({ url: url, postData: postData, page: 1 }).trigger("reloadGrid");
|
$("#grid").setGridParam({ url: url, postData: postData, page: 1 }).trigger("reloadGrid");
|
||||||
fetchChartData();
|
fetchChartData();
|
||||||
}
|
}
|
||||||
|
|
||||||
function exportToExcel() {
|
function exportToExcel(isSummary) {
|
||||||
console.log('[Excel Export] Starting...');
|
var cmdType = isSummary ? 'EXCEL_EXPORT_SUMMARY' : 'EXCEL_EXPORT';
|
||||||
|
console.log('[Excel Export] Starting... (type: ' + cmdType + ')');
|
||||||
|
|
||||||
var searchStartDate = $("input[name=searchStartDateTime]").val().replace(/-/g, "");
|
var searchStartDate = $("input[name=searchStartDateTime]").val().replace(/-/g, "");
|
||||||
var searchEndDate = $("input[name=searchEndDateTime]").val().replace(/-/g, "");
|
var searchEndDate = $("input[name=searchEndDateTime]").val().replace(/-/g, "");
|
||||||
|
|
||||||
var postData = {
|
var postData = {
|
||||||
cmd: 'EXCEL_EXPORT',
|
cmd: cmdType,
|
||||||
searchApiName: $("input[name=searchApiName]").val(),
|
searchApiName: $("input[name=searchApiName]").val(),
|
||||||
searchGwInstanceId: $("input[name=searchGwInstanceId]").val(),
|
searchGwInstanceId: $("input[name=searchGwInstanceId]").val(),
|
||||||
searchBizDivCode: $("input[name=searchBizDivCode]").val(),
|
searchBizDivCode: $("input[name=searchBizDivCode]").val(),
|
||||||
@@ -495,6 +505,50 @@
|
|||||||
xhr.send(formData.join('&'));
|
xhr.send(formData.join('&'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function listSummary() {
|
||||||
|
var gridPostData = getSearchForJqgrid("cmd", "LIST_SUMMARY");
|
||||||
|
$('#gridSummary').jqGrid({
|
||||||
|
datatype: "json",
|
||||||
|
mtype: 'POST',
|
||||||
|
postData: gridPostData,
|
||||||
|
colNames: [
|
||||||
|
'API명',
|
||||||
|
'총건수', '성공', 'Timeout', '시스템오류', '업무오류',
|
||||||
|
'Seq900 Timeout', 'Seq900 시스템오류', 'Seq900 업무오류',
|
||||||
|
'평균응답(ms)', '최소응답(ms)', '최대응답(ms)'
|
||||||
|
],
|
||||||
|
colModel: [
|
||||||
|
{ name: 'apiName', align: 'left', width: '250', sortable: false },
|
||||||
|
{ name: 'totalCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'successCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'timeoutCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'systemErrCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'bizErrCnt', align: 'right', width: '80', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'seq900TimeoutCnt', align: 'right', width: '100', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'seq900SystemErrCnt', align: 'right', width: '120', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'seq900BizErrCnt', align: 'right', width: '100', formatter: numberFormatter, sortable: false },
|
||||||
|
{ name: 'avgRespTime', align: 'right', width: '90', formatter: decimalFormatter, sortable: false },
|
||||||
|
{ name: 'minRespTime', align: 'right', width: '90', formatter: decimalFormatter, sortable: false },
|
||||||
|
{ name: 'maxRespTime', align: 'right', width: '90', formatter: decimalFormatter, sortable: false }
|
||||||
|
],
|
||||||
|
jsonReader: { repeatitems: false },
|
||||||
|
pager: $('#pagerSummary'),
|
||||||
|
page: '${param.page}',
|
||||||
|
rowNum: '${rmsDefaultRowNum}',
|
||||||
|
autoheight: true,
|
||||||
|
height: 'auto',
|
||||||
|
autowidth: true,
|
||||||
|
viewrecords: true,
|
||||||
|
rowList: eval('[${rmsDefaultRowList}]'),
|
||||||
|
loadComplete: function(d) {
|
||||||
|
var colModel = $(this).getGridParam("colModel");
|
||||||
|
for (var i = 0; i < colModel.length; i++) {
|
||||||
|
$(this).setColProp(colModel[i].name, { sortable: false });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function list() {
|
function list() {
|
||||||
var gridPostData = getSearchForJqgrid("cmd", "LIST");
|
var gridPostData = getSearchForJqgrid("cmd", "LIST");
|
||||||
$('#grid').jqGrid({
|
$('#grid').jqGrid({
|
||||||
@@ -562,17 +616,23 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
initCharts();
|
initCharts();
|
||||||
|
listSummary();
|
||||||
list();
|
list();
|
||||||
search();
|
search();
|
||||||
fetchChartData();
|
fetchChartData();
|
||||||
|
resizeJqGridWidth('gridSummary', 'content_middle', '1200');
|
||||||
resizeJqGridWidth('grid', 'content_middle', '1200');
|
resizeJqGridWidth('grid', 'content_middle', '1200');
|
||||||
|
|
||||||
$("#btn_search").click(function() {
|
$("#btn_search").click(function() {
|
||||||
search();
|
search();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$("#btn_excel_export_summary").click(function() {
|
||||||
|
exportToExcel(true);
|
||||||
|
});
|
||||||
|
|
||||||
$("#btn_excel_export").click(function() {
|
$("#btn_excel_export").click(function() {
|
||||||
exportToExcel();
|
exportToExcel(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
$("input[name^=search]").keydown(function(key) {
|
$("input[name^=search]").keydown(function(key) {
|
||||||
@@ -605,9 +665,6 @@
|
|||||||
<button type="button" class="cssbtn" id="btn_search" level="R">
|
<button type="button" class="cssbtn" id="btn_search" level="R">
|
||||||
<i class="material-icons">search</i> <%= localeMessage.getString("button.search") %>
|
<i class="material-icons">search</i> <%= localeMessage.getString("button.search") %>
|
||||||
</button>
|
</button>
|
||||||
<button type="button" class="cssbtn" id="btn_excel_export" level="R">
|
|
||||||
<i class="material-icons">file_download</i> Excel 다운로드
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="title" id="title">API 연간 통계</div>
|
<div class="title" id="title">API 연간 통계</div>
|
||||||
<table class="search_condition" cellspacing="0">
|
<table class="search_condition" cellspacing="0">
|
||||||
@@ -662,8 +719,30 @@
|
|||||||
<div id="callChart" class="chart"></div>
|
<div id="callChart" class="chart"></div>
|
||||||
<div id="respChart" class="chart"></div>
|
<div id="respChart" class="chart"></div>
|
||||||
</div>
|
</div>
|
||||||
<table id="grid"></table>
|
|
||||||
<div id="pager"></div>
|
<!-- 요약 그리드 -->
|
||||||
|
<div style="margin-top: 20px;">
|
||||||
|
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;">
|
||||||
|
<div class="title" style="margin: 0;">API명별 요약 통계</div>
|
||||||
|
<button type="button" class="cssbtn" id="btn_excel_export_summary" level="R">
|
||||||
|
<i class="material-icons">file_download</i> Excel 다운로드 (요약)
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<table id="gridSummary"></table>
|
||||||
|
<div id="pagerSummary"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 상세 그리드 -->
|
||||||
|
<div style="margin-top: 20px;">
|
||||||
|
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;">
|
||||||
|
<div class="title" style="margin: 0;">상세 통계</div>
|
||||||
|
<button type="button" class="cssbtn" id="btn_excel_export" level="R">
|
||||||
|
<i class="material-icons">file_download</i> Excel 다운로드 (상세)
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<table id="grid"></table>
|
||||||
|
<div id="pager"></div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
+112
@@ -1,11 +1,14 @@
|
|||||||
package com.eactive.eai.rms.data.entity.onl.kjb.statistics;
|
package com.eactive.eai.rms.data.entity.onl.kjb.statistics;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.RoundingMode;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
|
import org.springframework.data.domain.PageImpl;
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
@@ -13,8 +16,10 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import com.eactive.eai.data.jpa.AbstractDataService;
|
import com.eactive.eai.data.jpa.AbstractDataService;
|
||||||
import com.eactive.ext.kjb.statistics.ui.ApiStatsChartUI;
|
import com.eactive.ext.kjb.statistics.ui.ApiStatsChartUI;
|
||||||
import com.eactive.ext.kjb.statistics.ui.ApiStatsSearch;
|
import com.eactive.ext.kjb.statistics.ui.ApiStatsSearch;
|
||||||
|
import com.eactive.ext.kjb.statistics.ui.ApiStatsUI;
|
||||||
import com.querydsl.core.BooleanBuilder;
|
import com.querydsl.core.BooleanBuilder;
|
||||||
import com.querydsl.core.types.Projections;
|
import com.querydsl.core.types.Projections;
|
||||||
|
import com.querydsl.core.types.dsl.Expressions;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@Transactional
|
@Transactional
|
||||||
@@ -87,6 +92,113 @@ public class ApiStatsDayService
|
|||||||
.fetch();
|
.fetch();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API명별 요약 통계 조회 (GROUP BY apiName)
|
||||||
|
*/
|
||||||
|
public Page<ApiStatsUI> selectSummaryList(ApiStatsSearch search, Pageable pageable) {
|
||||||
|
QApiStatsDay q = QApiStatsDay.apiStatsDay;
|
||||||
|
BooleanBuilder builder = buildSearchConditions(q, search);
|
||||||
|
|
||||||
|
// 전체 건수 조회
|
||||||
|
Long total = getJPAQueryFactory()
|
||||||
|
.select(q.apiName.countDistinct())
|
||||||
|
.from(q)
|
||||||
|
.where(builder)
|
||||||
|
.fetchOne();
|
||||||
|
|
||||||
|
// 페이징 적용하여 조회
|
||||||
|
List<ApiStatsUI> results = getJPAQueryFactory()
|
||||||
|
.select(Projections.fields(ApiStatsUI.class,
|
||||||
|
q.apiName,
|
||||||
|
q.totalCnt.sum().as("totalCnt"),
|
||||||
|
q.successCnt.sum().as("successCnt"),
|
||||||
|
q.timeoutCnt.sum().as("timeoutCnt"),
|
||||||
|
q.systemErrCnt.sum().as("systemErrCnt"),
|
||||||
|
q.bizErrCnt.sum().as("bizErrCnt"),
|
||||||
|
q.seq900TimeoutCnt.sum().as("seq900TimeoutCnt"),
|
||||||
|
q.seq900SystemErrCnt.sum().as("seq900SystemErrCnt"),
|
||||||
|
q.seq900BizErrCnt.sum().as("seq900BizErrCnt"),
|
||||||
|
q.minRespTime.min().castToNum(BigDecimal.class).as("minRespTime"),
|
||||||
|
q.maxRespTime.max().castToNum(BigDecimal.class).as("maxRespTime"),
|
||||||
|
// 가중 평균: SUM(avg * successCnt) / SUM(successCnt)
|
||||||
|
Expressions.cases()
|
||||||
|
.when(q.successCnt.sum().gt(0))
|
||||||
|
.then(q.avgRespTime.multiply(q.successCnt).sum()
|
||||||
|
.divide(q.successCnt.sum()).castToNum(BigDecimal.class))
|
||||||
|
.otherwise((BigDecimal) null)
|
||||||
|
.as("avgRespTime")))
|
||||||
|
.from(q)
|
||||||
|
.where(builder)
|
||||||
|
.groupBy(q.apiName)
|
||||||
|
.orderBy(q.apiName.asc())
|
||||||
|
.offset(pageable.getOffset())
|
||||||
|
.limit(pageable.getPageSize())
|
||||||
|
.fetch();
|
||||||
|
|
||||||
|
// 소수점 3자리로 반올림
|
||||||
|
results.forEach(ui -> {
|
||||||
|
if (ui.getAvgRespTime() != null) {
|
||||||
|
ui.setAvgRespTime(ui.getAvgRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
if (ui.getMinRespTime() != null) {
|
||||||
|
ui.setMinRespTime(ui.getMinRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
if (ui.getMaxRespTime() != null) {
|
||||||
|
ui.setMaxRespTime(ui.getMaxRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return new PageImpl<>(results, pageable, total != null ? total.longValue() : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API명별 요약 통계 전체 조회 (Excel용)
|
||||||
|
*/
|
||||||
|
public List<ApiStatsUI> selectSummaryListForExcel(ApiStatsSearch search) {
|
||||||
|
QApiStatsDay q = QApiStatsDay.apiStatsDay;
|
||||||
|
BooleanBuilder builder = buildSearchConditions(q, search);
|
||||||
|
|
||||||
|
List<ApiStatsUI> results = getJPAQueryFactory()
|
||||||
|
.select(Projections.fields(ApiStatsUI.class,
|
||||||
|
q.apiName,
|
||||||
|
q.totalCnt.sum().as("totalCnt"),
|
||||||
|
q.successCnt.sum().as("successCnt"),
|
||||||
|
q.timeoutCnt.sum().as("timeoutCnt"),
|
||||||
|
q.systemErrCnt.sum().as("systemErrCnt"),
|
||||||
|
q.bizErrCnt.sum().as("bizErrCnt"),
|
||||||
|
q.seq900TimeoutCnt.sum().as("seq900TimeoutCnt"),
|
||||||
|
q.seq900SystemErrCnt.sum().as("seq900SystemErrCnt"),
|
||||||
|
q.seq900BizErrCnt.sum().as("seq900BizErrCnt"),
|
||||||
|
q.minRespTime.min().castToNum(BigDecimal.class).as("minRespTime"),
|
||||||
|
q.maxRespTime.max().castToNum(BigDecimal.class).as("maxRespTime"),
|
||||||
|
Expressions.cases()
|
||||||
|
.when(q.successCnt.sum().gt(0))
|
||||||
|
.then(q.avgRespTime.multiply(q.successCnt).sum()
|
||||||
|
.divide(q.successCnt.sum()).castToNum(BigDecimal.class))
|
||||||
|
.otherwise((BigDecimal) null)
|
||||||
|
.as("avgRespTime")))
|
||||||
|
.from(q)
|
||||||
|
.where(builder)
|
||||||
|
.groupBy(q.apiName)
|
||||||
|
.orderBy(q.apiName.asc())
|
||||||
|
.fetch();
|
||||||
|
|
||||||
|
// 소수점 3자리로 반올림
|
||||||
|
results.forEach(ui -> {
|
||||||
|
if (ui.getAvgRespTime() != null) {
|
||||||
|
ui.setAvgRespTime(ui.getAvgRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
if (ui.getMinRespTime() != null) {
|
||||||
|
ui.setMinRespTime(ui.getMinRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
if (ui.getMaxRespTime() != null) {
|
||||||
|
ui.setMaxRespTime(ui.getMaxRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
private BooleanBuilder buildSearchConditions(QApiStatsDay q, ApiStatsSearch search) {
|
private BooleanBuilder buildSearchConditions(QApiStatsDay q, ApiStatsSearch search) {
|
||||||
BooleanBuilder builder = new BooleanBuilder();
|
BooleanBuilder builder = new BooleanBuilder();
|
||||||
|
|
||||||
|
|||||||
+172
@@ -1,11 +1,14 @@
|
|||||||
package com.eactive.eai.rms.data.entity.onl.kjb.statistics;
|
package com.eactive.eai.rms.data.entity.onl.kjb.statistics;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.RoundingMode;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
|
import org.springframework.data.domain.PageImpl;
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
@@ -13,8 +16,10 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import com.eactive.eai.data.jpa.AbstractDataService;
|
import com.eactive.eai.data.jpa.AbstractDataService;
|
||||||
import com.eactive.ext.kjb.statistics.ui.ApiStatsChartUI;
|
import com.eactive.ext.kjb.statistics.ui.ApiStatsChartUI;
|
||||||
import com.eactive.ext.kjb.statistics.ui.ApiStatsSearch;
|
import com.eactive.ext.kjb.statistics.ui.ApiStatsSearch;
|
||||||
|
import com.eactive.ext.kjb.statistics.ui.ApiStatsUI;
|
||||||
import com.querydsl.core.BooleanBuilder;
|
import com.querydsl.core.BooleanBuilder;
|
||||||
import com.querydsl.core.types.Projections;
|
import com.querydsl.core.types.Projections;
|
||||||
|
import com.querydsl.core.types.dsl.Expressions;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@Transactional
|
@Transactional
|
||||||
@@ -148,6 +153,173 @@ public class ApiStatsHourService
|
|||||||
.fetch();
|
.fetch();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API명별 요약 통계 조회 (GROUP BY apiName)
|
||||||
|
*/
|
||||||
|
public Page<ApiStatsUI> selectSummaryList(ApiStatsSearch search, Pageable pageable) {
|
||||||
|
QApiStatsHour q = QApiStatsHour.apiStatsHour;
|
||||||
|
BooleanBuilder builder = new BooleanBuilder();
|
||||||
|
|
||||||
|
calculateDateRange(search);
|
||||||
|
if (search.getParsedStartDateTime() != null) {
|
||||||
|
builder.and(q.statTime.goe(search.getParsedStartDateTime()));
|
||||||
|
builder.and(q.statTime.loe(search.getParsedEndDateTime()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(search.getSearchApiName())) {
|
||||||
|
builder.and(q.apiName.containsIgnoreCase(search.getSearchApiName()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(search.getSearchGwInstanceId())) {
|
||||||
|
builder.and(q.gwInstanceId.containsIgnoreCase(search.getSearchGwInstanceId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(search.getSearchBizDivCode())) {
|
||||||
|
builder.and(q.bizDivCode.containsIgnoreCase(search.getSearchBizDivCode()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(search.getSearchClientId())) {
|
||||||
|
builder.and(q.clientId.containsIgnoreCase(search.getSearchClientId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(search.getSearchInboundAdapter())) {
|
||||||
|
builder.and(q.inboundAdapter.containsIgnoreCase(search.getSearchInboundAdapter()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(search.getSearchOutboundAdapter())) {
|
||||||
|
builder.and(q.outboundAdapter.containsIgnoreCase(search.getSearchOutboundAdapter()));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 전체 건수 조회
|
||||||
|
Long total = getJPAQueryFactory()
|
||||||
|
.select(q.apiName.countDistinct())
|
||||||
|
.from(q)
|
||||||
|
.where(builder)
|
||||||
|
.fetchOne();
|
||||||
|
|
||||||
|
// 페이징 적용하여 조회
|
||||||
|
List<ApiStatsUI> results = getJPAQueryFactory()
|
||||||
|
.select(Projections.fields(ApiStatsUI.class,
|
||||||
|
q.apiName,
|
||||||
|
q.totalCnt.sum().as("totalCnt"),
|
||||||
|
q.successCnt.sum().as("successCnt"),
|
||||||
|
q.timeoutCnt.sum().as("timeoutCnt"),
|
||||||
|
q.systemErrCnt.sum().as("systemErrCnt"),
|
||||||
|
q.bizErrCnt.sum().as("bizErrCnt"),
|
||||||
|
q.seq900TimeoutCnt.sum().as("seq900TimeoutCnt"),
|
||||||
|
q.seq900SystemErrCnt.sum().as("seq900SystemErrCnt"),
|
||||||
|
q.seq900BizErrCnt.sum().as("seq900BizErrCnt"),
|
||||||
|
q.minRespTime.min().castToNum(BigDecimal.class).as("minRespTime"),
|
||||||
|
q.maxRespTime.max().castToNum(BigDecimal.class).as("maxRespTime"),
|
||||||
|
// 가중 평균: SUM(avg * successCnt) / SUM(successCnt)
|
||||||
|
Expressions.cases()
|
||||||
|
.when(q.successCnt.sum().gt(0))
|
||||||
|
.then(q.avgRespTime.multiply(q.successCnt).sum()
|
||||||
|
.divide(q.successCnt.sum()).castToNum(BigDecimal.class))
|
||||||
|
.otherwise((BigDecimal) null)
|
||||||
|
.as("avgRespTime")))
|
||||||
|
.from(q)
|
||||||
|
.where(builder)
|
||||||
|
.groupBy(q.apiName)
|
||||||
|
.orderBy(q.apiName.asc())
|
||||||
|
.offset(pageable.getOffset())
|
||||||
|
.limit(pageable.getPageSize())
|
||||||
|
.fetch();
|
||||||
|
|
||||||
|
// 소수점 3자리로 반올림
|
||||||
|
results.forEach(ui -> {
|
||||||
|
if (ui.getAvgRespTime() != null) {
|
||||||
|
ui.setAvgRespTime(ui.getAvgRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
if (ui.getMinRespTime() != null) {
|
||||||
|
ui.setMinRespTime(ui.getMinRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
if (ui.getMaxRespTime() != null) {
|
||||||
|
ui.setMaxRespTime(ui.getMaxRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return new PageImpl<>(results, pageable, total != null ? total.longValue() : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API명별 요약 통계 전체 조회 (Excel용)
|
||||||
|
*/
|
||||||
|
public List<ApiStatsUI> selectSummaryListForExcel(ApiStatsSearch search) {
|
||||||
|
QApiStatsHour q = QApiStatsHour.apiStatsHour;
|
||||||
|
BooleanBuilder builder = new BooleanBuilder();
|
||||||
|
|
||||||
|
calculateDateRange(search);
|
||||||
|
if (search.getParsedStartDateTime() != null) {
|
||||||
|
builder.and(q.statTime.goe(search.getParsedStartDateTime()));
|
||||||
|
builder.and(q.statTime.loe(search.getParsedEndDateTime()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(search.getSearchApiName())) {
|
||||||
|
builder.and(q.apiName.containsIgnoreCase(search.getSearchApiName()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(search.getSearchGwInstanceId())) {
|
||||||
|
builder.and(q.gwInstanceId.containsIgnoreCase(search.getSearchGwInstanceId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(search.getSearchBizDivCode())) {
|
||||||
|
builder.and(q.bizDivCode.containsIgnoreCase(search.getSearchBizDivCode()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(search.getSearchClientId())) {
|
||||||
|
builder.and(q.clientId.containsIgnoreCase(search.getSearchClientId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(search.getSearchInboundAdapter())) {
|
||||||
|
builder.and(q.inboundAdapter.containsIgnoreCase(search.getSearchInboundAdapter()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(search.getSearchOutboundAdapter())) {
|
||||||
|
builder.and(q.outboundAdapter.containsIgnoreCase(search.getSearchOutboundAdapter()));
|
||||||
|
}
|
||||||
|
|
||||||
|
List<ApiStatsUI> results = getJPAQueryFactory()
|
||||||
|
.select(Projections.fields(ApiStatsUI.class,
|
||||||
|
q.apiName,
|
||||||
|
q.totalCnt.sum().as("totalCnt"),
|
||||||
|
q.successCnt.sum().as("successCnt"),
|
||||||
|
q.timeoutCnt.sum().as("timeoutCnt"),
|
||||||
|
q.systemErrCnt.sum().as("systemErrCnt"),
|
||||||
|
q.bizErrCnt.sum().as("bizErrCnt"),
|
||||||
|
q.seq900TimeoutCnt.sum().as("seq900TimeoutCnt"),
|
||||||
|
q.seq900SystemErrCnt.sum().as("seq900SystemErrCnt"),
|
||||||
|
q.seq900BizErrCnt.sum().as("seq900BizErrCnt"),
|
||||||
|
q.minRespTime.min().castToNum(BigDecimal.class).as("minRespTime"),
|
||||||
|
q.maxRespTime.max().castToNum(BigDecimal.class).as("maxRespTime"),
|
||||||
|
Expressions.cases()
|
||||||
|
.when(q.successCnt.sum().gt(0))
|
||||||
|
.then(q.avgRespTime.multiply(q.successCnt).sum()
|
||||||
|
.divide(q.successCnt.sum()).castToNum(BigDecimal.class))
|
||||||
|
.otherwise((BigDecimal) null)
|
||||||
|
.as("avgRespTime")))
|
||||||
|
.from(q)
|
||||||
|
.where(builder)
|
||||||
|
.groupBy(q.apiName)
|
||||||
|
.orderBy(q.apiName.asc())
|
||||||
|
.fetch();
|
||||||
|
|
||||||
|
// 소수점 3자리로 반올림
|
||||||
|
results.forEach(ui -> {
|
||||||
|
if (ui.getAvgRespTime() != null) {
|
||||||
|
ui.setAvgRespTime(ui.getAvgRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
if (ui.getMinRespTime() != null) {
|
||||||
|
ui.setMinRespTime(ui.getMinRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
if (ui.getMaxRespTime() != null) {
|
||||||
|
ui.setMaxRespTime(ui.getMaxRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 조회 기간 계산 (최대 24시간 제한)
|
* 조회 기간 계산 (최대 24시간 제한)
|
||||||
*/
|
*/
|
||||||
|
|||||||
+173
@@ -1,11 +1,15 @@
|
|||||||
package com.eactive.eai.rms.data.entity.onl.kjb.statistics;
|
package com.eactive.eai.rms.data.entity.onl.kjb.statistics;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.RoundingMode;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
|
import org.springframework.data.domain.PageImpl;
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
@@ -13,8 +17,10 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import com.eactive.eai.data.jpa.AbstractDataService;
|
import com.eactive.eai.data.jpa.AbstractDataService;
|
||||||
import com.eactive.ext.kjb.statistics.ui.ApiStatsChartUI;
|
import com.eactive.ext.kjb.statistics.ui.ApiStatsChartUI;
|
||||||
import com.eactive.ext.kjb.statistics.ui.ApiStatsSearch;
|
import com.eactive.ext.kjb.statistics.ui.ApiStatsSearch;
|
||||||
|
import com.eactive.ext.kjb.statistics.ui.ApiStatsUI;
|
||||||
import com.querydsl.core.BooleanBuilder;
|
import com.querydsl.core.BooleanBuilder;
|
||||||
import com.querydsl.core.types.Projections;
|
import com.querydsl.core.types.Projections;
|
||||||
|
import com.querydsl.core.types.dsl.Expressions;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@Transactional
|
@Transactional
|
||||||
@@ -150,6 +156,173 @@ public class ApiStatsMinuteService
|
|||||||
.fetch();
|
.fetch();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API명별 요약 통계 조회 (GROUP BY apiName)
|
||||||
|
*/
|
||||||
|
public Page<ApiStatsUI> selectSummaryList(ApiStatsSearch search, Pageable pageable) {
|
||||||
|
QApiStatsMinute q = QApiStatsMinute.apiStatsMinute;
|
||||||
|
BooleanBuilder builder = new BooleanBuilder();
|
||||||
|
|
||||||
|
calculateDateRange(search);
|
||||||
|
if (search.getParsedStartDateTime() != null) {
|
||||||
|
builder.and(q.statTime.goe(search.getParsedStartDateTime()));
|
||||||
|
builder.and(q.statTime.loe(search.getParsedEndDateTime()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(search.getSearchApiName())) {
|
||||||
|
builder.and(q.apiName.containsIgnoreCase(search.getSearchApiName()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(search.getSearchGwInstanceId())) {
|
||||||
|
builder.and(q.gwInstanceId.containsIgnoreCase(search.getSearchGwInstanceId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(search.getSearchBizDivCode())) {
|
||||||
|
builder.and(q.bizDivCode.containsIgnoreCase(search.getSearchBizDivCode()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(search.getSearchClientId())) {
|
||||||
|
builder.and(q.clientId.containsIgnoreCase(search.getSearchClientId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(search.getSearchInboundAdapter())) {
|
||||||
|
builder.and(q.inboundAdapter.containsIgnoreCase(search.getSearchInboundAdapter()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(search.getSearchOutboundAdapter())) {
|
||||||
|
builder.and(q.outboundAdapter.containsIgnoreCase(search.getSearchOutboundAdapter()));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 전체 건수 조회
|
||||||
|
Long total = getJPAQueryFactory()
|
||||||
|
.select(q.apiName.countDistinct())
|
||||||
|
.from(q)
|
||||||
|
.where(builder)
|
||||||
|
.fetchOne();
|
||||||
|
|
||||||
|
// 페이징 적용하여 조회
|
||||||
|
List<ApiStatsUI> results = getJPAQueryFactory()
|
||||||
|
.select(Projections.fields(ApiStatsUI.class,
|
||||||
|
q.apiName,
|
||||||
|
q.totalCnt.sum().as("totalCnt"),
|
||||||
|
q.successCnt.sum().as("successCnt"),
|
||||||
|
q.timeoutCnt.sum().as("timeoutCnt"),
|
||||||
|
q.systemErrCnt.sum().as("systemErrCnt"),
|
||||||
|
q.bizErrCnt.sum().as("bizErrCnt"),
|
||||||
|
q.seq900TimeoutCnt.sum().as("seq900TimeoutCnt"),
|
||||||
|
q.seq900SystemErrCnt.sum().as("seq900SystemErrCnt"),
|
||||||
|
q.seq900BizErrCnt.sum().as("seq900BizErrCnt"),
|
||||||
|
q.minRespTime.min().castToNum(BigDecimal.class).as("minRespTime"),
|
||||||
|
q.maxRespTime.max().castToNum(BigDecimal.class).as("maxRespTime"),
|
||||||
|
// 가중 평균: SUM(avg * successCnt) / SUM(successCnt)
|
||||||
|
Expressions.cases()
|
||||||
|
.when(q.successCnt.sum().gt(0))
|
||||||
|
.then(q.avgRespTime.multiply(q.successCnt).sum()
|
||||||
|
.divide(q.successCnt.sum()).castToNum(BigDecimal.class))
|
||||||
|
.otherwise((BigDecimal) null)
|
||||||
|
.as("avgRespTime")))
|
||||||
|
.from(q)
|
||||||
|
.where(builder)
|
||||||
|
.groupBy(q.apiName)
|
||||||
|
.orderBy(q.apiName.asc())
|
||||||
|
.offset(pageable.getOffset())
|
||||||
|
.limit(pageable.getPageSize())
|
||||||
|
.fetch();
|
||||||
|
|
||||||
|
// 소수점 3자리로 반올림
|
||||||
|
results.forEach(ui -> {
|
||||||
|
if (ui.getAvgRespTime() != null) {
|
||||||
|
ui.setAvgRespTime(ui.getAvgRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
if (ui.getMinRespTime() != null) {
|
||||||
|
ui.setMinRespTime(ui.getMinRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
if (ui.getMaxRespTime() != null) {
|
||||||
|
ui.setMaxRespTime(ui.getMaxRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return new PageImpl<>(results, pageable, total != null ? total.longValue() : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API명별 요약 통계 전체 조회 (Excel용)
|
||||||
|
*/
|
||||||
|
public List<ApiStatsUI> selectSummaryListForExcel(ApiStatsSearch search) {
|
||||||
|
QApiStatsMinute q = QApiStatsMinute.apiStatsMinute;
|
||||||
|
BooleanBuilder builder = new BooleanBuilder();
|
||||||
|
|
||||||
|
calculateDateRange(search);
|
||||||
|
if (search.getParsedStartDateTime() != null) {
|
||||||
|
builder.and(q.statTime.goe(search.getParsedStartDateTime()));
|
||||||
|
builder.and(q.statTime.loe(search.getParsedEndDateTime()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(search.getSearchApiName())) {
|
||||||
|
builder.and(q.apiName.containsIgnoreCase(search.getSearchApiName()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(search.getSearchGwInstanceId())) {
|
||||||
|
builder.and(q.gwInstanceId.containsIgnoreCase(search.getSearchGwInstanceId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(search.getSearchBizDivCode())) {
|
||||||
|
builder.and(q.bizDivCode.containsIgnoreCase(search.getSearchBizDivCode()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(search.getSearchClientId())) {
|
||||||
|
builder.and(q.clientId.containsIgnoreCase(search.getSearchClientId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(search.getSearchInboundAdapter())) {
|
||||||
|
builder.and(q.inboundAdapter.containsIgnoreCase(search.getSearchInboundAdapter()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(search.getSearchOutboundAdapter())) {
|
||||||
|
builder.and(q.outboundAdapter.containsIgnoreCase(search.getSearchOutboundAdapter()));
|
||||||
|
}
|
||||||
|
|
||||||
|
List<ApiStatsUI> results = getJPAQueryFactory()
|
||||||
|
.select(Projections.fields(ApiStatsUI.class,
|
||||||
|
q.apiName,
|
||||||
|
q.totalCnt.sum().as("totalCnt"),
|
||||||
|
q.successCnt.sum().as("successCnt"),
|
||||||
|
q.timeoutCnt.sum().as("timeoutCnt"),
|
||||||
|
q.systemErrCnt.sum().as("systemErrCnt"),
|
||||||
|
q.bizErrCnt.sum().as("bizErrCnt"),
|
||||||
|
q.seq900TimeoutCnt.sum().as("seq900TimeoutCnt"),
|
||||||
|
q.seq900SystemErrCnt.sum().as("seq900SystemErrCnt"),
|
||||||
|
q.seq900BizErrCnt.sum().as("seq900BizErrCnt"),
|
||||||
|
q.minRespTime.min().castToNum(BigDecimal.class).as("minRespTime"),
|
||||||
|
q.maxRespTime.max().castToNum(BigDecimal.class).as("maxRespTime"),
|
||||||
|
Expressions.cases()
|
||||||
|
.when(q.successCnt.sum().gt(0))
|
||||||
|
.then(q.avgRespTime.multiply(q.successCnt).sum()
|
||||||
|
.divide(q.successCnt.sum()).castToNum(BigDecimal.class))
|
||||||
|
.otherwise((BigDecimal) null)
|
||||||
|
.as("avgRespTime")))
|
||||||
|
.from(q)
|
||||||
|
.where(builder)
|
||||||
|
.groupBy(q.apiName)
|
||||||
|
.orderBy(q.apiName.asc())
|
||||||
|
.fetch();
|
||||||
|
|
||||||
|
// 소수점 3자리로 반올림
|
||||||
|
results.forEach(ui -> {
|
||||||
|
if (ui.getAvgRespTime() != null) {
|
||||||
|
ui.setAvgRespTime(ui.getAvgRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
if (ui.getMinRespTime() != null) {
|
||||||
|
ui.setMinRespTime(ui.getMinRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
if (ui.getMaxRespTime() != null) {
|
||||||
|
ui.setMaxRespTime(ui.getMaxRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 조회 기간 계산 (최대 1시간 제한)
|
* 조회 기간 계산 (최대 1시간 제한)
|
||||||
*/
|
*/
|
||||||
|
|||||||
+112
@@ -1,11 +1,14 @@
|
|||||||
package com.eactive.eai.rms.data.entity.onl.kjb.statistics;
|
package com.eactive.eai.rms.data.entity.onl.kjb.statistics;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.RoundingMode;
|
||||||
import java.time.YearMonth;
|
import java.time.YearMonth;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
|
import org.springframework.data.domain.PageImpl;
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
@@ -13,8 +16,10 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import com.eactive.eai.data.jpa.AbstractDataService;
|
import com.eactive.eai.data.jpa.AbstractDataService;
|
||||||
import com.eactive.ext.kjb.statistics.ui.ApiStatsChartUI;
|
import com.eactive.ext.kjb.statistics.ui.ApiStatsChartUI;
|
||||||
import com.eactive.ext.kjb.statistics.ui.ApiStatsSearch;
|
import com.eactive.ext.kjb.statistics.ui.ApiStatsSearch;
|
||||||
|
import com.eactive.ext.kjb.statistics.ui.ApiStatsUI;
|
||||||
import com.querydsl.core.BooleanBuilder;
|
import com.querydsl.core.BooleanBuilder;
|
||||||
import com.querydsl.core.types.Projections;
|
import com.querydsl.core.types.Projections;
|
||||||
|
import com.querydsl.core.types.dsl.Expressions;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@Transactional
|
@Transactional
|
||||||
@@ -87,6 +92,113 @@ public class ApiStatsMonthService
|
|||||||
.fetch();
|
.fetch();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API명별 요약 통계 조회 (GROUP BY apiName)
|
||||||
|
*/
|
||||||
|
public Page<ApiStatsUI> selectSummaryList(ApiStatsSearch search, Pageable pageable) {
|
||||||
|
QApiStatsMonth q = QApiStatsMonth.apiStatsMonth;
|
||||||
|
BooleanBuilder builder = buildSearchConditions(q, search);
|
||||||
|
|
||||||
|
// 전체 건수 조회
|
||||||
|
Long total = getJPAQueryFactory()
|
||||||
|
.select(q.apiName.countDistinct())
|
||||||
|
.from(q)
|
||||||
|
.where(builder)
|
||||||
|
.fetchOne();
|
||||||
|
|
||||||
|
// 페이징 적용하여 조회
|
||||||
|
List<ApiStatsUI> results = getJPAQueryFactory()
|
||||||
|
.select(Projections.fields(ApiStatsUI.class,
|
||||||
|
q.apiName,
|
||||||
|
q.totalCnt.sum().as("totalCnt"),
|
||||||
|
q.successCnt.sum().as("successCnt"),
|
||||||
|
q.timeoutCnt.sum().as("timeoutCnt"),
|
||||||
|
q.systemErrCnt.sum().as("systemErrCnt"),
|
||||||
|
q.bizErrCnt.sum().as("bizErrCnt"),
|
||||||
|
q.seq900TimeoutCnt.sum().as("seq900TimeoutCnt"),
|
||||||
|
q.seq900SystemErrCnt.sum().as("seq900SystemErrCnt"),
|
||||||
|
q.seq900BizErrCnt.sum().as("seq900BizErrCnt"),
|
||||||
|
q.minRespTime.min().castToNum(BigDecimal.class).as("minRespTime"),
|
||||||
|
q.maxRespTime.max().castToNum(BigDecimal.class).as("maxRespTime"),
|
||||||
|
// 가중 평균: SUM(avg * successCnt) / SUM(successCnt)
|
||||||
|
Expressions.cases()
|
||||||
|
.when(q.successCnt.sum().gt(0))
|
||||||
|
.then(q.avgRespTime.multiply(q.successCnt).sum()
|
||||||
|
.divide(q.successCnt.sum()).castToNum(BigDecimal.class))
|
||||||
|
.otherwise((BigDecimal) null)
|
||||||
|
.as("avgRespTime")))
|
||||||
|
.from(q)
|
||||||
|
.where(builder)
|
||||||
|
.groupBy(q.apiName)
|
||||||
|
.orderBy(q.apiName.asc())
|
||||||
|
.offset(pageable.getOffset())
|
||||||
|
.limit(pageable.getPageSize())
|
||||||
|
.fetch();
|
||||||
|
|
||||||
|
// 소수점 3자리로 반올림
|
||||||
|
results.forEach(ui -> {
|
||||||
|
if (ui.getAvgRespTime() != null) {
|
||||||
|
ui.setAvgRespTime(ui.getAvgRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
if (ui.getMinRespTime() != null) {
|
||||||
|
ui.setMinRespTime(ui.getMinRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
if (ui.getMaxRespTime() != null) {
|
||||||
|
ui.setMaxRespTime(ui.getMaxRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return new PageImpl<>(results, pageable, total != null ? total.longValue() : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API명별 요약 통계 전체 조회 (Excel용)
|
||||||
|
*/
|
||||||
|
public List<ApiStatsUI> selectSummaryListForExcel(ApiStatsSearch search) {
|
||||||
|
QApiStatsMonth q = QApiStatsMonth.apiStatsMonth;
|
||||||
|
BooleanBuilder builder = buildSearchConditions(q, search);
|
||||||
|
|
||||||
|
List<ApiStatsUI> results = getJPAQueryFactory()
|
||||||
|
.select(Projections.fields(ApiStatsUI.class,
|
||||||
|
q.apiName,
|
||||||
|
q.totalCnt.sum().as("totalCnt"),
|
||||||
|
q.successCnt.sum().as("successCnt"),
|
||||||
|
q.timeoutCnt.sum().as("timeoutCnt"),
|
||||||
|
q.systemErrCnt.sum().as("systemErrCnt"),
|
||||||
|
q.bizErrCnt.sum().as("bizErrCnt"),
|
||||||
|
q.seq900TimeoutCnt.sum().as("seq900TimeoutCnt"),
|
||||||
|
q.seq900SystemErrCnt.sum().as("seq900SystemErrCnt"),
|
||||||
|
q.seq900BizErrCnt.sum().as("seq900BizErrCnt"),
|
||||||
|
q.minRespTime.min().castToNum(BigDecimal.class).as("minRespTime"),
|
||||||
|
q.maxRespTime.max().castToNum(BigDecimal.class).as("maxRespTime"),
|
||||||
|
Expressions.cases()
|
||||||
|
.when(q.successCnt.sum().gt(0))
|
||||||
|
.then(q.avgRespTime.multiply(q.successCnt).sum()
|
||||||
|
.divide(q.successCnt.sum()).castToNum(BigDecimal.class))
|
||||||
|
.otherwise((BigDecimal) null)
|
||||||
|
.as("avgRespTime")))
|
||||||
|
.from(q)
|
||||||
|
.where(builder)
|
||||||
|
.groupBy(q.apiName)
|
||||||
|
.orderBy(q.apiName.asc())
|
||||||
|
.fetch();
|
||||||
|
|
||||||
|
// 소수점 3자리로 반올림
|
||||||
|
results.forEach(ui -> {
|
||||||
|
if (ui.getAvgRespTime() != null) {
|
||||||
|
ui.setAvgRespTime(ui.getAvgRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
if (ui.getMinRespTime() != null) {
|
||||||
|
ui.setMinRespTime(ui.getMinRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
if (ui.getMaxRespTime() != null) {
|
||||||
|
ui.setMaxRespTime(ui.getMaxRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
private BooleanBuilder buildSearchConditions(QApiStatsMonth q, ApiStatsSearch search) {
|
private BooleanBuilder buildSearchConditions(QApiStatsMonth q, ApiStatsSearch search) {
|
||||||
BooleanBuilder builder = new BooleanBuilder();
|
BooleanBuilder builder = new BooleanBuilder();
|
||||||
|
|
||||||
|
|||||||
+112
@@ -1,10 +1,13 @@
|
|||||||
package com.eactive.eai.rms.data.entity.onl.kjb.statistics;
|
package com.eactive.eai.rms.data.entity.onl.kjb.statistics;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.RoundingMode;
|
||||||
import java.time.Year;
|
import java.time.Year;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
|
import org.springframework.data.domain.PageImpl;
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
@@ -12,8 +15,10 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import com.eactive.eai.data.jpa.AbstractDataService;
|
import com.eactive.eai.data.jpa.AbstractDataService;
|
||||||
import com.eactive.ext.kjb.statistics.ui.ApiStatsChartUI;
|
import com.eactive.ext.kjb.statistics.ui.ApiStatsChartUI;
|
||||||
import com.eactive.ext.kjb.statistics.ui.ApiStatsSearch;
|
import com.eactive.ext.kjb.statistics.ui.ApiStatsSearch;
|
||||||
|
import com.eactive.ext.kjb.statistics.ui.ApiStatsUI;
|
||||||
import com.querydsl.core.BooleanBuilder;
|
import com.querydsl.core.BooleanBuilder;
|
||||||
import com.querydsl.core.types.Projections;
|
import com.querydsl.core.types.Projections;
|
||||||
|
import com.querydsl.core.types.dsl.Expressions;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@Transactional
|
@Transactional
|
||||||
@@ -84,6 +89,113 @@ public class ApiStatsYearService
|
|||||||
.fetch();
|
.fetch();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API명별 요약 통계 조회 (GROUP BY apiName)
|
||||||
|
*/
|
||||||
|
public Page<ApiStatsUI> selectSummaryList(ApiStatsSearch search, Pageable pageable) {
|
||||||
|
QApiStatsYear q = QApiStatsYear.apiStatsYear;
|
||||||
|
BooleanBuilder builder = buildSearchConditions(q, search);
|
||||||
|
|
||||||
|
// 전체 건수 조회
|
||||||
|
Long total = getJPAQueryFactory()
|
||||||
|
.select(q.apiName.countDistinct())
|
||||||
|
.from(q)
|
||||||
|
.where(builder)
|
||||||
|
.fetchOne();
|
||||||
|
|
||||||
|
// 페이징 적용하여 조회
|
||||||
|
List<ApiStatsUI> results = getJPAQueryFactory()
|
||||||
|
.select(Projections.fields(ApiStatsUI.class,
|
||||||
|
q.apiName,
|
||||||
|
q.totalCnt.sum().as("totalCnt"),
|
||||||
|
q.successCnt.sum().as("successCnt"),
|
||||||
|
q.timeoutCnt.sum().as("timeoutCnt"),
|
||||||
|
q.systemErrCnt.sum().as("systemErrCnt"),
|
||||||
|
q.bizErrCnt.sum().as("bizErrCnt"),
|
||||||
|
q.seq900TimeoutCnt.sum().as("seq900TimeoutCnt"),
|
||||||
|
q.seq900SystemErrCnt.sum().as("seq900SystemErrCnt"),
|
||||||
|
q.seq900BizErrCnt.sum().as("seq900BizErrCnt"),
|
||||||
|
q.minRespTime.min().castToNum(BigDecimal.class).as("minRespTime"),
|
||||||
|
q.maxRespTime.max().castToNum(BigDecimal.class).as("maxRespTime"),
|
||||||
|
// 가중 평균: SUM(avg * successCnt) / SUM(successCnt)
|
||||||
|
Expressions.cases()
|
||||||
|
.when(q.successCnt.sum().gt(0))
|
||||||
|
.then(q.avgRespTime.multiply(q.successCnt).sum()
|
||||||
|
.divide(q.successCnt.sum()).castToNum(BigDecimal.class))
|
||||||
|
.otherwise((BigDecimal) null)
|
||||||
|
.as("avgRespTime")))
|
||||||
|
.from(q)
|
||||||
|
.where(builder)
|
||||||
|
.groupBy(q.apiName)
|
||||||
|
.orderBy(q.apiName.asc())
|
||||||
|
.offset(pageable.getOffset())
|
||||||
|
.limit(pageable.getPageSize())
|
||||||
|
.fetch();
|
||||||
|
|
||||||
|
// 소수점 3자리로 반올림
|
||||||
|
results.forEach(ui -> {
|
||||||
|
if (ui.getAvgRespTime() != null) {
|
||||||
|
ui.setAvgRespTime(ui.getAvgRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
if (ui.getMinRespTime() != null) {
|
||||||
|
ui.setMinRespTime(ui.getMinRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
if (ui.getMaxRespTime() != null) {
|
||||||
|
ui.setMaxRespTime(ui.getMaxRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return new PageImpl<>(results, pageable, total != null ? total.longValue() : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API명별 요약 통계 전체 조회 (Excel용)
|
||||||
|
*/
|
||||||
|
public List<ApiStatsUI> selectSummaryListForExcel(ApiStatsSearch search) {
|
||||||
|
QApiStatsYear q = QApiStatsYear.apiStatsYear;
|
||||||
|
BooleanBuilder builder = buildSearchConditions(q, search);
|
||||||
|
|
||||||
|
List<ApiStatsUI> results = getJPAQueryFactory()
|
||||||
|
.select(Projections.fields(ApiStatsUI.class,
|
||||||
|
q.apiName,
|
||||||
|
q.totalCnt.sum().as("totalCnt"),
|
||||||
|
q.successCnt.sum().as("successCnt"),
|
||||||
|
q.timeoutCnt.sum().as("timeoutCnt"),
|
||||||
|
q.systemErrCnt.sum().as("systemErrCnt"),
|
||||||
|
q.bizErrCnt.sum().as("bizErrCnt"),
|
||||||
|
q.seq900TimeoutCnt.sum().as("seq900TimeoutCnt"),
|
||||||
|
q.seq900SystemErrCnt.sum().as("seq900SystemErrCnt"),
|
||||||
|
q.seq900BizErrCnt.sum().as("seq900BizErrCnt"),
|
||||||
|
q.minRespTime.min().castToNum(BigDecimal.class).as("minRespTime"),
|
||||||
|
q.maxRespTime.max().castToNum(BigDecimal.class).as("maxRespTime"),
|
||||||
|
Expressions.cases()
|
||||||
|
.when(q.successCnt.sum().gt(0))
|
||||||
|
.then(q.avgRespTime.multiply(q.successCnt).sum()
|
||||||
|
.divide(q.successCnt.sum()).castToNum(BigDecimal.class))
|
||||||
|
.otherwise((BigDecimal) null)
|
||||||
|
.as("avgRespTime")))
|
||||||
|
.from(q)
|
||||||
|
.where(builder)
|
||||||
|
.groupBy(q.apiName)
|
||||||
|
.orderBy(q.apiName.asc())
|
||||||
|
.fetch();
|
||||||
|
|
||||||
|
// 소수점 3자리로 반올림
|
||||||
|
results.forEach(ui -> {
|
||||||
|
if (ui.getAvgRespTime() != null) {
|
||||||
|
ui.setAvgRespTime(ui.getAvgRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
if (ui.getMinRespTime() != null) {
|
||||||
|
ui.setMinRespTime(ui.getMinRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
if (ui.getMaxRespTime() != null) {
|
||||||
|
ui.setMaxRespTime(ui.getMaxRespTime().setScale(3, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
private BooleanBuilder buildSearchConditions(QApiStatsYear q, ApiStatsSearch search) {
|
private BooleanBuilder buildSearchConditions(QApiStatsYear q, ApiStatsSearch search) {
|
||||||
BooleanBuilder builder = new BooleanBuilder();
|
BooleanBuilder builder = new BooleanBuilder();
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,22 @@
|
|||||||
package com.eactive.eai.rms.data.entity.onl.layout;
|
package com.eactive.eai.rms.data.entity.onl.layout;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.springframework.data.jpa.repository.Modifying;
|
||||||
|
import org.springframework.data.jpa.repository.Query;
|
||||||
|
import org.springframework.data.repository.query.Param;
|
||||||
|
|
||||||
import com.eactive.eai.data.entity.onl.transformer.layout.LayoutItemEntity;
|
import com.eactive.eai.data.entity.onl.transformer.layout.LayoutItemEntity;
|
||||||
import com.eactive.eai.data.entity.onl.transformer.layout.LayoutItemEntityId;
|
import com.eactive.eai.data.entity.onl.transformer.layout.LayoutItemEntityId;
|
||||||
import com.eactive.eai.data.jpa.BaseRepository;
|
import com.eactive.eai.data.jpa.BaseRepository;
|
||||||
|
|
||||||
public interface LayoutItemEMSRepository extends BaseRepository<LayoutItemEntity, LayoutItemEntityId> {
|
public interface LayoutItemEMSRepository extends BaseRepository<LayoutItemEntity, LayoutItemEntityId> {
|
||||||
|
|
||||||
|
@Modifying
|
||||||
|
@Query("DELETE FROM LayoutItemEntity l WHERE l.id.loutname = :loutname")
|
||||||
|
int deleteByLoutname(@Param("loutname") String loutname);
|
||||||
|
|
||||||
|
List<LayoutItemEntity> findByIdLoutname(String loutname);
|
||||||
|
|
||||||
|
List<LayoutItemEntity> findByIdLoutnameOrderByIdLoutitemserno(String loutname);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
1. 다운로드
|
||||||
|
호출 URL : http://localhost:28080/monitoring//loader.do?cmd=interface&control=downloadfull&serviceType=APIGW&interfaceId=AGWBB00000002S1
|
||||||
|
Parameters :
|
||||||
|
cmd=interface
|
||||||
|
control=downloadfull
|
||||||
|
serviceType=APIGW
|
||||||
|
interfaceId=AGWBB00000002S1
|
||||||
|
|
||||||
|
다운로드 디렉터리 위치
|
||||||
|
모니터링 프로퍼티 키명 : iomap.download.path
|
||||||
|
|
||||||
|
다운로드 파일 명 : 인터페이스명 + .json
|
||||||
|
|
||||||
|
2. 업로드
|
||||||
|
호출 URL : http://localhost:28080/monitoring//loader.do?cmd=interface&control=uploadfull&serviceType=APIGW&filePath=AGWBB00000002S1.json
|
||||||
|
Parameters :
|
||||||
|
cmd=interface
|
||||||
|
control=uploadfull
|
||||||
|
serviceType=APIGW
|
||||||
|
filePath=AGWBB00000002S1.json
|
||||||
|
|
||||||
|
업로드 디렉터리 위치
|
||||||
|
모니터링 프로퍼티 키명 : iomap.upload.path
|
||||||
|
|
||||||
@@ -1,12 +1,23 @@
|
|||||||
package com.eactive.eai.rms.onl.manage.rule.layout;
|
package com.eactive.eai.rms.onl.manage.rule.layout;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import com.eactive.eai.data.entity.onl.transformer.layout.LayoutEntity;
|
||||||
|
import com.eactive.eai.data.entity.onl.transformer.layout.LayoutItemEntity;
|
||||||
|
import com.eactive.eai.data.entity.onl.transformer.layout.LayoutItemEntityId;
|
||||||
import com.eactive.eai.rms.common.base.SqlMapClientTemplateDao;
|
import com.eactive.eai.rms.common.base.SqlMapClientTemplateDao;
|
||||||
|
import com.eactive.eai.rms.data.entity.onl.bzwkdstcd.UserBusinessService;
|
||||||
|
import com.eactive.eai.rms.data.entity.onl.layout.LayoutItemEMSRepository;
|
||||||
|
import com.eactive.eai.rms.data.entity.onl.layout.LayoutService;
|
||||||
import com.eactive.eai.rms.onl.manage.rule.layoutsync.LayoutSyncVo;
|
import com.eactive.eai.rms.onl.manage.rule.layoutsync.LayoutSyncVo;
|
||||||
|
|
||||||
@Repository("layoutDao")
|
@Repository("layoutDao")
|
||||||
@@ -14,37 +25,137 @@ import com.eactive.eai.rms.onl.manage.rule.layoutsync.LayoutSyncVo;
|
|||||||
public class LayoutDao extends SqlMapClientTemplateDao {
|
public class LayoutDao extends SqlMapClientTemplateDao {
|
||||||
|
|
||||||
private static final Logger logger = Logger.getLogger(LayoutDao.class);
|
private static final Logger logger = Logger.getLogger(LayoutDao.class);
|
||||||
|
private static final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private LayoutService layoutService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private LayoutItemEMSRepository layoutItemRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UserBusinessService userBusinessService;
|
||||||
|
|
||||||
public int selectListCount(HashMap param) throws Exception {
|
public int selectListCount(HashMap param) throws Exception {
|
||||||
return (Integer) template.queryForObject("Layout.selectListCount", param);
|
List<String> currentUserBusiness = userBusinessService.getCurrentUserBusinessCodes();
|
||||||
|
long count = layoutService.getJPAQueryFactory()
|
||||||
|
.selectFrom(com.eactive.eai.data.entity.onl.transformer.layout.QLayoutEntity.layoutEntity)
|
||||||
|
.where(com.eactive.eai.data.entity.onl.transformer.layout.QLayoutEntity.layoutEntity.eaibzwkdstcd.in(currentUserBusiness))
|
||||||
|
.fetchCount();
|
||||||
|
return (int) count;
|
||||||
}
|
}
|
||||||
|
|
||||||
public HashMap selectDetail(HashMap param) throws Exception {
|
public HashMap selectDetail(HashMap param) throws Exception {
|
||||||
return (HashMap) template.queryForObject("Layout.selectDetail", param);
|
String loutName = (String) param.get("loutName");
|
||||||
|
Optional<LayoutEntity> optionalEntity = layoutService.findById(loutName);
|
||||||
|
|
||||||
|
if (!optionalEntity.isPresent()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
LayoutEntity entity = optionalEntity.get();
|
||||||
|
HashMap<String, Object> result = new HashMap<>();
|
||||||
|
result.put("LOUTNAME", entity.getLoutname());
|
||||||
|
result.put("LOUTPTRNNAME", entity.getLoutptrnname());
|
||||||
|
result.put("LOUTDESC", entity.getLoutdesc());
|
||||||
|
result.put("LASTAMNDHMS", entity.getLastamndhms() != null ? entity.getLastamndhms().format(DATETIME_FORMATTER) : null);
|
||||||
|
result.put("EAIBZWKDSTCD", entity.getEaibzwkdstcd());
|
||||||
|
result.put("UAPPLNAME", entity.getUapplname());
|
||||||
|
result.put("SYSINTFACNAME", entity.getSysintfacname());
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void insert(HashMap paramMap) throws Exception {
|
public void insert(HashMap paramMap) throws Exception {
|
||||||
this.template.insert("Layout.insert", paramMap);
|
LayoutEntity entity = new LayoutEntity();
|
||||||
|
entity.setLoutname((String) paramMap.get("loutName"));
|
||||||
|
entity.setLoutptrnname((String) paramMap.get("loutPtrnName"));
|
||||||
|
entity.setLoutdesc((String) paramMap.get("loutDesc"));
|
||||||
|
entity.setEaibzwkdstcd((String) paramMap.get("eaiBzwkDstcd"));
|
||||||
|
entity.setUapplname((String) paramMap.get("uapplName"));
|
||||||
|
entity.setSysintfacname((String) paramMap.get("sysIntfacName"));
|
||||||
|
|
||||||
|
layoutService.save(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void update(HashMap paramMap) throws Exception {
|
public void update(HashMap paramMap) throws Exception {
|
||||||
this.template.update("Layout.update", paramMap);
|
String loutName = (String) paramMap.get("loutName");
|
||||||
|
Optional<LayoutEntity> optionalEntity = layoutService.findById(loutName);
|
||||||
|
|
||||||
|
if (!optionalEntity.isPresent()) {
|
||||||
|
throw new Exception("Layout not found: " + loutName);
|
||||||
|
}
|
||||||
|
|
||||||
|
LayoutEntity entity = optionalEntity.get();
|
||||||
|
entity.setLoutptrnname((String) paramMap.get("loutPtrnName"));
|
||||||
|
entity.setLoutdesc((String) paramMap.get("loutDesc"));
|
||||||
|
entity.setEaibzwkdstcd((String) paramMap.get("eaiBzwkDstcd"));
|
||||||
|
entity.setUapplname((String) paramMap.get("uapplName"));
|
||||||
|
entity.setSysintfacname((String) paramMap.get("sysIntfacName"));
|
||||||
|
|
||||||
|
layoutService.save(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void delete(HashMap paramMap) throws Exception {
|
public void delete(HashMap paramMap) throws Exception {
|
||||||
this.template.delete("Layout.delete", paramMap);
|
String loutName = (String) paramMap.get("loutName");
|
||||||
|
layoutService.deleteById(loutName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int insertItem(HashMap<String, Object> param) {
|
public int insertItem(HashMap<String, Object> param) {
|
||||||
return this.template.update("Layout.insertItem", param);
|
LayoutItemEntity entity = new LayoutItemEntity();
|
||||||
|
|
||||||
|
// Composite Key 설정
|
||||||
|
LayoutItemEntityId id = new LayoutItemEntityId();
|
||||||
|
id.setLoutname((String) param.get("loutName"));
|
||||||
|
id.setLoutitemname((String) param.get("loutItemName"));
|
||||||
|
id.setLoutitemserno((Integer) param.get("loutItemSerno"));
|
||||||
|
entity.setId(id);
|
||||||
|
|
||||||
|
// 필드 설정
|
||||||
|
entity.setLoutitemidname((Integer) param.get("loutItemIDName"));
|
||||||
|
entity.setParntloutitemidname((Integer) param.get("parntLoutItemIDName"));
|
||||||
|
entity.setLoutitemdesc((String) param.get("loutItemDesc"));
|
||||||
|
entity.setLoutitemnodeptrnidname((Integer) param.get("loutItemNodePtrnIDName"));
|
||||||
|
entity.setLoutitemptrnidname((Integer) param.get("loutItemPtrnIDName"));
|
||||||
|
entity.setLoutitempathname((String) param.get("loutItemPathName"));
|
||||||
|
entity.setLoutitemlencnt((Integer) param.get("loutItemLenCnt"));
|
||||||
|
entity.setLoutitemrefinfo((String) param.get("loutItemRefInfo"));
|
||||||
|
entity.setLoutitemrefinfo2((String) param.get("loutItemRefInfo2"));
|
||||||
|
entity.setLoutitemoccurptrndstcd((String) param.get("loutItemOccurPtrnDstcd"));
|
||||||
|
entity.setLoutitemmaxoccurnoitm((Integer) param.get("loutItemMaxOccurNoitm"));
|
||||||
|
entity.setLoutitemminoccurnoitm((Integer) param.get("loutItemMinOccurNoitm"));
|
||||||
|
entity.setLoutitembascval((String) param.get("loutItemBascVal"));
|
||||||
|
entity.setLoutitemmskyn((String) param.get("loutItemMskYn"));
|
||||||
|
entity.setLoutitemmasklength((Integer) param.get("loutItemMaskLength"));
|
||||||
|
entity.setLoutdptcnt((Integer) param.get("lyoutDptCnt"));
|
||||||
|
entity.setDecptlencnt((Integer) param.get("decptLenCnt"));
|
||||||
|
entity.setLoutitemrefptrnidname((String) param.get("lyoutItemRefPtrnIDName"));
|
||||||
|
|
||||||
|
layoutItemRepository.save(entity);
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int deleteItemAll(HashMap<String, Object> param) {
|
public int deleteItemAll(HashMap<String, Object> param) {
|
||||||
return this.template.update("Layout.deleteItemAll", param);
|
String loutName = (String) param.get("loutName");
|
||||||
|
return layoutItemRepository.deleteByLoutname(loutName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<HashMap<String, Object>> selectListAll(HashMap<String, Object> param) {
|
public List<HashMap<String, Object>> selectListAll(HashMap<String, Object> param) {
|
||||||
return this.template.queryForList("Layout.selectListAll", param);
|
List<String> currentUserBusiness = userBusinessService.getCurrentUserBusinessCodes();
|
||||||
|
|
||||||
|
List<LayoutEntity> entities = layoutService.getJPAQueryFactory()
|
||||||
|
.selectFrom(com.eactive.eai.data.entity.onl.transformer.layout.QLayoutEntity.layoutEntity)
|
||||||
|
.where(com.eactive.eai.data.entity.onl.transformer.layout.QLayoutEntity.layoutEntity.eaibzwkdstcd.in(currentUserBusiness))
|
||||||
|
.orderBy(com.eactive.eai.data.entity.onl.transformer.layout.QLayoutEntity.layoutEntity.loutname.asc())
|
||||||
|
.fetch();
|
||||||
|
|
||||||
|
return entities.stream().map(entity -> {
|
||||||
|
HashMap<String, Object> map = new HashMap<>();
|
||||||
|
map.put("LOUTNAME", entity.getLoutname());
|
||||||
|
map.put("LOUTDESC", entity.getLoutdesc());
|
||||||
|
map.put("LOUTPTRNNAME", entity.getLoutptrnname());
|
||||||
|
return map;
|
||||||
|
}).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<LayoutSyncVo> getLayoutXMLList(HashMap<String, String> param) {
|
public List<LayoutSyncVo> getLayoutXMLList(HashMap<String, String> param) {
|
||||||
@@ -78,6 +189,19 @@ public class LayoutDao extends SqlMapClientTemplateDao {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public List<HashMap> selectLayout(HashMap params) {
|
public List<HashMap> selectLayout(HashMap params) {
|
||||||
return template.queryForList("Layout.selectLayout", params);
|
// params에서 검색 조건 추출
|
||||||
|
List<LayoutEntity> entities = layoutService.findAll();
|
||||||
|
|
||||||
|
return entities.stream().map(entity -> {
|
||||||
|
HashMap<String, Object> map = new HashMap<>();
|
||||||
|
map.put("LOUTNAME", entity.getLoutname());
|
||||||
|
map.put("LOUTPTRNNAME", entity.getLoutptrnname());
|
||||||
|
map.put("LOUTDESC", entity.getLoutdesc());
|
||||||
|
map.put("LASTAMNDHMS", entity.getLastamndhms() != null ? entity.getLastamndhms().format(DATETIME_FORMATTER) : null);
|
||||||
|
map.put("EAIBZWKDSTCD", entity.getEaibzwkdstcd());
|
||||||
|
map.put("UAPPLNAME", entity.getUapplname());
|
||||||
|
map.put("SYSINTFACNAME", entity.getSysintfacname());
|
||||||
|
return map;
|
||||||
|
}).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package com.eactive.eai.rms.onl.manage.rule.layoutsync;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import com.eactive.eai.rms.common.base.SqlMapClientTemplateDao;
|
||||||
|
import com.eactive.eai.rms.onl.transaction.extnl.InterfaceDao;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
class KJBInterfaceDao extends SqlMapClientTemplateDao {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(InterfaceDao.class);
|
||||||
|
|
||||||
|
public void lazyInsertToIF01(HashMap paramMap) throws Exception {
|
||||||
|
this.template.insert("Interface.insertToIF01", paramMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
public HashMap selectDetail(HashMap paramMap) throws Exception {
|
||||||
|
return (HashMap) template.queryForObject("Interface.selectDetail", paramMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package com.eactive.eai.rms.onl.manage.rule.layoutsync;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
@Transactional
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
class KJBInterfaceService {
|
||||||
|
|
||||||
|
private final KJBInterfaceDao dao;
|
||||||
|
|
||||||
|
public void lazyInsertToIF01(HashMap<String, Object> param) throws Exception {
|
||||||
|
HashMap detail = dao.selectDetail(param);
|
||||||
|
if (detail == null) {
|
||||||
|
dao.lazyInsertToIF01(param);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package com.eactive.eai.rms.onl.manage.rule.layoutsync;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import com.eactive.eai.rms.common.base.SqlMapClientTemplateDao;
|
||||||
|
import com.eactive.eai.rms.data.entity.onl.layout.LayoutService;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
class KJBLayoutDao extends SqlMapClientTemplateDao {
|
||||||
|
|
||||||
|
private final LayoutService layoutService;
|
||||||
|
|
||||||
|
public List selectItemPathList(HashMap param) throws Exception {
|
||||||
|
return template.queryForList("Layout.selectItemPathList", param);
|
||||||
|
}
|
||||||
|
}
|
||||||
+291
@@ -0,0 +1,291 @@
|
|||||||
|
package com.eactive.eai.rms.onl.manage.rule.layoutsync;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import com.eactive.eai.rms.onl.manage.rule.transform.TransformDao;
|
||||||
|
import com.eactive.eai.rms.onl.manage.rule.transform.TransformManService;
|
||||||
|
import com.eactive.eai.rms.onl.manage.serviceinfo.eaimsg.EaiMsgDao;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
@Transactional
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
class KJBTransformService {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(KJBTransformService.class);
|
||||||
|
|
||||||
|
private final TransformDao transformDao;
|
||||||
|
private final KJBLayoutDao layoutDao;
|
||||||
|
|
||||||
|
// 참고메시지 id 를 얻기 위함.
|
||||||
|
private final EaiMsgDao eaiMessageDAO;
|
||||||
|
|
||||||
|
TransformManService transformManService;
|
||||||
|
|
||||||
|
public String transactionLayoutToTransform(JSONObject json, String interfaceLayoutName, String serviceLayoutName)
|
||||||
|
throws Exception {
|
||||||
|
/*
|
||||||
|
* 인터페이스가 있는 지 확인 후 없으면 전문레이아웃변환매핑을 신규로 입력 한다. 있을 경우 추후 프로세스에 의해 정보가 업데이트 된다.
|
||||||
|
*/
|
||||||
|
|
||||||
|
JSONObject message = (JSONObject) json.get("Message");
|
||||||
|
JSONObject header = (JSONObject) message.get("Header");
|
||||||
|
JSONObject body = (JSONObject) message.get("Body");
|
||||||
|
|
||||||
|
String interfaceCode = (String) body.get("interfaceCode");
|
||||||
|
|
||||||
|
String srcLayoutName = null;
|
||||||
|
String tgtLayoutName = null;
|
||||||
|
|
||||||
|
JSONObject srcLayout = null;
|
||||||
|
JSONObject tgtLayout = null;
|
||||||
|
|
||||||
|
JSONArray layoutArray = (JSONArray) body.get("Layout");
|
||||||
|
|
||||||
|
// interfaceCode에 해당하는 Layout 검색
|
||||||
|
JSONObject interfaceLayout = (JSONObject) layoutArray.stream()
|
||||||
|
.filter(j -> interfaceLayoutName.equals(((JSONObject) j).get("id"))).findFirst().get();
|
||||||
|
JSONObject serviceLayout = (JSONObject) layoutArray.stream()
|
||||||
|
.filter(j -> serviceLayoutName.equals(((JSONObject) j).get("id"))).findFirst().get();
|
||||||
|
|
||||||
|
String cnvsnDesc = (String) body.get("interfaceDesc");
|
||||||
|
|
||||||
|
String interfaceIdSuffix = null;
|
||||||
|
String cnvsnType = null;
|
||||||
|
|
||||||
|
if ("I".equals(interfaceLayout.get("ioType")) || ((String) interfaceLayout.get("id")).endsWith("S1")) {
|
||||||
|
cnvsnType = "REQ";
|
||||||
|
} else {
|
||||||
|
cnvsnType = "RES";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("EAI".equals(interfaceLayout.get("usesystem"))) {
|
||||||
|
// EAI
|
||||||
|
if (interfaceCode.startsWith("EA"))// 비동기
|
||||||
|
{
|
||||||
|
interfaceIdSuffix = "REQ".equals(cnvsnType) ? "S1" : "R1";
|
||||||
|
} else// 동기
|
||||||
|
{
|
||||||
|
interfaceIdSuffix = "REQ".equals(cnvsnType) ? "S1" : "S1";
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if ("FEP".equals(interfaceLayout.get("usesystem"))) {
|
||||||
|
// FEP
|
||||||
|
// 당타발
|
||||||
|
if (interfaceCode.startsWith("F1")) {
|
||||||
|
// 타발
|
||||||
|
interfaceIdSuffix = "REQ".equals(cnvsnType) ? "S1" : "R2";
|
||||||
|
} else if (interfaceCode.startsWith("F2")) {
|
||||||
|
// 당발
|
||||||
|
interfaceIdSuffix = "REQ".equals(cnvsnType) ? "S2" : "R1";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String cnvsnName = String.format("TRANSFORM_%s_%s%s_%s", body.get("bzSystemCode"), interfaceCode,
|
||||||
|
interfaceIdSuffix, cnvsnType);
|
||||||
|
|
||||||
|
if ("FEP".equals(interfaceLayout.get("usesystem")) || "REQ".equals(cnvsnType)) {
|
||||||
|
srcLayoutName = interfaceLayoutName;
|
||||||
|
srcLayout = interfaceLayout;
|
||||||
|
|
||||||
|
tgtLayoutName = serviceLayoutName;
|
||||||
|
tgtLayout = serviceLayout;
|
||||||
|
} else {
|
||||||
|
srcLayoutName = serviceLayoutName;
|
||||||
|
srcLayout = serviceLayout;
|
||||||
|
|
||||||
|
tgtLayoutName = interfaceLayoutName;
|
||||||
|
tgtLayout = interfaceLayout;
|
||||||
|
}
|
||||||
|
|
||||||
|
HashMap<String, Object> params = new HashMap<>();
|
||||||
|
params.put("cnvsnName", cnvsnName);
|
||||||
|
|
||||||
|
Map<String, Object> fransformDetail = transformDao.selectDetail(params);
|
||||||
|
|
||||||
|
if (fransformDetail == null) {
|
||||||
|
insert(interfaceCode, cnvsnName, cnvsnDesc, cnvsnType);
|
||||||
|
}
|
||||||
|
|
||||||
|
HashMap param = new HashMap();
|
||||||
|
param.put("loutName", srcLayoutName);
|
||||||
|
List<HashMap<String, Object>> srcDataArray = layoutDao.selectItemPathList(param);
|
||||||
|
param.put("loutName", tgtLayoutName);
|
||||||
|
List<HashMap<String, Object>> tgtDataArray = layoutDao.selectItemPathList(param);
|
||||||
|
|
||||||
|
HashMap[] list = new HashMap[srcDataArray.size()];
|
||||||
|
|
||||||
|
for (int i = 0; i < srcDataArray.size(); i++) {
|
||||||
|
String s = (String) ((HashMap<String, Object>) srcDataArray.get(i)).get("PATH");
|
||||||
|
String t = (String) ((HashMap<String, Object>) tgtDataArray.get(i)).get("PATH");
|
||||||
|
|
||||||
|
HashMap m = new HashMap();
|
||||||
|
|
||||||
|
m.put("CNVSNCMDNAME", s);
|
||||||
|
m.put("CNVSNRSULTITEMPATHNAME", t);
|
||||||
|
m.put("CNVSNITEMBASCVAL", "");
|
||||||
|
m.put("CNVSNITEMSERNO", i + 1);
|
||||||
|
|
||||||
|
list[i] = m;
|
||||||
|
}
|
||||||
|
|
||||||
|
transaction(cnvsnName, interfaceCode, cnvsnDesc, srcLayoutName, tgtLayoutName, list, "false", cnvsnType);
|
||||||
|
|
||||||
|
return cnvsnName;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void insert(String eaiSvcName, String cnvsnName, String cnvsnDesc, String cnvsnType) {
|
||||||
|
|
||||||
|
HashMap paramMap = new HashMap();
|
||||||
|
paramMap.put("eaiSvcName", eaiSvcName);
|
||||||
|
paramMap.put("cnvsnName", cnvsnName);
|
||||||
|
paramMap.put("cnvsnType", cnvsnType);
|
||||||
|
paramMap.put("cnvsnDesc", cnvsnDesc);
|
||||||
|
paramMap.put("chngEonot", "1");// 0.미사용 1.사용
|
||||||
|
// 1.EAI Message에 셋팅
|
||||||
|
updateTransfromEaiSvcName(paramMap);
|
||||||
|
// 2.EAI
|
||||||
|
transformDao.insert(paramMap);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void transaction(String cnvsnName, String eaiSvcName, String cnvsnDesc, String srcLayoutName,
|
||||||
|
String tgtLayoutName, HashMap[] list, String chkForce, String cnvsnType) throws Exception {
|
||||||
|
|
||||||
|
if (chkForce != null && "true".equals(chkForce)) {
|
||||||
|
HashMap paramMap = new HashMap();
|
||||||
|
paramMap.put("cnvsnName", cnvsnName);
|
||||||
|
paramMap.put("eaiSvcName", eaiSvcName);
|
||||||
|
paramMap.put("cnvsnType", cnvsnType);
|
||||||
|
paramMap.put("chngEonot", "1");// 0.미사용 1.사용
|
||||||
|
updateTransfromEaiSvcName(paramMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
HashMap paramMap = new HashMap();
|
||||||
|
// 1.변환 테이블 update
|
||||||
|
paramMap.put("cnvsnName", cnvsnName);
|
||||||
|
paramMap.put("cnvsnDesc", cnvsnDesc);
|
||||||
|
transformDao.updateTransform(paramMap);
|
||||||
|
// 2.변환 소스/결과 테이블 update
|
||||||
|
paramMap = new HashMap();
|
||||||
|
paramMap.put("cnvsnName", cnvsnName);
|
||||||
|
transformDao.deleteTransformSourceResult(paramMap);
|
||||||
|
|
||||||
|
// 2-1.SRC 등록
|
||||||
|
paramMap.put("loutName", srcLayoutName);
|
||||||
|
paramMap.put("sourcRsultDstcd", "SRC_LAYOUT");
|
||||||
|
transformDao.insertTransformSourceResult(paramMap);
|
||||||
|
|
||||||
|
// 2-2.TGT 등록
|
||||||
|
paramMap.put("loutName", tgtLayoutName);
|
||||||
|
paramMap.put("sourcRsultDstcd", "TGT_LAYOUT");
|
||||||
|
transformDao.insertTransformSourceResult(paramMap);
|
||||||
|
|
||||||
|
// 3.변환항목 테이블 update
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// 임시코드 : 복합거래시 소스레이아웃을 추가로 등록되도록 임시 수정 (2018.06.26)
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
String layoutName = null;
|
||||||
|
HashMap layoutParamMap = new HashMap();
|
||||||
|
layoutParamMap.put("cnvsnName", cnvsnName);
|
||||||
|
layoutParamMap.put("sourcRsultDstcd", "SRC_LAYOUT");
|
||||||
|
|
||||||
|
HashMap layoutMap = new HashMap();
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
paramMap = new HashMap();
|
||||||
|
paramMap.put("cnvsnName", cnvsnName);
|
||||||
|
transformDao.deleteTransformItem(paramMap);
|
||||||
|
for (int i = 0; i < list.length; i++) {
|
||||||
|
paramMap.put("cnvsnCmdName", list[i].get("CNVSNCMDNAME"));
|
||||||
|
paramMap.put("cnvsnRsultItemPathName", list[i].get("CNVSNRSULTITEMPATHNAME"));
|
||||||
|
paramMap.put("cnvsnItemBascVal", Objects.toString(list[i].get("CNVSNITEMBASCVAL"), ""));
|
||||||
|
paramMap.put("cnvsnItemSerno", list[i].get("CNVSNITEMSERNO"));
|
||||||
|
|
||||||
|
transformDao.insertTransformItem(paramMap);
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// 임시코드 : 복합거래시 소스레이아웃을 추가로 등록되도록 임시 수정 (2018.06.26)
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
logger.debug(">>> Check SRC_LAYOUT layoutName = " + layoutName);
|
||||||
|
|
||||||
|
layoutName = extractLayoutName((String) list[i].get("CNVSNCMDNAME"));
|
||||||
|
if (layoutName == null || srcLayoutName.equals(layoutName) || layoutMap.get(layoutName) != null) {
|
||||||
|
// Do nothing
|
||||||
|
} else {
|
||||||
|
logger.debug(">>> Added SRC_LAYOUT layoutName = " + layoutName);
|
||||||
|
layoutParamMap.put("loutName", layoutName);
|
||||||
|
transformDao.insertTransformSourceResult(layoutParamMap);
|
||||||
|
layoutMap.put(layoutName, layoutName);
|
||||||
|
}
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateTransfromEaiSvcName(HashMap paramMap) {
|
||||||
|
// String cnvsnType = null;
|
||||||
|
HashMap map = new HashMap();
|
||||||
|
String eaiSvcName = (String) paramMap.get("eaiSvcName");
|
||||||
|
map.put("eaiSvcName", eaiSvcName);
|
||||||
|
map.put("svcPrcssNo", "1");
|
||||||
|
|
||||||
|
try {
|
||||||
|
HashMap ifc = eaiMessageDAO.selectDetailSvc(map);
|
||||||
|
|
||||||
|
if ("ASYN".equals((String) ifc.get("PSVINTFACDSTICNAME"))) {
|
||||||
|
if (!"ERR".equals((String) paramMap.get("cnvsnType"))) {
|
||||||
|
// cnvsnType = "REQ";
|
||||||
|
/**
|
||||||
|
* 20200521. SYNC-ASYN 처리 추가
|
||||||
|
*/
|
||||||
|
HashMap ifmsg = eaiMessageDAO.selectDetail(map);
|
||||||
|
String inboundSyncAsync = (String) ifmsg.get("SVCMOTIVUSEDSTCD");
|
||||||
|
if ("SYNC".equals(inboundSyncAsync) == false) {
|
||||||
|
paramMap.put("cnvsnType", "REQ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error(e.toString(), e);
|
||||||
|
}
|
||||||
|
|
||||||
|
transformDao.updateTransfromEaiSvcName(paramMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String extractLayoutName(String path) {
|
||||||
|
String layoutName = null;
|
||||||
|
int sPos = 0;
|
||||||
|
int ePos = 0;
|
||||||
|
if (path == null || path.length() == 0)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
sPos = path.lastIndexOf("(");
|
||||||
|
if (sPos < 0) {
|
||||||
|
sPos = 0;
|
||||||
|
} else if (sPos > 0) {
|
||||||
|
sPos = sPos + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
ePos = path.indexOf(".");
|
||||||
|
if (ePos < 0)
|
||||||
|
sPos = 0;
|
||||||
|
|
||||||
|
if (ePos > 0 && ePos > sPos) {
|
||||||
|
layoutName = path.substring(sPos, ePos);
|
||||||
|
layoutName = layoutName.trim();
|
||||||
|
}
|
||||||
|
return layoutName;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,458 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
|
||||||
|
<sqlMap namespace="Layout">
|
||||||
|
<!-- #### 레이아웃 ### -->
|
||||||
|
<!-- 목록 조회 -->
|
||||||
|
<statement id="selectList" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
|
||||||
|
SELECT FA.*, FB.BZWKDSTICNAME
|
||||||
|
FROM (
|
||||||
|
SELECT ROWNO, LOUTNAME , LOUTPTRNNAME , LOUTDESC ,
|
||||||
|
LOUTPTRNDESC , LASTAMNDHMS , EAIBZWKDSTCD ,
|
||||||
|
UAPPLNAME , SYSINTFACNAME
|
||||||
|
FROM (
|
||||||
|
SELECT ROWNUM AS ROWNO,
|
||||||
|
LOUTNAME, LOUTPTRNNAME, LOUTDESC ,
|
||||||
|
LOUTPTRNDESC , LASTAMNDHMS , EAIBZWKDSTCD ,
|
||||||
|
UAPPLNAME , SYSINTFACNAME
|
||||||
|
FROM (
|
||||||
|
SELECT A.LOUTNAME, A.LOUTPTRNNAME, A.LOUTDESC, B.LOUTPTRNDESC,
|
||||||
|
A.LASTAMNDHMS , A.EAIBZWKDSTCD , A.UAPPLNAME , A.SYSINTFACNAME
|
||||||
|
FROM $schemaId$.TSEAITR07 A, $schemaId$.TSEAITR06 B
|
||||||
|
WHERE A.LOUTPTRNNAME = B.LOUTPTRNNAME
|
||||||
|
AND A.EAIBZWKDSTCD IN (select EAIBZWKDSTCD from $schemaId$.TSEAIRM06 where userId =#loginId#)
|
||||||
|
<isNotEmpty prepend="AND" property="searchLoutName">
|
||||||
|
A.LOUTNAME LIKE UPPER('%'||#searchLoutName#||'%')
|
||||||
|
</isNotEmpty>
|
||||||
|
|
||||||
|
<isNotEmpty prepend="AND" property="searchEaiBzwkDstcd">
|
||||||
|
A.EAIBZWKDSTCD LIKE UPPER('%'||#searchEaiBzwkDstcd#||'%')
|
||||||
|
</isNotEmpty>
|
||||||
|
|
||||||
|
<isNotEmpty prepend="AND" property="searchLoutDesc">
|
||||||
|
A.LOUTDESC LIKE UPPER('%'||#searchLoutDesc#||'%')
|
||||||
|
</isNotEmpty>
|
||||||
|
|
||||||
|
) TMP1
|
||||||
|
) TMP2 WHERE ROWNO BETWEEN #startNum# AND #endNum#
|
||||||
|
) FA LEFT OUTER JOIN $schemaId$.TSEAICM01 FB
|
||||||
|
ON FA.EAIBZWKDSTCD = FB.EAIBZWKDSTCD
|
||||||
|
ORDER BY 1
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- 전체 목록수 얻기 -->
|
||||||
|
<statement id="selectListCount" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
SELECT COUNT(*)
|
||||||
|
FROM $schemaId$.TSEAITR07
|
||||||
|
WHERE EAIBZWKDSTCD IN (select EAIBZWKDSTCD from $schemaId$.TSEAIRM06 where userId =#loginId#)
|
||||||
|
<isNotEmpty prepend="AND" property="searchLoutName">
|
||||||
|
LOUTNAME LIKE UPPER('%'||#searchLoutName#||'%')
|
||||||
|
</isNotEmpty>
|
||||||
|
|
||||||
|
<isNotEmpty prepend="AND" property="searchEaiBzwkDstcd">
|
||||||
|
EAIBZWKDSTCD LIKE UPPER('%'||#searchEaiBzwkDstcd#||'%')
|
||||||
|
</isNotEmpty>
|
||||||
|
|
||||||
|
<isNotEmpty prepend="AND" property="searchLoutDesc">
|
||||||
|
LOUTDESC LIKE UPPER('%'||#searchLoutDesc#||'%')
|
||||||
|
</isNotEmpty>
|
||||||
|
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- item list -->
|
||||||
|
<!-- select level - 1 "level" -->
|
||||||
|
<!-- , LoutItemIDName "id" -->
|
||||||
|
<!-- , ParntLoutItemIDName "parent" -->
|
||||||
|
<!-- , 'true' "expanded" -->
|
||||||
|
<!-- , decode(LoutItemNodePtrnIDName,2203,'true','false') "isLeaf" -->
|
||||||
|
<!-- , substr( SYS_CONNECT_BY_PATH(decode (level,1,LoutName,LoutItemName), '.'),2) LOUTITEMPATH -->
|
||||||
|
<!-- , LOUTNAME -->
|
||||||
|
<!-- , LOUTITEMIDNAME -->
|
||||||
|
<!-- , LOUTITEMNAME -->
|
||||||
|
<!-- , LOUTITEMDESC -->
|
||||||
|
<!-- , LOUTITEMSERNO -->
|
||||||
|
<!-- , LOUTITEMLENCNT -->
|
||||||
|
<!-- , DECPTLENCNT -->
|
||||||
|
<!-- , LOUTITEMNODEPTRNIDNAME -->
|
||||||
|
<!-- , LOUTITEMPTRNIDNAME -->
|
||||||
|
<!-- , decode(LoutItemNodePtrnIDName -->
|
||||||
|
<!-- ,2201,'MESSAGE' -->
|
||||||
|
<!-- ,2202,'GROUP' -->
|
||||||
|
<!-- ,2203,'FIELD' -->
|
||||||
|
<!-- ,2204,'ATTR' -->
|
||||||
|
<!-- ,'UNKNOWN' -->
|
||||||
|
<!-- ) LOUTITEMNODEPTRNIDDESC -->
|
||||||
|
<!-- , decode(LoutItemPtrnIDName -->
|
||||||
|
<!-- ,2100,'UNKNOWN' -->
|
||||||
|
<!-- ,2101,'STRING' -->
|
||||||
|
<!-- ,2102,'INT' -->
|
||||||
|
<!-- ,2103,'LONG' -->
|
||||||
|
<!-- ,2104,'SHORT' -->
|
||||||
|
<!-- ,2105,'DOUBLE' -->
|
||||||
|
<!-- ,2106,'FLOAT' -->
|
||||||
|
<!-- ,2107,'CHAR' -->
|
||||||
|
<!-- ,2108,'BYTE' -->
|
||||||
|
<!-- ,2109,'DATE' -->
|
||||||
|
<!-- ,2110,'TIME' -->
|
||||||
|
<!-- ,2111,'TIMESTAMP' -->
|
||||||
|
<!-- ,2112,'NUMBER' -->
|
||||||
|
<!-- ,2113,'BYTEARRAY' -->
|
||||||
|
<!-- ,2114,'NUMERIC' -->
|
||||||
|
<!-- ,2115,'PACKDECIMAL' -->
|
||||||
|
<!-- ,2116,'OBJECT' -->
|
||||||
|
<!-- ,2117,'BOOLEAN' -->
|
||||||
|
<!-- ,2118,'BIGDECIMAL' -->
|
||||||
|
<!-- ,'UNKNOWN' -->
|
||||||
|
<!-- )LOUTITEMPTRNIDDESC -->
|
||||||
|
<!-- , PARNTLOUTITEMIDNAME -->
|
||||||
|
<!-- , LOUTITEMOCCURPTRNDSTCD -->
|
||||||
|
<!-- , LOUTITEMMINOCCURNOITM -->
|
||||||
|
<!-- , LOUTITEMMAXOCCURNOITM -->
|
||||||
|
<!-- , LOUTITEMREFINFO2 -->
|
||||||
|
<!-- from ( -->
|
||||||
|
<!-- select * -->
|
||||||
|
<!-- from $schemaId$.TSEAITR08 -->
|
||||||
|
<!-- where LoutName = #loutName# -->
|
||||||
|
<!-- ) -->
|
||||||
|
<!-- connect by prior LoutItemIDName = ParntLoutItemIDName -->
|
||||||
|
<!-- start with ParntLoutItemIDName = '0' -->
|
||||||
|
<!-- order siblings by LoutItemSerno -->
|
||||||
|
<statement id="selectItemList" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
|
||||||
|
select 0 AS "level"
|
||||||
|
, LoutItemIDName "id"
|
||||||
|
, ParntLoutItemIDName "parent"
|
||||||
|
, 'true' AS "expanded"
|
||||||
|
, CASE LoutItemNodePtrnIDName WHEN 2203 THEN 'true' ELSE 'false' END "isLeaf"
|
||||||
|
, LoutItemName LOUTITEMPATH
|
||||||
|
, LOUTNAME AS LOUTNAME
|
||||||
|
, LOUTITEMIDNAME AS LOUTITEMIDNAME
|
||||||
|
, LOUTITEMNAME AS LOUTITEMNAME
|
||||||
|
, LOUTITEMDESC AS LOUTITEMDESC
|
||||||
|
, LOUTITEMSERNO AS LOUTITEMSERNO
|
||||||
|
, LOUTITEMLENCNT AS LOUTITEMLENCNT
|
||||||
|
, DECPTLENCNT AS DECPTLENCNT
|
||||||
|
, LOUTITEMNODEPTRNIDNAME AS LOUTITEMNODEPTRNIDNAME
|
||||||
|
, LOUTITEMPTRNIDNAME AS LOUTITEMPTRNIDNAME
|
||||||
|
, (CASE LoutItemNodePtrnIDName
|
||||||
|
WHEN 2201 THEN 'MESSAGE'
|
||||||
|
WHEN 2202 THEN 'GROUP'
|
||||||
|
WHEN 2203 THEN 'FIELD'
|
||||||
|
WHEN 2204 THEN 'ATTR'
|
||||||
|
ELSE 'UNKNOWN' END) LOUTITEMNODEPTRNIDDESC
|
||||||
|
, (CASE LoutItemPtrnIDName
|
||||||
|
WHEN 2100 THEN 'UNKNOWN'
|
||||||
|
WHEN 2101 THEN 'STRING'
|
||||||
|
WHEN 2102 THEN 'INT'
|
||||||
|
WHEN 2103 THEN 'LONG'
|
||||||
|
WHEN 2104 THEN 'SHORT'
|
||||||
|
WHEN 2105 THEN 'DOUBLE'
|
||||||
|
WHEN 2106 THEN 'FLOAT'
|
||||||
|
WHEN 2107 THEN 'CHAR'
|
||||||
|
WHEN 2108 THEN 'BYTE'
|
||||||
|
WHEN 2109 THEN 'DATE'
|
||||||
|
WHEN 2110 THEN 'TIME'
|
||||||
|
WHEN 2111 THEN 'TIMESTAMP'
|
||||||
|
WHEN 2112 THEN 'NUMBER'
|
||||||
|
WHEN 2113 THEN 'BYTEARRAY'
|
||||||
|
WHEN 2114 THEN 'NUMERIC'
|
||||||
|
WHEN 2115 THEN 'PACKDECIMAL'
|
||||||
|
WHEN 2116 THEN 'OBJECT'
|
||||||
|
WHEN 2117 THEN 'BOOLEAN'
|
||||||
|
WHEN 2118 THEN 'BIGDECIMAL'
|
||||||
|
ELSE 'UNKNOWN' END
|
||||||
|
)LOUTITEMPTRNIDDESC
|
||||||
|
, PARNTLOUTITEMIDNAME AS PARNTLOUTITEMIDNAME
|
||||||
|
, LOUTITEMOCCURPTRNDSTCD AS LOUTITEMOCCURPTRNDSTCD
|
||||||
|
, LOUTITEMMINOCCURNOITM AS LOUTITEMMINOCCURNOITM
|
||||||
|
, LOUTITEMMAXOCCURNOITM AS LOUTITEMMAXOCCURNOITM
|
||||||
|
, LOUTITEMREFINFO2 AS LOUTITEMREFINFO2
|
||||||
|
from (
|
||||||
|
select *
|
||||||
|
from $schemaId$.TSEAITR08
|
||||||
|
where LoutName = #loutName#
|
||||||
|
) T
|
||||||
|
order by LoutItemSerno
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- Update date -->
|
||||||
|
<statement id="updateLayoutDate" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
UPDATE $schemaId$.TSEAITR07
|
||||||
|
SET LASTAMNDHMS = to_char(sysdate,'yyyymmddhh24miss')
|
||||||
|
WHERE LOUTNAME = #loutName#
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- item detail -->
|
||||||
|
<statement id="selectItemDetail" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
|
||||||
|
SELECT
|
||||||
|
LOUTNAME LOUTNAME,
|
||||||
|
LOUTITEMNAME LOUTITEMNAME,
|
||||||
|
LOUTITEMIDNAME LOUTITEMIDNAME,
|
||||||
|
PARNTLOUTITEMIDNAME PARNTLOUTITEMIDNAME,
|
||||||
|
LOUTITEMDESC LOUTITEMDESC,
|
||||||
|
LOUTITEMNODEPTRNIDNAME LOUTITEMNODEPTRNIDNAME,
|
||||||
|
LOUTITEMPTRNIDNAME LOUTITEMPTRNIDNAME,
|
||||||
|
LOUTITEMPATHNAME LOUTITEMPATHNAME,
|
||||||
|
LOUTITEMLENCNT LOUTITEMLENCNT,
|
||||||
|
LOUTITEMREFINFO LOUTITEMREFINFO,
|
||||||
|
LOUTITEMREFINFO2 LOUTITEMREFINFO2,
|
||||||
|
LOUTITEMSERNO LOUTITEMSERNO,
|
||||||
|
LOUTITEMOCCURPTRNDSTCD LOUTITEMOCCURPTRNDSTCD,
|
||||||
|
LOUTITEMMAXOCCURNOITM LOUTITEMMAXOCCURNOITM,
|
||||||
|
LOUTITEMMINOCCURNOITM LOUTITEMMINOCCURNOITM,
|
||||||
|
LOUTITEMBASCVAL LOUTITEMBASCVAL,
|
||||||
|
LOUTITEMMSKYN LOUTITEMMSKYN,
|
||||||
|
COALESCE(LOUTITEMMASKLENGTH,0) LOUTITEMMASKLENGTH,
|
||||||
|
LYOUTDPTCNT LYOUTDPTCNT,
|
||||||
|
DECPTLENCNT DECPTLENCNT,
|
||||||
|
LYOUTITEMREFPTRNIDNAME LYOUTITEMREFPTRNIDNAME
|
||||||
|
FROM $schemaId$.TSEAITR08
|
||||||
|
WHERE LOUTNAME=#loutName#
|
||||||
|
AND LOUTITEMNAME =#loutItemName#
|
||||||
|
AND LOUTITEMSERNO=#loutItemSerno#
|
||||||
|
ORDER BY LOUTITEMIDNAME, LOUTITEMOCCURPTRNDSTCD DESC
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- Oracle에서도 실행이 안됨 -->
|
||||||
|
<statement id="selectLayoutXMLList" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
|
||||||
|
SELECT
|
||||||
|
CASE WHEN PARNTLOUTITEMIDNAME = '0' THEN 'FORMAT'
|
||||||
|
ELSE CASE WHEN LOUTITEMPTRNIDNAME = '2100' THEN 'GRID'
|
||||||
|
WHEN LOUTITEMPTRNIDNAME = '2113' THEN ( CASE WHEN (SELECT LOUTITEMPTRNIDNAME
|
||||||
|
FROM $schemaId$.TSEAITR08 L
|
||||||
|
WHERE L.LOUTNAME = O.LOUTNAME
|
||||||
|
AND L.LOUTITEMIDNAME = O.PARNTLOUTITEMIDNAME
|
||||||
|
AND L.LOUTITEMPTRNIDNAME = '2100'
|
||||||
|
AND (L.LOUTITEMMAXOCCURNOITM = -1 OR L.LOUTITEMMAXOCCURNOITM > 1)
|
||||||
|
) = '2100' THEN 'COLUMN' ELSE 'FLD' END )
|
||||||
|
END AS FIELDTYPE
|
||||||
|
, LOUTITEMNAME AS ID
|
||||||
|
, LOUTITEMDESC AS DESC
|
||||||
|
,CASE WHEN LYOUTITEMREFPTRNIDNAME = 'STRING' THEN 'CHAR'
|
||||||
|
LYOUTITEMREFPTRNIDNAME = 'BYTEARRAY' THEN 'CHAR'
|
||||||
|
LYOUTITEMREFPTRNIDNAME = 'INTEGER' THEN 'DECIMAL'
|
||||||
|
LYOUTITEMREFPTRNIDNAME = 'BIGDECIMAL' THEN 'NUMERIC'
|
||||||
|
ELSE 'CHAR'
|
||||||
|
END AS TYPE
|
||||||
|
, LOUTITEMLENCNT AS LEN
|
||||||
|
, DECPTLENCNT AS SCALE
|
||||||
|
, (CASE WHEN LOUTITEMPTRNIDNAME = '2100' AND PARNTLOUTITEMIDNAME !=0 AND TRIM(LOUTITEMREFINFO2) IS NOT NULL THEN LOUTITEMREFINFO2
|
||||||
|
WHEN LOUTITEMPTRNIDNAME = '2100' AND PARNTLOUTITEMIDNAME !=0 AND TRIM(LOUTITEMREFINFO2) IS NULL THEN TO_CHAR(LOUTITEMMAXOCCURNOITM)
|
||||||
|
ELSE ' ' END) AS COUNT
|
||||||
|
FROM (
|
||||||
|
SELECT *
|
||||||
|
FROM $schemaId$.TSEAITR08
|
||||||
|
WHERE LOUTNAME = #LoutName#
|
||||||
|
) O
|
||||||
|
WHERE (LOUTITEMPTRNIDNAME = '2100' AND (LOUTITEMMAXOCCURNOITM = -1 OR LOUTITEMMAXOCCURNOITM > 1) ) OR (LOUTITEMPTRNIDNAME = '2113' ) OR (PARNTLOUTITEMIDNAME = 0)
|
||||||
|
CONNECT BY PRIOR LOUTITEMIDNAME = PARNTLOUTITEMIDNAME
|
||||||
|
START WITH PARNTLOUTITEMIDNAME = '0'
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- JJB 수정사항 shkim 2020-06-08 표준전문 수정4차 -->
|
||||||
|
<statement id="selectLayoutMappingXMLList" resultClass="java.util.HashMap">
|
||||||
|
SELECT ID "id",
|
||||||
|
LOUTDESC "desc", '$schemaId$' "usesystem",
|
||||||
|
TARGETSYSTEM "targetsystem", TRIM(PSVSYSBZWKDSTCD) "group", IOTYPE "ioType",
|
||||||
|
HEADER_TXID "servicecode", A.EAISVCNAME "interfacecode"
|
||||||
|
FROM (
|
||||||
|
SELECT LOUTNAME ID, CASE WHEN SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN 'I' ELSE 'O' END IOTYPE
|
||||||
|
,CASE WHEN PSVINTFACDSTICNAME = 'SYNC' AND SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN '기동'
|
||||||
|
WHEN PSVINTFACDSTICNAME = 'SYNC' AND SOURCRSULTDSTCD = 'TGT_LAYOUT' THEN '수동'
|
||||||
|
WHEN EAISVCNAME LIKE '%1' AND SOURCRSULTDSTCD = 'TGT_LAYOUT' THEN 'CBS'
|
||||||
|
WHEN EAISVCNAME LIKE '%2' AND SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN 'CBS'
|
||||||
|
ELSE '대외' END TARGETSYSTEM
|
||||||
|
,EAISVCNAME, PSVSYSBZWKDSTCD
|
||||||
|
FROM $schemaId$.TSEAITR02 A JOIN $schemaId$.TSEAIHE02 B ON A.CNVSNNAME = B.CHNGMSGIDNAME
|
||||||
|
WHERE B.EAISVCNAME = #eaiSvcName# UNION
|
||||||
|
SELECT LOUTNAME ID, CASE WHEN SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN 'I' ELSE 'O' END IOTYPE
|
||||||
|
,CASE WHEN PSVINTFACDSTICNAME = 'SYNC' AND SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN '수동'
|
||||||
|
WHEN PSVINTFACDSTICNAME = 'SYNC' AND SOURCRSULTDSTCD = 'TGT_LAYOUT' THEN '기동'
|
||||||
|
WHEN EAISVCNAME LIKE '%1' AND SOURCRSULTDSTCD = 'TGT_LAYOUT' THEN 'CBS'
|
||||||
|
WHEN EAISVCNAME LIKE '%2' AND SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN 'CBS'
|
||||||
|
ELSE '대외' END TARGETSYSTEM
|
||||||
|
,EAISVCNAME, PSVSYSBZWKDSTCD
|
||||||
|
FROM $schemaId$.TSEAITR02 A JOIN $schemaId$.TSEAIHE02 B ON A.CNVSNNAME = B.BASCRSPNSCHNGMSGIDNAME
|
||||||
|
WHERE B.EAISVCNAME = #eaiSvcName# UNION
|
||||||
|
SELECT LOUTNAME ID, CASE WHEN SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN 'IE' ELSE 'OE' END IOTYPE
|
||||||
|
,CASE WHEN PSVINTFACDSTICNAME = 'SYNC' AND SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN '수동'
|
||||||
|
WHEN PSVINTFACDSTICNAME = 'SYNC' AND SOURCRSULTDSTCD = 'TGT_LAYOUT' THEN '기동'
|
||||||
|
WHEN EAISVCNAME LIKE '%1' AND SOURCRSULTDSTCD = 'TGT_LAYOUT' THEN 'CBS'
|
||||||
|
WHEN EAISVCNAME LIKE '%2' AND SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN 'CBS'
|
||||||
|
ELSE '대외' END TARGETSYSTEM
|
||||||
|
,EAISVCNAME, PSVSYSBZWKDSTCD
|
||||||
|
FROM $schemaId$.TSEAITR02 A JOIN $schemaId$.TSEAIHE02 B ON A.CNVSNNAME = B.ERRRSPNSCHNGMSGIDNAME
|
||||||
|
WHERE B.EAISVCNAME = #eaiSvcName# UNION
|
||||||
|
SELECT REFMSGIDNAME ID, CASE WHEN REFMSGIDNO = 1 THEN 'I' ELSE 'O' END IOTYPE
|
||||||
|
,CASE WHEN PSVINTFACDSTICNAME = 'SYNC' AND REFMSGIDNO = 1 THEN '기동'
|
||||||
|
WHEN PSVINTFACDSTICNAME = 'SYNC' AND REFMSGIDNO = 2 THEN '수동'
|
||||||
|
WHEN PSVINTFACDSTICNAME = 'SYNC' AND REFMSGIDNO = 3 THEN '수동'
|
||||||
|
WHEN REFMSGIDNAME LIKE '%CBS' THEN 'CBS'
|
||||||
|
ELSE '대외' END TARGETSYSTEM
|
||||||
|
,A.EAISVCNAME, PSVSYSBZWKDSTCD FROM $schemaId$.TSEAIMS02 A JOIN $schemaId$.TSEAIHE02 B ON A.EAISVCNAME = B.EAISVCNAME
|
||||||
|
WHERE B.EAISVCNAME = #eaiSvcName#
|
||||||
|
) A
|
||||||
|
LEFT OUTER JOIN ( SELECT EAISVCNAME
|
||||||
|
, max(decode(COLUMNNAME,'HEADER_TXID',COLUMNVALUE,'')) HEADER_TXID
|
||||||
|
FROM $schemaId$.TSEAIHS04 hs04 , $schemaId$.tseaihs05 hs05
|
||||||
|
where hs04.BZWKSVCKEYNAME =hs05.BZWKSVCKEYNAME
|
||||||
|
group by hs04.BZWKSVCKEYNAME,EAISVCNAME
|
||||||
|
) HS04 ON A.EAISVCNAME = HS04.EAISVCNAME
|
||||||
|
LEFT OUTER JOIN $schemaId$.TSEAITR07 TR07 ON TR07.LOUTNAME = A.ID
|
||||||
|
ORDER BY 1
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- 아이템항목 PATH 조회 -->
|
||||||
|
<statement id="selectItemPathList" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
|
||||||
|
SELECT SUBSTR(SYS_CONNECT_BY_PATH(LOUTITEMNAME, '.'),2) PATH
|
||||||
|
FROM (
|
||||||
|
SELECT decode(LYOUTITEMREFPTRNIDNAME, NULL, decode(LOUTITEMIDNAME, 1000, LOUTITEMNAME, LOUTITEMNAME||'[*]'), LOUTITEMNAME) LOUTITEMNAME, LOUTITEMIDNAME, LYOUTDPTCNT, nvl(LYOUTITEMREFPTRNIDNAME,'Group') LYOUTITEMREFPTRNIDNAME, PARNTLOUTITEMIDNAME PARENT
|
||||||
|
FROM tseaitr08 a
|
||||||
|
WHERE loutname = #loutName#
|
||||||
|
ORDER BY LOUTITEMIDNAME
|
||||||
|
)
|
||||||
|
WHERE LYOUTITEMREFPTRNIDNAME != 'Group'
|
||||||
|
START WITH LOUTITEMIDNAME = 1000 CONNECT BY PRIOR LOUTITEMIDNAME = PARENT
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- 목록 조회 -->
|
||||||
|
<statement id="selectListPop" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
|
||||||
|
SELECT FA.*, FB.BZWKDSTICNAME
|
||||||
|
FROM (
|
||||||
|
SELECT ROWNO, LOUTNAME , LOUTPTRNNAME , LOUTDESC ,
|
||||||
|
LOUTPTRNDESC , LASTAMNDHMS , EAIBZWKDSTCD ,
|
||||||
|
UAPPLNAME , SYSINTFACNAME
|
||||||
|
FROM (
|
||||||
|
SELECT ROWNUM AS ROWNO,
|
||||||
|
LOUTNAME, LOUTPTRNNAME, LOUTDESC ,
|
||||||
|
LOUTPTRNDESC , LASTAMNDHMS , EAIBZWKDSTCD ,
|
||||||
|
UAPPLNAME , SYSINTFACNAME
|
||||||
|
FROM (
|
||||||
|
SELECT A.LOUTNAME, A.LOUTPTRNNAME, A.LOUTDESC, B.LOUTPTRNDESC,
|
||||||
|
A.LASTAMNDHMS , A.EAIBZWKDSTCD , A.UAPPLNAME , A.SYSINTFACNAME
|
||||||
|
FROM $schemaId$.TSEAITR07 A, $schemaId$.TSEAITR06 B
|
||||||
|
WHERE A.LOUTPTRNNAME = B.LOUTPTRNNAME
|
||||||
|
<isNotEmpty prepend="AND" property="searchLoutName">
|
||||||
|
UPPER(A.LOUTNAME) LIKE UPPER('%'||#searchLoutName#||'%')
|
||||||
|
</isNotEmpty>
|
||||||
|
|
||||||
|
<isNotEmpty prepend="AND" property="searchEaiBzwkDstcd">
|
||||||
|
UPPER(A.EAIBZWKDSTCD) LIKE UPPER('%'||#searchEaiBzwkDstcd#||'%')
|
||||||
|
</isNotEmpty>
|
||||||
|
|
||||||
|
<isNotEmpty prepend="AND" property="searchLoutDesc">
|
||||||
|
UPPER(A.LOUTDESC) LIKE UPPER('%'||#searchLoutDesc#||'%')
|
||||||
|
</isNotEmpty>
|
||||||
|
|
||||||
|
) TMP1
|
||||||
|
) TMP2 WHERE ROWNO BETWEEN #startNum# AND #endNum#
|
||||||
|
) FA LEFT OUTER JOIN $schemaId$.TSEAICM01 FB
|
||||||
|
ON FA.EAIBZWKDSTCD = FB.EAIBZWKDSTCD
|
||||||
|
ORDER BY 1
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- 전체 목록수 얻기 -->
|
||||||
|
<statement id="selectListCountPop" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
SELECT COUNT(*)
|
||||||
|
FROM $schemaId$.TSEAITR07
|
||||||
|
<dynamic prepend="WHERE">
|
||||||
|
<isNotEmpty prepend="AND" property="searchLoutName">
|
||||||
|
UPPER(LOUTNAME) LIKE UPPER('%'||#searchLoutName#||'%')
|
||||||
|
</isNotEmpty>
|
||||||
|
|
||||||
|
<isNotEmpty prepend="AND" property="searchEaiBzwkDstcd">
|
||||||
|
UPPER(EAIBZWKDSTCD) LIKE UPPER('%'||#searchEaiBzwkDstcd#||'%')
|
||||||
|
</isNotEmpty>
|
||||||
|
|
||||||
|
<isNotEmpty prepend="AND" property="searchLoutDesc">
|
||||||
|
UPPER(LOUTDESC) LIKE UPPER('%'||#searchLoutDesc#||'%')
|
||||||
|
</isNotEmpty>
|
||||||
|
</dynamic>
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<statement id="insertMappingSyncLog">
|
||||||
|
INSERT INTO $schemaId$.TSEAITR09
|
||||||
|
( LOGPRCSSSERNO, EXECUTEDATE ,EXECUTECLASS,EXECUTEMETHOD,EXECUTEUSER,SENDXMLCMNT,SENDAMNDHMS )
|
||||||
|
VALUES
|
||||||
|
( #logPrcssSerno#, TO_CHAR(CURRENT_DATE,'YYYYMMDD') ,#executeClass#,#executeMethod#,#executeUser#,#sendXmlCmnt#,
|
||||||
|
TO_CHAR(CURRENT_TIMESTAMP,'YYYYMMDDHH24MISSFF2') )
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<statement id="updateMappingSyncLog">
|
||||||
|
UPDATE $schemaId$.TSEAITR09
|
||||||
|
SET RECVAMNDHMS=TO_CHAR(CURRENT_TIMESTAMP,'YYYYMMDDHH24MISSFF2'),
|
||||||
|
RECVRSLT=#recvRslt#,
|
||||||
|
RECVFAILCMNT=#recvFailCmnt#
|
||||||
|
WHERE LOGPRCSSSERNO = #logPrcssSerno#
|
||||||
|
</statement>
|
||||||
|
<!-- item delete -->
|
||||||
|
<statement id="deleteItem" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
DELETE FROM $schemaId$.TSEAITR08
|
||||||
|
WHERE LOUTNAME=#loutName#
|
||||||
|
AND LOUTITEMNAME =#loutItemName#
|
||||||
|
AND LOUTITEMSERNO=#loutItemSerno#
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- item insert -->
|
||||||
|
<statement id="insertItem" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
<!-- LOUTITEMMSKCODE 삭제, 광주은행 테이블에 미존재 231005-->
|
||||||
|
INSERT INTO $schemaId$.TSEAITR08 (
|
||||||
|
LOUTNAME, LOUTITEMNAME, LOUTITEMIDNAME, PARNTLOUTITEMIDNAME, LOUTITEMDESC, LOUTITEMNODEPTRNIDNAME,
|
||||||
|
LOUTITEMPTRNIDNAME, LOUTITEMPATHNAME, LOUTITEMLENCNT, LOUTITEMREFINFO, LOUTITEMREFINFO2,
|
||||||
|
LOUTITEMSERNO, LOUTITEMOCCURPTRNDSTCD, LOUTITEMMAXOCCURNOITM, LOUTITEMMINOCCURNOITM,
|
||||||
|
LOUTITEMBASCVAL, LOUTITEMMSKYN, LOUTITEMMASKLENGTH, LYOUTDPTCNT, DECPTLENCNT, LYOUTITEMREFPTRNIDNAME
|
||||||
|
) VALUES (
|
||||||
|
#loutName#, #loutItemName#, #loutItemIDName#, #parntLoutItemIDName#, #loutItemDesc#, #loutItemNodePtrnIDName#,
|
||||||
|
#loutItemPtrnIDName#, #loutItemPathName#, #loutItemLenCnt#, #loutItemRefInfo#, #loutItemRefInfo2#,
|
||||||
|
#loutItemSerno#, #loutItemOccurPtrnDstcd#, #loutItemMaxOccurNoitm#, #loutItemMinOccurNoitm#,
|
||||||
|
#loutItemBascVal#, #loutItemMskYn#, #loutItemMaskLength#, #lyoutDptCnt#, #decptLenCnt#, #lyoutItemRefPtrnIDName#
|
||||||
|
)
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- item update -->
|
||||||
|
<statement id="updateItem" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
UPDATE $schemaId$.TSEAITR08
|
||||||
|
SET
|
||||||
|
LOUTNAME = #loutName#,
|
||||||
|
LOUTITEMNAME = #loutItemName#,
|
||||||
|
LOUTITEMIDNAME = #loutItemIDName#,
|
||||||
|
PARNTLOUTITEMIDNAME = #parntLoutItemIDName#,
|
||||||
|
LOUTITEMDESC = #loutItemDesc#,
|
||||||
|
LOUTITEMNODEPTRNIDNAME = #loutItemNodePtrnIDName#,
|
||||||
|
LOUTITEMPTRNIDNAME = #loutItemPtrnIDName#,
|
||||||
|
LOUTITEMPATHNAME = #loutItemPathName#,
|
||||||
|
LOUTITEMLENCNT = #loutItemLenCnt#,
|
||||||
|
LOUTITEMREFINFO = #loutItemRefInfo#,
|
||||||
|
LOUTITEMREFINFO2 = #loutItemRefInfo2#,
|
||||||
|
LOUTITEMSERNO = #loutItemSerno#,
|
||||||
|
LOUTITEMOCCURPTRNDSTCD = #loutItemOccurPtrnDstcd#,
|
||||||
|
LOUTITEMMAXOCCURNOITM = #loutItemMaxOccurNoitm#,
|
||||||
|
LOUTITEMMINOCCURNOITM = #loutItemMinOccurNoitm#,
|
||||||
|
LOUTITEMBASCVAL = #loutItemBascVal#,
|
||||||
|
LOUTITEMMSKYN = #loutItemMskYn#,
|
||||||
|
LOUTITEMMASKLENGTH = #loutItemMaskLength#,
|
||||||
|
LYOUTDPTCNT = #lyoutDptCnt#,
|
||||||
|
DECPTLENCNT = #decptLenCnt#,
|
||||||
|
LYOUTITEMREFPTRNIDNAME = #lyoutItemRefPtrnIDName#
|
||||||
|
WHERE LOUTNAME = #loutName#
|
||||||
|
AND LOUTITEMNAME =#loutItemName#
|
||||||
|
AND LOUTITEMSERNO =#loutItemSerno#
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<statement id="insertTR08" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
INSERT INTO $schemaId$.TSEAITR08 ( LOUTNAME, LOUTITEMNAME, LOUTITEMSERNO, LOUTITEMIDNAME, PARNTLOUTITEMIDNAME,
|
||||||
|
LOUTITEMDESC, LOUTITEMNODEPTRNIDNAME, LOUTITEMPTRNIDNAME, LOUTITEMPATHNAME, LOUTITEMLENCNT,
|
||||||
|
LOUTITEMREFINFO, LOUTITEMREFINFO2, LOUTITEMOCCURPTRNDSTCD, LOUTITEMMAXOCCURNOITM, LOUTITEMMINOCCURNOITM,
|
||||||
|
LOUTITEMBASCVAL, LOUTITEMMSKYN, LYOUTDPTCNT, DECPTLENCNT, LYOUTITEMREFPTRNIDNAME )
|
||||||
|
VALUES ( #loutName#, #loutItemName#, #loutItemSerno#, #loutItemIDName#, #parntLoutItemIDName#,
|
||||||
|
#loutItemDesc#, #loutItemNodePtrnIDName#, #loutItemPtrnIDName#, #loutItemPathName#, #loutItemLenCnt#,
|
||||||
|
#loutItemRefInfo#, #loutItemRefInfo2#, #loutItemOccurPtrnDstcd#, #loutItemMaxOccurNoitm#, #loutItemMinOccurNoitm#,
|
||||||
|
#loutItemBascVal#, #loutItemMskYn#, #lyoutDptCnt#, #decptLenCnt#, #lyoutItemRefPtrnIDName# )
|
||||||
|
</statement>
|
||||||
|
<!-- 여기 까지 마이그레이션 영역 -->
|
||||||
|
|
||||||
|
<statement id="insertLayoutSyncLog">
|
||||||
|
INSERT INTO $schemaId$.TSEAITR10
|
||||||
|
( LOGPRCSSSEQNO, SEQNO, SERVICENAME ,COMMAND,LOUTNAME,RECVDATA,RECVAMNDHMS,PRCSSRSLT, PRCSSRSLTCMNT )
|
||||||
|
VALUES
|
||||||
|
( #logPrcssSeqno#, #seqno#, #serviceName# ,#command#,#loutName#,#recvData#,#recvAmndHMS#,#prcssRslt#, #prcssRsltCmnt# )
|
||||||
|
</statement>
|
||||||
|
</sqlMap>
|
||||||
@@ -0,0 +1,160 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
|
||||||
|
<sqlMap namespace="Layout">
|
||||||
|
<!-- #### 레이아웃 ### -->
|
||||||
|
<!-- 상세 조회 -->
|
||||||
|
<statement id="selectDetail" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
|
||||||
|
SELECT
|
||||||
|
LOUTNAME AS "LOUTNAME" ,
|
||||||
|
LOUTPTRNNAME AS "LOUTPTRNNAME" ,
|
||||||
|
LOUTDESC AS "LOUTDESC" ,
|
||||||
|
LASTAMNDHMS AS "LASTAMNDHMS" ,
|
||||||
|
EAIBZWKDSTCD AS "EAIBZWKDSTCD" ,
|
||||||
|
UAPPLNAME AS "UAPPLNAME" ,
|
||||||
|
SYSINTFACNAME AS "SYSINTFACNAME"
|
||||||
|
FROM $schemaId$.TSEAITR07
|
||||||
|
WHERE LOUTNAME = #loutName#
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- DELETE-->
|
||||||
|
<statement id="delete" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
DELETE FROM $schemaId$.TSEAITR07
|
||||||
|
WHERE LOUTNAME = #loutName#
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- Insert-->
|
||||||
|
<statement id="insert" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
INSERT INTO $schemaId$.TSEAITR07 (
|
||||||
|
LOUTNAME, LOUTDESC, LOUTPTRNNAME , LASTAMNDHMS , EAIBZWKDSTCD , UAPPLNAME , SYSINTFACNAME, CREATEBY, UPDATEBY
|
||||||
|
) VALUES (#loutName#, #loutDesc#, #loutPtrnName#, #lastAmndHMS# , #eaiBzwkDstcd# , #uapplName# , #sysIntfacName#, #createBy#, #updateBy# )
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- Update-->
|
||||||
|
<statement id="update" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
UPDATE $schemaId$.TSEAITR07
|
||||||
|
SET LOUTDESC = #loutDesc#,
|
||||||
|
LOUTPTRNNAME= #loutPtrnName#,
|
||||||
|
LASTAMNDHMS = #lastAmndHMS#,
|
||||||
|
EAIBZWKDSTCD = #eaiBzwkDstcd#,
|
||||||
|
UAPPLNAME = #uapplName#,
|
||||||
|
SYSINTFACNAME = #sysIntfacName# ,
|
||||||
|
UPDATEBY = #updateBy#
|
||||||
|
WHERE LOUTNAME = #loutName#
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- List All -->
|
||||||
|
<statement id="selectListAll" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
|
||||||
|
SELECT
|
||||||
|
L.LOUTNAME AS "LOUTNAME",
|
||||||
|
L.LOUTDESC AS "LOUTDESC",
|
||||||
|
L.LOUTPTRNNAME AS "LOUTPTRNNAME"
|
||||||
|
FROM $schemaId$.TSEAITR07 L
|
||||||
|
WHERE L.EAIBZWKDSTCD IN (select EAIBZWKDSTCD from $schemaId$.TSEAIRM06 WHERE USERID = #loginId#)
|
||||||
|
ORDER BY L.LOUTNAME
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- item delete all -->
|
||||||
|
<statement id="deleteItemAll" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
DELETE FROM $schemaId$.TSEAITR08
|
||||||
|
WHERE LOUTNAME=#loutName#
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<statement id="updateItemDesc" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
UPDATE $schemaId$.TSEAITR08
|
||||||
|
SET LOUTITEMDESC = #loutDesc#
|
||||||
|
WHERE LOUTNAME = #loutName#
|
||||||
|
AND LOUTITEMNAME = #loutName#
|
||||||
|
AND LOUTITEMSERNO = 0
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<statement id="selectTypeAll" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
|
||||||
|
SELECT LOUTPTRNNAME AS "LOUTPTRNNAME",
|
||||||
|
LOUTPTRNDESC AS "LOUTPTRNDESC"
|
||||||
|
FROM $schemaId$.TSEAITR06
|
||||||
|
ORDER BY LOUTPTRNDESC
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<statement id="selectEffect" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
|
||||||
|
SELECT SV.EAISVCNAME AS "EAISVCNAME" , SV.EAISVCDESC AS "EAISVCDESC" ,
|
||||||
|
TR.CNVSNNAME AS "CNVSNNAME" , TR.CNVSNDESC AS "CNVSNDESC" , TR.SOURCRSULTDSTCD AS "SOURCRSULTDSTCD"
|
||||||
|
FROM
|
||||||
|
( SELECT T1.CNVSNNAME , T1.CNVSNDESC ,
|
||||||
|
T2.LOUTNAME , T2.SOURCRSULTDSTCD
|
||||||
|
FROM $schemaId$.TSEAITR01 T1, $schemaId$.TSEAITR02 T2
|
||||||
|
WHERE T1.CNVSNNAME = T2.CNVSNNAME
|
||||||
|
AND T2.LOUTNAME = #loutName#
|
||||||
|
) TR,
|
||||||
|
(
|
||||||
|
SELECT DISTINCT EAISVCNAME, EAISVCDESC, SVCPRCSSNO, CHNGMSGIDNAME FROM (
|
||||||
|
SELECT A.EAISVCNAME, A.EAISVCDESC, B.SVCPRCSSNO, B.CHNGMSGIDNAME FROM $schemaId$.TSEAIHE01 A, $schemaId$.TSEAIHE02 B WHERE A.EAISVCNAME = B.EAISVCNAME
|
||||||
|
UNION ALL
|
||||||
|
SELECT A.EAISVCNAME, A.EAISVCDESC, B.SVCPRCSSNO, B.BASCRSPNSCHNGMSGIDNAME CHNGMSGIDNAME FROM $schemaId$.TSEAIHE01 A, $schemaId$.TSEAIHE02 B WHERE A.EAISVCNAME = B.EAISVCNAME
|
||||||
|
UNION ALL
|
||||||
|
SELECT A.EAISVCNAME, A.EAISVCDESC, B.SVCPRCSSNO, B.ERRRSPNSCHNGMSGIDNAME CHNGMSGIDNAME FROM $schemaId$.TSEAIHE01 A, $schemaId$.TSEAIHE02 B WHERE A.EAISVCNAME = B.EAISVCNAME
|
||||||
|
) TMP
|
||||||
|
) SV
|
||||||
|
WHERE TR.CNVSNNAME = SV.CHNGMSGIDNAME
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<statement id="selectReportCount" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
|
||||||
|
SELECT EAIBZWKDSTCD "EAIBzwkDstcd", COUNT(LOUTNAME) "Cnt"
|
||||||
|
FROM $schemaId$.TSEAITR07
|
||||||
|
GROUP BY EAIBZWKDSTCD
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- 여기서 부터 마이그레이션 영역 -->
|
||||||
|
<statement id="selectTR07Select" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
|
||||||
|
SELECT
|
||||||
|
LOUTNAME AS "LOUTNAME" ,
|
||||||
|
LOUTPTRNNAME AS "LOUTPTRNNAME" ,
|
||||||
|
LOUTDESC AS "LOUTDESC" ,
|
||||||
|
LASTAMNDHMS AS "LASTAMNDHMS" ,
|
||||||
|
EAIBZWKDSTCD AS "EAIBZWKDSTCD" ,
|
||||||
|
UAPPLNAME AS "UAPPLNAME" ,
|
||||||
|
SYSINTFACNAME AS "SYSINTFACNAME"
|
||||||
|
FROM $schemaId$.TSEAITR07
|
||||||
|
WHERE LOUTNAME = #loutName#
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<statement id="deleteTR07" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
DELETE FROM $schemaId$.TSEAITR07
|
||||||
|
WHERE LOUTNAME = #loutName#
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<statement id="insertTR07" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
INSERT INTO $schemaId$.TSEAITR07 ( LOUTNAME, LOUTPTRNNAME, LOUTDESC, LASTAMNDHMS, EAIBZWKDSTCD, UAPPLNAME, SYSINTFACNAME )
|
||||||
|
VALUES ( #loutName#, #loutPtrnName#, #loutDesc#, #lastAmndHMS#, #eaiBzwkDstcd#, #uapplName#, #sysIntfacName# )
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<statement id="selectTR08" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
|
||||||
|
SELECT
|
||||||
|
LOUTNAME AS "LOUTNAME" ,
|
||||||
|
LOUTITEMNAME AS "LOUTITEMNAME" ,
|
||||||
|
LOUTITEMSERNO AS "LOUTITEMSERNO" ,
|
||||||
|
LOUTITEMIDNAME AS "LOUTITEMIDNAME" ,
|
||||||
|
PARNTLOUTITEMIDNAME AS "PARNTLOUTITEMIDNAME" ,
|
||||||
|
LOUTITEMDESC AS "LOUTITEMDESC" ,
|
||||||
|
LOUTITEMNODEPTRNIDNAME AS "LOUTITEMNODEPTRNIDNAME" ,
|
||||||
|
LOUTITEMPTRNIDNAME AS "LOUTITEMPTRNIDNAME" ,
|
||||||
|
LOUTITEMPATHNAME AS "LOUTITEMPATHNAME" ,
|
||||||
|
LOUTITEMLENCNT AS "LOUTITEMLENCNT" ,
|
||||||
|
LOUTITEMREFINFO AS "LOUTITEMREFINFO" ,
|
||||||
|
LOUTITEMREFINFO2 AS "LOUTITEMREFINFO2" ,
|
||||||
|
LOUTITEMOCCURPTRNDSTCD AS "LOUTITEMOCCURPTRNDSTCD" ,
|
||||||
|
LOUTITEMMAXOCCURNOITM AS "LOUTITEMMAXOCCURNOITM" ,
|
||||||
|
LOUTITEMMINOCCURNOITM AS "LOUTITEMMINOCCURNOITM" ,
|
||||||
|
LOUTITEMBASCVAL AS "LOUTITEMBASCVAL" ,
|
||||||
|
LOUTITEMMSKYN AS "LOUTITEMMSKYN" ,
|
||||||
|
LYOUTDPTCNT AS "LYOUTDPTCNT" ,
|
||||||
|
DECPTLENCNT AS "DECPTLENCNT" ,
|
||||||
|
LYOUTITEMREFPTRNIDNAME AS "LYOUTITEMREFPTRNIDNAME"
|
||||||
|
FROM $schemaId$.TSEAITR08
|
||||||
|
WHERE LOUTNAME = #loutName#
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<statement id="deleteTR08" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
DELETE FROM $schemaId$.TSEAITR08
|
||||||
|
WHERE LOUTNAME = #loutName#
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
</sqlMap>
|
||||||
+659
-85
@@ -2,9 +2,10 @@ package com.eactive.eai.rms.onl.manage.rule.layoutsync;
|
|||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.InputStream;
|
import java.io.InputStreamReader;
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
import java.io.StringReader;
|
import java.io.StringReader;
|
||||||
|
import java.text.ParseException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -21,10 +22,14 @@ import javax.xml.transform.TransformerFactory;
|
|||||||
import javax.xml.transform.dom.DOMSource;
|
import javax.xml.transform.dom.DOMSource;
|
||||||
import javax.xml.transform.stream.StreamResult;
|
import javax.xml.transform.stream.StreamResult;
|
||||||
|
|
||||||
import org.apache.log4j.Logger;
|
|
||||||
import org.jdom.Document;
|
import org.jdom.Document;
|
||||||
import org.jdom.Element;
|
import org.jdom.Element;
|
||||||
import org.jdom.input.SAXBuilder;
|
import org.jdom.input.SAXBuilder;
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.json.simple.JSONValue;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
@@ -50,18 +55,28 @@ import com.eactive.eai.rms.onl.common.util.DateUtil;
|
|||||||
import com.eactive.eai.transformer.layout.Item;
|
import com.eactive.eai.transformer.layout.Item;
|
||||||
import com.eactive.eai.transformer.layout.Types;
|
import com.eactive.eai.transformer.layout.Types;
|
||||||
|
|
||||||
|
|
||||||
@Controller
|
@Controller
|
||||||
@RequestMapping("/layoutSync.do")
|
@RequestMapping("/layoutSync.do")
|
||||||
public class LayoutSyncController extends OnlBaseAnnotationController implements InterceptorSkipController {
|
public class LayoutSyncController extends OnlBaseAnnotationController implements InterceptorSkipController {
|
||||||
|
|
||||||
private static final Logger logger = Logger.getLogger(LayoutSyncController.class);
|
private static final Logger logger = LoggerFactory.getLogger(LayoutSyncController.class);
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@Qualifier("layoutSyncService")
|
@Qualifier("layoutSyncService")
|
||||||
private LayoutSyncService service;
|
private LayoutSyncService service;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
|
@Qualifier("monitoringContext")
|
||||||
private MonitoringContext monitoringContext;
|
private MonitoringContext monitoringContext;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private KJBTransformService transformService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private KJBInterfaceService interfaceService;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* xml 형식으로 전달 된 레이아웃을 LayoutVo로 전환
|
* xml 형식으로 전달 된 레이아웃을 LayoutVo로 전환
|
||||||
*
|
*
|
||||||
@@ -92,8 +107,6 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
|
|||||||
node = Item.NODE_GROUP;
|
node = Item.NODE_GROUP;
|
||||||
} else if("GRID".equals(el.getName().toUpperCase())) {
|
} else if("GRID".equals(el.getName().toUpperCase())) {
|
||||||
node = Item.NODE_GROUP;
|
node = Item.NODE_GROUP;
|
||||||
} else if("ATTR".equals(el.getName().toUpperCase())) {
|
|
||||||
node = Item.NODE_ATTR;
|
|
||||||
} else {
|
} else {
|
||||||
node = Item.NODE_FIELD;
|
node = Item.NODE_FIELD;
|
||||||
}
|
}
|
||||||
@@ -101,20 +114,19 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
|
|||||||
item.put("loutItemNodePtrnIDName",node);
|
item.put("loutItemNodePtrnIDName",node);
|
||||||
|
|
||||||
int loutType = Types.TYPE_UNKNOWN;
|
int loutType = Types.TYPE_UNKNOWN;
|
||||||
if( el.getAttributeValue("type") == null || "".equals(el.getAttributeValue("type"))) {
|
if( el.getAttributeValue("type") == null || "".equals(el.getAttributeValue("type"))) {
|
||||||
} else if( "GRID".equals(el.getName().toUpperCase()) || "GROUP".equals(el.getName().toUpperCase()) ) {
|
} else if( "GRID".equals(el.getName().toUpperCase()) || "GROUP".equals(el.getName().toUpperCase()) ) {
|
||||||
} else if( msgType.equals("XML") ) {
|
} else if( msgType.equals("XML") || msgType.equals("JSON") ) {
|
||||||
loutType = "VARCHAR".startsWith(el.getAttributeValue("type").toUpperCase()) ? Types.TYPE_STRING : Types.TYPE_INT; // TYPE_LONG, TYPE_SHORT, TYPE_DOUBLE, TYPE_FLOAT
|
loutType = "VARCHAR".startsWith(el.getAttributeValue("type").toUpperCase()) ? Types.TYPE_STRING : Types.TYPE_INT; // TYPE_LONG, TYPE_SHORT, TYPE_DOUBLE, TYPE_FLOAT
|
||||||
|
|
||||||
//loutType = Types.TYPE_STRING;
|
//loutType = Types.TYPE_STRING;
|
||||||
} else {
|
} else {
|
||||||
loutType = Types.TYPE_BYTEARRAY;
|
loutType = Types.TYPE_BYTEARRAY;
|
||||||
}
|
}
|
||||||
|
|
||||||
item.put("loutItemPtrnIDName",loutType);
|
item.put("loutItemPtrnIDName", loutType);
|
||||||
item.put("loutItemLenCnt","".equals(el.getAttributeValue("len")) ? 0 : Integer.parseInt(el.getAttributeValue("len")));
|
item.put("loutItemLenCnt",
|
||||||
item.put("loutItemRefInfo2",el.getAttributeValue("count")); //
|
"".equals(el.getAttributeValue("len")) ? 0 : Integer.parseInt(el.getAttributeValue("len")));
|
||||||
|
item.put("loutItemRefInfo2", el.getAttributeValue("count"));
|
||||||
|
|
||||||
// MIN, MAX 설정
|
// MIN, MAX 설정
|
||||||
// 통합인터페이스는 * , 숫자만 보냄 ( 가변은 * 고정은 숫자 )
|
// 통합인터페이스는 * , 숫자만 보냄 ( 가변은 * 고정은 숫자 )
|
||||||
@@ -158,7 +170,10 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
|
|||||||
item.put("loutItemMinOccurNoitm",min); // 레이아웃항목최소발생건수
|
item.put("loutItemMinOccurNoitm",min); // 레이아웃항목최소발생건수
|
||||||
|
|
||||||
item.put("loutItemBascVal",el.getAttributeValue("default")); // 레이아웃항목기본값
|
item.put("loutItemBascVal",el.getAttributeValue("default")); // 레이아웃항목기본값
|
||||||
item.put("loutItemMskYn",el.getAttributeValue("mask")); // [Y/N/ ]
|
item.put("louItemMskYn",el.getAttributeValue("mask")); // [Y/N/ ]
|
||||||
|
item.put("louItemMskCode",el.getAttributeValue("mask2"));
|
||||||
|
//item.put("loutItemMskTarget",el.getAttributeValue("maskTarget")); // [LOG/DATA ]
|
||||||
|
|
||||||
if( "Y".equals(item.get("loutItemMskYn")) ) item.put("loutItemMaskLength",Integer.parseInt(el.getAttributeValue("maskLength")));
|
if( "Y".equals(item.get("loutItemMskYn")) ) item.put("loutItemMaskLength",Integer.parseInt(el.getAttributeValue("maskLength")));
|
||||||
item.put("lyoutDptCnt",Integer.parseInt(el.getAttributeValue("depth")) + 1 ); // 통합인터페이스 전달되는 Depth + 1을 해야 함
|
item.put("lyoutDptCnt",Integer.parseInt(el.getAttributeValue("depth")) + 1 ); // 통합인터페이스 전달되는 Depth + 1을 해야 함
|
||||||
item.put("decptLenCnt","".equals(el.getAttributeValue("scale")) ? 0 : Integer.parseInt(el.getAttributeValue("scale"))); // 소수점길이 META에서 "" 이면 "" 으로 표현함
|
item.put("decptLenCnt","".equals(el.getAttributeValue("scale")) ? 0 : Integer.parseInt(el.getAttributeValue("scale"))); // 소수점길이 META에서 "" 이면 "" 으로 표현함
|
||||||
@@ -166,7 +181,7 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
|
|||||||
|
|
||||||
|
|
||||||
String dataType = "";
|
String dataType = "";
|
||||||
if( el.getAttributeValue("type") == null || "".equals(el.getAttributeValue("type"))) {
|
if( el.getAttributeValue("type") == null || "".equals(el.getAttributeValue("type"))) {
|
||||||
} else if( "VARCHAR".startsWith(el.getAttributeValue("type").toUpperCase()) ) { // Varchar, Number
|
} else if( "VARCHAR".startsWith(el.getAttributeValue("type").toUpperCase()) ) { // Varchar, Number
|
||||||
dataType = "String";
|
dataType = "String";
|
||||||
} else if( "NUMBER".startsWith(el.getAttributeValue("type").toUpperCase()) ) { // Varchar, Number
|
} else if( "NUMBER".startsWith(el.getAttributeValue("type").toUpperCase()) ) { // Varchar, Number
|
||||||
@@ -183,6 +198,194 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// JJB 수정사항 shkim 2020-05-13 JSON 타입 추가
|
||||||
|
/**
|
||||||
|
* json 형식으로 전달 된 레이아웃을 LayoutVo로 전환
|
||||||
|
*
|
||||||
|
* @param e
|
||||||
|
* @param msgType
|
||||||
|
* @param loutName
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
private List<HashMap<String,Object>> setLayoutItemsJSN(JSONArray items, String msgType, String loutName, String parentNo) throws Exception {
|
||||||
|
List<HashMap<String,Object>> list = new ArrayList<HashMap<String,Object>>();
|
||||||
|
|
||||||
|
for(Object i : items) {
|
||||||
|
// Layout Item Format (TR08)
|
||||||
|
HashMap<String,Object> item = new HashMap<String,Object>();
|
||||||
|
|
||||||
|
String type = (String) ((JSONObject) i).keySet().iterator().next();
|
||||||
|
|
||||||
|
JSONObject _i = (JSONObject) ((JSONObject) i).get(type);
|
||||||
|
|
||||||
|
item.put("loutName",loutName);
|
||||||
|
item.put("loutItemName",_i.get("id"));
|
||||||
|
item.put("loutItemSerno", Integer.parseInt((String) _i.get("no")) );
|
||||||
|
item.put("loutItemIDName",Integer.parseInt((String) _i.get("no")) + 1000);
|
||||||
|
String no = parentNo;
|
||||||
|
item.put("parntLoutItemIDName",Integer.parseInt( no == null ? "0":no ) + 1000 );
|
||||||
|
item.put("loutItemDesc",_i.get("desc"));
|
||||||
|
type = type.toUpperCase();
|
||||||
|
int node = 0;
|
||||||
|
if( "GROUP".equals(type) ) {
|
||||||
|
node = Item.NODE_GROUP;
|
||||||
|
} else if("GRID".equals(type)) {
|
||||||
|
node = Item.NODE_GROUP;
|
||||||
|
} else {
|
||||||
|
node = Item.NODE_FIELD;
|
||||||
|
}
|
||||||
|
|
||||||
|
item.put("loutItemNodePtrnIDName",node);
|
||||||
|
|
||||||
|
int loutType = Types.TYPE_UNKNOWN;
|
||||||
|
if( _i.get("type") == null || "".equals(_i.get("type")))
|
||||||
|
{
|
||||||
|
} else if( "GRID".equals(type) || "GROUP".equals(type) )
|
||||||
|
{
|
||||||
|
} else if( msgType.equals("XML") )
|
||||||
|
{
|
||||||
|
loutType = "VARCHAR".startsWith(((String) _i.get("type")).toUpperCase()) ? Types.TYPE_STRING : Types.TYPE_INT; // TYPE_LONG, TYPE_SHORT, TYPE_DOUBLE, TYPE_FLOAT
|
||||||
|
|
||||||
|
//loutType = Types.TYPE_STRING;
|
||||||
|
}
|
||||||
|
else if ( msgType.equals("JSON") )
|
||||||
|
{
|
||||||
|
String type2 = ((String) _i.get("type")).toUpperCase();
|
||||||
|
|
||||||
|
switch(type2)
|
||||||
|
{
|
||||||
|
case "VARCHAR":
|
||||||
|
loutType = Types.TYPE_STRING;
|
||||||
|
break;
|
||||||
|
// JJB 수정사항 shkim 2020-08-19 숫자형 실수부 처리 문제로 BigDecimal로 처리
|
||||||
|
case "NUMBER":
|
||||||
|
// loutType = Types.TYPE_INT;
|
||||||
|
// break;
|
||||||
|
case "BIGDECIMAL":
|
||||||
|
loutType = Types.TYPE_BIGDECIMAL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
//loutType = type2.equals("VARCHAR") ? Types.TYPE_STRING : Types.TYPE_INT; // TYPE_LONG, TYPE_SHORT, TYPE_DOUBLE, TYPE_FLOAT
|
||||||
|
|
||||||
|
}else if ( msgType.equals("FML32") )
|
||||||
|
{
|
||||||
|
String fmlType = ((String) _i.get("id")).toUpperCase().replaceAll("[\\d]", "");
|
||||||
|
|
||||||
|
switch(fmlType)
|
||||||
|
{
|
||||||
|
case "LONG":
|
||||||
|
loutType = Types.TYPE_LONG;
|
||||||
|
break;
|
||||||
|
case "SHORT":
|
||||||
|
loutType = Types.TYPE_SHORT;
|
||||||
|
break;
|
||||||
|
case "DOUBLE":
|
||||||
|
loutType = Types.TYPE_DOUBLE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
loutType = Types.TYPE_STRING;
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
item.put("loutItemPathName", _i.get("id"));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
loutType = Types.TYPE_BYTEARRAY;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
item.put("loutItemPtrnIDName",loutType);
|
||||||
|
item.put("loutItemLenCnt","".equals(_i.get("len")) ? 0 : Integer.parseInt((String) _i.get("len")));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// MIN, MAX 설정
|
||||||
|
// 통합인터페이스는 * , 숫자만 보냄 ( 가변은 * 고정은 숫자 )
|
||||||
|
String occurNoitm = (String) _i.get("maxCnt");
|
||||||
|
|
||||||
|
|
||||||
|
int max = 0;
|
||||||
|
int min = 0;
|
||||||
|
if( String.valueOf(Item.OCC_MULTI_OR_NONE).equals(occurNoitm) ) { // *
|
||||||
|
max = -1;
|
||||||
|
item.put("loutItemRefInfo2",_i.get("count"));
|
||||||
|
} else if ( String.valueOf(Item.OCC_ONCE_OR_NONE).equals(occurNoitm) ) { // ?
|
||||||
|
max = 1;
|
||||||
|
} else if ( String.valueOf(Item.OCC_MULTI_OR_ONCE).equals(occurNoitm) ) { // +
|
||||||
|
min = 1;
|
||||||
|
max = -1;
|
||||||
|
} else if ( "".equals(occurNoitm) ) { // ""
|
||||||
|
min = 1;
|
||||||
|
max = 1;
|
||||||
|
} else if ( occurNoitm.matches("[0-9]+") ) { // ""
|
||||||
|
min = Integer.parseInt(occurNoitm);
|
||||||
|
max = Integer.parseInt(occurNoitm);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 반복횟수 참조정보가 없는데 MIN, MAX 값이 설정되지 않은 경우 오류
|
||||||
|
if( max == 0 && min == 0 ) {
|
||||||
|
if("GRID".equals(type) ) {
|
||||||
|
if ( !StringUtils.isEmpty((String) _i.get("count")) ) {
|
||||||
|
} else {
|
||||||
|
throw new Exception("반복횟수 참조정보 오류");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
min = 1;
|
||||||
|
max = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( "0".equals(occurNoitm) ) {
|
||||||
|
occurNoitm = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
item.put("loutItemOccurPtrnDstcd",occurNoitm); // 레이아웃항목발생유형구분코드
|
||||||
|
item.put("loutItemMaxOccurNoitm",max); // 레이아웃항목최대발생건수
|
||||||
|
item.put("loutItemMinOccurNoitm",min); // 레이아웃항목최소발생건수
|
||||||
|
|
||||||
|
item.put("loutItemBascVal",_i.get("default")); // 레이아웃항목기본값
|
||||||
|
if( _i.get("mask") != null && _i.get("mask").equals("Y"))
|
||||||
|
{
|
||||||
|
item.put("loutItemMskYn", "Y");
|
||||||
|
item.put("loutItemMskCode", _i.get("mask2"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
item.put("loutItemMskYn",_i.get("mask")); // [Y/N/ ]
|
||||||
|
}
|
||||||
|
|
||||||
|
if( "Y".equals(item.get("loutItemMskYn")) ) item.put("loutItemMaskLength",Integer.parseInt((String) _i.get("maskLength")));
|
||||||
|
item.put("lyoutDptCnt",Integer.parseInt((String) _i.get("depth")) + 1 ); // 통합인터페이스 전달되는 Depth + 1을 해야 함
|
||||||
|
item.put("decptLenCnt","".equals(_i.get("scale")) ? 0 : Integer.parseInt((String) _i.get("scale"))); // 소수점길이 META에서 "" 이면 "" 으로 표현함
|
||||||
|
item.put("loutItemMskTarget", _i.get("maskTarget"));
|
||||||
|
|
||||||
|
|
||||||
|
String dataType = "";
|
||||||
|
if( _i.get("type") == null || "".equals(_i.get("type"))) {
|
||||||
|
} else if( "VARCHAR".startsWith(((String) _i.get("type")).toUpperCase()) ) { // Varchar, Number
|
||||||
|
dataType = "String";
|
||||||
|
} else if( "NUMBER".startsWith(((String) _i.get("type")).toUpperCase()) ) { // Varchar, Number
|
||||||
|
// JJB 수정사항 shkim 2020-08-19 숫자형 실수부 처리 문제로 BigDecimal로 처리
|
||||||
|
dataType = "BigDecimal";
|
||||||
|
// dataType = "Integer";
|
||||||
|
} else if( "BIGDECIMAL".startsWith(((String) _i.get("type")).toUpperCase()) ) { // Varchar, Number
|
||||||
|
dataType = "BigDecimal";
|
||||||
|
}
|
||||||
|
|
||||||
|
item.put("lyoutItemRefPtrnIDName",dataType); // 데이터타입
|
||||||
|
|
||||||
|
list.add(item);
|
||||||
|
|
||||||
|
if( _i.containsKey("item") && _i.entrySet().size() > 0 ) {
|
||||||
|
list.addAll(setLayoutItemsJSN((JSONArray) _i.get("item"), msgType, loutName, (String) _i.get("no")));
|
||||||
|
}
|
||||||
|
} // end FOR
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 통합인터페이스 시스템(iim)에서 전문 레이아웃에 대한 INSERT, DELETE 요청
|
* 통합인터페이스 시스템(iim)에서 전문 레이아웃에 대한 INSERT, DELETE 요청
|
||||||
* *
|
* *
|
||||||
@@ -194,7 +397,7 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
|
|||||||
*/
|
*/
|
||||||
@RequestMapping(params = "cmd=Message")
|
@RequestMapping(params = "cmd=Message")
|
||||||
public View parseMessage(HttpServletRequest request, HttpServletResponse response, String schema) throws Exception {
|
public View parseMessage(HttpServletRequest request, HttpServletResponse response, String schema) throws Exception {
|
||||||
UserAccessLogger.log(request, "Layout", "L", "cmd=Message");
|
UserAccessLogger.log(request, "레이아웃", "L", "cmd=Message");
|
||||||
Document rDoc = null;
|
Document rDoc = null;
|
||||||
Element results = null;
|
Element results = null;
|
||||||
String resultS = null;
|
String resultS = null;
|
||||||
@@ -204,35 +407,23 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
|
|||||||
String recvTime = DateUtil.getDateTime("yyyyMMddHHmmssSS").substring(0, 16);
|
String recvTime = DateUtil.getDateTime("yyyyMMddHHmmssSS").substring(0, 16);
|
||||||
|
|
||||||
// 초기화
|
// 초기화
|
||||||
if (schema != null) {
|
DataSourceContextHolder.setDataSourceType(DataSourceTypeManager.getDataSourceType(schema));
|
||||||
DataSourceContextHolder.setDataSourceType(DataSourceTypeManager.getDataSourceType(schema));
|
try {
|
||||||
} else {
|
|
||||||
logger.error(">>> DataSourceTypeManager.getDataSourceType(schema) error. schema is null");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
|
|
||||||
SAXBuilder builder = new SAXBuilder();
|
SAXBuilder builder = new SAXBuilder();
|
||||||
|
|
||||||
// 응답 전문
|
// 응답 전문
|
||||||
InputStream resStream = request.getSession().getServletContext().getResourceAsStream("/WEB-INF/layout-messagesync-res.xml");
|
File res = new File( request.getSession().getServletContext().getRealPath("/WEB-INF/") + "/layout-messagesync-res.xml" );
|
||||||
if (resStream == null) {
|
// ServletContext context = request.getSession().getServletContext();
|
||||||
throw new Exception("layout-messagesync-res.xml 파일을 찾을 수 없습니다.");
|
// InputStream res = context.getResourceAsStream("layout-messagesync-res.xml");
|
||||||
}
|
rDoc = builder.build(res);
|
||||||
try {
|
results = rDoc.getRootElement();
|
||||||
rDoc = builder.build(resStream);
|
|
||||||
results = rDoc.getRootElement();
|
|
||||||
} finally {
|
// 요청 전문 - InputStream을 먼저 byte[]로 읽음
|
||||||
resStream.close();
|
sis = request.getInputStream();
|
||||||
}
|
|
||||||
|
|
||||||
// 요청 전문
|
|
||||||
sis = request.getInputStream();
|
|
||||||
Document doc = builder.build(sis);
|
|
||||||
|
|
||||||
// log 기록
|
|
||||||
byte[] arg = new byte[request.getContentLength()];
|
byte[] arg = new byte[request.getContentLength()];
|
||||||
int resultSet =0;
|
int resultSet = 0;
|
||||||
int total = 0;
|
int total = 0;
|
||||||
try {
|
try {
|
||||||
resultSet = sis.readLine(arg, 0, arg.length);
|
resultSet = sis.readLine(arg, 0, arg.length);
|
||||||
@@ -240,12 +431,20 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
|
|||||||
total += resultSet;
|
total += resultSet;
|
||||||
resultSet = sis.readLine(arg, total, 1024);
|
resultSet = sis.readLine(arg, total, 1024);
|
||||||
}
|
}
|
||||||
|
|
||||||
param.put("recvData", new String(arg));
|
param.put("recvData", new String(arg, "UTF-8"));
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
logger.error("MessageSync.err - don't read the XML File - " + new String(arg), e);
|
logger.error("MessageSync.err - don't read the XML File - " + new String(arg), e);
|
||||||
param.put("recvData", "");
|
param.put("recvData", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// byte[]로부터 XML 파싱 (BOM 제거)
|
||||||
|
String xmlContent = new String(arg, "UTF-8").trim();
|
||||||
|
// BOM 제거 (UTF-8 BOM: EF BB BF)
|
||||||
|
if (xmlContent.startsWith("\uFEFF")) {
|
||||||
|
xmlContent = xmlContent.substring(1);
|
||||||
|
}
|
||||||
|
Document doc = builder.build(new ByteArrayInputStream(xmlContent.getBytes("UTF-8")));
|
||||||
|
|
||||||
param.put("logPrcssSeqno", UUIDGenerator.getUUID());
|
param.put("logPrcssSeqno", UUIDGenerator.getUUID());
|
||||||
// xml 1.1
|
// xml 1.1
|
||||||
@@ -263,7 +462,7 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
|
|||||||
param.put("recvAmndHMS", recvTime);
|
param.put("recvAmndHMS", recvTime);
|
||||||
|
|
||||||
logger.info(layoutName + " command - [" + command +"]");
|
logger.info(layoutName + " command - [" + command +"]");
|
||||||
//HashMap<String, Object> returnMap = new HashMap<String,Object>();
|
HashMap<String, Object> returnMap = new HashMap<String,Object>();
|
||||||
if( command.equals("delete") ) {
|
if( command.equals("delete") ) {
|
||||||
HashMap<String,Object> vo = new HashMap<String,Object>();
|
HashMap<String,Object> vo = new HashMap<String,Object>();
|
||||||
vo.put("loutName",layoutName);
|
vo.put("loutName",layoutName);
|
||||||
@@ -276,15 +475,19 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
|
|||||||
|
|
||||||
service.addLayoutSyncLog(param);
|
service.addLayoutSyncLog(param);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// LoutName 검증
|
// LoutName 검증
|
||||||
// 인터페이스 이름 20자리 이하
|
// 인터페이스 이름 20자리 이하
|
||||||
// EAI _CBSS _CBSR _CBSE _UAIR
|
// EAI _CORS _CORR _CORE _UAIR
|
||||||
// FEP _CBS _ORG
|
// FEP _COR _ORG
|
||||||
String fattern = "[A-Z0-9]{3}_[A-Z0-9]{3}[A-Z0-9]*_[A-Z0-9]{3,4}";
|
String fattern = "[A-Za-z0-9]*";
|
||||||
if(!layoutName.matches(fattern)) {
|
|
||||||
throw new BizException("잘못된 전문레이아웃명 입니다.\n명명규칙을 확인하세요.\n[A-Z0-9]{3}_[A-Z0-9]{3}[A-Z0-9]*_[A-Z0-9]{3,4}");
|
//레이아웃 필터링으로 미동작 주석처
|
||||||
}
|
// if(!layoutName.matches(fattern)) {
|
||||||
|
// throw new BizException("잘못된 전문레이아웃명 입니다.\n명명규칙을 확인하세요.\n"+fattern);
|
||||||
|
// }
|
||||||
|
|
||||||
String layout = body.getChild("data").getText();
|
String layout = body.getChild("data").getText();
|
||||||
logger.info(layoutName + " recv Data - [" + layout + "]");
|
logger.info(layoutName + " recv Data - [" + layout + "]");
|
||||||
@@ -297,7 +500,16 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
|
|||||||
Element format = doc2.getRootElement();
|
Element format = doc2.getRootElement();
|
||||||
|
|
||||||
String msgType = format.getAttributeValue("msgType");
|
String msgType = format.getAttributeValue("msgType");
|
||||||
if( "ASCII".equals(format.getAttributeValue("msgType")) ) {
|
String useSystem = format.getAttributeValue("usesystem");
|
||||||
|
|
||||||
|
// useSystem "EAI", "FEP" 만 배포 받는다.
|
||||||
|
if (!"EAI".equalsIgnoreCase(useSystem) && !"FEP".equalsIgnoreCase(useSystem)) {
|
||||||
|
String errorMessage = "사용 시스템(" + useSystem + ")인 전문레이아웃은 EAI, FEP로 배포 안됨.";
|
||||||
|
logger.error(errorMessage);
|
||||||
|
throw new Exception(errorMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
if( "ASCII".equals(format.getAttributeValue("msgType")) ) {
|
||||||
msgType = "BYTES";
|
msgType = "BYTES";
|
||||||
} else if( "VASCII".equals(format.getAttributeValue("msgType")) ) {
|
} else if( "VASCII".equals(format.getAttributeValue("msgType")) ) {
|
||||||
msgType = "VBYTES";
|
msgType = "VBYTES";
|
||||||
@@ -365,8 +577,8 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
|
|||||||
resultS = StringUtils.toXMLString(rDoc, true);
|
resultS = StringUtils.toXMLString(rDoc, true);
|
||||||
|
|
||||||
} catch( Exception e ) {
|
} catch( Exception e ) {
|
||||||
logger.error(e);
|
logger.error("",e);
|
||||||
logger.error(e.getStackTrace()[0]);
|
logger.error("",e.getStackTrace()[0]);
|
||||||
try {
|
try {
|
||||||
if( results != null ) {
|
if( results != null ) {
|
||||||
results.getChild("Result").setText("False");
|
results.getChild("Result").setText("False");
|
||||||
@@ -383,22 +595,16 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
|
|||||||
param.put("PrcssRsltCmnt", StringUtils.cuttings(CommonUtil.getArrayString(e.getStackTrace(), "\n"), 4000)[0]);
|
param.put("PrcssRsltCmnt", StringUtils.cuttings(CommonUtil.getArrayString(e.getStackTrace(), "\n"), 4000)[0]);
|
||||||
service.addLayoutSyncLog(param);
|
service.addLayoutSyncLog(param);
|
||||||
} catch(Exception ee) {
|
} catch(Exception ee) {
|
||||||
//ee.printStackTrace();
|
ee.printStackTrace();
|
||||||
logger.error("error",e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ServletOutputStream sos = null;
|
ServletOutputStream sos = null;
|
||||||
try {
|
try {
|
||||||
sos = response.getOutputStream();
|
sos = response.getOutputStream();
|
||||||
if(resultS != null) {
|
sos.write(resultS.getBytes());
|
||||||
sos.write(resultS.getBytes());
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch( Exception e ) {
|
} catch( Exception e ) {
|
||||||
//e.printStackTrace();
|
e.printStackTrace();
|
||||||
//취약점코드 수정 2019.08.22 SW
|
|
||||||
logger.error(e.getMessage());
|
|
||||||
} finally {
|
} finally {
|
||||||
if( sis != null ) sis.close();
|
if( sis != null ) sis.close();
|
||||||
if( sos != null ) sos.close();
|
if( sos != null ) sos.close();
|
||||||
@@ -406,6 +612,382 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// JJB 수정사항 shkim 2020-05-13 JSON 타입 추가
|
||||||
|
/**
|
||||||
|
* 통합인터페이스 시스템(iim)에서 전문 레이아웃에 대한 INSERT, DELETE 요청
|
||||||
|
* *
|
||||||
|
* @param request
|
||||||
|
* @param response
|
||||||
|
* @param schema
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
@RequestMapping(params = "cmd=MessageJSON")
|
||||||
|
public View parseMessageJSN(HttpServletRequest request, HttpServletResponse response, String schema) throws Exception {
|
||||||
|
UserAccessLogger.log(request, "레이아웃", "L", "cmd=MessageJSON");
|
||||||
|
|
||||||
|
ServletInputStream sis = null;
|
||||||
|
|
||||||
|
JSONObject results = new JSONObject();
|
||||||
|
JSONObject resultS = new JSONObject();
|
||||||
|
resultS.put("Results", results);
|
||||||
|
|
||||||
|
|
||||||
|
HashMap<String, String> param = new HashMap<String, String>();
|
||||||
|
String recvTime = DateUtil.getDateTime("yyyyMMddHHmmssSS").substring(0, 16);
|
||||||
|
|
||||||
|
// 초기화
|
||||||
|
DataSourceContextHolder.setDataSourceType(DataSourceTypeManager.getDataSourceType(schema));
|
||||||
|
try {
|
||||||
|
// // 요청 전문
|
||||||
|
sis = request.getInputStream();
|
||||||
|
|
||||||
|
JSONObject json = (JSONObject) JSONValue.parse(new InputStreamReader(sis));
|
||||||
|
|
||||||
|
// JJB 향후제거 shkim 2020-05-13 연계 테스트 체크
|
||||||
|
logger.error("\n\n MMI SYNC Request : " + json.toString());
|
||||||
|
|
||||||
|
// log 기록
|
||||||
|
byte[] arg = new byte[request.getContentLength()];
|
||||||
|
int resultSet =0;
|
||||||
|
int total = 0;
|
||||||
|
try {
|
||||||
|
resultSet = sis.readLine(arg, 0, arg.length);
|
||||||
|
while(resultSet != -1) {
|
||||||
|
total += resultSet;
|
||||||
|
resultSet = sis.readLine(arg, total, 1024);
|
||||||
|
}
|
||||||
|
|
||||||
|
param.put("recvData", new String(arg));
|
||||||
|
} catch(Exception e) {
|
||||||
|
logger.error("MessageSync.err - don't read the JSON File - " + new String(arg), e);
|
||||||
|
param.put("recvData", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
syncLayout(param, recvTime, json);
|
||||||
|
// results.getChild("Result").setText("S".equals(param.get("prcssRslt"))?"True":"False");
|
||||||
|
// results.getChild("ResultMessage").setText("S".equals(param.get("prcssRslt"))?"성공":param.get("prcssRsltCmnt"));
|
||||||
|
|
||||||
|
// resultS = StringUtils.toXMLString(rDoc, true);
|
||||||
|
|
||||||
|
results.put("Result", "S".equals(param.get("prcssRslt"))?"True":"False");
|
||||||
|
results.put("ResultMessage", "S".equals(param.get("prcssRslt"))?"성공":param.get("prcssRsltCmnt"));
|
||||||
|
|
||||||
|
|
||||||
|
} catch( Exception e ) {
|
||||||
|
logger.error("", e);
|
||||||
|
try {
|
||||||
|
if( results != null ) {
|
||||||
|
// results.getChild("Result").setText("False");
|
||||||
|
// results.getChild("ResultMessage").setText( e.getMessage() );
|
||||||
|
|
||||||
|
// resultS = StringUtils.toXMLString(rDoc, true);
|
||||||
|
results.put("Result", "False");
|
||||||
|
results.put("ResultMessage", e.getMessage() );
|
||||||
|
|
||||||
|
}
|
||||||
|
if( param.get("logPrcssSeqno") == null ) {
|
||||||
|
param.put("logPrcssSeqno", UUIDGenerator.getUUID());
|
||||||
|
param.put("ServiceName", "MessageSync");
|
||||||
|
param.put("RecvAmndHMS", recvTime);
|
||||||
|
}
|
||||||
|
param.put("PrcssRslt", "F");
|
||||||
|
param.put("PrcssRsltCmnt", StringUtils.cuttings(CommonUtil.getArrayString(e.getStackTrace(), "\n"), 4000)[0]);
|
||||||
|
service.addLayoutSyncLog(param);
|
||||||
|
} catch(Exception ee) {
|
||||||
|
ee.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ServletOutputStream sos = null;
|
||||||
|
try {
|
||||||
|
sos = response.getOutputStream();
|
||||||
|
sos.write(resultS.toString().getBytes());
|
||||||
|
} catch( Exception e ) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
if( sis != null ) sis.close();
|
||||||
|
if( sos != null ) sos.close();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void syncLayout(HashMap<String, String> param, String recvTime, JSONObject json)
|
||||||
|
throws Exception, BizException, ParseException {
|
||||||
|
JSONObject header = (JSONObject) ((JSONObject) json.get("Message")).get("Header");
|
||||||
|
JSONObject body = (JSONObject) ((JSONObject) json.get("Message")).get("Body");
|
||||||
|
|
||||||
|
String serviceName = (String) header.get("ServiceName");
|
||||||
|
String command = (String) header.get("Command");
|
||||||
|
|
||||||
|
String interfaceId = (String) body.get("interfaceCode");
|
||||||
|
Object layoutObject = body.get("Layout");
|
||||||
|
|
||||||
|
param.put("serviceName", serviceName);
|
||||||
|
param.put("command", command);
|
||||||
|
param.put("recvAmndHMS", recvTime);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
JSONArray layoutArray = null;
|
||||||
|
if (layoutObject instanceof JSONArray) {
|
||||||
|
insertInterface(interfaceId,body);
|
||||||
|
layoutArray = (JSONArray) layoutObject;
|
||||||
|
for (int i = 0; i < layoutArray.size(); i++) {
|
||||||
|
syncLayout(param, body, command, (JSONObject) layoutArray.get(i));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
syncLayout(param, body, command, (JSONObject) layoutObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 전문 변환 매핑이 필요한 지 확인 한 후 매핑 한다.
|
||||||
|
if (body.get("interfaceLayout") != null && body.get("serviceLayout") != null && layoutArray != null
|
||||||
|
&& layoutArray.size() % 2 == 0) {
|
||||||
|
|
||||||
|
String[] serviceLayoutList = ((String)body.get("serviceLayout")).split(",");
|
||||||
|
String[] interfaceLayoutList = ((String)body.get("interfaceLayout")).split(",");
|
||||||
|
|
||||||
|
if ( "E".equals(interfaceId.substring(0,1)) ) // EAI일때
|
||||||
|
{
|
||||||
|
for( String serviceLayout : serviceLayoutList)
|
||||||
|
{
|
||||||
|
for(String interfaceLayout : interfaceLayoutList )
|
||||||
|
{
|
||||||
|
if ( interfaceLayout.endsWith(serviceLayout) )
|
||||||
|
{
|
||||||
|
String cnvsnName = transformService.transactionLayoutToTransform(json,interfaceLayout, serviceLayout);
|
||||||
|
CommonCommand refreshCommand = new CommonCommand("com.eactive.eai.agent.transformer.ReloadTransformCommand",cnvsnName);
|
||||||
|
//변환매핑 reload처리후, result 받아서 예외처리 안한 이유. 앞단에서 레이아웃 동기화 command 날리면서 온라인이동 통신 성공해야 여기 까이 오기때문에, 굳이 추가하지않음.
|
||||||
|
agentUtilService.broadcast(refreshCommand);
|
||||||
|
logger.debug(">>> reload cnvsName = " +cnvsnName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else //FEP일때
|
||||||
|
{
|
||||||
|
for( String srcLayout : interfaceLayoutList)
|
||||||
|
{
|
||||||
|
for( String targetLayout : serviceLayoutList )
|
||||||
|
{
|
||||||
|
String cnvsnName = transformService.transactionLayoutToTransform(json,srcLayout, targetLayout);
|
||||||
|
CommonCommand refreshCommand = new CommonCommand("com.eactive.eai.agent.transformer.ReloadTransformCommand",cnvsnName);
|
||||||
|
//변환매핑 reload처리후, result 받아서 예외처리 안한 이유. 앞단에서 레이아웃 동기화 command 날리면서 온라인이동 통신 성공해야 여기 까이 오기때문에, 굳이 추가하지않음.
|
||||||
|
agentUtilService.broadcast(refreshCommand);
|
||||||
|
logger.debug(">>> reload cnvsName = " +cnvsnName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void insertInterface(String interfaceId, JSONObject body) throws Exception
|
||||||
|
{
|
||||||
|
if ( interfaceId.startsWith("E") )
|
||||||
|
{
|
||||||
|
insertInterfaceForEAI(interfaceId, body);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
insertInterfaceForFEP(interfaceId, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void insertInterfaceForEAI(String interfaceId, JSONObject body) throws Exception
|
||||||
|
{
|
||||||
|
HashMap<String, Object> param = new HashMap<String, Object>();
|
||||||
|
|
||||||
|
|
||||||
|
String bizCode = (String) body.get("bzSystemCode");
|
||||||
|
String interfaceDesc = (String) body.get("interfaceDesc");
|
||||||
|
String tuxedoxaYn = (String) body.get("tuxedoXaYN");
|
||||||
|
String tuxedosvcId = (String) body.get("serviceCode");
|
||||||
|
param.put("eaiSvcName", interfaceId+"S1");
|
||||||
|
param.put("eaiBzwkDstCd", bizCode);
|
||||||
|
param.put("interfaceId", interfaceId);
|
||||||
|
param.put("interfaceDesc", interfaceDesc);
|
||||||
|
param.put("io", "I");
|
||||||
|
param.put("splizdmndDstCd","S");
|
||||||
|
param.put("inExtnlDstCd","1");
|
||||||
|
param.put("tuxedoxaYn", tuxedoxaYn);
|
||||||
|
|
||||||
|
if( "INF".equals(interfaceId.substring(5, 8)) )
|
||||||
|
{
|
||||||
|
param.put("tuxedosvcId", tuxedosvcId);
|
||||||
|
}
|
||||||
|
|
||||||
|
if( "S".equals(interfaceId.substring(1, 2)) ) //sync일경우
|
||||||
|
{
|
||||||
|
param.put("layoutMappingName",interfaceId+"_I,"+interfaceId.substring(5, interfaceId.length())+"_O");
|
||||||
|
param.put("svcMotivuseDstCd","SYNC");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
param.put("layoutMappingName",interfaceId+"_I");
|
||||||
|
param.put("svcMotivuseDstCd","ASYN");
|
||||||
|
}
|
||||||
|
|
||||||
|
interfaceService.lazyInsertToIF01(param);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void insertInterfaceForFEP(String interfaceId, JSONObject body) throws Exception
|
||||||
|
{
|
||||||
|
HashMap<String, Object> param = new HashMap<String, Object>();
|
||||||
|
|
||||||
|
String bizCode = (String) body.get("bzSystemCode");
|
||||||
|
String interfaceDesc = (String) body.get("interfaceDesc");
|
||||||
|
String tuxedoxaYn = (String) body.get("tuxedoXaYN");
|
||||||
|
String tuxedosvcId = (String) body.get("serviceCode");
|
||||||
|
|
||||||
|
String io = "1".equals(interfaceId.substring(1, 2)) ? "I" : "O";
|
||||||
|
String splizdmndDstCd = interfaceId.substring(interfaceId.length()-1);
|
||||||
|
String inExtnlDstCd = "";
|
||||||
|
|
||||||
|
if ( "IS:OR".contains(io+splizdmndDstCd) )
|
||||||
|
{
|
||||||
|
inExtnlDstCd = "1";
|
||||||
|
param.put("bzwksvckeyName",interfaceId.substring(5, interfaceId.length()-1));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
inExtnlDstCd = "2";
|
||||||
|
}
|
||||||
|
|
||||||
|
param.put("eaiSvcName", interfaceId+splizdmndDstCd+inExtnlDstCd);
|
||||||
|
param.put("eaiBzwkDstCd", bizCode);
|
||||||
|
param.put("interfaceId", interfaceId);
|
||||||
|
param.put("interfaceDesc", interfaceDesc);
|
||||||
|
param.put("io", io);
|
||||||
|
param.put("splizdmndDstCd",splizdmndDstCd);
|
||||||
|
param.put("inExtnlDstCd",inExtnlDstCd);
|
||||||
|
param.put("svcMotivuseDstCd","ASYN");
|
||||||
|
param.put("tuxedoxaYn", tuxedoxaYn);
|
||||||
|
|
||||||
|
|
||||||
|
param.put("layoutMappingName",interfaceId+"1");
|
||||||
|
|
||||||
|
interfaceService.lazyInsertToIF01(param);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void syncLayout(HashMap<String, String> param, JSONObject body, String command, JSONObject layout)
|
||||||
|
throws Exception, BizException, ParseException {
|
||||||
|
|
||||||
|
String layoutName = (String) layout.get("id");
|
||||||
|
String useSystem = (String) layout.get("usesystem");
|
||||||
|
|
||||||
|
param.put("logPrcssSeqno", UUIDGenerator.getUUID());
|
||||||
|
param.put("loutName", layoutName);
|
||||||
|
|
||||||
|
logger.info(layoutName + " command - [" + command +"]");
|
||||||
|
if( command.equals("delete") ) {
|
||||||
|
HashMap<String,Object> vo = new HashMap<String,Object>();
|
||||||
|
vo.put("loutName",layoutName);
|
||||||
|
|
||||||
|
service.deleteLayout(vo);
|
||||||
|
|
||||||
|
CommonCommand commonCommand = new CommonCommand("com.eactive.eai.agent.transformer.RemoveLayoutCommand",vo.get("loutName"));
|
||||||
|
HashMap<String,String> result = AgentParserUtils.parse(commonCommand, agentUtilService,"prcssRslt","prcssRsltCmnt");
|
||||||
|
param.putAll(result);
|
||||||
|
|
||||||
|
service.addLayoutSyncLog(param);
|
||||||
|
} else {
|
||||||
|
// LoutName 검증
|
||||||
|
// 인터페이스 이름 20자리 이하
|
||||||
|
// EAI _CORS _CORR _CORE _UAIR
|
||||||
|
// FEP _COR _ORG
|
||||||
|
String fattern = "";
|
||||||
|
switch(useSystem)
|
||||||
|
{
|
||||||
|
case "FEP":
|
||||||
|
fattern = "[A-Za-z0-9]*[12E]{1}";
|
||||||
|
break;
|
||||||
|
case "EAI":
|
||||||
|
case "FWK":
|
||||||
|
fattern = "[A-Za-z0-9]*_[IOE]{1}";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!layoutName.matches(fattern)) {
|
||||||
|
throw new BizException("잘못된 전문레이아웃명 입니다.\n명명규칙을 확인하세요.\n"+fattern);
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.info(layoutName + " recv Data - [" + layout + "]");
|
||||||
|
param.put("recvData", layout.toString());
|
||||||
|
|
||||||
|
HashMap<String,Object> vo = new HashMap<String,Object>();
|
||||||
|
|
||||||
|
String msgType = (String) layout.get("msgType");
|
||||||
|
if( "ASCII".equals(msgType) ) {
|
||||||
|
msgType = "FEP".equals(useSystem) ? "BYTES" : "PBYTES";
|
||||||
|
} else if( "VASCII".equals(msgType) ) {
|
||||||
|
msgType = "VBYTES";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Layout Format (TR07)
|
||||||
|
vo.put("loutName",layoutName);
|
||||||
|
vo.put("loutPtrnName",msgType); // ASCII, EBCDIC, XML
|
||||||
|
vo.put("loutDesc",layout.get("desc"));
|
||||||
|
|
||||||
|
String date = (String) layout.get("date");
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||||
|
vo.put("lastAmndHMS",new SimpleDateFormat("yyyyMMddHHmmssSS").format(sdf.parse(date)));
|
||||||
|
|
||||||
|
vo.put("eaiBzwkDstcd",layout.get("group"));
|
||||||
|
|
||||||
|
if( !"".equals(layout.get("createBy"))) {
|
||||||
|
vo.put("createBy",layout.get("createBy"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !"".equals(layout.get("updateBy"))) {
|
||||||
|
vo.put("updateBy",layout.get("updateBy"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Layout Item Format (TR08)
|
||||||
|
List<HashMap<String,Object>> list = new ArrayList<HashMap<String,Object>>();
|
||||||
|
HashMap<String,Object> tr08 = new HashMap<String,Object>();
|
||||||
|
tr08.put("loutName",layoutName);
|
||||||
|
tr08.put("loutItemName",layoutName);
|
||||||
|
tr08.put("loutItemSerno",0);
|
||||||
|
tr08.put("loutItemIDName",1000);
|
||||||
|
tr08.put("parntLoutItemIDName",0);
|
||||||
|
tr08.put("loutItemDesc",layout.get("desc"));
|
||||||
|
tr08.put("loutItemNodePtrnIDName",Item.NODE_MESSAGE);
|
||||||
|
tr08.put("loutItemPtrnIDName",Types.TYPE_UNKNOWN);
|
||||||
|
tr08.put("loutItemPathName",""); //
|
||||||
|
tr08.put("loutItemLenCnt",0);
|
||||||
|
tr08.put("loutItemRefInfo",""); // GROUP NAME
|
||||||
|
tr08.put("loutItemRefInfo2",""); //
|
||||||
|
tr08.put("loutItemOccurPtrnDstcd",""); // 레이아웃항목발생유형구분코드
|
||||||
|
tr08.put("loutItemMaxOccurNoitm",0); // 레이아웃항목최대발생건수
|
||||||
|
tr08.put("loutItemMinOccurNoitm",0); // 레이아웃항목최소발생건수
|
||||||
|
tr08.put("loutItemBascVal",""); // 레이아웃항목기본값
|
||||||
|
tr08.put("loutItemMskYn"," "); //
|
||||||
|
tr08.put("lyoutDptCnt",1);
|
||||||
|
tr08.put("decptLenCnt",0); // 소수점길이
|
||||||
|
tr08.put("lyoutItemRefPtrnIdName",""); // 데이터타입
|
||||||
|
|
||||||
|
list.add(tr08);
|
||||||
|
list.addAll(setLayoutItemsJSN((JSONArray) layout.get("data"), msgType, layoutName, null));
|
||||||
|
|
||||||
|
service.insertLayout(vo, list); //FIXME : 스키마 변경 룰 적용해야 함
|
||||||
|
|
||||||
|
CommonCommand commonCommand = new CommonCommand("com.eactive.eai.agent.transformer.ReloadLayoutCommand",vo.get("loutName"));
|
||||||
|
HashMap<String,String> result = AgentParserUtils.parse(commonCommand, agentUtilService,"prcssRslt","prcssRsltCmnt");
|
||||||
|
param.putAll(result);
|
||||||
|
service.addLayoutSyncLog(param);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* [통합인터페이스]에 레이아웃 정보 송신
|
* [통합인터페이스]에 레이아웃 정보 송신
|
||||||
* * schemaId에 따라 별도로 저장 됨
|
* * schemaId에 따라 별도로 저장 됨
|
||||||
@@ -420,11 +1002,11 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
|
|||||||
@RequestMapping(params = "cmd=M_LAYOUT")
|
@RequestMapping(params = "cmd=M_LAYOUT")
|
||||||
public String migrationLayout(HttpServletRequest request, HttpServletResponse response, ModelMap model, String schema) throws Exception {
|
public String migrationLayout(HttpServletRequest request, HttpServletResponse response, ModelMap model, String schema) throws Exception {
|
||||||
|
|
||||||
UserAccessLogger.log(request, "Layout", "M", "cmd=SYNC");
|
UserAccessLogger.log(request, "레이아웃", "M", "cmd=SYNC");
|
||||||
|
|
||||||
// if( !DataSourceTypeManager.EAI.equals(schema) && !DataSourceTypeManager.FEP.equals(schema) ) {
|
if( !DataSourceTypeManager.EAI.equals(schema) && !DataSourceTypeManager.FEP.equals(schema) ) {
|
||||||
schema = DataSourceContextHolder.getDataSourceType().getName();
|
schema = DataSourceContextHolder.getDataSourceType().getName();
|
||||||
// }
|
}
|
||||||
|
|
||||||
// 1. 파라메터 셋팅
|
// 1. 파라메터 셋팅
|
||||||
String migration = monitoringContext.getStringProperty("iim.layout.migration" ,"");
|
String migration = monitoringContext.getStringProperty("iim.layout.migration" ,"");
|
||||||
@@ -437,7 +1019,7 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
|
|||||||
param.put("userId", SessionManager.getUserId(request));
|
param.put("userId", SessionManager.getUserId(request));
|
||||||
param.put("schemaId", schema);
|
param.put("schemaId", schema);
|
||||||
param.put("filePath", StringUtils.defaultString(props[0], request.getSession().getServletContext().getRealPath("/WEB-INF/")));
|
param.put("filePath", StringUtils.defaultString(props[0], request.getSession().getServletContext().getRealPath("/WEB-INF/")));
|
||||||
param.put("encoding", StringUtils.defaultString(props[1],"utf-8"));
|
param.put("encoding", StringUtils.defaultString(props[1],"EUC-KR"));
|
||||||
param.put("indent", StringUtils.defaultString(props[2],"yes"));
|
param.put("indent", StringUtils.defaultString(props[2],"yes"));
|
||||||
param.put("path", request.getSession().getServletContext().getRealPath("/WEB-INF/"));
|
param.put("path", request.getSession().getServletContext().getRealPath("/WEB-INF/"));
|
||||||
|
|
||||||
@@ -457,12 +1039,9 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
|
|||||||
File mkf = new File(param.get("filePath") + "/" + param.get("schemaId"));
|
File mkf = new File(param.get("filePath") + "/" + param.get("schemaId"));
|
||||||
if( mkf.exists() ) {
|
if( mkf.exists() ) {
|
||||||
File[] fList = mkf.listFiles();
|
File[] fList = mkf.listFiles();
|
||||||
if(fList != null){
|
for( int i=0; i< fList.length; i++) {
|
||||||
for( int i=0; i< fList.length; i++) {
|
fList[i].delete();
|
||||||
fList[i].delete();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mkf.delete();
|
mkf.delete();
|
||||||
}
|
}
|
||||||
mkf.mkdir();
|
mkf.mkdir();
|
||||||
@@ -481,7 +1060,7 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
|
|||||||
+ "/" + layout.get("LOUTNAME") + ".xml";
|
+ "/" + layout.get("LOUTNAME") + ".xml";
|
||||||
|
|
||||||
// 파일 저장
|
// 파일 저장
|
||||||
//File newFile = new File(newName);
|
File newFile = new File(newName);
|
||||||
|
|
||||||
TransformerFactory factory = TransformerFactory.newInstance();
|
TransformerFactory factory = TransformerFactory.newInstance();
|
||||||
Transformer transformer = factory.newTransformer();
|
Transformer transformer = factory.newTransformer();
|
||||||
@@ -497,8 +1076,7 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
|
|||||||
succCnt++;
|
succCnt++;
|
||||||
}
|
}
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
//e.printStackTrace();
|
e.printStackTrace();
|
||||||
logger.error("migrationLayout error",e);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@@ -508,11 +1086,11 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
|
|||||||
@RequestMapping(params = "cmd=M_LAYOUT_MAPPING")
|
@RequestMapping(params = "cmd=M_LAYOUT_MAPPING")
|
||||||
public String migrationLayoutMapping(HttpServletRequest request, HttpServletResponse response, ModelMap model, String schema) throws Exception {
|
public String migrationLayoutMapping(HttpServletRequest request, HttpServletResponse response, ModelMap model, String schema) throws Exception {
|
||||||
|
|
||||||
UserAccessLogger.log(request, "Layout", "M", "cmd=SYNC");
|
UserAccessLogger.log(request, "레이아웃", "M", "cmd=SYNC");
|
||||||
|
|
||||||
// if( !DataSourceTypeManager.EAI.equals(schema) && !DataSourceTypeManager.FEP.equals(schema) ) {
|
if( !DataSourceTypeManager.EAI.equals(schema) && !DataSourceTypeManager.FEP.equals(schema) ) {
|
||||||
schema = DataSourceContextHolder.getDataSourceType().getName();
|
schema = DataSourceContextHolder.getDataSourceType().getName();
|
||||||
// }
|
}
|
||||||
|
|
||||||
// 1. 파라메터 셋팅
|
// 1. 파라메터 셋팅
|
||||||
String migration = monitoringContext.getStringProperty("iim.layout.migration" ,"");
|
String migration = monitoringContext.getStringProperty("iim.layout.migration" ,"");
|
||||||
@@ -525,7 +1103,7 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
|
|||||||
param.put("userId", SessionManager.getUserId(request));
|
param.put("userId", SessionManager.getUserId(request));
|
||||||
param.put("schemaId", schema);
|
param.put("schemaId", schema);
|
||||||
param.put("filePath", StringUtils.defaultString(props[0], request.getSession().getServletContext().getRealPath("/WEB-INF/")));
|
param.put("filePath", StringUtils.defaultString(props[0], request.getSession().getServletContext().getRealPath("/WEB-INF/")));
|
||||||
param.put("encoding", StringUtils.defaultString(props[1],"utf-8"));
|
param.put("encoding", StringUtils.defaultString(props[1],"EUC-KR"));
|
||||||
param.put("indent", StringUtils.defaultString(props[2],"yes"));
|
param.put("indent", StringUtils.defaultString(props[2],"yes"));
|
||||||
param.put("path", request.getSession().getServletContext().getRealPath("/WEB-INF/"));
|
param.put("path", request.getSession().getServletContext().getRealPath("/WEB-INF/"));
|
||||||
|
|
||||||
@@ -545,12 +1123,9 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
|
|||||||
File mkf = new File(param.get("filePath") + "/mapping_" + param.get("schemaId"));
|
File mkf = new File(param.get("filePath") + "/mapping_" + param.get("schemaId"));
|
||||||
if( mkf.exists() ) {
|
if( mkf.exists() ) {
|
||||||
File[] fList = mkf.listFiles();
|
File[] fList = mkf.listFiles();
|
||||||
if(fList != null){
|
for( int i=0; i< fList.length; i++) {
|
||||||
for( int i=0; i< fList.length; i++) {
|
fList[i].delete();
|
||||||
fList[i].delete();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mkf.delete();
|
mkf.delete();
|
||||||
}
|
}
|
||||||
mkf.mkdir();
|
mkf.mkdir();
|
||||||
@@ -567,7 +1142,7 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
|
|||||||
|
|
||||||
// 파일 저장
|
// 파일 저장
|
||||||
if( xmlQuery.indexOf("Layout") != -1) {
|
if( xmlQuery.indexOf("Layout") != -1) {
|
||||||
//File newFile = new File(newName);
|
File newFile = new File(newName);
|
||||||
|
|
||||||
TransformerFactory factory = TransformerFactory.newInstance();
|
TransformerFactory factory = TransformerFactory.newInstance();
|
||||||
Transformer transformer = factory.newTransformer();
|
Transformer transformer = factory.newTransformer();
|
||||||
@@ -584,8 +1159,7 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
//e.printStackTrace();
|
e.printStackTrace();
|
||||||
logger.error("migrationLayoutMapping error",e);
|
|
||||||
}
|
}
|
||||||
return null ;
|
return null ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
import org.apache.commons.httpclient.util.DateUtil;
|
import org.apache.commons.httpclient.util.DateUtil;
|
||||||
import org.jdom.Document;
|
import org.jdom.Document;
|
||||||
@@ -27,6 +28,7 @@ import org.springframework.stereotype.Service;
|
|||||||
import com.eactive.eai.rms.common.base.OnlBaseService;
|
import com.eactive.eai.rms.common.base.OnlBaseService;
|
||||||
import com.eactive.eai.rms.common.datasource.DataSourceContextHolder;
|
import com.eactive.eai.rms.common.datasource.DataSourceContextHolder;
|
||||||
import com.eactive.eai.rms.common.util.StringUtils;
|
import com.eactive.eai.rms.common.util.StringUtils;
|
||||||
|
import com.eactive.eai.rms.data.entity.onl.layout.LayoutService;
|
||||||
import com.eactive.eai.rms.onl.manage.rule.layout.LayoutDao;
|
import com.eactive.eai.rms.onl.manage.rule.layout.LayoutDao;
|
||||||
import com.eactive.eai.rms.onl.manage.serviceinfo.eaimsg.EaiMsgDao;
|
import com.eactive.eai.rms.onl.manage.serviceinfo.eaimsg.EaiMsgDao;
|
||||||
|
|
||||||
@@ -38,6 +40,9 @@ public class LayoutSyncService extends OnlBaseService {
|
|||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private EaiMsgDao eaiMsgDao;
|
private EaiMsgDao eaiMsgDao;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private LayoutService layoutService;
|
||||||
|
|
||||||
public List<HashMap<String,Object>> getAllEAIMessages(HashMap<String, String> param) throws Exception {
|
public List<HashMap<String,Object>> getAllEAIMessages(HashMap<String, String> param) throws Exception {
|
||||||
return eaiMsgDao.selectListAll(param);
|
return eaiMsgDao.selectListAll(param);
|
||||||
@@ -50,10 +55,7 @@ public class LayoutSyncService extends OnlBaseService {
|
|||||||
|
|
||||||
public void insertLayout(HashMap<String,Object> vo, List<HashMap<String,Object>> items)
|
public void insertLayout(HashMap<String,Object> vo, List<HashMap<String,Object>> items)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
|
deleteLayout(vo);
|
||||||
dao.deleteItemAll(vo);
|
|
||||||
dao.delete(vo);
|
|
||||||
|
|
||||||
dao.insert(vo);
|
dao.insert(vo);
|
||||||
|
|
||||||
for(HashMap<String,Object> item : items) {
|
for(HashMap<String,Object> item : items) {
|
||||||
@@ -74,8 +76,7 @@ public class LayoutSyncService extends OnlBaseService {
|
|||||||
|
|
||||||
public void deleteLayout(HashMap<String,Object> vo)
|
public void deleteLayout(HashMap<String,Object> vo)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
dao.deleteItemAll(vo);
|
layoutService.findById(Objects.toString(vo.get("loutName"))).ifPresent(layoutService::delete);
|
||||||
dao.delete(vo);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<HashMap<String,Object>> getAllLayouts() throws Exception {
|
public List<HashMap<String,Object>> getAllLayouts() throws Exception {
|
||||||
|
|||||||
@@ -63,6 +63,12 @@ public class ApiStatsDayController {
|
|||||||
return ResponseEntity.ok(chartData);
|
return ResponseEntity.ok(chartData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping(value = "/onl/kjb/statistics/apiStatsDayMan.json", params = "cmd=LIST_SUMMARY")
|
||||||
|
public ResponseEntity<GridResponse<ApiStatsUI>> selectSummaryList(ApiStatsSearch search, Pageable pageable) {
|
||||||
|
Page<ApiStatsUI> page = service.selectSummaryList(search, pageable);
|
||||||
|
return ResponseEntity.ok(new GridResponse<>(page));
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping(value = "/onl/kjb/statistics/apiStatsDayMan.json", params = "cmd=EXCEL_EXPORT")
|
@PostMapping(value = "/onl/kjb/statistics/apiStatsDayMan.json", params = "cmd=EXCEL_EXPORT")
|
||||||
public void exportToExcel(ApiStatsSearch search, HttpServletResponse response) throws IOException {
|
public void exportToExcel(ApiStatsSearch search, HttpServletResponse response) throws IOException {
|
||||||
log.info("Excel export started - search: {}", search);
|
log.info("Excel export started - search: {}", search);
|
||||||
@@ -106,10 +112,55 @@ public class ApiStatsDayController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping(value = "/onl/kjb/statistics/apiStatsDayMan.json", params = "cmd=EXCEL_EXPORT_SUMMARY")
|
||||||
|
public void exportSummaryToExcel(ApiStatsSearch search, HttpServletResponse response) throws IOException {
|
||||||
|
log.info("Excel export (summary) started - search: {}", search);
|
||||||
|
|
||||||
|
try {
|
||||||
|
List<ApiStatsUI> dataList = service.selectSummaryListForExcel(search);
|
||||||
|
log.info("Summary data retrieved - count: {}", dataList.size());
|
||||||
|
|
||||||
|
if (dataList.isEmpty()) {
|
||||||
|
log.warn("No data found for export");
|
||||||
|
response.setStatus(HttpServletResponse.SC_NO_CONTENT);
|
||||||
|
response.setContentType("application/json; charset=UTF-8");
|
||||||
|
response.getWriter().write("{\"message\":\"조회된 데이터가 없습니다.\"}");
|
||||||
|
response.getWriter().flush();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String fileName = generateSummaryFileName(search);
|
||||||
|
log.info("Generating Excel file: {}", fileName);
|
||||||
|
|
||||||
|
excelExportService.exportApiStats(dataList, fileName, response);
|
||||||
|
log.info("Excel export (summary) completed successfully");
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("Excel export (summary) failed - error: {}", e.getMessage(), e);
|
||||||
|
|
||||||
|
if (!response.isCommitted()) {
|
||||||
|
response.reset();
|
||||||
|
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
|
||||||
|
response.setContentType("application/json; charset=UTF-8");
|
||||||
|
response.getWriter().write("{\"message\":\"Excel 파일 생성 중 오류가 발생했습니다: " + e.getMessage() + "\"}");
|
||||||
|
response.getWriter().flush();
|
||||||
|
} else {
|
||||||
|
log.error("Cannot send error response - response already committed");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private String generateFileName(ApiStatsSearch search) {
|
private String generateFileName(ApiStatsSearch search) {
|
||||||
String timeRange = StringUtils.isNotBlank(search.getSearchStartDateTime())
|
String timeRange = StringUtils.isNotBlank(search.getSearchStartDateTime())
|
||||||
? search.getSearchStartDateTime()
|
? search.getSearchStartDateTime()
|
||||||
: LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
|
: LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
|
||||||
return "API일별통계_" + timeRange + ".xlsx";
|
return "API일별통계_" + timeRange + ".xlsx";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String generateSummaryFileName(ApiStatsSearch search) {
|
||||||
|
String timeRange = StringUtils.isNotBlank(search.getSearchStartDateTime())
|
||||||
|
? search.getSearchStartDateTime()
|
||||||
|
: LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
|
||||||
|
return "API일별통계_요약_" + timeRange + ".xlsx";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,6 +63,12 @@ public class ApiStatsHourController {
|
|||||||
return ResponseEntity.ok(chartData);
|
return ResponseEntity.ok(chartData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping(value = "/onl/kjb/statistics/apiStatsHourMan.json", params = "cmd=LIST_SUMMARY")
|
||||||
|
public ResponseEntity<GridResponse<ApiStatsUI>> selectSummaryList(ApiStatsSearch search, Pageable pageable) {
|
||||||
|
Page<ApiStatsUI> page = service.selectSummaryList(search, pageable);
|
||||||
|
return ResponseEntity.ok(new GridResponse<>(page));
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping(value = "/onl/kjb/statistics/apiStatsHourMan.json", params = "cmd=EXCEL_EXPORT")
|
@PostMapping(value = "/onl/kjb/statistics/apiStatsHourMan.json", params = "cmd=EXCEL_EXPORT")
|
||||||
public void exportToExcel(ApiStatsSearch search, HttpServletResponse response) throws IOException {
|
public void exportToExcel(ApiStatsSearch search, HttpServletResponse response) throws IOException {
|
||||||
log.info("Excel export started - search: {}", search);
|
log.info("Excel export started - search: {}", search);
|
||||||
@@ -106,10 +112,55 @@ public class ApiStatsHourController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping(value = "/onl/kjb/statistics/apiStatsHourMan.json", params = "cmd=EXCEL_EXPORT_SUMMARY")
|
||||||
|
public void exportSummaryToExcel(ApiStatsSearch search, HttpServletResponse response) throws IOException {
|
||||||
|
log.info("Excel export (summary) started - search: {}", search);
|
||||||
|
|
||||||
|
try {
|
||||||
|
List<ApiStatsUI> dataList = service.selectSummaryListForExcel(search);
|
||||||
|
log.info("Summary data retrieved - count: {}", dataList.size());
|
||||||
|
|
||||||
|
if (dataList.isEmpty()) {
|
||||||
|
log.warn("No data found for export");
|
||||||
|
response.setStatus(HttpServletResponse.SC_NO_CONTENT);
|
||||||
|
response.setContentType("application/json; charset=UTF-8");
|
||||||
|
response.getWriter().write("{\"message\":\"조회된 데이터가 없습니다.\"}");
|
||||||
|
response.getWriter().flush();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String fileName = generateSummaryFileName(search);
|
||||||
|
log.info("Generating Excel file: {}", fileName);
|
||||||
|
|
||||||
|
excelExportService.exportApiStats(dataList, fileName, response);
|
||||||
|
log.info("Excel export (summary) completed successfully");
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("Excel export (summary) failed - error: {}", e.getMessage(), e);
|
||||||
|
|
||||||
|
if (!response.isCommitted()) {
|
||||||
|
response.reset();
|
||||||
|
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
|
||||||
|
response.setContentType("application/json; charset=UTF-8");
|
||||||
|
response.getWriter().write("{\"message\":\"Excel 파일 생성 중 오류가 발생했습니다: " + e.getMessage() + "\"}");
|
||||||
|
response.getWriter().flush();
|
||||||
|
} else {
|
||||||
|
log.error("Cannot send error response - response already committed");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private String generateFileName(ApiStatsSearch search) {
|
private String generateFileName(ApiStatsSearch search) {
|
||||||
String timeRange = StringUtils.isNotBlank(search.getSearchStartDateTime())
|
String timeRange = StringUtils.isNotBlank(search.getSearchStartDateTime())
|
||||||
? search.getSearchStartDateTime()
|
? search.getSearchStartDateTime()
|
||||||
: LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHH"));
|
: LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHH"));
|
||||||
return "API시간별통계_" + timeRange + ".xlsx";
|
return "API시간별통계_" + timeRange + ".xlsx";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String generateSummaryFileName(ApiStatsSearch search) {
|
||||||
|
String timeRange = StringUtils.isNotBlank(search.getSearchStartDateTime())
|
||||||
|
? search.getSearchStartDateTime()
|
||||||
|
: LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHH"));
|
||||||
|
return "API시간별통계_요약_" + timeRange + ".xlsx";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,6 +63,12 @@ public class ApiStatsMinuteController {
|
|||||||
return ResponseEntity.ok(chartData);
|
return ResponseEntity.ok(chartData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping(value = "/onl/kjb/statistics/apiStatsMinuteMan.json", params = "cmd=LIST_SUMMARY")
|
||||||
|
public ResponseEntity<GridResponse<ApiStatsUI>> selectSummaryList(ApiStatsSearch search, Pageable pageable) {
|
||||||
|
Page<ApiStatsUI> page = service.selectSummaryList(search, pageable);
|
||||||
|
return ResponseEntity.ok(new GridResponse<>(page));
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping(value = "/onl/kjb/statistics/apiStatsMinuteMan.json", params = "cmd=EXCEL_EXPORT")
|
@PostMapping(value = "/onl/kjb/statistics/apiStatsMinuteMan.json", params = "cmd=EXCEL_EXPORT")
|
||||||
public void exportToExcel(ApiStatsSearch search, HttpServletResponse response) throws IOException {
|
public void exportToExcel(ApiStatsSearch search, HttpServletResponse response) throws IOException {
|
||||||
log.info("Excel export started - search: {}", search);
|
log.info("Excel export started - search: {}", search);
|
||||||
@@ -106,10 +112,55 @@ public class ApiStatsMinuteController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping(value = "/onl/kjb/statistics/apiStatsMinuteMan.json", params = "cmd=EXCEL_EXPORT_SUMMARY")
|
||||||
|
public void exportSummaryToExcel(ApiStatsSearch search, HttpServletResponse response) throws IOException {
|
||||||
|
log.info("Excel export (summary) started - search: {}", search);
|
||||||
|
|
||||||
|
try {
|
||||||
|
List<ApiStatsUI> dataList = service.selectSummaryListForExcel(search);
|
||||||
|
log.info("Summary data retrieved - count: {}", dataList.size());
|
||||||
|
|
||||||
|
if (dataList.isEmpty()) {
|
||||||
|
log.warn("No data found for export");
|
||||||
|
response.setStatus(HttpServletResponse.SC_NO_CONTENT);
|
||||||
|
response.setContentType("application/json; charset=UTF-8");
|
||||||
|
response.getWriter().write("{\"message\":\"조회된 데이터가 없습니다.\"}");
|
||||||
|
response.getWriter().flush();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String fileName = generateSummaryFileName(search);
|
||||||
|
log.info("Generating Excel file: {}", fileName);
|
||||||
|
|
||||||
|
excelExportService.exportApiStats(dataList, fileName, response);
|
||||||
|
log.info("Excel export (summary) completed successfully");
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("Excel export (summary) failed - error: {}", e.getMessage(), e);
|
||||||
|
|
||||||
|
if (!response.isCommitted()) {
|
||||||
|
response.reset();
|
||||||
|
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
|
||||||
|
response.setContentType("application/json; charset=UTF-8");
|
||||||
|
response.getWriter().write("{\"message\":\"Excel 파일 생성 중 오류가 발생했습니다: " + e.getMessage() + "\"}");
|
||||||
|
response.getWriter().flush();
|
||||||
|
} else {
|
||||||
|
log.error("Cannot send error response - response already committed");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private String generateFileName(ApiStatsSearch search) {
|
private String generateFileName(ApiStatsSearch search) {
|
||||||
String timeRange = StringUtils.isNotBlank(search.getSearchStartDateTime())
|
String timeRange = StringUtils.isNotBlank(search.getSearchStartDateTime())
|
||||||
? search.getSearchStartDateTime()
|
? search.getSearchStartDateTime()
|
||||||
: LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmm"));
|
: LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmm"));
|
||||||
return "API분단위통계_" + timeRange + ".xlsx";
|
return "API분단위통계_" + timeRange + ".xlsx";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String generateSummaryFileName(ApiStatsSearch search) {
|
||||||
|
String timeRange = StringUtils.isNotBlank(search.getSearchStartDateTime())
|
||||||
|
? search.getSearchStartDateTime()
|
||||||
|
: LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmm"));
|
||||||
|
return "API분단위통계_요약_" + timeRange + ".xlsx";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,6 +63,12 @@ public class ApiStatsMonthController {
|
|||||||
return ResponseEntity.ok(chartData);
|
return ResponseEntity.ok(chartData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping(value = "/onl/kjb/statistics/apiStatsMonthMan.json", params = "cmd=LIST_SUMMARY")
|
||||||
|
public ResponseEntity<GridResponse<ApiStatsUI>> selectSummaryList(ApiStatsSearch search, Pageable pageable) {
|
||||||
|
Page<ApiStatsUI> page = service.selectSummaryList(search, pageable);
|
||||||
|
return ResponseEntity.ok(new GridResponse<>(page));
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping(value = "/onl/kjb/statistics/apiStatsMonthMan.json", params = "cmd=EXCEL_EXPORT")
|
@PostMapping(value = "/onl/kjb/statistics/apiStatsMonthMan.json", params = "cmd=EXCEL_EXPORT")
|
||||||
public void exportToExcel(ApiStatsSearch search, HttpServletResponse response) throws IOException {
|
public void exportToExcel(ApiStatsSearch search, HttpServletResponse response) throws IOException {
|
||||||
log.info("Excel export started - search: {}", search);
|
log.info("Excel export started - search: {}", search);
|
||||||
@@ -106,10 +112,55 @@ public class ApiStatsMonthController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping(value = "/onl/kjb/statistics/apiStatsMonthMan.json", params = "cmd=EXCEL_EXPORT_SUMMARY")
|
||||||
|
public void exportSummaryToExcel(ApiStatsSearch search, HttpServletResponse response) throws IOException {
|
||||||
|
log.info("Excel export (summary) started - search: {}", search);
|
||||||
|
|
||||||
|
try {
|
||||||
|
List<ApiStatsUI> dataList = service.selectSummaryListForExcel(search);
|
||||||
|
log.info("Summary data retrieved - count: {}", dataList.size());
|
||||||
|
|
||||||
|
if (dataList.isEmpty()) {
|
||||||
|
log.warn("No data found for export");
|
||||||
|
response.setStatus(HttpServletResponse.SC_NO_CONTENT);
|
||||||
|
response.setContentType("application/json; charset=UTF-8");
|
||||||
|
response.getWriter().write("{\"message\":\"조회된 데이터가 없습니다.\"}");
|
||||||
|
response.getWriter().flush();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String fileName = generateSummaryFileName(search);
|
||||||
|
log.info("Generating Excel file: {}", fileName);
|
||||||
|
|
||||||
|
excelExportService.exportApiStats(dataList, fileName, response);
|
||||||
|
log.info("Excel export (summary) completed successfully");
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("Excel export (summary) failed - error: {}", e.getMessage(), e);
|
||||||
|
|
||||||
|
if (!response.isCommitted()) {
|
||||||
|
response.reset();
|
||||||
|
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
|
||||||
|
response.setContentType("application/json; charset=UTF-8");
|
||||||
|
response.getWriter().write("{\"message\":\"Excel 파일 생성 중 오류가 발생했습니다: " + e.getMessage() + "\"}");
|
||||||
|
response.getWriter().flush();
|
||||||
|
} else {
|
||||||
|
log.error("Cannot send error response - response already committed");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private String generateFileName(ApiStatsSearch search) {
|
private String generateFileName(ApiStatsSearch search) {
|
||||||
String timeRange = StringUtils.isNotBlank(search.getSearchStartDateTime())
|
String timeRange = StringUtils.isNotBlank(search.getSearchStartDateTime())
|
||||||
? search.getSearchStartDateTime()
|
? search.getSearchStartDateTime()
|
||||||
: YearMonth.now().format(DateTimeFormatter.ofPattern("yyyyMM"));
|
: YearMonth.now().format(DateTimeFormatter.ofPattern("yyyyMM"));
|
||||||
return "API월별통계_" + timeRange + ".xlsx";
|
return "API월별통계_" + timeRange + ".xlsx";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String generateSummaryFileName(ApiStatsSearch search) {
|
||||||
|
String timeRange = StringUtils.isNotBlank(search.getSearchStartDateTime())
|
||||||
|
? search.getSearchStartDateTime()
|
||||||
|
: YearMonth.now().format(DateTimeFormatter.ofPattern("yyyyMM"));
|
||||||
|
return "API월별통계_요약_" + timeRange + ".xlsx";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,6 +62,12 @@ public class ApiStatsYearController {
|
|||||||
return ResponseEntity.ok(chartData);
|
return ResponseEntity.ok(chartData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping(value = "/onl/kjb/statistics/apiStatsYearMan.json", params = "cmd=LIST_SUMMARY")
|
||||||
|
public ResponseEntity<GridResponse<ApiStatsUI>> selectSummaryList(ApiStatsSearch search, Pageable pageable) {
|
||||||
|
Page<ApiStatsUI> page = service.selectSummaryList(search, pageable);
|
||||||
|
return ResponseEntity.ok(new GridResponse<>(page));
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping(value = "/onl/kjb/statistics/apiStatsYearMan.json", params = "cmd=EXCEL_EXPORT")
|
@PostMapping(value = "/onl/kjb/statistics/apiStatsYearMan.json", params = "cmd=EXCEL_EXPORT")
|
||||||
public void exportToExcel(ApiStatsSearch search, HttpServletResponse response) throws IOException {
|
public void exportToExcel(ApiStatsSearch search, HttpServletResponse response) throws IOException {
|
||||||
log.info("Excel export started - search: {}", search);
|
log.info("Excel export started - search: {}", search);
|
||||||
@@ -105,10 +111,55 @@ public class ApiStatsYearController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping(value = "/onl/kjb/statistics/apiStatsYearMan.json", params = "cmd=EXCEL_EXPORT_SUMMARY")
|
||||||
|
public void exportSummaryToExcel(ApiStatsSearch search, HttpServletResponse response) throws IOException {
|
||||||
|
log.info("Excel export (summary) started - search: {}", search);
|
||||||
|
|
||||||
|
try {
|
||||||
|
List<ApiStatsUI> dataList = service.selectSummaryListForExcel(search);
|
||||||
|
log.info("Summary data retrieved - count: {}", dataList.size());
|
||||||
|
|
||||||
|
if (dataList.isEmpty()) {
|
||||||
|
log.warn("No data found for export");
|
||||||
|
response.setStatus(HttpServletResponse.SC_NO_CONTENT);
|
||||||
|
response.setContentType("application/json; charset=UTF-8");
|
||||||
|
response.getWriter().write("{\"message\":\"조회된 데이터가 없습니다.\"}");
|
||||||
|
response.getWriter().flush();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String fileName = generateSummaryFileName(search);
|
||||||
|
log.info("Generating Excel file: {}", fileName);
|
||||||
|
|
||||||
|
excelExportService.exportApiStats(dataList, fileName, response);
|
||||||
|
log.info("Excel export (summary) completed successfully");
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("Excel export (summary) failed - error: {}", e.getMessage(), e);
|
||||||
|
|
||||||
|
if (!response.isCommitted()) {
|
||||||
|
response.reset();
|
||||||
|
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
|
||||||
|
response.setContentType("application/json; charset=UTF-8");
|
||||||
|
response.getWriter().write("{\"message\":\"Excel 파일 생성 중 오류가 발생했습니다: " + e.getMessage() + "\"}");
|
||||||
|
response.getWriter().flush();
|
||||||
|
} else {
|
||||||
|
log.error("Cannot send error response - response already committed");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private String generateFileName(ApiStatsSearch search) {
|
private String generateFileName(ApiStatsSearch search) {
|
||||||
String timeRange = StringUtils.isNotBlank(search.getSearchStartDateTime())
|
String timeRange = StringUtils.isNotBlank(search.getSearchStartDateTime())
|
||||||
? search.getSearchStartDateTime()
|
? search.getSearchStartDateTime()
|
||||||
: String.valueOf(Year.now().getValue());
|
: String.valueOf(Year.now().getValue());
|
||||||
return "API연간통계_" + timeRange + ".xlsx";
|
return "API연간통계_" + timeRange + ".xlsx";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String generateSummaryFileName(ApiStatsSearch search) {
|
||||||
|
String timeRange = StringUtils.isNotBlank(search.getSearchStartDateTime())
|
||||||
|
? search.getSearchStartDateTime()
|
||||||
|
: String.valueOf(Year.now().getValue());
|
||||||
|
return "API연간통계_요약_" + timeRange + ".xlsx";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import com.eactive.eai.rms.data.entity.onl.kjb.statistics.ApiStatsDayService;
|
|||||||
import com.eactive.eai.rms.data.entity.onl.kjb.statistics.QApiStatsDay;
|
import com.eactive.eai.rms.data.entity.onl.kjb.statistics.QApiStatsDay;
|
||||||
import com.eactive.eai.rms.data.entity.onl.kjb.statistics.QApiStatsMonth;
|
import com.eactive.eai.rms.data.entity.onl.kjb.statistics.QApiStatsMonth;
|
||||||
import com.querydsl.core.types.Projections;
|
import com.querydsl.core.types.Projections;
|
||||||
|
import com.querydsl.core.types.dsl.Expressions;
|
||||||
import com.querydsl.jpa.impl.JPAQueryFactory;
|
import com.querydsl.jpa.impl.JPAQueryFactory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -129,11 +130,26 @@ public class DailyToMonthlyAggregationJob implements Job {
|
|||||||
qd.seq900TimeoutCnt.sum().as("seq900TimeoutCnt"),
|
qd.seq900TimeoutCnt.sum().as("seq900TimeoutCnt"),
|
||||||
qd.seq900SystemErrCnt.sum().as("seq900SystemErrCnt"),
|
qd.seq900SystemErrCnt.sum().as("seq900SystemErrCnt"),
|
||||||
qd.seq900BizErrCnt.sum().as("seq900BizErrCnt"),
|
qd.seq900BizErrCnt.sum().as("seq900BizErrCnt"),
|
||||||
qd.avgRespTime.avg().castToNum(BigDecimal.class).as("avgRespTime"),
|
Expressions.cases()
|
||||||
|
.when(qd.successCnt.sum().gt(0))
|
||||||
|
.then(qd.avgRespTime.multiply(qd.successCnt).sum()
|
||||||
|
.divide(qd.successCnt.sum()).castToNum(BigDecimal.class))
|
||||||
|
.otherwise((BigDecimal) null)
|
||||||
|
.as("avgRespTime"),
|
||||||
qd.minRespTime.min().castToNum(BigDecimal.class).as("minRespTime"),
|
qd.minRespTime.min().castToNum(BigDecimal.class).as("minRespTime"),
|
||||||
qd.maxRespTime.max().castToNum(BigDecimal.class).as("maxRespTime"),
|
qd.maxRespTime.max().castToNum(BigDecimal.class).as("maxRespTime"),
|
||||||
qd.p50RespTime.avg().castToNum(BigDecimal.class).as("p50RespTime"),
|
Expressions.cases()
|
||||||
qd.p95RespTime.avg().castToNum(BigDecimal.class).as("p95RespTime")))
|
.when(qd.successCnt.sum().gt(0))
|
||||||
|
.then(qd.p50RespTime.multiply(qd.successCnt).sum()
|
||||||
|
.divide(qd.successCnt.sum()).castToNum(BigDecimal.class))
|
||||||
|
.otherwise((BigDecimal) null)
|
||||||
|
.as("p50RespTime"),
|
||||||
|
Expressions.cases()
|
||||||
|
.when(qd.successCnt.sum().gt(0))
|
||||||
|
.then(qd.p95RespTime.multiply(qd.successCnt).sum()
|
||||||
|
.divide(qd.successCnt.sum()).castToNum(BigDecimal.class))
|
||||||
|
.otherwise((BigDecimal) null)
|
||||||
|
.as("p95RespTime")))
|
||||||
.from(qd)
|
.from(qd)
|
||||||
.where(qd.statTime.goe(startDate)
|
.where(qd.statTime.goe(startDate)
|
||||||
.and(qd.statTime.loe(endDate)))
|
.and(qd.statTime.loe(endDate)))
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import com.eactive.eai.rms.data.entity.onl.kjb.statistics.ApiStatsHourService;
|
|||||||
import com.eactive.eai.rms.data.entity.onl.kjb.statistics.QApiStatsDay;
|
import com.eactive.eai.rms.data.entity.onl.kjb.statistics.QApiStatsDay;
|
||||||
import com.eactive.eai.rms.data.entity.onl.kjb.statistics.QApiStatsHour;
|
import com.eactive.eai.rms.data.entity.onl.kjb.statistics.QApiStatsHour;
|
||||||
import com.querydsl.core.types.Projections;
|
import com.querydsl.core.types.Projections;
|
||||||
|
import com.querydsl.core.types.dsl.Expressions;
|
||||||
import com.querydsl.jpa.impl.JPAQueryFactory;
|
import com.querydsl.jpa.impl.JPAQueryFactory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -125,11 +126,26 @@ public class HourlyToDailyAggregationJob implements Job {
|
|||||||
qh.seq900TimeoutCnt.sum().as("seq900TimeoutCnt"),
|
qh.seq900TimeoutCnt.sum().as("seq900TimeoutCnt"),
|
||||||
qh.seq900SystemErrCnt.sum().as("seq900SystemErrCnt"),
|
qh.seq900SystemErrCnt.sum().as("seq900SystemErrCnt"),
|
||||||
qh.seq900BizErrCnt.sum().as("seq900BizErrCnt"),
|
qh.seq900BizErrCnt.sum().as("seq900BizErrCnt"),
|
||||||
qh.avgRespTime.avg().castToNum(BigDecimal.class).as("avgRespTime"),
|
Expressions.cases()
|
||||||
|
.when(qh.successCnt.sum().gt(0))
|
||||||
|
.then(qh.avgRespTime.multiply(qh.successCnt).sum()
|
||||||
|
.divide(qh.successCnt.sum()).castToNum(BigDecimal.class))
|
||||||
|
.otherwise((BigDecimal) null)
|
||||||
|
.as("avgRespTime"),
|
||||||
qh.minRespTime.min().castToNum(BigDecimal.class).as("minRespTime"),
|
qh.minRespTime.min().castToNum(BigDecimal.class).as("minRespTime"),
|
||||||
qh.maxRespTime.max().castToNum(BigDecimal.class).as("maxRespTime"),
|
qh.maxRespTime.max().castToNum(BigDecimal.class).as("maxRespTime"),
|
||||||
qh.p50RespTime.avg().castToNum(BigDecimal.class).as("p50RespTime"),
|
Expressions.cases()
|
||||||
qh.p95RespTime.avg().castToNum(BigDecimal.class).as("p95RespTime")))
|
.when(qh.successCnt.sum().gt(0))
|
||||||
|
.then(qh.p50RespTime.multiply(qh.successCnt).sum()
|
||||||
|
.divide(qh.successCnt.sum()).castToNum(BigDecimal.class))
|
||||||
|
.otherwise((BigDecimal) null)
|
||||||
|
.as("p50RespTime"),
|
||||||
|
Expressions.cases()
|
||||||
|
.when(qh.successCnt.sum().gt(0))
|
||||||
|
.then(qh.p95RespTime.multiply(qh.successCnt).sum()
|
||||||
|
.divide(qh.successCnt.sum()).castToNum(BigDecimal.class))
|
||||||
|
.otherwise((BigDecimal) null)
|
||||||
|
.as("p95RespTime")))
|
||||||
.from(qh)
|
.from(qh)
|
||||||
.where(qh.statTime.goe(startDateTime)
|
.where(qh.statTime.goe(startDateTime)
|
||||||
.and(qh.statTime.loe(endDateTime)))
|
.and(qh.statTime.loe(endDateTime)))
|
||||||
|
|||||||
+19
-3
@@ -23,6 +23,7 @@ import com.eactive.eai.rms.data.entity.onl.kjb.statistics.ApiStatsMonthService;
|
|||||||
import com.eactive.eai.rms.data.entity.onl.kjb.statistics.QApiStatsMonth;
|
import com.eactive.eai.rms.data.entity.onl.kjb.statistics.QApiStatsMonth;
|
||||||
import com.eactive.eai.rms.data.entity.onl.kjb.statistics.QApiStatsYear;
|
import com.eactive.eai.rms.data.entity.onl.kjb.statistics.QApiStatsYear;
|
||||||
import com.querydsl.core.types.Projections;
|
import com.querydsl.core.types.Projections;
|
||||||
|
import com.querydsl.core.types.dsl.Expressions;
|
||||||
import com.querydsl.jpa.impl.JPAQueryFactory;
|
import com.querydsl.jpa.impl.JPAQueryFactory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -127,11 +128,26 @@ public class MonthlyToYearlyAggregationJob implements Job {
|
|||||||
qm.seq900TimeoutCnt.sum().as("seq900TimeoutCnt"),
|
qm.seq900TimeoutCnt.sum().as("seq900TimeoutCnt"),
|
||||||
qm.seq900SystemErrCnt.sum().as("seq900SystemErrCnt"),
|
qm.seq900SystemErrCnt.sum().as("seq900SystemErrCnt"),
|
||||||
qm.seq900BizErrCnt.sum().as("seq900BizErrCnt"),
|
qm.seq900BizErrCnt.sum().as("seq900BizErrCnt"),
|
||||||
qm.avgRespTime.avg().castToNum(BigDecimal.class).as("avgRespTime"),
|
Expressions.cases()
|
||||||
|
.when(qm.successCnt.sum().gt(0))
|
||||||
|
.then(qm.avgRespTime.multiply(qm.successCnt).sum()
|
||||||
|
.divide(qm.successCnt.sum()).castToNum(BigDecimal.class))
|
||||||
|
.otherwise((BigDecimal) null)
|
||||||
|
.as("avgRespTime"),
|
||||||
qm.minRespTime.min().castToNum(BigDecimal.class).as("minRespTime"),
|
qm.minRespTime.min().castToNum(BigDecimal.class).as("minRespTime"),
|
||||||
qm.maxRespTime.max().castToNum(BigDecimal.class).as("maxRespTime"),
|
qm.maxRespTime.max().castToNum(BigDecimal.class).as("maxRespTime"),
|
||||||
qm.p50RespTime.avg().castToNum(BigDecimal.class).as("p50RespTime"),
|
Expressions.cases()
|
||||||
qm.p95RespTime.avg().castToNum(BigDecimal.class).as("p95RespTime")))
|
.when(qm.successCnt.sum().gt(0))
|
||||||
|
.then(qm.p50RespTime.multiply(qm.successCnt).sum()
|
||||||
|
.divide(qm.successCnt.sum()).castToNum(BigDecimal.class))
|
||||||
|
.otherwise((BigDecimal) null)
|
||||||
|
.as("p50RespTime"),
|
||||||
|
Expressions.cases()
|
||||||
|
.when(qm.successCnt.sum().gt(0))
|
||||||
|
.then(qm.p95RespTime.multiply(qm.successCnt).sum()
|
||||||
|
.divide(qm.successCnt.sum()).castToNum(BigDecimal.class))
|
||||||
|
.otherwise((BigDecimal) null)
|
||||||
|
.as("p95RespTime")))
|
||||||
.from(qm)
|
.from(qm)
|
||||||
.where(qm.statTime.goe(startMonth)
|
.where(qm.statTime.goe(startMonth)
|
||||||
.and(qm.statTime.loe(endMonth)))
|
.and(qm.statTime.loe(endMonth)))
|
||||||
|
|||||||
@@ -314,6 +314,13 @@
|
|||||||
</dynamic>
|
</dynamic>
|
||||||
)
|
)
|
||||||
WHERE ROWNO BETWEEN #startNum# AND #endNum#
|
WHERE ROWNO BETWEEN #startNum# AND #endNum#
|
||||||
</statement>
|
</statement>
|
||||||
|
|
||||||
|
<statement id="insertToIF01" parameterClass="java.util.HashMap">
|
||||||
|
INSERT INTO $schemaId$.TSEAIIF01
|
||||||
|
(EAISVCNAME, EAIBZWKDSTCD, EAITRANNAME, EAISVCDESC, IO, SPLIZDMNDDSTCD, STNDTELGMWTINEXTNLDSTCD, SVCMOTIVUSEDSTCD, BZWKSVCKEYNAME, LAYOUTMAPPINGNAME CREATEBY, UPDATEBY)
|
||||||
|
VALUES
|
||||||
|
(#eaiSvcName#, #eaiBzwkDstCd#, #interfaceId#, #interfaceDesc#, #io#, #splizdmndDstCd#, #inExtnlDstCd#, #svcMotivuseDstCd#, #bzwksvckeyName#, #layoutMappingName#, #loginId#, #loginId# )
|
||||||
|
</statement>
|
||||||
</sqlMap>
|
</sqlMap>
|
||||||
|
|
||||||
@@ -0,0 +1,458 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
|
||||||
|
<sqlMap namespace="Layout">
|
||||||
|
<!-- #### 레이아웃 ### -->
|
||||||
|
<!-- 목록 조회 -->
|
||||||
|
<statement id="selectList" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
|
||||||
|
SELECT FA.*, FB.BZWKDSTICNAME
|
||||||
|
FROM (
|
||||||
|
SELECT ROWNO, LOUTNAME , LOUTPTRNNAME , LOUTDESC ,
|
||||||
|
LOUTPTRNDESC , LASTAMNDHMS , EAIBZWKDSTCD ,
|
||||||
|
UAPPLNAME , SYSINTFACNAME
|
||||||
|
FROM (
|
||||||
|
SELECT ROWNUM AS ROWNO,
|
||||||
|
LOUTNAME, LOUTPTRNNAME, LOUTDESC ,
|
||||||
|
LOUTPTRNDESC , LASTAMNDHMS , EAIBZWKDSTCD ,
|
||||||
|
UAPPLNAME , SYSINTFACNAME
|
||||||
|
FROM (
|
||||||
|
SELECT A.LOUTNAME, A.LOUTPTRNNAME, A.LOUTDESC, B.LOUTPTRNDESC,
|
||||||
|
A.LASTAMNDHMS , A.EAIBZWKDSTCD , A.UAPPLNAME , A.SYSINTFACNAME
|
||||||
|
FROM $schemaId$.TSEAITR07 A, $schemaId$.TSEAITR06 B
|
||||||
|
WHERE A.LOUTPTRNNAME = B.LOUTPTRNNAME
|
||||||
|
AND A.EAIBZWKDSTCD IN (select EAIBZWKDSTCD from $schemaId$.TSEAIRM06 where userId =#loginId#)
|
||||||
|
<isNotEmpty prepend="AND" property="searchLoutName">
|
||||||
|
A.LOUTNAME LIKE UPPER('%'||#searchLoutName#||'%')
|
||||||
|
</isNotEmpty>
|
||||||
|
|
||||||
|
<isNotEmpty prepend="AND" property="searchEaiBzwkDstcd">
|
||||||
|
A.EAIBZWKDSTCD LIKE UPPER('%'||#searchEaiBzwkDstcd#||'%')
|
||||||
|
</isNotEmpty>
|
||||||
|
|
||||||
|
<isNotEmpty prepend="AND" property="searchLoutDesc">
|
||||||
|
A.LOUTDESC LIKE UPPER('%'||#searchLoutDesc#||'%')
|
||||||
|
</isNotEmpty>
|
||||||
|
|
||||||
|
) TMP1
|
||||||
|
) TMP2 WHERE ROWNO BETWEEN #startNum# AND #endNum#
|
||||||
|
) FA LEFT OUTER JOIN $schemaId$.TSEAICM01 FB
|
||||||
|
ON FA.EAIBZWKDSTCD = FB.EAIBZWKDSTCD
|
||||||
|
ORDER BY 1
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- 전체 목록수 얻기 -->
|
||||||
|
<statement id="selectListCount" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
SELECT COUNT(*)
|
||||||
|
FROM $schemaId$.TSEAITR07
|
||||||
|
WHERE EAIBZWKDSTCD IN (select EAIBZWKDSTCD from $schemaId$.TSEAIRM06 where userId =#loginId#)
|
||||||
|
<isNotEmpty prepend="AND" property="searchLoutName">
|
||||||
|
LOUTNAME LIKE UPPER('%'||#searchLoutName#||'%')
|
||||||
|
</isNotEmpty>
|
||||||
|
|
||||||
|
<isNotEmpty prepend="AND" property="searchEaiBzwkDstcd">
|
||||||
|
EAIBZWKDSTCD LIKE UPPER('%'||#searchEaiBzwkDstcd#||'%')
|
||||||
|
</isNotEmpty>
|
||||||
|
|
||||||
|
<isNotEmpty prepend="AND" property="searchLoutDesc">
|
||||||
|
LOUTDESC LIKE UPPER('%'||#searchLoutDesc#||'%')
|
||||||
|
</isNotEmpty>
|
||||||
|
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- item list -->
|
||||||
|
<!-- select level - 1 "level" -->
|
||||||
|
<!-- , LoutItemIDName "id" -->
|
||||||
|
<!-- , ParntLoutItemIDName "parent" -->
|
||||||
|
<!-- , 'true' "expanded" -->
|
||||||
|
<!-- , decode(LoutItemNodePtrnIDName,2203,'true','false') "isLeaf" -->
|
||||||
|
<!-- , substr( SYS_CONNECT_BY_PATH(decode (level,1,LoutName,LoutItemName), '.'),2) LOUTITEMPATH -->
|
||||||
|
<!-- , LOUTNAME -->
|
||||||
|
<!-- , LOUTITEMIDNAME -->
|
||||||
|
<!-- , LOUTITEMNAME -->
|
||||||
|
<!-- , LOUTITEMDESC -->
|
||||||
|
<!-- , LOUTITEMSERNO -->
|
||||||
|
<!-- , LOUTITEMLENCNT -->
|
||||||
|
<!-- , DECPTLENCNT -->
|
||||||
|
<!-- , LOUTITEMNODEPTRNIDNAME -->
|
||||||
|
<!-- , LOUTITEMPTRNIDNAME -->
|
||||||
|
<!-- , decode(LoutItemNodePtrnIDName -->
|
||||||
|
<!-- ,2201,'MESSAGE' -->
|
||||||
|
<!-- ,2202,'GROUP' -->
|
||||||
|
<!-- ,2203,'FIELD' -->
|
||||||
|
<!-- ,2204,'ATTR' -->
|
||||||
|
<!-- ,'UNKNOWN' -->
|
||||||
|
<!-- ) LOUTITEMNODEPTRNIDDESC -->
|
||||||
|
<!-- , decode(LoutItemPtrnIDName -->
|
||||||
|
<!-- ,2100,'UNKNOWN' -->
|
||||||
|
<!-- ,2101,'STRING' -->
|
||||||
|
<!-- ,2102,'INT' -->
|
||||||
|
<!-- ,2103,'LONG' -->
|
||||||
|
<!-- ,2104,'SHORT' -->
|
||||||
|
<!-- ,2105,'DOUBLE' -->
|
||||||
|
<!-- ,2106,'FLOAT' -->
|
||||||
|
<!-- ,2107,'CHAR' -->
|
||||||
|
<!-- ,2108,'BYTE' -->
|
||||||
|
<!-- ,2109,'DATE' -->
|
||||||
|
<!-- ,2110,'TIME' -->
|
||||||
|
<!-- ,2111,'TIMESTAMP' -->
|
||||||
|
<!-- ,2112,'NUMBER' -->
|
||||||
|
<!-- ,2113,'BYTEARRAY' -->
|
||||||
|
<!-- ,2114,'NUMERIC' -->
|
||||||
|
<!-- ,2115,'PACKDECIMAL' -->
|
||||||
|
<!-- ,2116,'OBJECT' -->
|
||||||
|
<!-- ,2117,'BOOLEAN' -->
|
||||||
|
<!-- ,2118,'BIGDECIMAL' -->
|
||||||
|
<!-- ,'UNKNOWN' -->
|
||||||
|
<!-- )LOUTITEMPTRNIDDESC -->
|
||||||
|
<!-- , PARNTLOUTITEMIDNAME -->
|
||||||
|
<!-- , LOUTITEMOCCURPTRNDSTCD -->
|
||||||
|
<!-- , LOUTITEMMINOCCURNOITM -->
|
||||||
|
<!-- , LOUTITEMMAXOCCURNOITM -->
|
||||||
|
<!-- , LOUTITEMREFINFO2 -->
|
||||||
|
<!-- from ( -->
|
||||||
|
<!-- select * -->
|
||||||
|
<!-- from $schemaId$.TSEAITR08 -->
|
||||||
|
<!-- where LoutName = #loutName# -->
|
||||||
|
<!-- ) -->
|
||||||
|
<!-- connect by prior LoutItemIDName = ParntLoutItemIDName -->
|
||||||
|
<!-- start with ParntLoutItemIDName = '0' -->
|
||||||
|
<!-- order siblings by LoutItemSerno -->
|
||||||
|
<statement id="selectItemList" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
|
||||||
|
select 0 AS "level"
|
||||||
|
, LoutItemIDName "id"
|
||||||
|
, ParntLoutItemIDName "parent"
|
||||||
|
, 'true' AS "expanded"
|
||||||
|
, CASE LoutItemNodePtrnIDName WHEN 2203 THEN 'true' ELSE 'false' END "isLeaf"
|
||||||
|
, LoutItemName LOUTITEMPATH
|
||||||
|
, LOUTNAME AS LOUTNAME
|
||||||
|
, LOUTITEMIDNAME AS LOUTITEMIDNAME
|
||||||
|
, LOUTITEMNAME AS LOUTITEMNAME
|
||||||
|
, LOUTITEMDESC AS LOUTITEMDESC
|
||||||
|
, LOUTITEMSERNO AS LOUTITEMSERNO
|
||||||
|
, LOUTITEMLENCNT AS LOUTITEMLENCNT
|
||||||
|
, DECPTLENCNT AS DECPTLENCNT
|
||||||
|
, LOUTITEMNODEPTRNIDNAME AS LOUTITEMNODEPTRNIDNAME
|
||||||
|
, LOUTITEMPTRNIDNAME AS LOUTITEMPTRNIDNAME
|
||||||
|
, (CASE LoutItemNodePtrnIDName
|
||||||
|
WHEN 2201 THEN 'MESSAGE'
|
||||||
|
WHEN 2202 THEN 'GROUP'
|
||||||
|
WHEN 2203 THEN 'FIELD'
|
||||||
|
WHEN 2204 THEN 'ATTR'
|
||||||
|
ELSE 'UNKNOWN' END) LOUTITEMNODEPTRNIDDESC
|
||||||
|
, (CASE LoutItemPtrnIDName
|
||||||
|
WHEN 2100 THEN 'UNKNOWN'
|
||||||
|
WHEN 2101 THEN 'STRING'
|
||||||
|
WHEN 2102 THEN 'INT'
|
||||||
|
WHEN 2103 THEN 'LONG'
|
||||||
|
WHEN 2104 THEN 'SHORT'
|
||||||
|
WHEN 2105 THEN 'DOUBLE'
|
||||||
|
WHEN 2106 THEN 'FLOAT'
|
||||||
|
WHEN 2107 THEN 'CHAR'
|
||||||
|
WHEN 2108 THEN 'BYTE'
|
||||||
|
WHEN 2109 THEN 'DATE'
|
||||||
|
WHEN 2110 THEN 'TIME'
|
||||||
|
WHEN 2111 THEN 'TIMESTAMP'
|
||||||
|
WHEN 2112 THEN 'NUMBER'
|
||||||
|
WHEN 2113 THEN 'BYTEARRAY'
|
||||||
|
WHEN 2114 THEN 'NUMERIC'
|
||||||
|
WHEN 2115 THEN 'PACKDECIMAL'
|
||||||
|
WHEN 2116 THEN 'OBJECT'
|
||||||
|
WHEN 2117 THEN 'BOOLEAN'
|
||||||
|
WHEN 2118 THEN 'BIGDECIMAL'
|
||||||
|
ELSE 'UNKNOWN' END
|
||||||
|
)LOUTITEMPTRNIDDESC
|
||||||
|
, PARNTLOUTITEMIDNAME AS PARNTLOUTITEMIDNAME
|
||||||
|
, LOUTITEMOCCURPTRNDSTCD AS LOUTITEMOCCURPTRNDSTCD
|
||||||
|
, LOUTITEMMINOCCURNOITM AS LOUTITEMMINOCCURNOITM
|
||||||
|
, LOUTITEMMAXOCCURNOITM AS LOUTITEMMAXOCCURNOITM
|
||||||
|
, LOUTITEMREFINFO2 AS LOUTITEMREFINFO2
|
||||||
|
from (
|
||||||
|
select *
|
||||||
|
from $schemaId$.TSEAITR08
|
||||||
|
where LoutName = #loutName#
|
||||||
|
) T
|
||||||
|
order by LoutItemSerno
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- Update date -->
|
||||||
|
<statement id="updateLayoutDate" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
UPDATE $schemaId$.TSEAITR07
|
||||||
|
SET LASTAMNDHMS = to_char(sysdate,'yyyymmddhh24miss')
|
||||||
|
WHERE LOUTNAME = #loutName#
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- item detail -->
|
||||||
|
<statement id="selectItemDetail" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
|
||||||
|
SELECT
|
||||||
|
LOUTNAME LOUTNAME,
|
||||||
|
LOUTITEMNAME LOUTITEMNAME,
|
||||||
|
LOUTITEMIDNAME LOUTITEMIDNAME,
|
||||||
|
PARNTLOUTITEMIDNAME PARNTLOUTITEMIDNAME,
|
||||||
|
LOUTITEMDESC LOUTITEMDESC,
|
||||||
|
LOUTITEMNODEPTRNIDNAME LOUTITEMNODEPTRNIDNAME,
|
||||||
|
LOUTITEMPTRNIDNAME LOUTITEMPTRNIDNAME,
|
||||||
|
LOUTITEMPATHNAME LOUTITEMPATHNAME,
|
||||||
|
LOUTITEMLENCNT LOUTITEMLENCNT,
|
||||||
|
LOUTITEMREFINFO LOUTITEMREFINFO,
|
||||||
|
LOUTITEMREFINFO2 LOUTITEMREFINFO2,
|
||||||
|
LOUTITEMSERNO LOUTITEMSERNO,
|
||||||
|
LOUTITEMOCCURPTRNDSTCD LOUTITEMOCCURPTRNDSTCD,
|
||||||
|
LOUTITEMMAXOCCURNOITM LOUTITEMMAXOCCURNOITM,
|
||||||
|
LOUTITEMMINOCCURNOITM LOUTITEMMINOCCURNOITM,
|
||||||
|
LOUTITEMBASCVAL LOUTITEMBASCVAL,
|
||||||
|
LOUTITEMMSKYN LOUTITEMMSKYN,
|
||||||
|
COALESCE(LOUTITEMMASKLENGTH,0) LOUTITEMMASKLENGTH,
|
||||||
|
LYOUTDPTCNT LYOUTDPTCNT,
|
||||||
|
DECPTLENCNT DECPTLENCNT,
|
||||||
|
LYOUTITEMREFPTRNIDNAME LYOUTITEMREFPTRNIDNAME
|
||||||
|
FROM $schemaId$.TSEAITR08
|
||||||
|
WHERE LOUTNAME=#loutName#
|
||||||
|
AND LOUTITEMNAME =#loutItemName#
|
||||||
|
AND LOUTITEMSERNO=#loutItemSerno#
|
||||||
|
ORDER BY LOUTITEMIDNAME, LOUTITEMOCCURPTRNDSTCD DESC
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- Oracle에서도 실행이 안됨 -->
|
||||||
|
<statement id="selectLayoutXMLList" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
|
||||||
|
SELECT
|
||||||
|
CASE WHEN PARNTLOUTITEMIDNAME = '0' THEN 'FORMAT'
|
||||||
|
ELSE CASE WHEN LOUTITEMPTRNIDNAME = '2100' THEN 'GRID'
|
||||||
|
WHEN LOUTITEMPTRNIDNAME = '2113' THEN ( CASE WHEN (SELECT LOUTITEMPTRNIDNAME
|
||||||
|
FROM $schemaId$.TSEAITR08 L
|
||||||
|
WHERE L.LOUTNAME = O.LOUTNAME
|
||||||
|
AND L.LOUTITEMIDNAME = O.PARNTLOUTITEMIDNAME
|
||||||
|
AND L.LOUTITEMPTRNIDNAME = '2100'
|
||||||
|
AND (L.LOUTITEMMAXOCCURNOITM = -1 OR L.LOUTITEMMAXOCCURNOITM > 1)
|
||||||
|
) = '2100' THEN 'COLUMN' ELSE 'FLD' END )
|
||||||
|
END AS FIELDTYPE
|
||||||
|
, LOUTITEMNAME AS ID
|
||||||
|
, LOUTITEMDESC AS DESC
|
||||||
|
,CASE WHEN LYOUTITEMREFPTRNIDNAME = 'STRING' THEN 'CHAR'
|
||||||
|
LYOUTITEMREFPTRNIDNAME = 'BYTEARRAY' THEN 'CHAR'
|
||||||
|
LYOUTITEMREFPTRNIDNAME = 'INTEGER' THEN 'DECIMAL'
|
||||||
|
LYOUTITEMREFPTRNIDNAME = 'BIGDECIMAL' THEN 'NUMERIC'
|
||||||
|
ELSE 'CHAR'
|
||||||
|
END AS TYPE
|
||||||
|
, LOUTITEMLENCNT AS LEN
|
||||||
|
, DECPTLENCNT AS SCALE
|
||||||
|
, (CASE WHEN LOUTITEMPTRNIDNAME = '2100' AND PARNTLOUTITEMIDNAME !=0 AND TRIM(LOUTITEMREFINFO2) IS NOT NULL THEN LOUTITEMREFINFO2
|
||||||
|
WHEN LOUTITEMPTRNIDNAME = '2100' AND PARNTLOUTITEMIDNAME !=0 AND TRIM(LOUTITEMREFINFO2) IS NULL THEN TO_CHAR(LOUTITEMMAXOCCURNOITM)
|
||||||
|
ELSE ' ' END) AS COUNT
|
||||||
|
FROM (
|
||||||
|
SELECT *
|
||||||
|
FROM $schemaId$.TSEAITR08
|
||||||
|
WHERE LOUTNAME = #LoutName#
|
||||||
|
) O
|
||||||
|
WHERE (LOUTITEMPTRNIDNAME = '2100' AND (LOUTITEMMAXOCCURNOITM = -1 OR LOUTITEMMAXOCCURNOITM > 1) ) OR (LOUTITEMPTRNIDNAME = '2113' ) OR (PARNTLOUTITEMIDNAME = 0)
|
||||||
|
CONNECT BY PRIOR LOUTITEMIDNAME = PARNTLOUTITEMIDNAME
|
||||||
|
START WITH PARNTLOUTITEMIDNAME = '0'
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- JJB 수정사항 shkim 2020-06-08 표준전문 수정4차 -->
|
||||||
|
<statement id="selectLayoutMappingXMLList" resultClass="java.util.HashMap">
|
||||||
|
SELECT ID "id",
|
||||||
|
LOUTDESC "desc", '$schemaId$' "usesystem",
|
||||||
|
TARGETSYSTEM "targetsystem", TRIM(PSVSYSBZWKDSTCD) "group", IOTYPE "ioType",
|
||||||
|
HEADER_TXID "servicecode", A.EAISVCNAME "interfacecode"
|
||||||
|
FROM (
|
||||||
|
SELECT LOUTNAME ID, CASE WHEN SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN 'I' ELSE 'O' END IOTYPE
|
||||||
|
,CASE WHEN PSVINTFACDSTICNAME = 'SYNC' AND SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN '기동'
|
||||||
|
WHEN PSVINTFACDSTICNAME = 'SYNC' AND SOURCRSULTDSTCD = 'TGT_LAYOUT' THEN '수동'
|
||||||
|
WHEN EAISVCNAME LIKE '%1' AND SOURCRSULTDSTCD = 'TGT_LAYOUT' THEN 'CBS'
|
||||||
|
WHEN EAISVCNAME LIKE '%2' AND SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN 'CBS'
|
||||||
|
ELSE '대외' END TARGETSYSTEM
|
||||||
|
,EAISVCNAME, PSVSYSBZWKDSTCD
|
||||||
|
FROM $schemaId$.TSEAITR02 A JOIN $schemaId$.TSEAIHE02 B ON A.CNVSNNAME = B.CHNGMSGIDNAME
|
||||||
|
WHERE B.EAISVCNAME = #eaiSvcName# UNION
|
||||||
|
SELECT LOUTNAME ID, CASE WHEN SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN 'I' ELSE 'O' END IOTYPE
|
||||||
|
,CASE WHEN PSVINTFACDSTICNAME = 'SYNC' AND SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN '수동'
|
||||||
|
WHEN PSVINTFACDSTICNAME = 'SYNC' AND SOURCRSULTDSTCD = 'TGT_LAYOUT' THEN '기동'
|
||||||
|
WHEN EAISVCNAME LIKE '%1' AND SOURCRSULTDSTCD = 'TGT_LAYOUT' THEN 'CBS'
|
||||||
|
WHEN EAISVCNAME LIKE '%2' AND SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN 'CBS'
|
||||||
|
ELSE '대외' END TARGETSYSTEM
|
||||||
|
,EAISVCNAME, PSVSYSBZWKDSTCD
|
||||||
|
FROM $schemaId$.TSEAITR02 A JOIN $schemaId$.TSEAIHE02 B ON A.CNVSNNAME = B.BASCRSPNSCHNGMSGIDNAME
|
||||||
|
WHERE B.EAISVCNAME = #eaiSvcName# UNION
|
||||||
|
SELECT LOUTNAME ID, CASE WHEN SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN 'IE' ELSE 'OE' END IOTYPE
|
||||||
|
,CASE WHEN PSVINTFACDSTICNAME = 'SYNC' AND SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN '수동'
|
||||||
|
WHEN PSVINTFACDSTICNAME = 'SYNC' AND SOURCRSULTDSTCD = 'TGT_LAYOUT' THEN '기동'
|
||||||
|
WHEN EAISVCNAME LIKE '%1' AND SOURCRSULTDSTCD = 'TGT_LAYOUT' THEN 'CBS'
|
||||||
|
WHEN EAISVCNAME LIKE '%2' AND SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN 'CBS'
|
||||||
|
ELSE '대외' END TARGETSYSTEM
|
||||||
|
,EAISVCNAME, PSVSYSBZWKDSTCD
|
||||||
|
FROM $schemaId$.TSEAITR02 A JOIN $schemaId$.TSEAIHE02 B ON A.CNVSNNAME = B.ERRRSPNSCHNGMSGIDNAME
|
||||||
|
WHERE B.EAISVCNAME = #eaiSvcName# UNION
|
||||||
|
SELECT REFMSGIDNAME ID, CASE WHEN REFMSGIDNO = 1 THEN 'I' ELSE 'O' END IOTYPE
|
||||||
|
,CASE WHEN PSVINTFACDSTICNAME = 'SYNC' AND REFMSGIDNO = 1 THEN '기동'
|
||||||
|
WHEN PSVINTFACDSTICNAME = 'SYNC' AND REFMSGIDNO = 2 THEN '수동'
|
||||||
|
WHEN PSVINTFACDSTICNAME = 'SYNC' AND REFMSGIDNO = 3 THEN '수동'
|
||||||
|
WHEN REFMSGIDNAME LIKE '%CBS' THEN 'CBS'
|
||||||
|
ELSE '대외' END TARGETSYSTEM
|
||||||
|
,A.EAISVCNAME, PSVSYSBZWKDSTCD FROM $schemaId$.TSEAIMS02 A JOIN $schemaId$.TSEAIHE02 B ON A.EAISVCNAME = B.EAISVCNAME
|
||||||
|
WHERE B.EAISVCNAME = #eaiSvcName#
|
||||||
|
) A
|
||||||
|
LEFT OUTER JOIN ( SELECT EAISVCNAME
|
||||||
|
, max(decode(COLUMNNAME,'HEADER_TXID',COLUMNVALUE,'')) HEADER_TXID
|
||||||
|
FROM $schemaId$.TSEAIHS04 hs04 , $schemaId$.tseaihs05 hs05
|
||||||
|
where hs04.BZWKSVCKEYNAME =hs05.BZWKSVCKEYNAME
|
||||||
|
group by hs04.BZWKSVCKEYNAME,EAISVCNAME
|
||||||
|
) HS04 ON A.EAISVCNAME = HS04.EAISVCNAME
|
||||||
|
LEFT OUTER JOIN $schemaId$.TSEAITR07 TR07 ON TR07.LOUTNAME = A.ID
|
||||||
|
ORDER BY 1
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- 아이템항목 PATH 조회 -->
|
||||||
|
<statement id="selectItemPathList" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
|
||||||
|
SELECT SUBSTR(SYS_CONNECT_BY_PATH(LOUTITEMNAME, '.'),2) PATH
|
||||||
|
FROM (
|
||||||
|
SELECT decode(LYOUTITEMREFPTRNIDNAME, NULL, decode(LOUTITEMIDNAME, 1000, LOUTITEMNAME, LOUTITEMNAME||'[*]'), LOUTITEMNAME) LOUTITEMNAME, LOUTITEMIDNAME, LYOUTDPTCNT, nvl(LYOUTITEMREFPTRNIDNAME,'Group') LYOUTITEMREFPTRNIDNAME, PARNTLOUTITEMIDNAME PARENT
|
||||||
|
FROM tseaitr08 a
|
||||||
|
WHERE loutname = #loutName#
|
||||||
|
ORDER BY LOUTITEMIDNAME
|
||||||
|
)
|
||||||
|
WHERE LYOUTITEMREFPTRNIDNAME != 'Group'
|
||||||
|
START WITH LOUTITEMIDNAME = 1000 CONNECT BY PRIOR LOUTITEMIDNAME = PARENT
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- 목록 조회 -->
|
||||||
|
<statement id="selectListPop" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
|
||||||
|
SELECT FA.*, FB.BZWKDSTICNAME
|
||||||
|
FROM (
|
||||||
|
SELECT ROWNO, LOUTNAME , LOUTPTRNNAME , LOUTDESC ,
|
||||||
|
LOUTPTRNDESC , LASTAMNDHMS , EAIBZWKDSTCD ,
|
||||||
|
UAPPLNAME , SYSINTFACNAME
|
||||||
|
FROM (
|
||||||
|
SELECT ROWNUM AS ROWNO,
|
||||||
|
LOUTNAME, LOUTPTRNNAME, LOUTDESC ,
|
||||||
|
LOUTPTRNDESC , LASTAMNDHMS , EAIBZWKDSTCD ,
|
||||||
|
UAPPLNAME , SYSINTFACNAME
|
||||||
|
FROM (
|
||||||
|
SELECT A.LOUTNAME, A.LOUTPTRNNAME, A.LOUTDESC, B.LOUTPTRNDESC,
|
||||||
|
A.LASTAMNDHMS , A.EAIBZWKDSTCD , A.UAPPLNAME , A.SYSINTFACNAME
|
||||||
|
FROM $schemaId$.TSEAITR07 A, $schemaId$.TSEAITR06 B
|
||||||
|
WHERE A.LOUTPTRNNAME = B.LOUTPTRNNAME
|
||||||
|
<isNotEmpty prepend="AND" property="searchLoutName">
|
||||||
|
UPPER(A.LOUTNAME) LIKE UPPER('%'||#searchLoutName#||'%')
|
||||||
|
</isNotEmpty>
|
||||||
|
|
||||||
|
<isNotEmpty prepend="AND" property="searchEaiBzwkDstcd">
|
||||||
|
UPPER(A.EAIBZWKDSTCD) LIKE UPPER('%'||#searchEaiBzwkDstcd#||'%')
|
||||||
|
</isNotEmpty>
|
||||||
|
|
||||||
|
<isNotEmpty prepend="AND" property="searchLoutDesc">
|
||||||
|
UPPER(A.LOUTDESC) LIKE UPPER('%'||#searchLoutDesc#||'%')
|
||||||
|
</isNotEmpty>
|
||||||
|
|
||||||
|
) TMP1
|
||||||
|
) TMP2 WHERE ROWNO BETWEEN #startNum# AND #endNum#
|
||||||
|
) FA LEFT OUTER JOIN $schemaId$.TSEAICM01 FB
|
||||||
|
ON FA.EAIBZWKDSTCD = FB.EAIBZWKDSTCD
|
||||||
|
ORDER BY 1
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- 전체 목록수 얻기 -->
|
||||||
|
<statement id="selectListCountPop" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
SELECT COUNT(*)
|
||||||
|
FROM $schemaId$.TSEAITR07
|
||||||
|
<dynamic prepend="WHERE">
|
||||||
|
<isNotEmpty prepend="AND" property="searchLoutName">
|
||||||
|
UPPER(LOUTNAME) LIKE UPPER('%'||#searchLoutName#||'%')
|
||||||
|
</isNotEmpty>
|
||||||
|
|
||||||
|
<isNotEmpty prepend="AND" property="searchEaiBzwkDstcd">
|
||||||
|
UPPER(EAIBZWKDSTCD) LIKE UPPER('%'||#searchEaiBzwkDstcd#||'%')
|
||||||
|
</isNotEmpty>
|
||||||
|
|
||||||
|
<isNotEmpty prepend="AND" property="searchLoutDesc">
|
||||||
|
UPPER(LOUTDESC) LIKE UPPER('%'||#searchLoutDesc#||'%')
|
||||||
|
</isNotEmpty>
|
||||||
|
</dynamic>
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<statement id="insertMappingSyncLog">
|
||||||
|
INSERT INTO $schemaId$.TSEAITR09
|
||||||
|
( LOGPRCSSSERNO, EXECUTEDATE ,EXECUTECLASS,EXECUTEMETHOD,EXECUTEUSER,SENDXMLCMNT,SENDAMNDHMS )
|
||||||
|
VALUES
|
||||||
|
( #logPrcssSerno#, TO_CHAR(CURRENT_DATE,'YYYYMMDD') ,#executeClass#,#executeMethod#,#executeUser#,#sendXmlCmnt#,
|
||||||
|
TO_CHAR(CURRENT_TIMESTAMP,'YYYYMMDDHH24MISSFF2') )
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<statement id="updateMappingSyncLog">
|
||||||
|
UPDATE $schemaId$.TSEAITR09
|
||||||
|
SET RECVAMNDHMS=TO_CHAR(CURRENT_TIMESTAMP,'YYYYMMDDHH24MISSFF2'),
|
||||||
|
RECVRSLT=#recvRslt#,
|
||||||
|
RECVFAILCMNT=#recvFailCmnt#
|
||||||
|
WHERE LOGPRCSSSERNO = #logPrcssSerno#
|
||||||
|
</statement>
|
||||||
|
<!-- item delete -->
|
||||||
|
<statement id="deleteItem" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
DELETE FROM $schemaId$.TSEAITR08
|
||||||
|
WHERE LOUTNAME=#loutName#
|
||||||
|
AND LOUTITEMNAME =#loutItemName#
|
||||||
|
AND LOUTITEMSERNO=#loutItemSerno#
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- item insert -->
|
||||||
|
<statement id="insertItem" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
<!-- LOUTITEMMSKCODE 삭제, 광주은행 테이블에 미존재 231005-->
|
||||||
|
INSERT INTO $schemaId$.TSEAITR08 (
|
||||||
|
LOUTNAME, LOUTITEMNAME, LOUTITEMIDNAME, PARNTLOUTITEMIDNAME, LOUTITEMDESC, LOUTITEMNODEPTRNIDNAME,
|
||||||
|
LOUTITEMPTRNIDNAME, LOUTITEMPATHNAME, LOUTITEMLENCNT, LOUTITEMREFINFO, LOUTITEMREFINFO2,
|
||||||
|
LOUTITEMSERNO, LOUTITEMOCCURPTRNDSTCD, LOUTITEMMAXOCCURNOITM, LOUTITEMMINOCCURNOITM,
|
||||||
|
LOUTITEMBASCVAL, LOUTITEMMSKYN, LOUTITEMMASKLENGTH, LYOUTDPTCNT, DECPTLENCNT, LYOUTITEMREFPTRNIDNAME
|
||||||
|
) VALUES (
|
||||||
|
#loutName#, #loutItemName#, #loutItemIDName#, #parntLoutItemIDName#, #loutItemDesc#, #loutItemNodePtrnIDName#,
|
||||||
|
#loutItemPtrnIDName#, #loutItemPathName#, #loutItemLenCnt#, #loutItemRefInfo#, #loutItemRefInfo2#,
|
||||||
|
#loutItemSerno#, #loutItemOccurPtrnDstcd#, #loutItemMaxOccurNoitm#, #loutItemMinOccurNoitm#,
|
||||||
|
#loutItemBascVal#, #loutItemMskYn#, #loutItemMaskLength#, #lyoutDptCnt#, #decptLenCnt#, #lyoutItemRefPtrnIDName#
|
||||||
|
)
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- item update -->
|
||||||
|
<statement id="updateItem" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
UPDATE $schemaId$.TSEAITR08
|
||||||
|
SET
|
||||||
|
LOUTNAME = #loutName#,
|
||||||
|
LOUTITEMNAME = #loutItemName#,
|
||||||
|
LOUTITEMIDNAME = #loutItemIDName#,
|
||||||
|
PARNTLOUTITEMIDNAME = #parntLoutItemIDName#,
|
||||||
|
LOUTITEMDESC = #loutItemDesc#,
|
||||||
|
LOUTITEMNODEPTRNIDNAME = #loutItemNodePtrnIDName#,
|
||||||
|
LOUTITEMPTRNIDNAME = #loutItemPtrnIDName#,
|
||||||
|
LOUTITEMPATHNAME = #loutItemPathName#,
|
||||||
|
LOUTITEMLENCNT = #loutItemLenCnt#,
|
||||||
|
LOUTITEMREFINFO = #loutItemRefInfo#,
|
||||||
|
LOUTITEMREFINFO2 = #loutItemRefInfo2#,
|
||||||
|
LOUTITEMSERNO = #loutItemSerno#,
|
||||||
|
LOUTITEMOCCURPTRNDSTCD = #loutItemOccurPtrnDstcd#,
|
||||||
|
LOUTITEMMAXOCCURNOITM = #loutItemMaxOccurNoitm#,
|
||||||
|
LOUTITEMMINOCCURNOITM = #loutItemMinOccurNoitm#,
|
||||||
|
LOUTITEMBASCVAL = #loutItemBascVal#,
|
||||||
|
LOUTITEMMSKYN = #loutItemMskYn#,
|
||||||
|
LOUTITEMMASKLENGTH = #loutItemMaskLength#,
|
||||||
|
LYOUTDPTCNT = #lyoutDptCnt#,
|
||||||
|
DECPTLENCNT = #decptLenCnt#,
|
||||||
|
LYOUTITEMREFPTRNIDNAME = #lyoutItemRefPtrnIDName#
|
||||||
|
WHERE LOUTNAME = #loutName#
|
||||||
|
AND LOUTITEMNAME =#loutItemName#
|
||||||
|
AND LOUTITEMSERNO =#loutItemSerno#
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<statement id="insertTR08" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
INSERT INTO $schemaId$.TSEAITR08 ( LOUTNAME, LOUTITEMNAME, LOUTITEMSERNO, LOUTITEMIDNAME, PARNTLOUTITEMIDNAME,
|
||||||
|
LOUTITEMDESC, LOUTITEMNODEPTRNIDNAME, LOUTITEMPTRNIDNAME, LOUTITEMPATHNAME, LOUTITEMLENCNT,
|
||||||
|
LOUTITEMREFINFO, LOUTITEMREFINFO2, LOUTITEMOCCURPTRNDSTCD, LOUTITEMMAXOCCURNOITM, LOUTITEMMINOCCURNOITM,
|
||||||
|
LOUTITEMBASCVAL, LOUTITEMMSKYN, LYOUTDPTCNT, DECPTLENCNT, LYOUTITEMREFPTRNIDNAME )
|
||||||
|
VALUES ( #loutName#, #loutItemName#, #loutItemSerno#, #loutItemIDName#, #parntLoutItemIDName#,
|
||||||
|
#loutItemDesc#, #loutItemNodePtrnIDName#, #loutItemPtrnIDName#, #loutItemPathName#, #loutItemLenCnt#,
|
||||||
|
#loutItemRefInfo#, #loutItemRefInfo2#, #loutItemOccurPtrnDstcd#, #loutItemMaxOccurNoitm#, #loutItemMinOccurNoitm#,
|
||||||
|
#loutItemBascVal#, #loutItemMskYn#, #lyoutDptCnt#, #decptLenCnt#, #lyoutItemRefPtrnIDName# )
|
||||||
|
</statement>
|
||||||
|
<!-- 여기 까지 마이그레이션 영역 -->
|
||||||
|
|
||||||
|
<statement id="insertLayoutSyncLog">
|
||||||
|
INSERT INTO $schemaId$.TSEAITR10
|
||||||
|
( LOGPRCSSSEQNO, SEQNO, SERVICENAME ,COMMAND,LOUTNAME,RECVDATA,RECVAMNDHMS,PRCSSRSLT, PRCSSRSLTCMNT )
|
||||||
|
VALUES
|
||||||
|
( #logPrcssSeqno#, #seqno#, #serviceName# ,#command#,#loutName#,#recvData#,#recvAmndHMS#,#prcssRslt#, #prcssRsltCmnt# )
|
||||||
|
</statement>
|
||||||
|
</sqlMap>
|
||||||
@@ -0,0 +1,160 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
|
||||||
|
<sqlMap namespace="Layout">
|
||||||
|
<!-- #### 레이아웃 ### -->
|
||||||
|
<!-- 상세 조회 -->
|
||||||
|
<statement id="selectDetail" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
|
||||||
|
SELECT
|
||||||
|
LOUTNAME AS "LOUTNAME" ,
|
||||||
|
LOUTPTRNNAME AS "LOUTPTRNNAME" ,
|
||||||
|
LOUTDESC AS "LOUTDESC" ,
|
||||||
|
LASTAMNDHMS AS "LASTAMNDHMS" ,
|
||||||
|
EAIBZWKDSTCD AS "EAIBZWKDSTCD" ,
|
||||||
|
UAPPLNAME AS "UAPPLNAME" ,
|
||||||
|
SYSINTFACNAME AS "SYSINTFACNAME"
|
||||||
|
FROM $schemaId$.TSEAITR07
|
||||||
|
WHERE LOUTNAME = #loutName#
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- DELETE-->
|
||||||
|
<statement id="delete" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
DELETE FROM $schemaId$.TSEAITR07
|
||||||
|
WHERE LOUTNAME = #loutName#
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- Insert-->
|
||||||
|
<statement id="insert" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
INSERT INTO $schemaId$.TSEAITR07 (
|
||||||
|
LOUTNAME, LOUTDESC, LOUTPTRNNAME , LASTAMNDHMS , EAIBZWKDSTCD , UAPPLNAME , SYSINTFACNAME, CREATEBY, UPDATEBY
|
||||||
|
) VALUES (#loutName#, #loutDesc#, #loutPtrnName#, #lastAmndHMS# , #eaiBzwkDstcd# , #uapplName# , #sysIntfacName#, #createBy#, #updateBy# )
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- Update-->
|
||||||
|
<statement id="update" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
UPDATE $schemaId$.TSEAITR07
|
||||||
|
SET LOUTDESC = #loutDesc#,
|
||||||
|
LOUTPTRNNAME= #loutPtrnName#,
|
||||||
|
LASTAMNDHMS = #lastAmndHMS#,
|
||||||
|
EAIBZWKDSTCD = #eaiBzwkDstcd#,
|
||||||
|
UAPPLNAME = #uapplName#,
|
||||||
|
SYSINTFACNAME = #sysIntfacName# ,
|
||||||
|
UPDATEBY = #updateBy#
|
||||||
|
WHERE LOUTNAME = #loutName#
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- List All -->
|
||||||
|
<statement id="selectListAll" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
|
||||||
|
SELECT
|
||||||
|
L.LOUTNAME AS "LOUTNAME",
|
||||||
|
L.LOUTDESC AS "LOUTDESC",
|
||||||
|
L.LOUTPTRNNAME AS "LOUTPTRNNAME"
|
||||||
|
FROM $schemaId$.TSEAITR07 L
|
||||||
|
WHERE L.EAIBZWKDSTCD IN (select EAIBZWKDSTCD from $schemaId$.TSEAIRM06 WHERE USERID = #loginId#)
|
||||||
|
ORDER BY L.LOUTNAME
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- item delete all -->
|
||||||
|
<statement id="deleteItemAll" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
DELETE FROM $schemaId$.TSEAITR08
|
||||||
|
WHERE LOUTNAME=#loutName#
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<statement id="updateItemDesc" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
UPDATE $schemaId$.TSEAITR08
|
||||||
|
SET LOUTITEMDESC = #loutDesc#
|
||||||
|
WHERE LOUTNAME = #loutName#
|
||||||
|
AND LOUTITEMNAME = #loutName#
|
||||||
|
AND LOUTITEMSERNO = 0
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<statement id="selectTypeAll" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
|
||||||
|
SELECT LOUTPTRNNAME AS "LOUTPTRNNAME",
|
||||||
|
LOUTPTRNDESC AS "LOUTPTRNDESC"
|
||||||
|
FROM $schemaId$.TSEAITR06
|
||||||
|
ORDER BY LOUTPTRNDESC
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<statement id="selectEffect" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
|
||||||
|
SELECT SV.EAISVCNAME AS "EAISVCNAME" , SV.EAISVCDESC AS "EAISVCDESC" ,
|
||||||
|
TR.CNVSNNAME AS "CNVSNNAME" , TR.CNVSNDESC AS "CNVSNDESC" , TR.SOURCRSULTDSTCD AS "SOURCRSULTDSTCD"
|
||||||
|
FROM
|
||||||
|
( SELECT T1.CNVSNNAME , T1.CNVSNDESC ,
|
||||||
|
T2.LOUTNAME , T2.SOURCRSULTDSTCD
|
||||||
|
FROM $schemaId$.TSEAITR01 T1, $schemaId$.TSEAITR02 T2
|
||||||
|
WHERE T1.CNVSNNAME = T2.CNVSNNAME
|
||||||
|
AND T2.LOUTNAME = #loutName#
|
||||||
|
) TR,
|
||||||
|
(
|
||||||
|
SELECT DISTINCT EAISVCNAME, EAISVCDESC, SVCPRCSSNO, CHNGMSGIDNAME FROM (
|
||||||
|
SELECT A.EAISVCNAME, A.EAISVCDESC, B.SVCPRCSSNO, B.CHNGMSGIDNAME FROM $schemaId$.TSEAIHE01 A, $schemaId$.TSEAIHE02 B WHERE A.EAISVCNAME = B.EAISVCNAME
|
||||||
|
UNION ALL
|
||||||
|
SELECT A.EAISVCNAME, A.EAISVCDESC, B.SVCPRCSSNO, B.BASCRSPNSCHNGMSGIDNAME CHNGMSGIDNAME FROM $schemaId$.TSEAIHE01 A, $schemaId$.TSEAIHE02 B WHERE A.EAISVCNAME = B.EAISVCNAME
|
||||||
|
UNION ALL
|
||||||
|
SELECT A.EAISVCNAME, A.EAISVCDESC, B.SVCPRCSSNO, B.ERRRSPNSCHNGMSGIDNAME CHNGMSGIDNAME FROM $schemaId$.TSEAIHE01 A, $schemaId$.TSEAIHE02 B WHERE A.EAISVCNAME = B.EAISVCNAME
|
||||||
|
) TMP
|
||||||
|
) SV
|
||||||
|
WHERE TR.CNVSNNAME = SV.CHNGMSGIDNAME
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<statement id="selectReportCount" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
|
||||||
|
SELECT EAIBZWKDSTCD "EAIBzwkDstcd", COUNT(LOUTNAME) "Cnt"
|
||||||
|
FROM $schemaId$.TSEAITR07
|
||||||
|
GROUP BY EAIBZWKDSTCD
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<!-- 여기서 부터 마이그레이션 영역 -->
|
||||||
|
<statement id="selectTR07Select" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
|
||||||
|
SELECT
|
||||||
|
LOUTNAME AS "LOUTNAME" ,
|
||||||
|
LOUTPTRNNAME AS "LOUTPTRNNAME" ,
|
||||||
|
LOUTDESC AS "LOUTDESC" ,
|
||||||
|
LASTAMNDHMS AS "LASTAMNDHMS" ,
|
||||||
|
EAIBZWKDSTCD AS "EAIBZWKDSTCD" ,
|
||||||
|
UAPPLNAME AS "UAPPLNAME" ,
|
||||||
|
SYSINTFACNAME AS "SYSINTFACNAME"
|
||||||
|
FROM $schemaId$.TSEAITR07
|
||||||
|
WHERE LOUTNAME = #loutName#
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<statement id="deleteTR07" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
DELETE FROM $schemaId$.TSEAITR07
|
||||||
|
WHERE LOUTNAME = #loutName#
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<statement id="insertTR07" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
INSERT INTO $schemaId$.TSEAITR07 ( LOUTNAME, LOUTPTRNNAME, LOUTDESC, LASTAMNDHMS, EAIBZWKDSTCD, UAPPLNAME, SYSINTFACNAME )
|
||||||
|
VALUES ( #loutName#, #loutPtrnName#, #loutDesc#, #lastAmndHMS#, #eaiBzwkDstcd#, #uapplName#, #sysIntfacName# )
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<statement id="selectTR08" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
|
||||||
|
SELECT
|
||||||
|
LOUTNAME AS "LOUTNAME" ,
|
||||||
|
LOUTITEMNAME AS "LOUTITEMNAME" ,
|
||||||
|
LOUTITEMSERNO AS "LOUTITEMSERNO" ,
|
||||||
|
LOUTITEMIDNAME AS "LOUTITEMIDNAME" ,
|
||||||
|
PARNTLOUTITEMIDNAME AS "PARNTLOUTITEMIDNAME" ,
|
||||||
|
LOUTITEMDESC AS "LOUTITEMDESC" ,
|
||||||
|
LOUTITEMNODEPTRNIDNAME AS "LOUTITEMNODEPTRNIDNAME" ,
|
||||||
|
LOUTITEMPTRNIDNAME AS "LOUTITEMPTRNIDNAME" ,
|
||||||
|
LOUTITEMPATHNAME AS "LOUTITEMPATHNAME" ,
|
||||||
|
LOUTITEMLENCNT AS "LOUTITEMLENCNT" ,
|
||||||
|
LOUTITEMREFINFO AS "LOUTITEMREFINFO" ,
|
||||||
|
LOUTITEMREFINFO2 AS "LOUTITEMREFINFO2" ,
|
||||||
|
LOUTITEMOCCURPTRNDSTCD AS "LOUTITEMOCCURPTRNDSTCD" ,
|
||||||
|
LOUTITEMMAXOCCURNOITM AS "LOUTITEMMAXOCCURNOITM" ,
|
||||||
|
LOUTITEMMINOCCURNOITM AS "LOUTITEMMINOCCURNOITM" ,
|
||||||
|
LOUTITEMBASCVAL AS "LOUTITEMBASCVAL" ,
|
||||||
|
LOUTITEMMSKYN AS "LOUTITEMMSKYN" ,
|
||||||
|
LYOUTDPTCNT AS "LYOUTDPTCNT" ,
|
||||||
|
DECPTLENCNT AS "DECPTLENCNT" ,
|
||||||
|
LYOUTITEMREFPTRNIDNAME AS "LYOUTITEMREFPTRNIDNAME"
|
||||||
|
FROM $schemaId$.TSEAITR08
|
||||||
|
WHERE LOUTNAME = #loutName#
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
<statement id="deleteTR08" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
|
||||||
|
DELETE FROM $schemaId$.TSEAITR08
|
||||||
|
WHERE LOUTNAME = #loutName#
|
||||||
|
</statement>
|
||||||
|
|
||||||
|
</sqlMap>
|
||||||
+59
@@ -0,0 +1,59 @@
|
|||||||
|
package com.eactive.eai.rms.onl.manage.rule.layoutsync;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.http.HttpEntity;
|
||||||
|
import org.springframework.http.HttpHeaders;
|
||||||
|
import org.springframework.http.HttpMethod;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.web.client.RestTemplate;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* LayoutSyncController 통합 테스트 실제 localhost:28080으로 HTTP 요청을 보냅니다.
|
||||||
|
*/
|
||||||
|
class LayoutSyncControllerTest {
|
||||||
|
|
||||||
|
private static final String BASE_URL = "http://localhost:28080/monitoring/layoutSync.do";
|
||||||
|
private RestTemplate restTemplate;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
void setUp() {
|
||||||
|
restTemplate = new RestTemplate();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testParseMessage() {
|
||||||
|
String layoutId = "URP_DRA00357321URP_CBSS";
|
||||||
|
String requestXml = "<?xml version=\"1.0\" encoding=\"euc-kr\"?><Message><Header><ServiceName>MessageSync</ServiceName><Command>insert</Command></Header><Body><Layout><id>"
|
||||||
|
+ layoutId + "</id><data><![CDATA[<?xml version=\"1.0\" encoding=\"euc-kr\"?>"
|
||||||
|
+ "<Format id=\"URP_DRA00357321URP_CBSS\" desc=\"(107300)자동이체 신청/변경_REQ\" author=\"1910272\" usesystem=\"EAI\" group=\"URP\" date=\"2020-08-18 08:58:54\" msgType=\"ASCII\" ioType=\"CBSS\" part=\"data\" createBy=\"1910272\" updateBy=\"1910272\" type=\"business\"><Field id=\"TX_UNQ_NO_S16\" desc=\"거래고유번호_S16\" depth=\"1\" maxCnt=\"0\" no=\"1\" count=\"\" type=\"Varchar\" len=\"16\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" />"
|
||||||
|
+ "<Field id=\"PN_NO_S14\" desc=\"플랜번호_S14\" depth=\"1\" maxCnt=\"0\" no=\"2\" count=\"\" type=\"Varchar\" len=\"14\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"TX_DIV1_S1\" desc=\"거래구분1_S1\" depth=\"1\" maxCnt=\"0\" no=\"3\" count=\"\" type=\"Varchar\" len=\"1\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"REG_DIV_S1\" desc=\"등록구분_S1\" depth=\"1\" maxCnt=\"0\" no=\"4\" count=\"\" type=\"Varchar\" len=\"1\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"SEQNO_S4\" desc=\"일련번호_S4\" depth=\"1\" maxCnt=\"0\" no=\"5\" count=\"\" type=\"Varchar\" len=\"4\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"WDL_ACCO_NO_S16\" desc=\"출금계좌번호_S16\" depth=\"1\" maxCnt=\"0\" no=\"6\" count=\"\" type=\"Varchar\" len=\"16\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"MNRC_ACNO_S16\" desc=\"입금계좌번호_S16\" depth=\"1\" maxCnt=\"0\" no=\"7\" count=\"\" type=\"Varchar\" len=\"16\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"TRSF_DD_S2\" desc=\"이체일_S2\" depth=\"1\" maxCnt=\"0\" no=\"8\" count=\"\" type=\"Varchar\" len=\"2\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"STDD_S8\" desc=\"시작일자_S8\" depth=\"1\" maxCnt=\"0\" no=\"9\" count=\"\" type=\"Varchar\" len=\"8\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"ENDT_S8\" desc=\"종료일자_S8\" depth=\"1\" maxCnt=\"0\" no=\"10\" count=\"\" type=\"Varchar\" len=\"8\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"TRAM_NMCP_INFO1_S14\" desc=\"이체금액부수정보1_S14\" depth=\"1\" maxCnt=\"0\" no=\"11\" count=\"\" type=\"Varchar\" len=\"14\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"CORP_BDMN_S14\" desc=\"기업부담금_S14\" depth=\"1\" maxCnt=\"0\" no=\"12\" count=\"\" type=\"Varchar\" len=\"14\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"IDVD_BDMN_S14\" desc=\"개인부담금_S14\" depth=\"1\" maxCnt=\"0\" no=\"13\" count=\"\" type=\"Varchar\" len=\"14\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"WDL_SUMRY\" desc=\"출금적요\" depth=\"1\" maxCnt=\"0\" no=\"14\" count=\"\" type=\"Varchar\" len=\"50\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"MNRC_SUMRY\" desc=\"입금적요\" depth=\"1\" maxCnt=\"0\" no=\"15\" count=\"\" type=\"Varchar\" len=\"50\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"TX_BRCD\" desc=\"거래부점코드\" depth=\"1\" maxCnt=\"0\" no=\"16\" count=\"\" type=\"Varchar\" len=\"4\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"TX_TLRNO\" desc=\"거래텔러번호\" depth=\"1\" maxCnt=\"0\" no=\"17\" count=\"\" type=\"Varchar\" len=\"7\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /></Format>]]>"
|
||||||
|
+ "</data></Layout></Body></Message>";
|
||||||
|
|
||||||
|
// =====================================
|
||||||
|
|
||||||
|
String url = BASE_URL + "?cmd=Message&schema=APIGW";
|
||||||
|
|
||||||
|
// HTTP 헤더 설정
|
||||||
|
HttpHeaders headers = new HttpHeaders();
|
||||||
|
headers.setContentType(MediaType.APPLICATION_XML);
|
||||||
|
|
||||||
|
// 요청 생성
|
||||||
|
HttpEntity<String> request = new HttpEntity<>(requestXml, headers);
|
||||||
|
|
||||||
|
// POST 요청 전송
|
||||||
|
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, request, String.class);
|
||||||
|
|
||||||
|
// 응답 출력
|
||||||
|
System.out.println("=== Status Code: " + response.getStatusCodeValue());
|
||||||
|
System.out.println("=== Response Body ===");
|
||||||
|
System.out.println(response.getBody());
|
||||||
|
|
||||||
|
// 기본 검증
|
||||||
|
assertNotNull(response);
|
||||||
|
assertEquals(200, response.getStatusCodeValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user