From 1b3dda7812fde86c822402fa75bcb5fd8bfe6294 Mon Sep 17 00:00:00 2001 From: urp Date: Fri, 19 Sep 2025 14:44:51 +0900 Subject: [PATCH] =?UTF-8?q?=EC=B6=94=EA=B0=80=EC=9A=94=EA=B5=AC=EC=82=AC?= =?UTF-8?q?=ED=95=AD=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .classpath | 6 +- build.gradle | 8 + .../basefront/urpBaseJspApplication.java | 7 + .../controller/ResourceManagerController.java | 239 +++++++++++++++++- .../urpsys/itmsfront/rem/domain/AssetVo.java | 16 ++ .../itmsfront/rem/domain/ResourceManage.java | 24 ++ .../resources/application-kintex_prod.yml | 56 ++++ src/main/resources/application-local.yml | 2 +- .../sslkey/Wildcard.kintex.com_jks.jks | Bin 0 -> 6127 bytes .../static/js/js-calendar/calendar.js | 2 +- .../WEB-INF/jsp/itms/rem/ResourceDetail.jsp | 36 ++- .../jsp/itms/rem/ResourceHistListPopup.jsp | 29 +++ .../WEB-INF/jsp/itms/rem/ResourceInsert.jsp | 41 ++- .../WEB-INF/jsp/itms/rem/ResourceList.jsp | 84 +++++- .../jsp/itms/rem/ResourceMultiList.jsp | 2 +- 15 files changed, 527 insertions(+), 25 deletions(-) create mode 100644 src/main/resources/application-kintex_prod.yml create mode 100644 src/main/resources/sslkey/Wildcard.kintex.com_jks.jks 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 0000000000000000000000000000000000000000..3ea2d4f6cf4203ece325892a4b675f819fda1f35 GIT binary patch literal 6127 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 Ue1~ghCyMd" + , 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 @@ + +