Merge remote-tracking branch 'origin/jenkins_with_weblogic' into jenkins_with_weblogic

This commit is contained in:
Rinjae
2026-02-10 12:18:33 +09:00
3 changed files with 233 additions and 101 deletions
@@ -38,6 +38,7 @@
let fullMessageData;
let layoutInfo = [];
let bzwkdatatntInfo;
var isPrettyView = false;
var eaiSvcCode = "";
@@ -388,10 +389,6 @@
$('#btn_pretty_body').click(function(){
const syntax = $('#selectBodySyntax').val();
// FLAT view를 위해 생성된 데이터 -> 기존 업무데이터
bodyCodeEditor.setValue(bzwkdatatntInfo);
const value = bodyCodeEditor.getValue();
let prettyValue = value;
if(syntax === 'JSN'){
@@ -431,7 +428,6 @@
$('#btn_pretty_body').css('display', 'block');
bodyCodeEditor.setOption("mode", "application/json");
}else if(syntax === 'XML'){
$('#btn_pretty_body').css('display', 'block');
$('#btn_pretty_body').css('display', 'block');
bodyCodeEditor.setOption("mode", "application/xml");
}else{
@@ -842,112 +838,141 @@ $(document).ready(function() {
alert('전체 전문 복사되었습니다.')
});
// FLAT 데이터를 전문정보로 잘라서 JSON / XML VIEW 로 볼 수 있는 버튼
$('#btn_convert_view').click(function() {
var type = $('select[id=selectBodySyntax]').val();
if (!fullMessageData || !layoutInfo) {
alert("데이터가 없습니다.");
$('#btn_pretty_print').click(function () {
var $button = $(this);
// Pretty View → 원본 복구
if (typeof isPrettyView !== 'undefined' && isPrettyView) {
var originalData = (typeof bzwkdatatntInfo !== 'undefined')
? bzwkdatatntInfo
: "";
if (typeof bodyCodeEditor !== 'undefined') {
bodyCodeEditor.setValue(originalData);
}
isPrettyView = false;
$button.text("PRETTY_PRINT");
return;
}
parserCommon(fullMessageData, layoutInfo, type);
});
var intrefaceId = ($("input[name=eaiSvcName]").val() || "").trim();
var logProcessNo = ($("input[name=logPrcssSerno]").val() || "").trim();
var bizData = (typeof bzwkdatatntInfo !== 'undefined')
? bzwkdatatntInfo
: "";
function parserCommon(flatData, layoutInfo, type) {
var cursor = 0;
var parsedList = [];
var error = false;
layoutInfo.forEach(function(field) {
var fieldLen = field.length;
var errContent = ($("textarea[name=eaiErrCtnt]").val() || "").trim();
if (errContent.length > 0) {
error = true;
}
if (fieldLen > 0) {
var rawValue = flatData.substring(cursor, cursor + fieldLen);
if (!intrefaceId || !logProcessNo || !bizData) {
alert("필수값이 누락되어 조회가 불가능합니다.");
return;
}
parsedList.push({
engName: field.name,
korName: field.desc || field.name,
value: rawValue // trim 금지.
});
$.ajax({
type: "POST",
url: url,
dataType: "json",
data: {
cmd: "DETAIL_PRETTY_VIEW",
intrefaceId: intrefaceId,
logProcessNo: logProcessNo,
bizData: bizData
},
cursor += fieldLen;
success: function (response) {
var xmlString = response.result;
if (xmlString) {
if (typeof bodyCodeEditor !== 'undefined') {
bodyCodeEditor.setValue(xmlString);
}
$('#selectBodySyntax')
.val('XML')
.trigger('change');
isPrettyView = true;
$button.text("업무데이터 보기");
} else {
alert("변환된 데이터 내용이 없습니다.");
}
},
error: function (xhr, status, error) {
console.error("AJAX Error:", xhr);
var errorMsg = "처리 중 오류가 발생했습니다.";
if (xhr.responseJSON) {
var errResponse = xhr.responseJSON;
if (errResponse.result) {
errorMsg = errResponse.result;
}
else if (errResponse.message) {
errorMsg = errResponse.message;
}
}
// JSON 파싱 실패 대비
else if (xhr.responseText) {
errorMsg = xhr.responseText;
}
alert(errorMsg);
}
});
// CodeMirror 에디터에 값 세팅
var finalString = "";
if (type == "JSN") {
var jsonResult = {};
parsedList.forEach(function(item) {
jsonResult[item.engName] = {
"한글명": item.korName,
"값": item.value
};
});
finalString = JSON.stringify(jsonResult, null, 4);
} else if (type == "XML") {
var xmlResult = "<Root>\n";
parsedList.forEach(function(item) {
var cleanTagName = item.korName.replace(/[^a-zA-Z0-9가-힣]/g, "");
if (!cleanTagName) cleanTagName = item.engName;
xmlResult += "\t<" + cleanTagName + ">" + item.value + "</" + cleanTagName + ">\n";
});
xmlResult += "</Root>";
finalString = xmlResult;
} else {
finalString = flatData;
}
bodyCodeEditor.setValue(finalString);
$('#selectBodySyntax').val(type).trigger('change');
// console.log("변환 완료:", parsedList);
}
});
/**
* 문자열의 바이트 수 계산 (한글 2바이트, 영문/숫자 1바이트)
*/
function getByteLength(str) {
let byteCount = 0;
for (let i = 0; i < str.length; i++) {
const charCode = str.charCodeAt(i);
byteCount += (charCode >= 0xAC00 && charCode <= 0xD7A3) ? 2 : 1;
}
return byteCount;
}
/**
* 문자열을 주어진 바이트 수만큼 패딩
* @param {string} str - 원본 문자열
* @param {number} targetBytes - 목표 바이트 수
* @param {string} position - 'left' 또는 'right' (기본: 'right')
* @param {string} padChar - 패딩 문자 (기본: 공백)
* @returns {string} - 패딩된 문자열
*/
function padByteString(str, targetBytes, position = 'right', padChar = ' ') {
const currentBytes = getByteLength(str);
if (currentBytes >= targetBytes) {
return str; // 이미 목표 바이트 이상이면 그대로 반환
}
const paddingBytes = targetBytes - currentBytes;
const padding = padChar.repeat(paddingBytes);
return position === 'left' ? padding + str : str + padding;
}
});
/**
* 문자열의 바이트 수 계산 (한글 2바이트, 영문/숫자 1바이트)
*/
function getByteLength(str) {
let byteCount = 0;
for (let i = 0; i < str.length; i++) {
const charCode = str.charCodeAt(i);
byteCount += (charCode >= 0xAC00 && charCode <= 0xD7A3) ? 2 : 1;
}
return byteCount;
}
/**
* 문자열을 주어진 바이트 수만큼 패딩
* @param {string} str - 원본 문자열
* @param {number} targetBytes - 목표 바이트 수
* @param {string} position - 'left' 또는 'right' (기본: 'right')
* @param {string} padChar - 패딩 문자 (기본: 공백)
* @returns {string} - 패딩된 문자열
*/
function padByteString(str, targetBytes, position = 'right', padChar = ' ') {
const currentBytes = getByteLength(str);
if (currentBytes >= targetBytes) {
return str; // 이미 목표 바이트 이상이면 그대로 반환
}
const paddingBytes = targetBytes - currentBytes;
const padding = padChar.repeat(paddingBytes);
return position === 'left' ? padding + str : str + padding;
}
</script>
<style>
.dialog_confirm{