품질관리_ECR관리 #91
@@ -18,10 +18,17 @@ String menuName = CommonUtils.getMenuName(menuObjId, "ECR 관리");
|
||||
</head>
|
||||
|
||||
<style>
|
||||
/* 검색필터 아이템 스타일 */
|
||||
.search-item { display: flex; align-items: center; gap: 5px; }
|
||||
.search-item label { font-weight: bold; white-space: nowrap; min-width: 70px; }
|
||||
.search-item input, .search-item select { height: 28px; }
|
||||
body, html {
|
||||
overflow-x: hidden;
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
/* 품번/품명 Select2 너비 강제 적용 */
|
||||
#search_part_no + .select2-container,
|
||||
#search_part_name + .select2-container {
|
||||
width: 210px !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script type="text/javascript">
|
||||
@@ -30,6 +37,13 @@ $(document).ready(function(){
|
||||
$('.select2').select2();
|
||||
fnc_datepick();
|
||||
|
||||
// 품번/품명 Select2 AJAX 초기화
|
||||
initPartSelect2Ajax("#search_part_no", "#search_part_name", "#search_part_objid", {
|
||||
debug: false,
|
||||
partNoPlaceholder: "품번 검색...",
|
||||
partNamePlaceholder: "품명 검색..."
|
||||
});
|
||||
|
||||
$("input").keyup(function(e){
|
||||
if(e.keyCode == 13){
|
||||
$("#page").val("1");
|
||||
@@ -58,29 +72,36 @@ $(document).ready(function(){
|
||||
|
||||
// 컬럼: ECR No, 요청일, 요청자, 품번, 품명, 이슈사항, 완료요청일, 조치부서, 조치담당자, 조치자, 조치내용, 완료일, 첨부파일
|
||||
var columns = [
|
||||
{headerHozAlign:'center', hozAlign:'center', minWidth:110, widthGrow:1, title:'ECR No', field:'ECR_NO'},
|
||||
{headerHozAlign:'center', hozAlign:'center', minWidth:110, widthGrow:1, title:'ECR No', field:'ECR_NO',
|
||||
formatter:fnc_createGridAnchorTag,
|
||||
cellClick: function(e, cell){
|
||||
var objId = fnc_checkNull(cell.getData().OBJID);
|
||||
fn_viewEcrPopUp(objId);
|
||||
}
|
||||
},
|
||||
{headerHozAlign:'center', hozAlign:'center', minWidth:100, widthGrow:1, title:'요청일', field:'REQUEST_DATE'},
|
||||
{headerHozAlign:'center', hozAlign:'center', minWidth:80, widthGrow:1, title:'요청자', field:'REQUESTER_NAME'},
|
||||
{headerHozAlign:'center', hozAlign:'left', minWidth:120, widthGrow:2, title:'품번', field:'PART_NO'},
|
||||
{headerHozAlign:'center', hozAlign:'left', minWidth:150, widthGrow:2, title:'품명', field:'PART_NAME'},
|
||||
{headerHozAlign:'center', hozAlign:'left', minWidth:150, widthGrow:2, title:'이슈사항', field:'ISSUE_CONTENT'},
|
||||
{headerHozAlign:'center', hozAlign:'center', minWidth:100, widthGrow:1, title:'완료요청일', field:'DUE_DATE'},
|
||||
{headerHozAlign:'center', hozAlign:'center', minWidth:90, widthGrow:1, title:'조치부서', field:'ACTION_DEPT'},
|
||||
{headerHozAlign:'center', hozAlign:'center', minWidth:90, widthGrow:1, title:'조치부서', field:'ACTION_DEPT_NAME'},
|
||||
{headerHozAlign:'center', hozAlign:'center', minWidth:90, widthGrow:1, title:'조치담당자', field:'ACTION_MANAGER_NAME'},
|
||||
{headerHozAlign:'center', hozAlign:'center', minWidth:80, widthGrow:1, title:'조치자', field:'ACTION_USER_NAME'},
|
||||
{headerHozAlign:'center', hozAlign:'left', minWidth:150, widthGrow:2, title:'조치내용', field:'ACTION_CONTENT'},
|
||||
{headerHozAlign:'center', hozAlign:'center', minWidth:100, widthGrow:1, title:'완료일', field:'COMPLETE_DATE'},
|
||||
{headerHozAlign:'center', hozAlign:'center', minWidth:70, widthGrow:1, title:'첨부파일', field:'ATTACH_FILE',
|
||||
formatter: function(cell, formatterParams, onRendered){
|
||||
var fileYn = fnc_checkNull(cell.getValue());
|
||||
if(fileYn === 'Y'){
|
||||
return '<a href="#" class="file_icon" style="display:inline-block; width:20px; height:20px;"></a>';
|
||||
}
|
||||
return '<a href="#" class="file_empty_icon" style="display:inline-block; width:20px; height:20px;"></a>';
|
||||
},
|
||||
{headerHozAlign:'center', hozAlign:'center', minWidth:80, widthGrow:1, title:'이미지', field:'IMAGE_FILE',
|
||||
formatter:fnc_subInfoValueFormatter,
|
||||
cellClick:function(e, cell){
|
||||
var objId = fnc_checkNull(cell.getData().OBJID);
|
||||
fn_openAttachFilePopUp(objId);
|
||||
fn_openImageFilePopUp(objId);
|
||||
}
|
||||
},
|
||||
{headerHozAlign:'center', hozAlign:'center', minWidth:80, widthGrow:1, title:'첨부파일', field:'ATTACH_FILE',
|
||||
formatter:fnc_subInfoValueFormatter,
|
||||
cellClick:function(e, cell){
|
||||
var objid = fnc_checkNull(cell.getData().OBJID);
|
||||
fn_FileRegist(objid,"ECR_RESULT","ECR결과첨부");
|
||||
}
|
||||
}
|
||||
];
|
||||
@@ -108,8 +129,10 @@ function fn_reset(){
|
||||
|
||||
// ECR 등록 팝업
|
||||
function fn_registEcrPopUp(){
|
||||
var popup_width = 1200;
|
||||
var popup_height = 800;
|
||||
var selected = _tabulGrid.getSelectedData();
|
||||
|
||||
var popup_width = 900;
|
||||
var popup_height = 500;
|
||||
var hiddenForm = document.hiddenForm;
|
||||
var target = "ecrRegistPopUp";
|
||||
var url = "/quality/ecrRegistFormPopUp.do";
|
||||
@@ -117,7 +140,14 @@ function fn_registEcrPopUp(){
|
||||
fn_centerPopup(popup_width, popup_height, "", target);
|
||||
|
||||
hiddenForm.action = url;
|
||||
hiddenForm.actionType.value = 'new';
|
||||
// 선택된 행이 있으면 수정 모드, 없으면 신규
|
||||
if(selected.length == 1){
|
||||
hiddenForm.OBJID.value = selected[0].OBJID;
|
||||
hiddenForm.actionType.value = 'edit';
|
||||
} else {
|
||||
hiddenForm.OBJID.value = '';
|
||||
hiddenForm.actionType.value = 'new';
|
||||
}
|
||||
hiddenForm.target = target;
|
||||
hiddenForm.submit();
|
||||
}
|
||||
@@ -135,7 +165,7 @@ function fn_registResultPopUp(){
|
||||
}
|
||||
|
||||
var popup_width = 1200;
|
||||
var popup_height = 800;
|
||||
var popup_height = 600;
|
||||
var hiddenForm = document.hiddenForm;
|
||||
var target = "ecrResultPopUp";
|
||||
var url = "/quality/ecrResultFormPopUp.do";
|
||||
@@ -149,12 +179,43 @@ function fn_registResultPopUp(){
|
||||
hiddenForm.submit();
|
||||
}
|
||||
|
||||
// 첨부파일 팝업
|
||||
function fn_openAttachFilePopUp(objId){
|
||||
var popup_width = 800;
|
||||
// ECR No 클릭 시 뷰 팝업
|
||||
function fn_viewEcrPopUp(objId){
|
||||
var popup_width = 1200;
|
||||
var popup_height = 600;
|
||||
var url = "/common/filePopUp.do?OBJID=" + objId + "&FILE_TYPE=ATTACH";
|
||||
window.open(url, "attachFilePopUp", "width="+popup_width+",height="+popup_height+",scrollbars=yes,resizable=yes");
|
||||
var hiddenForm = document.hiddenForm;
|
||||
var target = "ecrViewPopUp";
|
||||
var url = "/quality/ecrResultFormPopUp.do";
|
||||
|
||||
fn_centerPopup(popup_width, popup_height, "", target);
|
||||
|
||||
hiddenForm.action = url;
|
||||
hiddenForm.OBJID.value = objId;
|
||||
hiddenForm.actionType.value = 'view'; // 뷰 모드
|
||||
hiddenForm.target = target;
|
||||
hiddenForm.submit();
|
||||
}
|
||||
|
||||
// 이미지 파일 팝업
|
||||
function fn_openImageFilePopUp(objId){
|
||||
var popup_width = 650;
|
||||
var popup_height = 550;
|
||||
var url = "/common/ImageRegistPopup.do?targetObjId=" + objId + "&docType=ECR_RESULT_IMAGE&docTypeName=이미지";
|
||||
window.open(url, "imageFilePopUp", "width="+popup_width+",height="+popup_height+",scrollbars=yes,resizable=yes");
|
||||
}
|
||||
|
||||
// 첨부파일 팝업
|
||||
function fn_FileRegist(objId, docType, docTypeName){
|
||||
var popup_width = 800;
|
||||
var popup_height = 300;
|
||||
|
||||
var objId = objId;
|
||||
var docType = docType;
|
||||
var docTypeName = docTypeName;
|
||||
var params = "?targetObjId="+objId+"&docType="+docType+"&docTypeName="+docTypeName;
|
||||
var url = "/projectConcept/FileRegistPopup.do"+params;
|
||||
|
||||
fn_centerPopup(popup_width, popup_height, url);
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -179,50 +240,69 @@ function fn_openAttachFilePopUp(objId){
|
||||
</div>
|
||||
|
||||
<div id="plmSearchZon">
|
||||
<div style="display:flex; flex-wrap:wrap; gap:10px; align-items:center;">
|
||||
<div class="search-item">
|
||||
<label>요청일</label>
|
||||
<input type="text" name="search_request_date_from" id="search_request_date_from" class="date_icon" style="width:100px;" autocomplete="off">
|
||||
<span>~</span>
|
||||
<input type="text" name="search_request_date_to" id="search_request_date_to" class="date_icon" style="width:100px;" autocomplete="off">
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<label>요청자</label>
|
||||
<input type="text" name="search_requester" id="search_requester" style="width:100px;" autocomplete="off">
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<label>품번</label>
|
||||
<input type="text" name="search_part_no" id="search_part_no" style="width:100px;" autocomplete="off">
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<label>품명</label>
|
||||
<input type="text" name="search_part_name" id="search_part_name" style="width:100px;" autocomplete="off">
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<label>완료요청일</label>
|
||||
<input type="text" name="search_due_date_from" id="search_due_date_from" class="date_icon" style="width:100px;" autocomplete="off">
|
||||
<span>~</span>
|
||||
<input type="text" name="search_due_date_to" id="search_due_date_to" class="date_icon" style="width:100px;" autocomplete="off">
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<label>조치부서</label>
|
||||
<input type="text" name="search_action_dept" id="search_action_dept" style="width:100px;" autocomplete="off">
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<label>조치담당자</label>
|
||||
<input type="text" name="search_action_manager" id="search_action_manager" style="width:100px;" autocomplete="off">
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<label>조치자</label>
|
||||
<input type="text" name="search_action_user" id="search_action_user" style="width:100px;" autocomplete="off">
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<label>완료일</label>
|
||||
<input type="text" name="search_complete_date_from" id="search_complete_date_from" class="date_icon" style="width:100px;" autocomplete="off">
|
||||
<span>~</span>
|
||||
<input type="text" name="search_complete_date_to" id="search_complete_date_to" class="date_icon" style="width:100px;" autocomplete="off">
|
||||
</div>
|
||||
</div>
|
||||
<table class="">
|
||||
<tr>
|
||||
<td><label>요청일</label></td>
|
||||
<td>
|
||||
<input type="text" name="search_request_date_from" id="search_request_date_from" class="date_icon" style="width:100px;" autocomplete="off">~
|
||||
<input type="text" name="search_request_date_to" id="search_request_date_to" class="date_icon" style="width:100px;" autocomplete="off">
|
||||
</td>
|
||||
<td><label>요청자</label></td>
|
||||
<td>
|
||||
<select name="search_requester" id="search_requester" class="select2" style="width:150px;">
|
||||
<option value="">전체</option>
|
||||
${code_map.requester_id}
|
||||
</select>
|
||||
</td>
|
||||
<td><label>품번</label></td>
|
||||
<td>
|
||||
<select name="search_part_no" id="search_part_no" class="select2-part" style="">
|
||||
<option value="">품번 선택</option>
|
||||
</select>
|
||||
<input type="hidden" name="search_part_objid" id="search_part_objid" value="">
|
||||
</td>
|
||||
<td><label>품명</label></td>
|
||||
<td>
|
||||
<select name="search_part_name" id="search_part_name" class="select2-part" style="">
|
||||
<option value="">품명 선택</option>
|
||||
</select>
|
||||
</td>
|
||||
<td><label>완료요청일</label></td>
|
||||
<td>
|
||||
<input type="text" name="search_due_date_from" id="search_due_date_from" class="date_icon" style="width:100px;" autocomplete="off">~
|
||||
<input type="text" name="search_due_date_to" id="search_due_date_to" class="date_icon" style="width:100px;" autocomplete="off">
|
||||
</td>
|
||||
<td><label>조치부서</label></td>
|
||||
<td>
|
||||
<select name="search_action_dept" id="search_action_dept" class="select2" style="width:170px;">
|
||||
<option value="">전체</option>
|
||||
${code_map.dept_cd}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><label>조치담당자</label></td>
|
||||
<td>
|
||||
<select name="search_action_manager" id="search_action_manager" class="select2" style="width:215px;">
|
||||
<option value="">전체</option>
|
||||
${code_map.action_manager_id}
|
||||
</select>
|
||||
</td>
|
||||
<td><label>조치자</label></td>
|
||||
<td>
|
||||
<select name="search_action_user" id="search_action_user" class="select2" style="width:150px;">
|
||||
<option value="">전체</option>
|
||||
${code_map.action_user_id}
|
||||
</select>
|
||||
</td>
|
||||
<td><label>완료일</label></td>
|
||||
<td>
|
||||
<input type="text" name="search_complete_date_from" id="search_complete_date_from" class="date_icon" style="width:100px;" autocomplete="off">~
|
||||
<input type="text" name="search_complete_date_to" id="search_complete_date_to" class="date_icon" style="width:100px;" autocomplete="off">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<%@include file= "/WEB-INF/view/common/common_gridArea.jsp" %>
|
||||
|
||||
@@ -3,21 +3,61 @@
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||
<%@ page import="com.pms.common.utils.*"%>
|
||||
<%@ page import="java.util.*" %>
|
||||
<%@include file= "/init.jsp" %>
|
||||
<%@include file= "/init_new.jsp" %>
|
||||
<%
|
||||
String menuObjId = request.getParameter("menuObjId");
|
||||
String menuName = CommonUtils.getMenuName(menuObjId, "ECR 등록");
|
||||
String actionType = CommonUtils.checkNull(request.getParameter("actionType"));
|
||||
|
||||
// OBJID가 없으면 신규 생성 (첨부파일 연결용)
|
||||
String objId = CommonUtils.checkNull(request.getAttribute("info") != null ? ((Map)request.getAttribute("info")).get("objid") : "");
|
||||
boolean isNew = objId.isEmpty() || "new".equals(actionType);
|
||||
if(objId.isEmpty()){
|
||||
objId = String.valueOf(CommonUtils.createObjId());
|
||||
}
|
||||
%>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title><%=Constants.SYSTEM_NAME%></title>
|
||||
<style>
|
||||
body { min-height: auto !important; }
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){
|
||||
fnc_datepick();
|
||||
$('.select2').select2();
|
||||
|
||||
// 품번/품명 Select2 AJAX 초기화
|
||||
initPartSelect2Ajax("#PART_NO", "#PART_NAME", "#PART_OBJID", {
|
||||
debug: false,
|
||||
partNoPlaceholder: "품번 입력하여 검색...",
|
||||
partNamePlaceholder: "품명 입력하여 검색..."
|
||||
});
|
||||
|
||||
// 수정 모드인 경우 기존 값 선택
|
||||
var savedActionDept = "${info.action_dept}";
|
||||
var savedRequesterId = "${info.requester_id}";
|
||||
var savedActionManagerId = "${info.action_manager_id}";
|
||||
var savedPartNo = "${info.part_no}";
|
||||
var savedPartName = "${info.part_name}";
|
||||
|
||||
if(savedActionDept) $("#ACTION_DEPT").val(savedActionDept).trigger('change');
|
||||
if(savedRequesterId) $("#REQUESTER_ID").val(savedRequesterId).trigger('change');
|
||||
if(savedActionManagerId) $("#ACTION_MANAGER_ID").val(savedActionManagerId).trigger('change');
|
||||
|
||||
// 수정 모드: 품번/품명 기존 값 설정
|
||||
if(savedPartNo){
|
||||
var newOption = new Option(savedPartNo, savedPartNo, true, true);
|
||||
$('#PART_NO').append(newOption).trigger('change');
|
||||
}
|
||||
if(savedPartName){
|
||||
var newOption2 = new Option(savedPartName, savedPartName, true, true);
|
||||
$('#PART_NAME').append(newOption2).trigger('change');
|
||||
}
|
||||
|
||||
// 저장
|
||||
$("#btnSave").click(function(){
|
||||
@@ -31,64 +71,156 @@ $(document).ready(function(){
|
||||
});
|
||||
|
||||
function fn_save(){
|
||||
// TODO: 저장 로직 구현
|
||||
Swal.fire("저장 기능 준비중입니다.");
|
||||
// 유효성 검사
|
||||
if(!fnc_valitate("form1")){
|
||||
return;
|
||||
}
|
||||
|
||||
Swal.fire({
|
||||
title: '저장하시겠습니까?',
|
||||
icon: 'question',
|
||||
showCancelButton: true,
|
||||
confirmButtonText: '저장',
|
||||
cancelButtonText: '취소'
|
||||
}).then((result) => {
|
||||
if(result.isConfirmed){
|
||||
$.ajax({
|
||||
url: "/quality/saveEcr.do",
|
||||
type: "POST",
|
||||
data: $("#form1").serialize(),
|
||||
dataType: "json",
|
||||
success: function(result){
|
||||
if(result.RESULT == "SUCCESS"){
|
||||
Swal.fire({
|
||||
title: '저장되었습니다.',
|
||||
icon: 'success'
|
||||
}).then(() => {
|
||||
if(window.opener && window.opener.fn_search){
|
||||
window.opener.fn_search();
|
||||
}
|
||||
window.close();
|
||||
});
|
||||
} else {
|
||||
Swal.fire({
|
||||
title: '저장 실패',
|
||||
text: result.MESSAGE || '저장 중 오류가 발생했습니다.',
|
||||
icon: 'error'
|
||||
});
|
||||
}
|
||||
},
|
||||
error: function(xhr, status, error){
|
||||
Swal.fire({
|
||||
title: '저장 실패',
|
||||
text: '서버 통신 오류가 발생했습니다.',
|
||||
icon: 'error'
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<body>
|
||||
<form name="form1" id="form1" method="post">
|
||||
<div class="popup_wrap">
|
||||
<div class="popup_header">
|
||||
<h2><%=menuName%></h2>
|
||||
<div class="btnArea">
|
||||
<input type="button" class="plm_btns" value="저장" id="btnSave">
|
||||
<input type="button" class="plm_btns" value="닫기" id="btnClose">
|
||||
</div>
|
||||
<input type="hidden" name="OBJID" id="OBJID" value="<%=objId%>">
|
||||
<input type="hidden" name="ATTACH_FILE_OBJID" id="ATTACH_FILE_OBJID" value="<%=objId%>">
|
||||
<input type="hidden" name="IS_NEW" id="IS_NEW" value="<%=isNew%>">
|
||||
<input type="hidden" name="PART_OBJID" id="PART_OBJID" value="${info.part_objid}">
|
||||
|
||||
<section class="business_staff_popup_min_width">
|
||||
<div class="plm_menu_name">
|
||||
<h2>
|
||||
<span><%=menuName%></span>
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
<div id="EntirePopupFormWrap">
|
||||
<div class="form_popup_title">
|
||||
<span>요청 정보</span>
|
||||
</div>
|
||||
<div class="popup_content">
|
||||
<table class="plm_form_table">
|
||||
<colgroup>
|
||||
<col width="100px"><col width="*">
|
||||
<col width="100px"><col width="*">
|
||||
<col width="100px"><col width="*">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="label">요청일</td>
|
||||
<td><input type="text" name="REQUEST_DATE" id="REQUEST_DATE" class="date_icon"></td>
|
||||
<td class="label">요청자</td>
|
||||
<td><input type="text" name="REQUESTER_NAME" id="REQUESTER_NAME"></td>
|
||||
<td class="label">완료요청일</td>
|
||||
<td><input type="text" name="DUE_DATE" id="DUE_DATE" class="date_icon"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="label">품번</td>
|
||||
<td><input type="text" name="PART_NO" id="PART_NO"></td>
|
||||
<td class="label">품명</td>
|
||||
<td colspan="3"><input type="text" name="PART_NAME" id="PART_NAME" style="width:100%;"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="label">조치부서</td>
|
||||
<td><input type="text" name="ACTION_DEPT" id="ACTION_DEPT"></td>
|
||||
<td class="label">조치담당자</td>
|
||||
<td><input type="text" name="ACTION_MANAGER_NAME" id="ACTION_MANAGER_NAME"></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="label">이슈사항</td>
|
||||
<td colspan="5"><textarea name="ISSUE_CONTENT" id="ISSUE_CONTENT" rows="4" style="width:100%;"></textarea></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="label">비고</td>
|
||||
<td colspan="5"><textarea name="REMARK" id="REMARK" rows="2" style="width:100%;"></textarea></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table class="pmsPopupForm">
|
||||
<colgroup>
|
||||
<col width="15%" />
|
||||
<col width="35%" />
|
||||
<col width="15%" />
|
||||
<col width="35%" />
|
||||
</colgroup>
|
||||
|
||||
<tr>
|
||||
<td class="input_title"><label>요청일 <span style="color:red;">*</span></label></td>
|
||||
<td>
|
||||
<input type="text" name="REQUEST_DATE" id="REQUEST_DATE" class="date_icon" required reqTitle="요청일" value="${info.request_date}">
|
||||
</td>
|
||||
<td class="input_title"><label>요청자 <span style="color:red;">*</span></label></td>
|
||||
<td>
|
||||
<select name="REQUESTER_ID" id="REQUESTER_ID" class="select2" required reqTitle="요청자" type="select" style="width:100%;">
|
||||
<option value="">선택</option>
|
||||
${code_map.requester_id}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label>품번 <span style="color:red;">*</span></label></td>
|
||||
<td>
|
||||
<select name="PART_NO" id="PART_NO" class="select2-part" required reqTitle="품번" type="select" style="width:100%;">
|
||||
<option value="">품번 선택</option>
|
||||
</select>
|
||||
</td>
|
||||
<td class="input_title"><label>품명 <span style="color:red;">*</span></label></td>
|
||||
<td>
|
||||
<select name="PART_NAME" id="PART_NAME" class="select2-part" required reqTitle="품명" type="select" style="width:100%;">
|
||||
<option value="">품명 선택</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label>완료요청일 <span style="color:red;">*</span></label></td>
|
||||
<td>
|
||||
<input type="text" name="DUE_DATE" id="DUE_DATE" class="date_icon" value="${info.due_date}" required reqTitle="완료요청일">
|
||||
</td>
|
||||
<td class="input_title"><label>조치부서</label></td>
|
||||
<td>
|
||||
<select name="ACTION_DEPT" id="ACTION_DEPT" class="select2" type="select" style="width:100%;">
|
||||
<option value="">선택</option>
|
||||
${code_map.dept_cd}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label>조치담당자</label></td>
|
||||
<td>
|
||||
<select name="ACTION_MANAGER_ID" id="ACTION_MANAGER_ID" class="select2" type="select" style="width:100%;">
|
||||
<option value="">선택</option>
|
||||
${code_map.action_manager_id}
|
||||
</select>
|
||||
</td>
|
||||
<td class="input_title"><label></label></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label>이슈사항 <span style="color:red;">*</span></label></td>
|
||||
<td colspan="3">
|
||||
<textarea name="ISSUE_CONTENT" id="ISSUE_CONTENT" rows="4" style="width:100%;" required reqTitle="이슈사항" type="text">${info.issue_content}</textarea>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label>비고</label></td>
|
||||
<td colspan="3">
|
||||
<textarea name="REMARK" id="REMARK" rows="2" style="width:100%;">${info.remark}</textarea>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="btn_wrap">
|
||||
<div class="plm_btn_wrap_center">
|
||||
<input type="button" value="저장" id="btnSave" class="plm_btns">
|
||||
<input type="button" value="닫기" id="btnClose" class="plm_btns">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
@@ -3,23 +3,102 @@
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||
<%@ page import="com.pms.common.utils.*"%>
|
||||
<%@ page import="java.util.*" %>
|
||||
<%@include file= "/init.jsp" %>
|
||||
<%@include file= "/init_new.jsp" %>
|
||||
<%
|
||||
String menuObjId = request.getParameter("menuObjId");
|
||||
String menuName = CommonUtils.getMenuName(menuObjId, "ECR 결과등록");
|
||||
String actionType = CommonUtils.checkNull(request.getParameter("actionType"));
|
||||
// 뷰 모드인지 판단
|
||||
boolean isViewMode = "view".equals(actionType);
|
||||
String menuName = isViewMode ? "ECR 결과조회" : CommonUtils.getMenuName(menuObjId, "ECR 결과등록");
|
||||
|
||||
Map info = (Map)request.getAttribute("info");
|
||||
if(info == null) info = new HashMap();
|
||||
|
||||
String objId = CommonUtils.checkNull(info.get("objid"));
|
||||
|
||||
// 오늘 날짜
|
||||
String today = new java.text.SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date());
|
||||
String completeDate = CommonUtils.checkNull(info.get("complete_date"));
|
||||
if(completeDate.isEmpty()) completeDate = today;
|
||||
|
||||
// 조치자 - 기본값 로그인 사용자
|
||||
String actionUserId = CommonUtils.checkNull(info.get("action_user_id"));
|
||||
if(actionUserId.isEmpty()) actionUserId = connectUserId;
|
||||
%>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title><%=Constants.SYSTEM_NAME%></title>
|
||||
<style>
|
||||
body { min-height: auto !important; }
|
||||
.two_column_container {
|
||||
display: flex;
|
||||
gap: 15px;
|
||||
padding: 10px;
|
||||
}
|
||||
.two_column_container > div {
|
||||
flex: 1;
|
||||
}
|
||||
.two_column_container .pmsPopuptable tr {
|
||||
height: 38px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<script type="text/javascript">
|
||||
var isViewMode = <%=isViewMode%>;
|
||||
|
||||
$(document).ready(function(){
|
||||
fnc_datepick();
|
||||
$('.select2').select2();
|
||||
|
||||
// 기존 값 선택
|
||||
var savedActionUserId = "<%=actionUserId%>";
|
||||
if(savedActionUserId) $("#ACTION_USER_ID").val(savedActionUserId).trigger('change');
|
||||
|
||||
// 뷰 모드일 경우 입력 필드 비활성화
|
||||
if(isViewMode){
|
||||
$("#form1 input, #form1 textarea, #form1 select").prop("disabled", true);
|
||||
$("#btnSave, #btnUpload, #btnImgUpload, #file1, #imgFile1").hide();
|
||||
$(".delete_btn").parent().hide();
|
||||
} else {
|
||||
// 첨부파일 드래그앤드랍 설정
|
||||
fnc_setFileDropZone("srDropZone", "<%=objId%>", "ECR_RESULT", "ECR결과첨부", "srAreaDraw", false, null, null, null, "");
|
||||
}
|
||||
srAreaDraw();
|
||||
imgAreaDraw();
|
||||
|
||||
// 파일 업로드 버튼
|
||||
$("#btnUpload").click(function(){
|
||||
var files = $("#file1")[0].files;
|
||||
if(files.length > 0){
|
||||
fnc_fileMultiUpload(files, null, "<%=objId%>", "ECR_RESULT", "ECR결과첨부", null, "srAreaDraw", null, "");
|
||||
$("#file1").val("");
|
||||
}else{
|
||||
Swal.fire("선택된 파일이 없습니다.");
|
||||
}
|
||||
});
|
||||
|
||||
// 이미지 업로드 버튼
|
||||
$("#btnImgUpload").click(function(){
|
||||
var files = $("#imgFile1")[0].files;
|
||||
if(files.length > 0){
|
||||
// 이미지 파일 확장자 검사
|
||||
var allowedExts = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'];
|
||||
for(var i = 0; i < files.length; i++){
|
||||
var ext = files[i].name.split('.').pop().toLowerCase();
|
||||
if(allowedExts.indexOf(ext) < 0){
|
||||
Swal.fire("이미지 파일만 업로드 가능합니다. (jpg, jpeg, png, gif, bmp, webp)");
|
||||
return;
|
||||
}
|
||||
}
|
||||
fnc_fileMultiUpload(files, null, "<%=objId%>", "ECR_RESULT_IMAGE", "ECR결과이미지", null, "imgAreaDraw", null, "");
|
||||
$("#imgFile1").val("");
|
||||
}else{
|
||||
Swal.fire("선택된 파일이 없습니다.");
|
||||
}
|
||||
});
|
||||
|
||||
// 저장
|
||||
$("#btnSave").click(function(){
|
||||
@@ -32,90 +111,366 @@ $(document).ready(function(){
|
||||
});
|
||||
});
|
||||
|
||||
// 첨부파일 목록 새로고침
|
||||
function srAreaDraw(){
|
||||
fn_fileCallback("sr", "ECR_RESULT");
|
||||
}
|
||||
|
||||
// 이미지 목록 새로고침
|
||||
function imgAreaDraw(){
|
||||
fn_imageCallback("img", "ECR_RESULT_IMAGE");
|
||||
}
|
||||
|
||||
// 이미지 목록 조회
|
||||
function fn_imageCallback(areaId, fileType){
|
||||
$.ajax({
|
||||
url: "/common/getFileList.do",
|
||||
type: "POST",
|
||||
data: {"targetObjId": "<%=objId%>", "docType": fileType},
|
||||
dataType: "json",
|
||||
async: false,
|
||||
success: function(data){
|
||||
$("#" + areaId + "FileArea").empty();
|
||||
if(data.length > 0){
|
||||
$.each(data, function(i){
|
||||
var imgSrc = "/common/viewImageByObjId.do?objId=" + data[i].OBJID;
|
||||
var appendHtml = '<div class="image-preview-item" style="display:inline-block; margin:5px; position:relative; text-align:center;">';
|
||||
appendHtml += '<img src="' + imgSrc + '" onclick="viewImage(\'' + imgSrc + '\')" title="클릭하여 원본보기" style="width:80px; height:80px; object-fit:cover; cursor:pointer; border:1px solid #ddd; border-radius:4px;">';
|
||||
if(!isViewMode){
|
||||
appendHtml += '<button type="button" onclick="fn_imageDelete(\'' + data[i].OBJID + '\', event)" title="삭제" style="position:absolute; top:-5px; right:-5px; background:#ff4444; color:white; border:none; border-radius:50%; width:20px; height:20px; cursor:pointer; font-size:12px;">×</button>';
|
||||
}
|
||||
appendHtml += '<div style="font-size:10px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; max-width:80px;" title="' + data[i].REAL_FILE_NAME + '">' + data[i].REAL_FILE_NAME + '</div>';
|
||||
appendHtml += '</div>';
|
||||
$("#" + areaId + "FileArea").append(appendHtml);
|
||||
});
|
||||
}else{
|
||||
$("#" + areaId + "FileArea").append('<div style="color:#999; padding:10px;">등록된 이미지가 없습니다.</div>');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 이미지 원본 보기
|
||||
function viewImage(imgSrc){
|
||||
var img = new Image();
|
||||
img.onload = function(){
|
||||
var width = Math.min(this.width, 1200);
|
||||
var height = Math.min(this.height, 800);
|
||||
window.open(imgSrc, "imageView", "width=" + width + ",height=" + height + ",scrollbars=yes,resizable=yes");
|
||||
};
|
||||
img.src = imgSrc;
|
||||
}
|
||||
|
||||
// 이미지 삭제
|
||||
function fn_imageDelete(fileObjId, event){
|
||||
if(event){
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
}
|
||||
if(isViewMode) return;
|
||||
|
||||
if(confirm("이미지를 삭제하시겠습니까?")){
|
||||
$.ajax({
|
||||
url: "/common/deleteFileInfo.do",
|
||||
type: "POST",
|
||||
data: {"objId": fileObjId},
|
||||
dataType: "json",
|
||||
async: false,
|
||||
success: function(data){
|
||||
imgAreaDraw();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 첨부파일 목록 조회
|
||||
function fn_fileCallback(areaId, fileType){
|
||||
$.ajax({
|
||||
url: "/common/getFileList.do",
|
||||
type: "POST",
|
||||
data: {"targetObjId": "<%=objId%>", "docType": fileType},
|
||||
dataType: "json",
|
||||
async: false,
|
||||
success: function(data){
|
||||
$("#" + areaId + "FileArea").empty();
|
||||
if(data.length > 0){
|
||||
$.each(data, function(i){
|
||||
var appendText = "";
|
||||
var fileExt = data[i].UPPER_FILE_EXT;
|
||||
appendText += "<tr>";
|
||||
appendText += "<td>" + (i + 1) + "</td>";
|
||||
if(fileExt == 'PDF'){
|
||||
appendText += "<td class='align_l'><a href='javascript:fnc_viewPdfFile(\"" + data[i].OBJID + "\")'> " + data[i].REAL_FILE_NAME + "</a>";
|
||||
}else{
|
||||
appendText += "<td class='align_l'><a href='javascript:fnc_downloadFile(\"" + data[i].OBJID + "\")'> " + data[i].REAL_FILE_NAME + "</a>";
|
||||
}
|
||||
if(!isViewMode){
|
||||
appendText += "<a href='javascript:fn_fileDelete(\"" + data[i].OBJID + "\")'><div class='delete_btn'></div></a>";
|
||||
}
|
||||
appendText += "</td>";
|
||||
appendText += "<td>" + data[i].REGDATE + "</td>";
|
||||
appendText += "<td>" + data[i].FILE_SIZE + "</td>";
|
||||
appendText += "</tr>";
|
||||
$("#" + areaId + "FileArea").append(appendText);
|
||||
});
|
||||
}else{
|
||||
var appendText = "<tr><td colspan='4'>첨부 파일이 없습니다.</td></tr>";
|
||||
$("#" + areaId + "FileArea").append(appendText);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// PDF 미리보기
|
||||
function fnc_viewPdfFile(fileObjId){
|
||||
window.open("/common/downloadFile.do?objId=" + fileObjId, "_blank");
|
||||
}
|
||||
|
||||
// 첨부파일 삭제
|
||||
function fn_fileDelete(fileObjId){
|
||||
if(isViewMode) return;
|
||||
|
||||
if(confirm("파일을 삭제하시겠습니까?")){
|
||||
$.ajax({
|
||||
url: "/common/deleteFileInfo.do",
|
||||
type: "POST",
|
||||
data: {"objId": fileObjId},
|
||||
dataType: "json",
|
||||
async: false,
|
||||
success: function(data){
|
||||
srAreaDraw();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function fn_save(){
|
||||
// TODO: 저장 로직 구현
|
||||
Swal.fire("저장 기능 준비중입니다.");
|
||||
// 유효성 검사
|
||||
if(!fnc_valitate("form1")){
|
||||
return;
|
||||
}
|
||||
|
||||
Swal.fire({
|
||||
title: '저장하시겠습니까?',
|
||||
icon: 'question',
|
||||
showCancelButton: true,
|
||||
confirmButtonText: '저장',
|
||||
cancelButtonText: '취소'
|
||||
}).then((result) => {
|
||||
if(result.isConfirmed){
|
||||
$.ajax({
|
||||
url: "/quality/saveEcrResult.do",
|
||||
type: "POST",
|
||||
data: $("#form1").serialize(),
|
||||
dataType: "json",
|
||||
success: function(result){
|
||||
if(result.RESULT == "SUCCESS"){
|
||||
Swal.fire({
|
||||
title: '저장되었습니다.',
|
||||
icon: 'success'
|
||||
}).then(() => {
|
||||
if(window.opener && window.opener.fn_search){
|
||||
window.opener.fn_search();
|
||||
}
|
||||
window.close();
|
||||
});
|
||||
} else {
|
||||
Swal.fire({
|
||||
title: '저장 실패',
|
||||
text: result.MESSAGE || '저장 중 오류가 발생했습니다.',
|
||||
icon: 'error'
|
||||
});
|
||||
}
|
||||
},
|
||||
error: function(xhr, status, error){
|
||||
Swal.fire({
|
||||
title: '저장 실패',
|
||||
text: '서버 통신 오류가 발생했습니다.',
|
||||
icon: 'error'
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<body>
|
||||
<form name="form1" id="form1" method="post">
|
||||
<input type="hidden" name="OBJID" id="OBJID" value="<%=CommonUtils.checkNull(info.get("OBJID"))%>">
|
||||
<div class="popup_wrap">
|
||||
<div class="popup_header">
|
||||
<h2><%=menuName%></h2>
|
||||
<div class="btnArea">
|
||||
<input type="button" class="plm_btns" value="저장" id="btnSave">
|
||||
<input type="button" class="plm_btns" value="닫기" id="btnClose">
|
||||
<input type="hidden" name="OBJID" id="OBJID" value="${info.objid}">
|
||||
|
||||
<section class="business_staff_popup_min_width">
|
||||
<div class="plm_menu_name">
|
||||
<h2>
|
||||
<span><%=menuName%></span>
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
<div id="EntirePopupFormWrap">
|
||||
<div class="two_column_container">
|
||||
<!-- 왼쪽: ECR 요청 정보 -->
|
||||
<div>
|
||||
<div class="form_popup_title">
|
||||
<span>ECR 요청 정보</span>
|
||||
</div>
|
||||
<table class="">
|
||||
<colgroup>
|
||||
<col width="90%" />
|
||||
</colgroup>
|
||||
<tr>
|
||||
<td>
|
||||
<table class="pmsPopuptable">
|
||||
<colgroup>
|
||||
<col width="25%" />
|
||||
<col width="25%" />
|
||||
<col width="25%" />
|
||||
<col width="25%" />
|
||||
</colgroup>
|
||||
<tr>
|
||||
<td class="input_title"><label>ECR No</label></td>
|
||||
<td>${info.ecr_no}</td>
|
||||
<td class="input_title"><label>요청일</label></td>
|
||||
<td>${info.request_date}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label>요청자</label></td>
|
||||
<td>${info.requester_name}</td>
|
||||
<td class="input_title"><label>완료요청일</label></td>
|
||||
<td>${info.due_date}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label>품번</label></td>
|
||||
<td>${info.part_no}</td>
|
||||
<td class="input_title"><label>품명</label></td>
|
||||
<td>${info.part_name}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label>조치부서</label></td>
|
||||
<td>${info.action_dept_name}</td>
|
||||
<td class="input_title"><label>조치담당자</label></td>
|
||||
<td>${info.action_manager_name}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label>이슈사항</label></td>
|
||||
<td colspan="3">
|
||||
<textarea rows="4" style="width:100%;" readonly>${info.issue_content}</textarea>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label>비고</label></td>
|
||||
<td colspan="3">
|
||||
<textarea rows="2" style="width:100%;" readonly>${info.remark}</textarea>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<!-- 오른쪽: 조치결과 등록 -->
|
||||
<div>
|
||||
<div class="form_popup_title">
|
||||
<span>조치결과 등록</span>
|
||||
</div>
|
||||
<table class="">
|
||||
<colgroup>
|
||||
<col width="110%" />
|
||||
</colgroup>
|
||||
<tr>
|
||||
<td>
|
||||
<table class="pmsPopuptable">
|
||||
<colgroup>
|
||||
<col width="25%" />
|
||||
<col width="25%" />
|
||||
<col width="25%" />
|
||||
<col width="25%" />
|
||||
</colgroup>
|
||||
<tr>
|
||||
<td class="input_title"><label>조치자 <span style="color:red;">*</span></label></td>
|
||||
<td>
|
||||
<select name="ACTION_USER_ID" id="ACTION_USER_ID" class="select2" required reqTitle="조치자" type="select" style="width:100%;">
|
||||
<option value="">선택</option>
|
||||
${code_map.action_user_id}
|
||||
</select>
|
||||
</td>
|
||||
<td class="input_title"><label>완료일 <span style="color:red;">*</span></label></td>
|
||||
<td>
|
||||
<input type="text" name="COMPLETE_DATE" id="COMPLETE_DATE" class="date_icon" value="<%=completeDate%>" required reqTitle="완료일">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label>조치내용 <span style="color:red;">*</span></label></td>
|
||||
<td colspan="3">
|
||||
<textarea name="ACTION_CONTENT" id="ACTION_CONTENT" rows="4" style="width:100%;" required reqTitle="조치내용" type="text">${info.action_content}</textarea>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label>이미지</label></td>
|
||||
<td colspan="3">
|
||||
<div style="margin-bottom: 5px;">
|
||||
<input type="file" name="imgFile1" id="imgFile1" multiple accept="image/*" style="width:80%;">
|
||||
<input type="button" id="btnImgUpload" value="업로드" class="plm_btns">
|
||||
</div>
|
||||
<div id="imgFileArea" style="min-height:50px; border:1px dashed #ccc; border-radius:4px; padding:5px; background:#fafafa;">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label>첨부파일</label></td>
|
||||
<td colspan="3">
|
||||
<div style="margin-bottom: 5px;">
|
||||
<input type="file" name="file1" id="file1" multiple style="width:80%;">
|
||||
<input type="button" id="btnUpload" value="업로드" class="plm_btns">
|
||||
</div>
|
||||
<div id="srFileAreaTable" class="spec_data_in_table">
|
||||
<div style="overflow-y:auto;">
|
||||
<table class="fileListscrollThead" style="width:100% !important;">
|
||||
<colgroup>
|
||||
<col width="30px">
|
||||
<col width="*">
|
||||
<col width="80px">
|
||||
<col width="60px">
|
||||
</colgroup>
|
||||
<tr>
|
||||
<td>No</td>
|
||||
<td>파일명</td>
|
||||
<td>등록일</td>
|
||||
<td>Size</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div style="max-height: 80px; overflow-y: auto; border-bottom: 1px solid #cacaca;">
|
||||
<table class="fileListscrollTbody">
|
||||
<colgroup>
|
||||
<col width="30px">
|
||||
<col width="*">
|
||||
<col width="80px">
|
||||
<col width="60px">
|
||||
</colgroup>
|
||||
<tbody id="srFileArea">
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="popup_content">
|
||||
<h3 style="margin-bottom:10px;">■ ECR 요청 정보</h3>
|
||||
<table class="plm_form_table">
|
||||
<colgroup>
|
||||
<col width="100px"><col width="*">
|
||||
<col width="100px"><col width="*">
|
||||
<col width="100px"><col width="*">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="label">ECR No</td>
|
||||
<td><input type="text" name="ECR_NO" id="ECR_NO" value="<%=CommonUtils.checkNull(info.get("ECR_NO"))%>" readonly></td>
|
||||
<td class="label">요청일</td>
|
||||
<td><input type="text" name="REQUEST_DATE" id="REQUEST_DATE" value="<%=CommonUtils.checkNull(info.get("REQUEST_DATE"))%>" readonly></td>
|
||||
<td class="label">요청자</td>
|
||||
<td><input type="text" name="REQUESTER_NAME" id="REQUESTER_NAME" value="<%=CommonUtils.checkNull(info.get("REQUESTER_NAME"))%>" readonly></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="label">품번</td>
|
||||
<td><input type="text" name="PART_NO" id="PART_NO" value="<%=CommonUtils.checkNull(info.get("PART_NO"))%>" readonly></td>
|
||||
<td class="label">품명</td>
|
||||
<td colspan="3"><input type="text" name="PART_NAME" id="PART_NAME" value="<%=CommonUtils.checkNull(info.get("PART_NAME"))%>" style="width:100%;" readonly></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="label">완료요청일</td>
|
||||
<td><input type="text" name="DUE_DATE" id="DUE_DATE" value="<%=CommonUtils.checkNull(info.get("DUE_DATE"))%>" readonly></td>
|
||||
<td class="label">조치부서</td>
|
||||
<td><input type="text" name="ACTION_DEPT" id="ACTION_DEPT" value="<%=CommonUtils.checkNull(info.get("ACTION_DEPT"))%>" readonly></td>
|
||||
<td class="label">조치담당자</td>
|
||||
<td><input type="text" name="ACTION_MANAGER_NAME" id="ACTION_MANAGER_NAME" value="<%=CommonUtils.checkNull(info.get("ACTION_MANAGER_NAME"))%>" readonly></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="label">이슈사항</td>
|
||||
<td colspan="5"><textarea name="ISSUE_CONTENT" id="ISSUE_CONTENT" rows="3" style="width:100%;" readonly><%=CommonUtils.checkNull(info.get("ISSUE_CONTENT"))%></textarea></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3 style="margin:20px 0 10px 0;">■ 조치 결과</h3>
|
||||
<table class="plm_form_table">
|
||||
<colgroup>
|
||||
<col width="100px"><col width="*">
|
||||
<col width="100px"><col width="*">
|
||||
<col width="100px"><col width="*">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="label">조치자</td>
|
||||
<td><input type="text" name="ACTION_USER_NAME" id="ACTION_USER_NAME" value="<%=CommonUtils.checkNull(info.get("ACTION_USER_NAME"))%>"></td>
|
||||
<td class="label">완료일</td>
|
||||
<td><input type="text" name="COMPLETE_DATE" id="COMPLETE_DATE" class="date_icon" value="<%=CommonUtils.checkNull(info.get("COMPLETE_DATE"))%>"></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="label">조치내용</td>
|
||||
<td colspan="5"><textarea name="ACTION_CONTENT" id="ACTION_CONTENT" rows="4" style="width:100%;"><%=CommonUtils.checkNull(info.get("ACTION_CONTENT"))%></textarea></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="label">비고</td>
|
||||
<td colspan="5"><textarea name="REMARK" id="REMARK" rows="2" style="width:100%;"><%=CommonUtils.checkNull(info.get("REMARK"))%></textarea></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="btn_wrap">
|
||||
<div class="plm_btn_wrap_center">
|
||||
<input type="button" value="저장" id="btnSave" class="plm_btns">
|
||||
<input type="button" value="닫기" id="btnClose" class="plm_btns">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
@@ -592,16 +592,31 @@ public class QualityController {
|
||||
*/
|
||||
@RequestMapping("/quality/ecrList.do")
|
||||
public String qualityEcrList(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
|
||||
Map code_map = new HashMap();
|
||||
try {
|
||||
// 요청자 목록
|
||||
code_map.put("requester_id", commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)paramMap.get("search_requester")), "common.getUserselect"));
|
||||
// 부서 목록
|
||||
code_map.put("dept_cd", commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)paramMap.get("search_action_dept")), "common.getDeptselect"));
|
||||
// 조치담당자 목록
|
||||
code_map.put("action_manager_id", commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)paramMap.get("search_action_manager")), "common.getUserselect"));
|
||||
// 조치자 목록
|
||||
code_map.put("action_user_id", commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)paramMap.get("search_action_user")), "common.getUserselect"));
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
request.setAttribute("code_map", code_map);
|
||||
return "/quality/ecrList";
|
||||
}
|
||||
|
||||
/**
|
||||
* ECR 관리 그리드 목록 조회
|
||||
*/
|
||||
@ResponseBody
|
||||
@RequestMapping("/quality/ecrGridList.do")
|
||||
public String ecrGridList(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
|
||||
request.setAttribute("RESULT", CommonUtils.getJsonArray(service.getEcrList(request, paramMap)));
|
||||
return "/ajax/ajaxResult";
|
||||
public Map ecrGridList(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
|
||||
commonService.selectListPagingNew("quality.getEcrList", request, paramMap);
|
||||
return paramMap;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -609,17 +624,67 @@ public class QualityController {
|
||||
*/
|
||||
@RequestMapping("/quality/ecrRegistFormPopUp.do")
|
||||
public String ecrRegistFormPopUp(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
|
||||
Map code_map = new HashMap();
|
||||
Map info = new HashMap();
|
||||
|
||||
try {
|
||||
String objId = CommonUtils.checkNull(paramMap.get("OBJID"));
|
||||
if(!objId.isEmpty()) {
|
||||
info = service.getEcrInfo(paramMap);
|
||||
request.setAttribute("info", info);
|
||||
}
|
||||
// 부서 목록
|
||||
code_map.put("dept_cd", commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)info.get("action_dept")), "common.getDeptselect"));
|
||||
// 요청자 목록
|
||||
code_map.put("requester_id", commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)info.get("requester_id")), "common.getUserselect"));
|
||||
// 조치담당자 목록
|
||||
code_map.put("action_manager_id", commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)info.get("action_manager_id")), "common.getUserselect"));
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
request.setAttribute("code_map", code_map);
|
||||
return "/quality/ecrRegistFormPopUp";
|
||||
}
|
||||
|
||||
/**
|
||||
* ECR 저장
|
||||
*/
|
||||
@ResponseBody
|
||||
@RequestMapping("/quality/saveEcr.do")
|
||||
public Map saveEcr(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
|
||||
return service.saveEcr(request, paramMap);
|
||||
}
|
||||
|
||||
/**
|
||||
* ECR 결과등록 팝업
|
||||
*/
|
||||
@RequestMapping("/quality/ecrResultFormPopUp.do")
|
||||
public String ecrResultFormPopUp(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
|
||||
Map info = service.getEcrInfo(paramMap);
|
||||
request.setAttribute("info", info);
|
||||
Map code_map = new HashMap();
|
||||
Map info = new HashMap();
|
||||
|
||||
try {
|
||||
info = service.getEcrInfo(paramMap);
|
||||
request.setAttribute("info", info);
|
||||
|
||||
// 조치자 목록
|
||||
code_map.put("action_user_id", commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)info.get("action_user_id")), "common.getUserselect"));
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
request.setAttribute("code_map", code_map);
|
||||
return "/quality/ecrResultFormPopUp";
|
||||
}
|
||||
|
||||
/**
|
||||
* ECR 결과 저장
|
||||
*/
|
||||
@ResponseBody
|
||||
@RequestMapping("/quality/saveEcrResult.do")
|
||||
public Map saveEcrResult(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
|
||||
return service.saveEcrResult(request, paramMap);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1339,28 +1339,30 @@
|
||||
<select id="getEcrList" parameterType="map" resultType="map">
|
||||
SELECT ECR.OBJID
|
||||
, ECR.ECR_NO
|
||||
, TO_CHAR(ECR.REQUEST_DATE, 'YYYY-MM-DD') AS REQUEST_DATE
|
||||
, ECR.REQUEST_DATE
|
||||
, ECR.REQUESTER_ID
|
||||
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = ECR.REQUESTER_ID) AS REQUESTER_NAME
|
||||
, ECR.PART_NO
|
||||
, ECR.PART_NAME
|
||||
, ECR.ISSUE_CONTENT
|
||||
, TO_CHAR(ECR.DUE_DATE, 'YYYY-MM-DD') AS DUE_DATE
|
||||
, ECR.DUE_DATE
|
||||
, ECR.ACTION_DEPT
|
||||
, (SELECT DEPT_NAME FROM DEPT_INFO WHERE DEPT_CODE = ECR.ACTION_DEPT) AS ACTION_DEPT_NAME
|
||||
, ECR.ACTION_MANAGER_ID
|
||||
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = ECR.ACTION_MANAGER_ID) AS ACTION_MANAGER_NAME
|
||||
, ECR.ACTION_USER_ID
|
||||
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = ECR.ACTION_USER_ID) AS ACTION_USER_NAME
|
||||
, ECR.ACTION_CONTENT
|
||||
, TO_CHAR(ECR.COMPLETE_DATE, 'YYYY-MM-DD') AS COMPLETE_DATE
|
||||
, CASE WHEN ECR.ATTACH_FILE_OBJID IS NOT NULL THEN 'Y' ELSE 'N' END AS ATTACH_FILE
|
||||
, ECR.COMPLETE_DATE
|
||||
, (SELECT COUNT(*) FROM ATTACH_FILE_INFO AFI WHERE AFI.TARGET_OBJID = ECR.OBJID AND AFI.DOC_TYPE = 'ECR_RESULT_IMAGE' AND STATUS = 'Active') AS IMAGE_FILE
|
||||
, (SELECT COUNT(*) FROM ATTACH_FILE_INFO AFI WHERE AFI.TARGET_OBJID = ECR.OBJID AND AFI.DOC_TYPE = 'ECR_RESULT' AND STATUS = 'Active') AS ATTACH_FILE
|
||||
FROM PMS_QUALITY_ECR ECR
|
||||
WHERE 1=1
|
||||
<if test="search_request_date_from != null and search_request_date_from != ''">
|
||||
AND ECR.REQUEST_DATE >= TO_DATE(#{search_request_date_from}, 'YYYY-MM-DD')
|
||||
AND ECR.REQUEST_DATE >= #{search_request_date_from}
|
||||
</if>
|
||||
<if test="search_request_date_to != null and search_request_date_to != ''">
|
||||
AND ECR.REQUEST_DATE <![CDATA[<=]]> TO_DATE(#{search_request_date_to}, 'YYYY-MM-DD')
|
||||
AND ECR.REQUEST_DATE <![CDATA[<=]]> #{search_request_date_to}
|
||||
</if>
|
||||
<if test="search_requester != null and search_requester != ''">
|
||||
AND (
|
||||
@@ -1375,10 +1377,10 @@
|
||||
AND UPPER(ECR.PART_NAME) LIKE UPPER('%' || #{search_part_name} || '%')
|
||||
</if>
|
||||
<if test="search_due_date_from != null and search_due_date_from != ''">
|
||||
AND ECR.DUE_DATE >= TO_DATE(#{search_due_date_from}, 'YYYY-MM-DD')
|
||||
AND ECR.DUE_DATE >= #{search_due_date_from}
|
||||
</if>
|
||||
<if test="search_due_date_to != null and search_due_date_to != ''">
|
||||
AND ECR.DUE_DATE <![CDATA[<=]]> TO_DATE(#{search_due_date_to}, 'YYYY-MM-DD')
|
||||
AND ECR.DUE_DATE <![CDATA[<=]]> #{search_due_date_to}
|
||||
</if>
|
||||
<if test="search_action_dept != null and search_action_dept != ''">
|
||||
AND UPPER(ECR.ACTION_DEPT) LIKE UPPER('%' || #{search_action_dept} || '%')
|
||||
@@ -1396,10 +1398,10 @@
|
||||
)
|
||||
</if>
|
||||
<if test="search_complete_date_from != null and search_complete_date_from != ''">
|
||||
AND ECR.COMPLETE_DATE >= TO_DATE(#{search_complete_date_from}, 'YYYY-MM-DD')
|
||||
AND ECR.COMPLETE_DATE >= #{search_complete_date_from}
|
||||
</if>
|
||||
<if test="search_complete_date_to != null and search_complete_date_to != ''">
|
||||
AND ECR.COMPLETE_DATE <![CDATA[<=]]> TO_DATE(#{search_complete_date_to}, 'YYYY-MM-DD')
|
||||
AND ECR.COMPLETE_DATE <![CDATA[<=]]> #{search_complete_date_to}
|
||||
</if>
|
||||
ORDER BY ECR.REQUEST_DATE DESC, ECR.REG_DATE DESC
|
||||
</select>
|
||||
@@ -1408,20 +1410,22 @@
|
||||
<select id="getEcrInfo" parameterType="map" resultType="map">
|
||||
SELECT ECR.OBJID
|
||||
, ECR.ECR_NO
|
||||
, TO_CHAR(ECR.REQUEST_DATE, 'YYYY-MM-DD') AS REQUEST_DATE
|
||||
, ECR.REQUEST_DATE
|
||||
, ECR.REQUESTER_ID
|
||||
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = ECR.REQUESTER_ID) AS REQUESTER_NAME
|
||||
, ECR.PART_OBJID
|
||||
, ECR.PART_NO
|
||||
, ECR.PART_NAME
|
||||
, ECR.ISSUE_CONTENT
|
||||
, TO_CHAR(ECR.DUE_DATE, 'YYYY-MM-DD') AS DUE_DATE
|
||||
, ECR.DUE_DATE
|
||||
, ECR.ACTION_DEPT
|
||||
, (SELECT DEPT_NAME FROM DEPT_INFO WHERE DEPT_CODE = ECR.ACTION_DEPT) AS ACTION_DEPT_NAME
|
||||
, ECR.ACTION_MANAGER_ID
|
||||
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = ECR.ACTION_MANAGER_ID) AS ACTION_MANAGER_NAME
|
||||
, ECR.ACTION_USER_ID
|
||||
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = ECR.ACTION_USER_ID) AS ACTION_USER_NAME
|
||||
, ECR.ACTION_CONTENT
|
||||
, TO_CHAR(ECR.COMPLETE_DATE, 'YYYY-MM-DD') AS COMPLETE_DATE
|
||||
, ECR.COMPLETE_DATE
|
||||
, ECR.ATTACH_FILE_OBJID
|
||||
, ECR.REMARK
|
||||
, ECR.WRITER
|
||||
@@ -1430,6 +1434,79 @@
|
||||
WHERE ECR.OBJID = #{OBJID}
|
||||
</select>
|
||||
|
||||
<!-- ECR 시퀀스 조회 (ECR_NO 생성용: ECR-YYYYMM-순번) -->
|
||||
<select id="getEcrSeq" resultType="int">
|
||||
SELECT COALESCE(MAX(CAST(SUBSTRING(ECR_NO FROM 'ECR-[0-9]{6}-([0-9]+)') AS INTEGER)), 0) + 1
|
||||
FROM PMS_QUALITY_ECR
|
||||
WHERE ECR_NO LIKE 'ECR-' || #{YYYYMM} || '-%'
|
||||
</select>
|
||||
|
||||
<!-- ECR 등록 -->
|
||||
<insert id="insertEcr" parameterType="map">
|
||||
INSERT INTO PMS_QUALITY_ECR (
|
||||
OBJID
|
||||
, ECR_NO
|
||||
, REQUEST_DATE
|
||||
, REQUESTER_ID
|
||||
, PART_OBJID
|
||||
, PART_NO
|
||||
, PART_NAME
|
||||
, ISSUE_CONTENT
|
||||
, DUE_DATE
|
||||
, ACTION_DEPT
|
||||
, ACTION_MANAGER_ID
|
||||
, ATTACH_FILE_OBJID
|
||||
, REMARK
|
||||
, WRITER
|
||||
, REG_DATE
|
||||
) VALUES (
|
||||
#{OBJID}
|
||||
, #{ECR_NO}
|
||||
, #{REQUEST_DATE}
|
||||
, #{REQUESTER_ID}
|
||||
, #{PART_OBJID}
|
||||
, #{PART_NO}
|
||||
, #{PART_NAME}
|
||||
, #{ISSUE_CONTENT}
|
||||
, #{DUE_DATE}
|
||||
, #{ACTION_DEPT}
|
||||
, #{ACTION_MANAGER_ID}
|
||||
, #{ATTACH_FILE_OBJID}
|
||||
, #{REMARK}
|
||||
, #{WRITER}
|
||||
, NOW()
|
||||
)
|
||||
</insert>
|
||||
|
||||
<!-- ECR 수정 -->
|
||||
<update id="updateEcr" parameterType="map">
|
||||
UPDATE PMS_QUALITY_ECR SET
|
||||
REQUEST_DATE = #{REQUEST_DATE}
|
||||
, REQUESTER_ID = #{REQUESTER_ID}
|
||||
, PART_OBJID = #{PART_OBJID}
|
||||
, PART_NO = #{PART_NO}
|
||||
, PART_NAME = #{PART_NAME}
|
||||
, ISSUE_CONTENT = #{ISSUE_CONTENT}
|
||||
, DUE_DATE = #{DUE_DATE}
|
||||
, ACTION_DEPT = #{ACTION_DEPT}
|
||||
, ACTION_MANAGER_ID = #{ACTION_MANAGER_ID}
|
||||
, REMARK = #{REMARK}
|
||||
, MODIFIER = #{WRITER}
|
||||
, MOD_DATE = NOW()
|
||||
WHERE OBJID = #{OBJID}
|
||||
</update>
|
||||
|
||||
<!-- ECR 결과 저장 -->
|
||||
<update id="updateEcrResult" parameterType="map">
|
||||
UPDATE PMS_QUALITY_ECR SET
|
||||
ACTION_USER_ID = #{ACTION_USER_ID}
|
||||
, ACTION_CONTENT = #{ACTION_CONTENT}
|
||||
, COMPLETE_DATE = #{COMPLETE_DATE}
|
||||
, MODIFIER = #{MODIFIER}
|
||||
, MOD_DATE = NOW()
|
||||
WHERE OBJID = #{OBJID}
|
||||
</update>
|
||||
|
||||
<!-- =====================================================
|
||||
수입검사 상세 그리드 목록 (입고 결과 기준)
|
||||
===================================================== -->
|
||||
|
||||
@@ -1039,23 +1039,7 @@ public class QualityService extends BaseService{
|
||||
// =====================================================
|
||||
// ECR 관리
|
||||
// =====================================================
|
||||
|
||||
/**
|
||||
* ECR 목록 조회
|
||||
*/
|
||||
public List getEcrList(HttpServletRequest request, Map paramMap){
|
||||
List resultList = new ArrayList();
|
||||
SqlSession sqlSession = null;
|
||||
try{
|
||||
sqlSession = SqlMapConfig.getInstance().getSqlSession();
|
||||
resultList = sqlSession.selectList("quality.getEcrList", paramMap);
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
}finally{
|
||||
sqlSession.close();
|
||||
}
|
||||
return resultList;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* ECR 상세 조회
|
||||
@@ -1074,6 +1058,96 @@ public class QualityService extends BaseService{
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* ECR 저장 (등록/수정)
|
||||
*/
|
||||
public Map saveEcr(HttpServletRequest request, Map paramMap){
|
||||
Map resultMap = new HashMap();
|
||||
SqlSession sqlSession = null;
|
||||
|
||||
try{
|
||||
sqlSession = SqlMapConfig.getInstance().getSqlSession();
|
||||
|
||||
// 작성자 정보 설정
|
||||
PersonBean person = (PersonBean) request.getSession().getAttribute(Constants.PERSON_BEAN);
|
||||
String writer = person != null ? person.getUserId() : "";
|
||||
|
||||
String objId = CommonUtils.checkNull(paramMap.get("OBJID"));
|
||||
String isNew = CommonUtils.checkNull(paramMap.get("IS_NEW"));
|
||||
paramMap.put("WRITER", writer);
|
||||
|
||||
// IS_NEW 플래그로 신규/수정 구분
|
||||
if("true".equals(isNew)){
|
||||
// 신규 등록
|
||||
if(objId.isEmpty()){
|
||||
objId = CommonUtils.checkNull(CommonUtils.createObjId());
|
||||
paramMap.put("OBJID", objId);
|
||||
}
|
||||
|
||||
// ECR_NO 생성 (ECR-YYYYMM-순번) 예) ECR-202512-01
|
||||
String yyyymm = new java.text.SimpleDateFormat("yyyyMM").format(new java.util.Date());
|
||||
paramMap.put("YYYYMM", yyyymm);
|
||||
Integer seq = sqlSession.selectOne("quality.getEcrSeq", paramMap);
|
||||
if(seq == null) seq = 1;
|
||||
String ecrNo = "ECR-" + yyyymm + "-" + String.format("%02d", seq);
|
||||
paramMap.put("ECR_NO", ecrNo);
|
||||
paramMap.put("ATTACH_FILE_OBJID", objId);
|
||||
|
||||
sqlSession.insert("quality.insertEcr", paramMap);
|
||||
} else {
|
||||
// 수정
|
||||
sqlSession.update("quality.updateEcr", paramMap);
|
||||
}
|
||||
|
||||
sqlSession.commit();
|
||||
resultMap.put("RESULT", "SUCCESS");
|
||||
resultMap.put("MESSAGE", "저장되었습니다.");
|
||||
|
||||
}catch(Exception e){
|
||||
if(sqlSession != null) sqlSession.rollback();
|
||||
resultMap.put("RESULT", "FAIL");
|
||||
resultMap.put("MESSAGE", e.getMessage());
|
||||
e.printStackTrace();
|
||||
}finally{
|
||||
if(sqlSession != null) sqlSession.close();
|
||||
}
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* ECR 결과 저장
|
||||
*/
|
||||
public Map saveEcrResult(HttpServletRequest request, Map paramMap){
|
||||
Map resultMap = new HashMap();
|
||||
SqlSession sqlSession = null;
|
||||
|
||||
try{
|
||||
sqlSession = SqlMapConfig.getInstance().getSqlSession();
|
||||
|
||||
// 작성자 정보 설정
|
||||
PersonBean person = (PersonBean) request.getSession().getAttribute(Constants.PERSON_BEAN);
|
||||
String writer = person != null ? person.getUserId() : "";
|
||||
paramMap.put("MODIFIER", writer);
|
||||
|
||||
sqlSession.update("quality.updateEcrResult", paramMap);
|
||||
|
||||
sqlSession.commit();
|
||||
resultMap.put("RESULT", "SUCCESS");
|
||||
resultMap.put("MESSAGE", "저장되었습니다.");
|
||||
|
||||
}catch(Exception e){
|
||||
if(sqlSession != null) sqlSession.rollback();
|
||||
resultMap.put("RESULT", "FAIL");
|
||||
resultMap.put("MESSAGE", e.getMessage());
|
||||
e.printStackTrace();
|
||||
}finally{
|
||||
if(sqlSession != null) sqlSession.close();
|
||||
}
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/*edhwang start*/
|
||||
|
||||
/*edhwang end*/
|
||||
|
||||
Reference in New Issue
Block a user