diff --git a/.classpath b/.classpath index a50c6c85..36064bc1 100644 --- a/.classpath +++ b/.classpath @@ -12,11 +12,7 @@ - - - - - + diff --git a/build.gradle b/build.gradle index 3c3f57e2..44208df4 100644 --- a/build.gradle +++ b/build.gradle @@ -97,6 +97,14 @@ dependencies implementation group: 'commons-io', name: 'commons-io', version: '2.6' + // apache poi lib + // implementation 'org.apache.poi:poi-ooxml:5.3.0' + + // apache poi lib + implementation 'org.apache.poi:poi:4.1.2' + implementation 'org.apache.poi:poi-ooxml:4.1.2' + implementation 'org.apache.poi:poi-scratchpad:4.1.2' + implementation 'org.apache.poi:poi-examples:4.1.2' } diff --git a/src/main/java/com/urpsys/basefront/urpBaseJspApplication.java b/src/main/java/com/urpsys/basefront/urpBaseJspApplication.java index 57acdef6..ef38466e 100644 --- a/src/main/java/com/urpsys/basefront/urpBaseJspApplication.java +++ b/src/main/java/com/urpsys/basefront/urpBaseJspApplication.java @@ -70,6 +70,13 @@ public class urpBaseJspApplication System.out.println("############# keiti_prod Env ###################"); System.out.println("################################################"); } + // 2025.09.12 나혁제 킨텍스 추가 + else if(activeProfile.equals("kintex_prod")) + { + System.out.println("################################################"); + System.out.println("############# kintex_prod Env ##################"); + System.out.println("################################################"); + } else { System.out.println("################################################"); diff --git a/src/main/java/com/urpsys/itmsfront/rem/controller/ResourceManagerController.java b/src/main/java/com/urpsys/itmsfront/rem/controller/ResourceManagerController.java index bf748a77..1597dc11 100644 --- a/src/main/java/com/urpsys/itmsfront/rem/controller/ResourceManagerController.java +++ b/src/main/java/com/urpsys/itmsfront/rem/controller/ResourceManagerController.java @@ -1,7 +1,14 @@ package com.urpsys.itmsfront.rem.controller; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.PrintWriter; import java.util.ArrayList; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -13,10 +20,12 @@ import javax.servlet.http.HttpServletResponse; import org.egovframe.rte.fdl.property.EgovPropertyService; import org.egovframe.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; +import org.springframework.util.FileCopyUtils; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestBody; @@ -31,9 +40,11 @@ import org.springmodules.validation.commons.DefaultBeanValidator; import com.urpsys.basefront.common.util.CommonUtil; import com.urpsys.basefront.common.util.ConvertUtils; import com.urpsys.basefront.common.util.RestApiCallUtil; +import com.urpsys.basefront.common.egov.util.EgovBrowserUtil; import com.urpsys.basefront.common.egov.util.EgovDateUtil; import com.urpsys.basefront.common.egov.util.EgovFileMngUtil; import com.urpsys.basefront.common.egov.util.EgovStringUtil; +import com.urpsys.basefront.common.egov.util.EgovWebUtil; import com.urpsys.basefront.common.service.CommonService; import com.urpsys.basefront.domain.ComDefaultVO; import com.urpsys.basefront.domain.FileVO; @@ -47,6 +58,11 @@ import com.urpsys.itmsfront.rem.domain.AssetVo; import com.urpsys.itmsfront.rem.domain.InResourceManage; import com.urpsys.itmsfront.rem.domain.ResourceManage; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + import lombok.extern.slf4j.Slf4j; @@ -91,7 +107,9 @@ public class ResourceManagerController @Autowired private Environment env; - + @Value("${custom.file_store}") + private String storePathString; // 파일저장 물리적주소 + /** * 자산 목록을 조회한다. * @author urp 인프라본부 나혁제 @@ -118,6 +136,19 @@ public class ResourceManagerController resourceManage.setLastIndex(paginationInfo.getLastRecordIndex()); resourceManage.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + String strCurDate = EgovDateUtil.getToday(); + + if(resourceManage.getSdateEos() == null || resourceManage.getSdateEos().equals("")) + { + resourceManage.setSdateEos(EgovDateUtil.formatDate(EgovDateUtil.formatDate(EgovDateUtil.addMonth(strCurDate, -12), "-"), "-")); + } + + if(resourceManage.getEdateEos() == null || resourceManage.getEdateEos().equals("")) + { + resourceManage.setEdateEos(EgovDateUtil.formatDate("2999-12-31", "-")); + } + + // Body Setting Start --------------------------------- bodyMap = ConvertUtils.convertToMapAll(resourceManage); // Body Setting End --------------------------------- @@ -175,6 +206,212 @@ public class ResourceManagerController return "uritms-tiles2/rem/ResourceList"; } + /** + * 자산 목록을 조회한다. + * @author urp 인프라본부 나혁제 + * 작성일 : 2025.01.31 + */ + @RequestMapping("/rem/SelectResourceExecl.do") + public void SelectResourceExCel( @ModelAttribute("resourceManage") ResourceManage resourceManage + , ModelMap model + , HttpServletRequest request + , HttpServletResponse response ) throws Exception + { + log.info(">>>>>>>>>>>>>>> /rem/SelectResourceExecl.do <<<<<<<<<<<<<<<"); + + // api in/out map 정의 + Map bodyMap = new LinkedHashMap(); + Map returnMap = new LinkedHashMap(); + + // Body Setting Start --------------------------------- + bodyMap = ConvertUtils.convertToMapAll(resourceManage); + // Body Setting End --------------------------------- + + // RestApi Call Start --------------------------------- + returnMap = restApiCallUtil.RestApiCall(bodyMap, "/rem/searchAssetExcel.do"); + // RestApi Call End --------------------------------- + + // Return Data Setting Start -------------------------- + List> resultList = (List>)returnMap.get("resultList"); + // Return Data Setting End -------------------------- + + String strFileNm = "assetExcelSave"+CommonUtil.getKST("yyyyMMddHHmmss")+".xlsx"; + + String filePath = storePathString + "/" +strFileNm; + Workbook workbook = new XSSFWorkbook(); + Sheet sheet = workbook.createSheet("자산"); + + // 헤더 생성 + Row headerRow = sheet.createRow(0); + + headerRow.createCell(0 ).setCellValue("자산번호"); + headerRow.createCell(1 ).setCellValue("대분류"); + headerRow.createCell(2 ).setCellValue("중분류"); + headerRow.createCell(3 ).setCellValue("소분류"); + headerRow.createCell(4 ).setCellValue("자산명"); + headerRow.createCell(5 ).setCellValue("도입일자"); + headerRow.createCell(6 ).setCellValue("제조사"); + headerRow.createCell(7 ).setCellValue("제품명"); + headerRow.createCell(8 ).setCellValue("도입가격"); + headerRow.createCell(9 ).setCellValue("자산상태"); + headerRow.createCell(10).setCellValue("유지보수여부"); + headerRow.createCell(11).setCellValue("유지보수요율"); + headerRow.createCell(12).setCellValue("유지보수점검주기"); + headerRow.createCell(13).setCellValue("유지보수시작일"); + headerRow.createCell(14).setCellValue("유지보수종료일"); + headerRow.createCell(15).setCellValue("버전"); + headerRow.createCell(16).setCellValue("시리얼"); + headerRow.createCell(17).setCellValue("호스트명"); + headerRow.createCell(18).setCellValue("EOS일"); + headerRow.createCell(19).setCellValue("용도"); + headerRow.createCell(20).setCellValue("비고"); + headerRow.createCell(21).setCellValue("IP"); + headerRow.createCell(22).setCellValue("CPU"); + headerRow.createCell(23).setCellValue("DISK"); + headerRow.createCell(24).setCellValue("MEM"); + headerRow.createCell(25).setCellValue("점검대상여부"); + headerRow.createCell(26).setCellValue("업무명"); + headerRow.createCell(27).setCellValue("무상유지보수시작일자"); + headerRow.createCell(28).setCellValue("무상유지보수종료일자"); + headerRow.createCell(29).setCellValue("라이센스종류"); + headerRow.createCell(30).setCellValue("라이센스종료일자"); + headerRow.createCell(31).setCellValue("EOL일자"); + headerRow.createCell(32).setCellValue("포트정보"); + headerRow.createCell(33).setCellValue("실사용자"); + + + // 데이터 입력 + int rowNum = 1; + for(Map vo: resultList ) + { + Row row = sheet.createRow(rowNum++); + + row.createCell(0 ).setCellValue(vo.get("vcAssetId" )==null ? "" : (String)vo.get("vcAssetId" )); + row.createCell(1 ).setCellValue(vo.get("vcCate1" )==null ? "" : (String)vo.get("vcCate1" )); + row.createCell(2 ).setCellValue(vo.get("vcCate2" )==null ? "" : (String)vo.get("vcCate2" )); + row.createCell(3 ).setCellValue(vo.get("vcCate3" )==null ? "" : (String)vo.get("vcCate3" )); + row.createCell(4 ).setCellValue(vo.get("vcAssetName" )==null ? "" : (String)vo.get("vcAssetName" )); + row.createCell(5 ).setCellValue(vo.get("dtPurchaseDatetime" )==null ? "" : (String)vo.get("dtPurchaseDatetime" )); + row.createCell(6 ).setCellValue(vo.get("vcVendor" )==null ? "" : (String)vo.get("vcVendor" )); + row.createCell(7 ).setCellValue(vo.get("vcModel" )==null ? "" : (String)vo.get("vcModel" )); + row.createCell(8 ).setCellValue(vo.get("inPrice" )==null ? 0 : (int)vo.get("inPrice" )); + row.createCell(9 ).setCellValue(vo.get("inAssetStatus" )==null ? "" : (String)vo.get("inAssetStatus" )); + row.createCell(10).setCellValue(vo.get("inMasTarget" )==null ? "" : (String)vo.get("inMasTarget" )); + row.createCell(11).setCellValue(vo.get("inMasRate" )==null ? 0 : (int)vo.get("inMasRate" )); + row.createCell(12).setCellValue(vo.get("vcMasCheckPeriod" )==null ? "" : (String)vo.get("vcMasCheckPeriod" )); + row.createCell(13).setCellValue(vo.get("dtMasStart" )==null ? "" : (String)vo.get("dtMasStart" )); + row.createCell(14).setCellValue(vo.get("dtMasFinish" )==null ? "" : (String)vo.get("dtMasFinish" )); + row.createCell(15).setCellValue(vo.get("vcVersion" )==null ? "" : (String)vo.get("vcVersion" )); + row.createCell(16).setCellValue(vo.get("vcAssetSerial" )==null ? "" : (String)vo.get("vcAssetSerial" )); + row.createCell(17).setCellValue(vo.get("vcHost" )==null ? "" : (String)vo.get("vcHost" )); + row.createCell(18).setCellValue(vo.get("dtEos" )==null ? "" : (String)vo.get("dtEos" )); + row.createCell(19).setCellValue(vo.get("txUsage" )==null ? "" : (String)vo.get("txUsage" )); + row.createCell(20).setCellValue(vo.get("txAssetDesc" )==null ? "" : (String)vo.get("txAssetDesc" )); + row.createCell(21).setCellValue(vo.get("vcIp" )==null ? "" : (String)vo.get("vcIp" )); + row.createCell(22).setCellValue(vo.get("vcDtlCpu" )==null ? "" : (String)vo.get("vcDtlCpu" )); + row.createCell(23).setCellValue(vo.get("vcDtlDisk" )==null ? "" : (String)vo.get("vcDtlDisk" )); + row.createCell(24).setCellValue(vo.get("vcDtlMem" )==null ? "" : (String)vo.get("vcDtlMem" )); + row.createCell(25).setCellValue(vo.get("vcChkTrgYn" )==null ? "" : (String)vo.get("vcChkTrgYn" )); + row.createCell(26).setCellValue(vo.get("vcTaskNm" )==null ? "" : (String)vo.get("vcTaskNm" )); + row.createCell(27).setCellValue(vo.get("vcNrwdMicnStrtDt" )==null ? "" : (String)vo.get("vcNrwdMicnStrtDt" )); + row.createCell(28).setCellValue(vo.get("vcNrwdMicnEndDt" )==null ? "" : (String)vo.get("vcNrwdMicnEndDt" )); + row.createCell(29).setCellValue(vo.get("vcLLicenseKnd" )==null ? "" : (String)vo.get("vcLLicenseKnd" )); + row.createCell(30).setCellValue(vo.get("dtLLicenseEnd" )==null ? "" : (String)vo.get("dtLLicenseEnd" )); + row.createCell(31).setCellValue(vo.get("dtEol" )==null ? "" : (String)vo.get("dtEol" )); + row.createCell(32).setCellValue(vo.get("inPortInfo" )==null ? 0 : (int)vo.get("inPortInfo" )); + row.createCell(33).setCellValue(vo.get("vcRealChargrNm" )==null ? "" : (String)vo.get("vcRealChargrNm" )); + + /* + row.createCell(0 ).setCellValue((String)vo.get("vcAssetId" )); + row.createCell(1 ).setCellValue((String)vo.get("vcCate1" )); + row.createCell(3 ).setCellValue((String)vo.get("vcCate2" )); + row.createCell(4 ).setCellValue((String)vo.get("vcCate3" )); + row.createCell(5 ).setCellValue((String)vo.get("vcAssetName" )); + row.createCell(6 ).setCellValue((String)vo.get("dtPurchaseDatetime" ) ); + row.createCell(7 ).setCellValue((String)vo.get("vcVendor") ); + row.createCell(8 ).setCellValue((String)vo.get("vcModel") ); + row.createCell(9 ).setCellValue((int)vo.get("inPrice") ); + row.createCell(10).setCellValue((String)vo.get("inAssetStatus") ); + row.createCell(11).setCellValue((String)vo.get("inMasTarget") ); + row.createCell(12).setCellValue((int)vo.get("inMasRate") ); + row.createCell(13).setCellValue((String)vo.get("vcMasCheckPeriod") ); + row.createCell(14).setCellValue((String)vo.get("dtMasStart") ); + row.createCell(15).setCellValue((String)vo.get("dtMasFinish") ); + row.createCell(16).setCellValue((String)vo.get("vcVersion") ); + row.createCell(17).setCellValue((String)vo.get("vcAssetSerial") ); + row.createCell(18).setCellValue((String)vo.get("vcHost") ); + row.createCell(19).setCellValue((String)vo.get("dtEos") ); + row.createCell(20).setCellValue((String)vo.get("txUsage") ); + row.createCell(21).setCellValue((String)vo.get("txAssetDesc") ); + row.createCell(22).setCellValue((String)vo.get("vcIp") ); + row.createCell(23).setCellValue((String)vo.get("vcDtlCpu") ); + row.createCell(24).setCellValue((String)vo.get("vcDtlDisk") ); + row.createCell(25).setCellValue((String)vo.get("vcDtlMem") ); + row.createCell(26).setCellValue((String)vo.get("vcChkTrgYn") ); + row.createCell(27).setCellValue((String)vo.get("vcTaskNm") ); + row.createCell(28).setCellValue((String)vo.get("vcNrwdMicnStrtDt") ); + row.createCell(29).setCellValue((String)vo.get("vcNrwdMicnEndDt") ); + row.createCell(30).setCellValue((String)vo.get("vcLLicenseKnd") ); + row.createCell(31).setCellValue((String)vo.get("dtLLicenseEnd") ); + row.createCell(32).setCellValue((String)vo.get("dtEol") ); + row.createCell(33).setCellValue((String)vo.get("inPortInfo") ); + */ + } + + // 열 너비 자동 조정 + for (int i = 0; i < 4; i++) + { + sheet.autoSizeColumn(i); + } + + // 파일 저장 + try (FileOutputStream outputStream = new FileOutputStream(filePath)) + { + workbook.write(outputStream); + } + + // 파일 다운로드 + File uFile = new File(filePath); + + String mimetype = "application/x-msdownload"; + + String userAgent = request.getHeader("User-Agent"); + HashMap result = EgovBrowserUtil.getBrowser(userAgent); + + if (!EgovBrowserUtil.MSIE.equals(result.get(EgovBrowserUtil.TYPEKEY))) + { + mimetype = "application/x-stuff"; + } + + String contentDisposition = EgovBrowserUtil.getDisposition(strFileNm, userAgent, "UTF-8"); + response.setContentType(mimetype); + response.setHeader("Content-Disposition", contentDisposition); + + BufferedInputStream in = null; + BufferedOutputStream out = null; + + try + { + in = new BufferedInputStream(new FileInputStream(uFile)); + out = new BufferedOutputStream(response.getOutputStream()); + + FileCopyUtils.copy(in, out); + out.flush(); + } + catch (IOException ex) + { + ex.printStackTrace(); + } + finally + { + in.close(); + out.close(); + } + + log.info("<<<<<<<<<<<<<<< /rem/SelectResourceExecl.do >>>>>>>>>>>>>>>"); + } + + /** * 자산이력 목록을 조회한다. * @author urp 인프라본부 나혁제 diff --git a/src/main/java/com/urpsys/itmsfront/rem/domain/AssetVo.java b/src/main/java/com/urpsys/itmsfront/rem/domain/AssetVo.java index 267880aa..1208a9d7 100644 --- a/src/main/java/com/urpsys/itmsfront/rem/domain/AssetVo.java +++ b/src/main/java/com/urpsys/itmsfront/rem/domain/AssetVo.java @@ -87,6 +87,10 @@ public class AssetVo extends ComDefaultVO private String dtEol ; private String inPortInfo ; + // 2025.09.12 나혁제 추가정보 + private String vcRealChargrNm ; // 실사용자명 + private String inRealChargr ; // 실사용자ID + public String getInAssetSeq() { return inAssetSeq; } @@ -423,6 +427,18 @@ public class AssetVo extends ComDefaultVO public void setInPortInfo(String inPortInfo) { this.inPortInfo = inPortInfo; } + public String getVcRealChargrNm() { + return vcRealChargrNm; + } + public void setVcRealChargrNm(String vcRealChargrNm) { + this.vcRealChargrNm = vcRealChargrNm; + } + public String getInRealChargr() { + return inRealChargr; + } + public void setInRealChargr(String inRealChargr) { + this.inRealChargr = inRealChargr; + } diff --git a/src/main/java/com/urpsys/itmsfront/rem/domain/ResourceManage.java b/src/main/java/com/urpsys/itmsfront/rem/domain/ResourceManage.java index e326a4d4..f725e6af 100644 --- a/src/main/java/com/urpsys/itmsfront/rem/domain/ResourceManage.java +++ b/src/main/java/com/urpsys/itmsfront/rem/domain/ResourceManage.java @@ -77,6 +77,12 @@ public class ResourceManage extends ComDefaultVO private String assetId ; private String assetStat ; + // 2025.09.11 나혁제 조회조건 추가 + private String sdateEos ; + private String edateEos ; + // 2025.19.15 나혁제 조회조건 추가 + private String hidEosCheckYn; + public int getInAssetSeq() { return inAssetSeq; } @@ -371,6 +377,24 @@ public class ResourceManage extends ComDefaultVO public void setAssetStat(String assetStat) { this.assetStat = assetStat; } + public String getSdateEos() { + return sdateEos; + } + public void setSdateEos(String sdateEos) { + this.sdateEos = sdateEos; + } + public String getEdateEos() { + return edateEos; + } + public void setEdateEos(String edateEos) { + this.edateEos = edateEos; + } + public String getHidEosCheckYn() { + return hidEosCheckYn; + } + public void setHidEosCheckYn(String hidEosCheckYn) { + this.hidEosCheckYn = hidEosCheckYn; + } diff --git a/src/main/resources/application-kintex_prod.yml b/src/main/resources/application-kintex_prod.yml new file mode 100644 index 00000000..1b157c8a --- /dev/null +++ b/src/main/resources/application-kintex_prod.yml @@ -0,0 +1,56 @@ + # Service port + server: + port: 443 + servlet: + session: + timeout: 120m + cookie: + name: BASEJSP_JSESSIONID + ssl: + enabled: true #Spring Security를 사용하는 경우 HTTPS 요청만 허용하도록 해주는 설정 + key-store-type: PKCS12 + key-store: classpath:sslkey/Wildcard.kintex.com_jks.jks + key-store-password: 83641234 + + # Service port + # server: + # port: 11020 + # servlet: + # session: + # timeout: 120m + # cookie: + # name: BASEJSP_JSESSIONID + +# JSP 설정 + spring: + mvc: + view: + prefix: /WEB-INF/jsp/ + suffix: .jsp + static-patn-pattern: /static/** + + devtools: + livereload: + enabled: true + +# custom 설정 + custom: + path: + phy_svy: /app/itsm_data/svy/ + loc_svy: /svy/image/ + file_store: /app/itsm_data/itsm_file_upload + auth_server: http://localhost:11000 + api_server: http://localhost:11010 +# api_search_server: http://109.26.11.21:48381 + api_search_server: http://10.2.11.37:48381 + sendmail: + id: tW9kMpd3SiAnf3RQBOZapw== + password: Tkkj8p2PYfZ+AmpQMPLHF8ksj8vrtJouj6xczU8ShM8= + port: 587 + host: smtp.gmail.com + sendEmail: hhjj0701@gmail.com + senderName: 나혁제 + socketFactory-class: javax.net.ssl.SSLSocketFactory + supplier: gmail.com + + \ No newline at end of file diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index d8277ac3..86e20bc6 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -1,4 +1,4 @@ - # Service port +# Service port server: port: 11020 servlet: diff --git a/src/main/resources/sslkey/Wildcard.kintex.com_jks.jks b/src/main/resources/sslkey/Wildcard.kintex.com_jks.jks new file mode 100644 index 00000000..3ea2d4f6 Binary files /dev/null and b/src/main/resources/sslkey/Wildcard.kintex.com_jks.jks differ diff --git a/src/main/resources/static/js/js-calendar/calendar.js b/src/main/resources/static/js/js-calendar/calendar.js index d77b5084..a49088be 100644 --- a/src/main/resources/static/js/js-calendar/calendar.js +++ b/src/main/resources/static/js/js-calendar/calendar.js @@ -13,7 +13,7 @@ $.datepicker.setDefaults({ changeMonth: true, //월변경가능 changeYear: true, //년변경가능 minDate: '', - maxDate: '+800d', + maxDate: '+1825d', yearSuffix: '' }); diff --git a/src/main/webapp/WEB-INF/jsp/itms/rem/ResourceDetail.jsp b/src/main/webapp/WEB-INF/jsp/itms/rem/ResourceDetail.jsp index 1caf4d55..b61e460b 100644 --- a/src/main/webapp/WEB-INF/jsp/itms/rem/ResourceDetail.jsp +++ b/src/main/webapp/WEB-INF/jsp/itms/rem/ResourceDetail.jsp @@ -279,6 +279,33 @@ // varFrom.submit(); } + //---------------------------------------- + // 2025.09.12 나혁제 + // 담당자 검색 팝업 + // ---------------------------------------- + function fn_User_Search( strTitle + , frmUniqId + , frmEmplNo + , frmEmplyrNm + , frmOrgnztNm + , multiUserSelectYn + ) + { + var arrParam = new Array(6); + arrParam[0] = window; + arrParam[1] = strTitle; + arrParam[2] = frmUniqId; + arrParam[3] = frmEmplNo; + arrParam[4] = frmEmplyrNm; + arrParam[5] = frmOrgnztNm; + + var strUrl = "/cmm/selectUserListPopup.do?multiUserSelectYn="+multiUserSelectYn; + + window.showModalDialog( "" + , arrParam + , "dialogWidth:900px;dialogHeight:750px;resizable:yes;center:yes"); + } + //---------------------------------------- // 서블릿 통신 // ---------------------------------------- @@ -636,8 +663,15 @@ - + 실사용자 + + + + 담당자 검색 + + + diff --git a/src/main/webapp/WEB-INF/jsp/itms/rem/ResourceHistListPopup.jsp b/src/main/webapp/WEB-INF/jsp/itms/rem/ResourceHistListPopup.jsp index 3d7959e2..9e01b2bf 100644 --- a/src/main/webapp/WEB-INF/jsp/itms/rem/ResourceHistListPopup.jsp +++ b/src/main/webapp/WEB-INF/jsp/itms/rem/ResourceHistListPopup.jsp @@ -166,6 +166,9 @@ <%-- 자산상태 --%> <%-- 유지보수비율 --%> <%-- 호스트명 --%> + <%-- 2025.09.12 나혁제 추가 Eos 일자 --%> + <%-- 2025.09.12 나혁제 추가 실사용자 --%> + @@ -179,6 +182,8 @@ 자산상태 유지보수비율 호스트명 + EOS일자 + 실사용자 @@ -310,6 +315,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/itms/rem/ResourceInsert.jsp b/src/main/webapp/WEB-INF/jsp/itms/rem/ResourceInsert.jsp index 973ba0af..f9f7c33b 100644 --- a/src/main/webapp/WEB-INF/jsp/itms/rem/ResourceInsert.jsp +++ b/src/main/webapp/WEB-INF/jsp/itms/rem/ResourceInsert.jsp @@ -37,6 +37,8 @@ + +