diff --git a/src/main/java/geoinfo/com/CryptoUtil.java b/src/main/java/geoinfo/com/CryptoUtil.java index 0fd2c72e..b2562b19 100644 --- a/src/main/java/geoinfo/com/CryptoUtil.java +++ b/src/main/java/geoinfo/com/CryptoUtil.java @@ -22,7 +22,29 @@ import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.SecretKeySpec; +import egovframework.com.cmm.service.EgovProperties; + public class CryptoUtil { + // ===== [고정 키 AES - 빠른 버전] ===== + private static SecretKeySpec FIXED_SECRET_KEY; + + /** + * encryptQuickAES key + * 서버 기동시 1회 자동 실행됨 + */ + static { + try { + String key = EgovProperties.getProperty("SHA256.secret_key").trim(); + + MessageDigest sha = MessageDigest.getInstance("SHA-256"); + byte[] keyBytes = sha.digest(key.getBytes("UTF-8")); + + FIXED_SECRET_KEY = new SecretKeySpec(keyBytes, "AES"); + } catch (Exception e) { + throw new RuntimeException("CryptoUtil AES key initialization failed", e); + } + } + /** * MD5 로 해시 한다. * @@ -142,4 +164,27 @@ public class CryptoUtil { byte[] decryptedTextBytes = cipher.doFinal(encryoptedTextBytes); return new String(decryptedTextBytes); } + + + /** + * AES 고정 키 암호화 (빠름) + */ + public static String encryptQuickAES(String plainText) throws Exception { + Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); + cipher.init(Cipher.ENCRYPT_MODE, FIXED_SECRET_KEY); + return Base64.getEncoder() + .encodeToString(cipher.doFinal(plainText.getBytes("UTF-8"))); + } + + /** + * AES 고정 키 복호화 + */ + public static String decryptQuickAES(String cipherText) throws Exception { + Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); + cipher.init(Cipher.DECRYPT_MODE, FIXED_SECRET_KEY); + return new String( + cipher.doFinal(Base64.getDecoder().decode(cipherText)), + "UTF-8" + ); + } } diff --git a/src/main/java/geoinfo/drilling/input/DrillingInputController.java b/src/main/java/geoinfo/drilling/input/DrillingInputController.java index 9c4541ef..f5068555 100644 --- a/src/main/java/geoinfo/drilling/input/DrillingInputController.java +++ b/src/main/java/geoinfo/drilling/input/DrillingInputController.java @@ -170,6 +170,76 @@ public class DrillingInputController { return jSONOResponse; } + + // 발주기관 건설사목록 가져오기 + @ResponseBody + @RequestMapping(value = "/drilling-company-list", method = RequestMethod.GET, produces = "application/json; charset=UTF-8") + public String getDrillingCompanyList(HttpServletRequest request, HttpServletResponse response, @RequestParam HashMap params) throws Exception { + + JSONObject jsonObject = new JSONObject(); + strUtil sUtil = new strUtil(); + + String projectName = sUtil.checkNull((String)params.get("companyName")); + + JSONArray jsonListObject = new JSONArray(); + + if( projectName == ""){ + jsonObject.put("resultMessage", "OK"); + jsonObject.put("resultCode", 200); + jsonObject.put("result", new JSONObject().put("list", jsonListObject)); + } else { + JSONObject result = new JSONObject(); + result.put("list", drillingInputService.selectConstructCompanyList(params)); + + jsonObject.put("resultMessage", "OK"); + jsonObject.put("resultCode", 200); + jsonObject.put("result", result); + } + + response.setContentType("application/json; charset=UTF-8"); // 응답 헤더 설정 + response.setCharacterEncoding("UTF-8"); // 응답 데이터 인코딩 설정 (중요) + + try (OutputStream os = response.getOutputStream()) { // OutputStream 사용 + os.write(jsonObject.toString().getBytes("UTF-8")); // UTF-8 인코딩하여 출력 + } + + return null; // @ResponseBody이므로 반환 값은 필요 없습니다. + } + + // [발주기관 > 건설현장입력] 건설사 계정 선택시 이름, 연락처 자동셋팅 + @ResponseBody + @RequestMapping(value = "/const-user-info", method = RequestMethod.GET, produces = "application/json; charset=UTF-8") + public String getConstUserInfo(HttpServletRequest request, HttpServletResponse response, @RequestParam HashMap params) throws Exception { + + JSONObject jsonObject = new JSONObject(); + strUtil sUtil = new strUtil(); + + String userid = sUtil.checkNull((String)params.get("encUserid")); + + JSONArray jsonListObject = new JSONArray(); + + if( userid == ""){ + jsonObject.put("resultMessage", "OK"); + jsonObject.put("resultCode", 200); + jsonObject.put("result", new JSONObject().put("data", jsonListObject)); + } else { + JSONObject result = new JSONObject(); + result.put("data", drillingInputService.selectConstructUserInfo(params)); + + jsonObject.put("resultMessage", "OK"); + jsonObject.put("resultCode", 200); + jsonObject.put("result", result); + } + + response.setContentType("application/json; charset=UTF-8"); // 응답 헤더 설정 + response.setCharacterEncoding("UTF-8"); // 응답 데이터 인코딩 설정 (중요) + + try (OutputStream os = response.getOutputStream()) { // OutputStream 사용 + os.write(jsonObject.toString().getBytes("UTF-8")); // UTF-8 인코딩하여 출력 + } + + return null; // @ResponseBody이므로 반환 값은 필요 없습니다. + } /** * 발주 기관 사용자의 소속을 가져온다. diff --git a/src/main/java/geoinfo/drilling/input/service/DrillingInputMapper.java b/src/main/java/geoinfo/drilling/input/service/DrillingInputMapper.java index 8eac99ba..272da038 100644 --- a/src/main/java/geoinfo/drilling/input/service/DrillingInputMapper.java +++ b/src/main/java/geoinfo/drilling/input/service/DrillingInputMapper.java @@ -15,6 +15,7 @@ public interface DrillingInputMapper { public void spGetMasterCompanyDistrict(HashMap spGetMasterCompanyDistrictParams) throws SQLException; + public List selectConstructCompanyList(HashMap params) throws SQLException; public EgovMap getDepartments(HashMap params) throws SQLException; public HashMap spUdtTblCsi(HashMap params) throws SQLException; diff --git a/src/main/java/geoinfo/drilling/input/service/DrillingInputService.java b/src/main/java/geoinfo/drilling/input/service/DrillingInputService.java index e0b9aa5b..7509ead5 100644 --- a/src/main/java/geoinfo/drilling/input/service/DrillingInputService.java +++ b/src/main/java/geoinfo/drilling/input/service/DrillingInputService.java @@ -1,16 +1,23 @@ package geoinfo.drilling.input.service; +import java.sql.SQLException; import java.util.HashMap; +import java.util.List; +import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.json.simple.JSONObject; +import egovframework.rte.psl.dataaccess.util.EgovMap; + public interface DrillingInputService { HashMap getOrganizationUserGlGmGsGfCodes(String userId) throws Exception; HashMap drillingInputAdd(HttpServletRequest request, HttpServletResponse response, HashMap params) throws Exception; + List selectConstructCompanyList(HashMap params) throws Exception; + Map selectConstructUserInfo(HashMap params) throws Exception; void getDepartments(HttpServletRequest request, HashMap params, JSONObject jsonResponse) throws Exception; HashMap updateProjectCodeAndProjectStateCodeByCid(HttpServletRequest request, HashMap params) throws Exception; HashMap updateProjectCodeAndProjectStateCodeByProjectCode(HttpServletRequest request, HashMap params) throws Exception; diff --git a/src/main/java/geoinfo/drilling/input/service/impl/DrillingInputServiceImpl.java b/src/main/java/geoinfo/drilling/input/service/impl/DrillingInputServiceImpl.java index e82e36f4..23257558 100644 --- a/src/main/java/geoinfo/drilling/input/service/impl/DrillingInputServiceImpl.java +++ b/src/main/java/geoinfo/drilling/input/service/impl/DrillingInputServiceImpl.java @@ -6,27 +6,26 @@ import geoinfo.drilling.inquiry.service.DrillingInquiryService; import geoinfo.main.login.service.LoginMapper; import geoinfo.regi.common.service.CommonService; import geoinfo.regi.projectList.ProjectListController; +import geoinfo.regi.projectList.service.ProjectListService; import geoinfo.util.MyUtil; - import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.json.simple.JSONArray; import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; import egovframework.rte.psl.dataaccess.util.EgovMap; +import geoinfo.com.CryptoUtil; @Service("drillingInputService") public class DrillingInputServiceImpl implements DrillingInputService { @@ -43,8 +42,9 @@ public class DrillingInputServiceImpl implements DrillingInputService { @Resource(name ="commonService") private CommonService commonService; - @Autowired - private ProjectListController projectListController; + + @Resource(name = "projectListService") + private ProjectListService projectListService; @@ -89,6 +89,11 @@ public class DrillingInputServiceImpl implements DrillingInputService { params.put("masterCompanyThCode", MyUtil.getStringFromObject( spGetMasterCompanyDistrictParams.get("v_gs") )); params.put("masterCompanyName", MyUtil.getStringFromObject( spGetMasterCompanyDistrictParams.get("v_gf") )); + // 건설사 계정 연결(암호화된 userid 복호화) + String encryptId = MyUtil.getStringFromObject( params.get("encUserid") ); + String decryptId = CryptoUtil.decryptQuickAES(encryptId); + + params.put("constUserid", decryptId); try { @@ -107,7 +112,50 @@ public class DrillingInputServiceImpl implements DrillingInputService { } } + + @Override + public List selectConstructCompanyList(HashMap params) throws Exception { + List list = new ArrayList(); + list = drillingInputMapper.selectConstructCompanyList(params); + + for (EgovMap map : list) { + + String userid = (String) map.get("userid"); + if (userid == null) continue; + + // 암호화 +// String encryptId = CryptoUtil.encryptAES256(userid, secret_key); + String encryptId = CryptoUtil.encryptQuickAES(userid); + // userid 제거 + map.remove("userid"); + + // 복호화 (검증 or 필요 시) +// String decryptId = CryptoUtil.decryptAES256(encryptId, secret_key); + + map.put("encryptId", encryptId); +// map.put("decryptId", decryptId); + } + + return list; + } + @Override + public Map selectConstructUserInfo(HashMap params) throws Exception { + Map result = new HashMap(); + // 건설사 계정 연결(암호화된 userid 복호화) + String encryptId = MyUtil.getStringFromObject( params.get("encUserid") ); + String decryptId = CryptoUtil.decryptQuickAES(encryptId); + params.put("userid", decryptId); + + Map infoData = loginMapper.selectWebMemberIn(params); + + if (result != infoData) { + result.put("phone", infoData.get("phone")); + result.put("userName", infoData.get("user_name")); + } + return result; + } + @Override public void getDepartments(HttpServletRequest request, HashMap params, JSONObject jsonResponse) throws Exception { @@ -271,7 +319,12 @@ public class DrillingInputServiceImpl implements DrillingInputService { findConstCompanyCodeByConstCompanyNameParams.put("masterCompanyTwCode", MyUtil.getStringFromObject( findConstCompanyCodeByConstCompanyNameParams.get("v_gm") )); findConstCompanyCodeByConstCompanyNameParams.put("masterCompanyThCode", MyUtil.getStringFromObject( findConstCompanyCodeByConstCompanyNameParams.get("v_gs") )); findConstCompanyCodeByConstCompanyNameParams.put("masterCompanyName", MyUtil.getStringFromObject( findConstCompanyCodeByConstCompanyNameParams.get("v_gf") )); + + // 건설사 계정 연결(암호화된 userid 복호화) + String encryptId = MyUtil.getStringFromObject( params.get("encUserid") ); + String decryptId = CryptoUtil.decryptQuickAES(encryptId); + params.put("constUserid", decryptId); try { @@ -376,7 +429,7 @@ public class DrillingInputServiceImpl implements DrillingInputService { ModelAndView model = new ModelAndView(); - model = projectListController.insertMeta(metaParams, model, request, response); // insertMeta 호출 시 발생되는 오류는 조치하기. + model = projectListService.insertMeta(metaParams, model, request, response); // insertMeta 호출 시 발생되는 오류는 조치하기. return model; } @@ -394,7 +447,7 @@ public class DrillingInputServiceImpl implements DrillingInputService { // 2. ProjectListController의 deleteAll 호출 ModelAndView model = new ModelAndView(); - model = projectListController.deleteAll(deleteParams, model, request, response); // deleteAll 호출 시 발생되는 오류는 조치하기. + model = projectListService.deleteAll(deleteParams, model, request, response); // deleteAll 호출 시 발생되는 오류는 조치하기. return model; } diff --git a/src/main/java/geoinfo/regi/projectList/ProjectListController.java b/src/main/java/geoinfo/regi/projectList/ProjectListController.java index 85718136..666f15bc 100644 --- a/src/main/java/geoinfo/regi/projectList/ProjectListController.java +++ b/src/main/java/geoinfo/regi/projectList/ProjectListController.java @@ -3,7 +3,6 @@ package geoinfo.regi.projectList; import java.util.ArrayList; import java.util.HashMap; import java.io.OutputStream; -import java.io.PrintWriter; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; @@ -12,7 +11,6 @@ import javax.servlet.http.HttpServletResponse; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; @@ -120,215 +118,14 @@ public class ProjectListController { // 지반정보등록 @RequestMapping(value = "/insertMeta.do") public ModelAndView insertMeta(@RequestParam HashMap params, ModelAndView model ,HttpServletRequest request, HttpServletResponse response) throws Exception{ - UrlPathHelper urlPathHelper = new UrlPathHelper(); - String topPath = urlPathHelper.getOriginatingRequestUri(request); - //변수선언 - WebUtil wUtil = new WebUtil(); - strUtil sUtil = new strUtil(); - int affectRow = 0; - String rUrl = sUtil.checkNull(String.valueOf(params.get("rUrl"))); - //request - String oPROJECT_CODE = sUtil.checkNull(String.valueOf(params.get("PROJECT_CODE"))); - String oINPUT_COMPANY = sUtil.checkNull(String.valueOf(request.getParameter("INPUT_COMPANY"))); - String oDEPT = sUtil.checkNull(String.valueOf(request.getParameter("DEPT"))); - String oADMIN_NAME = sUtil.checkNull(String.valueOf(request.getParameter("ADMIN_NAME"))); - String oEMAIL = sUtil.checkNull(String.valueOf(request.getParameter("EMAIL"))); - String oTEL = sUtil.checkNull(String.valueOf(params.get("TEL"))); - String oPHONE = sUtil.checkNull(String.valueOf(params.get("PHONE"))); - String oSEARCHDATE = sUtil.checkNull(String.valueOf(params.get("SEARCHDATE"))); - String oINPUTDATE = wUtil.getToday(); - String oPROJECT_NAME = sUtil.checkNull(String.valueOf(request.getParameter("PROJECT_NAME"))); - String oHOLE_NUMBER = sUtil.checkNull(String.valueOf(params.get("HOLE_NUMBER"))); - String oHOLE_ADMIN_NAME = sUtil.checkNull(String.valueOf(request.getParameter("HOLE_ADMIN_NAME"))); - String oHOLE_COMPANY = sUtil.checkNull(String.valueOf(request.getParameter("HOLE_COMPANY"))); - String oHOLE_TYPE = "Boring"; - String oHOLE_SPOT_SD = sUtil.checkNull(String.valueOf(params.get("HOLE_SPOT_SD"))); - String oHOLE_SPOT_SGG = sUtil.checkNull(String.valueOf(params.get("HOLE_SPOT_SGG"))); - String oHOLE_SPOT = sUtil.checkNull(String.valueOf(request.getParameter("HOLE_SPOT"))); - String oREMARK = sUtil.checkNull(String.valueOf(request.getParameter("REMARK"))); - String oREPORT_TYPE =sUtil.checkNull(String.valueOf(params.get("REPORT_TYPE"))); - String oTEMP_CONSTRUCT_SITE_INFO_CID =sUtil.checkNull(String.valueOf(params.get("TEMP_CONSTRUCT_SITE_INFO-CID"))); // 발주기관에서 생성한 프로젝트 식별 번호. TEMP_CONSTRUCT_SITE_INFO 테이블의 cid 컬럼 값. - if("".equals(oPROJECT_CODE)){ - HashMap prjCd = new HashMap(); - prjCd=masterService.getProjectCd(params); - oPROJECT_CODE=(String)prjCd.get("P_CODE")+prjCd.get("P_NUM"); - //System.out.println(oREPORT_TYPE); - - - params.put("PROJECT_CODE", oPROJECT_CODE); - params.put("PROJECT_NAME", oPROJECT_NAME); - params.put("INPUT_COMPANY", oINPUT_COMPANY); - params.put("DEPT", oDEPT); - params.put("ADMIN_NAME", oADMIN_NAME); - params.put("EMAIL", oEMAIL); - params.put("TEL", oTEL); - params.put("PHONE", oPHONE); - params.put("SEARCHDATE", oSEARCHDATE); - params.put("INPUTDATE", oINPUTDATE); - params.put("HOLE_NUMBER", oHOLE_NUMBER); - params.put("HOLE_ADMIN_NAME", oHOLE_ADMIN_NAME); - params.put("HOLE_COMPANY", oHOLE_COMPANY); - params.put("HOLE_TYPE", oHOLE_TYPE); - params.put("HOLE_SPOT_SD", oHOLE_SPOT_SD); - params.put("HOLE_SPOT_SGG", oHOLE_SPOT_SGG); - params.put("HOLE_SPOT", oHOLE_SPOT); - params.put("REMARK", oREMARK); - params.put("REPORT_TYPE", oREPORT_TYPE); - params.put("USERID",request.getSession().getAttribute("USERID")); - params.put("MODUSERID",request.getSession().getAttribute("USERID")); - //System.out.println("!!!!!!!!!!!params!!!!!!!!!!!!!!!+"+oPROJECT_NAME); - - //TEMP_PROJECT_INFO - params.put("PROJECT_START_SPOT_SD", oHOLE_SPOT_SD); - params.put("PROJECT_START_SPOT_SGG", oHOLE_SPOT_SGG); - params.put("PROJECT_START_SPOT", oHOLE_SPOT); - params.put("PROJECT_END_SPOT_SD", oHOLE_SPOT_SD); - params.put("PROJECT_END_SPOT_SGG", oHOLE_SPOT_SGG); - params.put("PROJECT_WORK_COMPANY", oHOLE_COMPANY); - params.put("PROJECT_HOLE_NUMBER", oHOLE_NUMBER); - params.put("STATE", "4"); - params.put("REPORT_TYPE", "CH"); - - // 사업명(프로젝트 명) 중복 검사를 수행한다. - - ArrayList> arrProjectCodeAndProjectName = masterService.getProjectCodeAndProjectNameByProjectName(params); - if( 0 < arrProjectCodeAndProjectName.size() ) { - //여기에서 프로젝트 중복되어서 다른 이름으로 지정해야한다는 메시지를 사용자에게 보여줘야 함. - model.addObject("result", "false"); - model.addObject("message", "해당 사업명이 이미 있습니다. 다른 사업명으로 입력 해주세요."); - model.setViewName("redirect:/index_db.do"); - return model; - } - - affectRow = masterService.insertMeta(params); - masterService.insertProject(params); - if("/insertMeta.do".equals(topPath)){ - rUrl = "/meta_info.do?REPORT_TYPE="+oREPORT_TYPE+"&PROJECT_CODE="+oPROJECT_CODE; - } - }else{ - params.put("PROJECT_CODE", oPROJECT_CODE); - params.put("PROJECT_NAME", oPROJECT_NAME); - params.put("INPUT_COMPANY", oINPUT_COMPANY); - params.put("DEPT", oDEPT); - params.put("ADMIN_NAME", oADMIN_NAME); - params.put("EMAIL", oEMAIL); - params.put("TEL", oTEL); - params.put("PHONE", oPHONE); - params.put("SEARCHDATE", oSEARCHDATE); - params.put("INPUTDATE", oINPUTDATE); - params.put("HOLE_NUMBER", oHOLE_NUMBER); - params.put("HOLE_ADMIN_NAME", oHOLE_ADMIN_NAME); - params.put("HOLE_COMPANY", oHOLE_COMPANY); - params.put("HOLE_TYPE", oHOLE_TYPE); - params.put("HOLE_SPOT_SD", oHOLE_SPOT_SD); - params.put("HOLE_SPOT_SGG", oHOLE_SPOT_SGG); - params.put("HOLE_SPOT", oHOLE_SPOT); - params.put("REMARK", oREMARK); - params.put("REPORT_TYPE", oREPORT_TYPE); - params.put("USERID",request.getSession().getAttribute("USERID")); - affectRow =masterService.updateMeta(params); - } - - if( oTEMP_CONSTRUCT_SITE_INFO_CID != null ) { - - params.put("PROJECT_CODE", oPROJECT_CODE); - params.put("CID", oTEMP_CONSTRUCT_SITE_INFO_CID); - params.put("PROJECT_STATE_CODE", 1); // 입력상태 1 = 입력 중 하드코딩되어있음. src\main\java\geoinfo\drilling\inquiry\service\impl\DrillingInquiryServiceImpl.java의 drillingInquiryList 메소드 참고. - - drillingInputService.updateProjectCodeAndProjectStateCodeByCid(request, params); - // TEMP_CONSTRUCT_SITE_INFO 테이블의 cid 해당하는 record의 PROJECT_CODE를 update한다. - } - - model.addObject("result", "true"); - model.addObject("oREPORT_TYPE", oREPORT_TYPE); - model.addObject("affectRow", affectRow); - model.addObject("oPROJECT_CODE", oPROJECT_CODE); - model.setViewName("redirect:/index_db.do"); - model.addObject("rUrl",rUrl); - + masterService.insertMeta(params, model, request, response); return model; } // 지반정보등록 (관리자) @RequestMapping(value = "/deleteAll.do") public ModelAndView deleteAll(@RequestParam HashMap params, ModelAndView model ,HttpServletRequest request, HttpServletResponse response) throws Exception{ - strUtil sUtil = new strUtil(); - int affectRow = 0; - UrlPathHelper urlPathHelper = new UrlPathHelper(); - String topPath = urlPathHelper.getOriginatingRequestUri(request); - String PROJECT_CODE = sUtil.checkNull(String.valueOf(params.get("PROJECT_CODE"))); - - // 2018-11-07 모의해킹 조치. 조현석 차장. - // 1. 프로젝트 코드 검사 유무 - if ( null != PROJECT_CODE && ! "".equals(PROJECT_CODE)) { - // 2. 관리자인지. - boolean ischk = false; - if ( request.getSession().getAttribute("CLS") != null && "9".equals(request.getSession().getAttribute("CLS") ) ) { - ischk = true; - } - if ( request.getSession().getAttribute("CLS") != null && "1".equals(request.getSession().getAttribute("CLS") ) ) { - // 기업회원일 경우 본인 프로젝트인지 확인. - String userId = (String) request.getSession().getAttribute("USERID"); - if ( userId != null && ! "".equals(userId)) { - HashMap projectMap = masterService.getInfo(params); - if ( projectMap != null && ! projectMap.isEmpty() ) { - String tmpID = (String) projectMap.get("USERID"); - System.out.println("userId - " + userId + " , tmpID = " + tmpID ); - // 프로젝트 생성 아이디가 같다면 삭제 권한 가능.. - if ( userId.equals( tmpID ) ) { - ischk = true; - } - } - } - //getInfo - } - - //3. 권한이 있는 경우에만 삭제가 가능하다. - if ( ischk ) { - String tableTemp[] = {"TEMP_META_INFO", "TEMP_PROJECT_INFO", "TEMP_TOPO_GEOLOGY", "TEMP_HEADER", "TEMP_HEADER_CORE", - "TEMP_SELECTCLASS_INFO", "TEMP_REFERENCE", "TEMP_LAYER_INFO", "TEMP_SPT", "TEMP_RQD", "TEMP_DSF", - "TEMP_FIELD_PRESSUREMETER", "TEMP_SLICKENSIDE_INFO", "TEMP_Q", "TEMP_RMR", "TEMP_FIELD_WATERPRESSURE", - "TEMP_WP_TEST", "TEMP_FIELD_PERMEABILITY", "TEMP_FIELDPER_SUB", "TEMP_FIELD_CONE_PENETRATION", - "TEMP_CONE_PENETRATION_IMAGES", "TEMP_SAMPLE_INFO", "TEMP_CLASSIFICATION", "TEMP_CONSOLIDATION_USUAL", - "TEMP_CONSOLIDATION", "TEMP_CBR_COMPAC", "TEMP_UNCONFINED_USUAL", "TEMP_TRIAXIAL_USUAL", "TEMP_TRIAXIAL_CU", - "TEMP_TRIAXIAL_UU", "TEMP_RESONANT_USUAL", "TEMP_RESONANT", "TEMP_REPEATED_TRIAXIAL_USUAL", - "TEMP_REPEATED_TRIAXIAL", "TEMP_ROCK_POINTLOAD", "TEMP_ROCK_JOINTSHEAR", "TEMP_ROCK_UNIAXIAL", - "TEMP_ROCK_TRIAXIAL", "TEMP_ROCK_RESONANT_USUAL", "TEMP_ROCK_RESONANT", "TEMP_ROCK_REPEATED_TRIAXIAL_U", - "TEMP_ROCK_REPEATED_TRIAXIAL", "TEMP_EXPERT_OPINION", "TEMP_RESISTIVITY_SURVEY", "TEMP_RESISTIVITY_SURVEY_SUB", - "TEMP_RESISTIVITY_SURVEY_FILE", "TEMP_REFRACTION_SURVEY", "TEMP_REFRACTION_SURVEY_SUB", - "TEMP_REFRACTION_SURVEY_FILE", "TEMP_BOREHOLE_WAVE", "TEMP_BOREHOLE_WAVE_PS", "TEMP_DOWNHOLE", - "TEMP_DOWNHOLE_PS", "TEMP_DENSITY", "TEMP_DENSITY_SUB"}; - params.put("PROJECT_CODE", PROJECT_CODE); - for(int i = 0; i src\main\java\geoinfo\drilling\inquiry\service\impl\DrillingInquiryServiceImpl.java의 drillingInquiryList 메소드 참고. - drillingInputService.updateProjectCodeAndProjectStateCodeByProjectCode(request, params); - - model.addObject("MODE", "DEL"); - model.addObject("affectRow", affectRow); - model.addObject("PROJECT_CODE", PROJECT_CODE); - model.setViewName("redirect:/index_db.do"); - } else { - model.addObject("MODE", "DEL"); - model.addObject("affectRow", -1); - model.addObject("PROJECT_CODE", PROJECT_CODE); - model.setViewName("redirect:/index_db.do"); - } - - } else { - model.addObject("MODE", "DEL"); - model.addObject("affectRow", 0); - model.addObject("PROJECT_CODE", null); - model.setViewName("redirect:/index_db.do"); - } - + masterService.deleteAll(params, model, request, response); return model; } diff --git a/src/main/java/geoinfo/regi/projectList/service/ProjectListService.java b/src/main/java/geoinfo/regi/projectList/service/ProjectListService.java index fe8018fa..7e877539 100644 --- a/src/main/java/geoinfo/regi/projectList/service/ProjectListService.java +++ b/src/main/java/geoinfo/regi/projectList/service/ProjectListService.java @@ -3,11 +3,18 @@ package geoinfo.regi.projectList.service; import java.util.ArrayList; import java.util.HashMap; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.servlet.ModelAndView; + public interface ProjectListService { //170615 public int insertMeta(HashMap params) throws Exception; + public ModelAndView insertMeta(@RequestParam HashMap params, ModelAndView model ,HttpServletRequest request, HttpServletResponse response) throws Exception; public int insertWebData(HashMap params) throws Exception; public int insertProject(HashMap params) throws Exception; public int updateMeta(HashMap params) throws Exception; @@ -52,4 +59,7 @@ public interface ProjectListService { public ArrayList> getProjectCodeAndProjectNameByProjectName(HashMap params); public ArrayList> getProjectCodeAndProjectNameByProjectNameFromTempMetaInfo(HashMap params); public ArrayList> getConstNameByProjectNameFromTempConstructSiteInfo(HashMap params); + + public ModelAndView deleteAll(@RequestParam HashMap params, ModelAndView model ,HttpServletRequest request, HttpServletResponse response) throws Exception; + } diff --git a/src/main/java/geoinfo/regi/projectList/service/impl/ProjectListServiceImpl.java b/src/main/java/geoinfo/regi/projectList/service/impl/ProjectListServiceImpl.java index 62959a3f..8f386cc4 100644 --- a/src/main/java/geoinfo/regi/projectList/service/impl/ProjectListServiceImpl.java +++ b/src/main/java/geoinfo/regi/projectList/service/impl/ProjectListServiceImpl.java @@ -1,14 +1,23 @@ package geoinfo.regi.projectList.service.impl; +import geoinfo.drilling.input.service.DrillingInputService; import geoinfo.regi.projectList.service.ProjectListMapper; import geoinfo.regi.projectList.service.ProjectListService; +import ictway.comm.util.strUtil; +import ictway.comm.web.WebUtil; import java.util.ArrayList; import java.util.HashMap; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.util.UrlPathHelper; @Service("projectListService") public class ProjectListServiceImpl implements ProjectListService { @@ -16,11 +25,146 @@ public class ProjectListServiceImpl implements ProjectListService { @Resource(name = "projectListMapper") private ProjectListMapper projectListMapper; + @Autowired + private DrillingInputService drillingInputService; + //170615 @Override public int insertMeta(HashMap params) throws Exception { return projectListMapper.insertMeta(params); } + + @Override + public ModelAndView insertMeta(@RequestParam HashMap params, ModelAndView model ,HttpServletRequest request, HttpServletResponse response) throws Exception { + + UrlPathHelper urlPathHelper = new UrlPathHelper(); + String topPath = urlPathHelper.getOriginatingRequestUri(request); + //변수선언 + WebUtil wUtil = new WebUtil(); + strUtil sUtil = new strUtil(); + int affectRow = 0; + String rUrl = sUtil.checkNull(String.valueOf(params.get("rUrl"))); + //request + String oPROJECT_CODE = sUtil.checkNull(String.valueOf(params.get("PROJECT_CODE"))); + String oINPUT_COMPANY = sUtil.checkNull(String.valueOf(request.getParameter("INPUT_COMPANY"))); + String oDEPT = sUtil.checkNull(String.valueOf(request.getParameter("DEPT"))); + String oADMIN_NAME = sUtil.checkNull(String.valueOf(request.getParameter("ADMIN_NAME"))); + String oEMAIL = sUtil.checkNull(String.valueOf(request.getParameter("EMAIL"))); + String oTEL = sUtil.checkNull(String.valueOf(params.get("TEL"))); + String oPHONE = sUtil.checkNull(String.valueOf(params.get("PHONE"))); + String oSEARCHDATE = sUtil.checkNull(String.valueOf(params.get("SEARCHDATE"))); + String oINPUTDATE = wUtil.getToday(); + String oPROJECT_NAME = sUtil.checkNull(String.valueOf(request.getParameter("PROJECT_NAME"))); + String oHOLE_NUMBER = sUtil.checkNull(String.valueOf(params.get("HOLE_NUMBER"))); + String oHOLE_ADMIN_NAME = sUtil.checkNull(String.valueOf(request.getParameter("HOLE_ADMIN_NAME"))); + String oHOLE_COMPANY = sUtil.checkNull(String.valueOf(request.getParameter("HOLE_COMPANY"))); + String oHOLE_TYPE = "Boring"; + String oHOLE_SPOT_SD = sUtil.checkNull(String.valueOf(params.get("HOLE_SPOT_SD"))); + String oHOLE_SPOT_SGG = sUtil.checkNull(String.valueOf(params.get("HOLE_SPOT_SGG"))); + String oHOLE_SPOT = sUtil.checkNull(String.valueOf(request.getParameter("HOLE_SPOT"))); + String oREMARK = sUtil.checkNull(String.valueOf(request.getParameter("REMARK"))); + String oREPORT_TYPE =sUtil.checkNull(String.valueOf(params.get("REPORT_TYPE"))); + String oTEMP_CONSTRUCT_SITE_INFO_CID =sUtil.checkNull(String.valueOf(params.get("TEMP_CONSTRUCT_SITE_INFO-CID"))); // 발주기관에서 생성한 프로젝트 식별 번호. TEMP_CONSTRUCT_SITE_INFO 테이블의 cid 컬럼 값. + if("".equals(oPROJECT_CODE)){ + HashMap prjCd = new HashMap(); + prjCd = getProjectCd(params); + oPROJECT_CODE=(String)prjCd.get("P_CODE")+prjCd.get("P_NUM"); + //System.out.println(oREPORT_TYPE); + + + params.put("PROJECT_CODE", oPROJECT_CODE); + params.put("PROJECT_NAME", oPROJECT_NAME); + params.put("INPUT_COMPANY", oINPUT_COMPANY); + params.put("DEPT", oDEPT); + params.put("ADMIN_NAME", oADMIN_NAME); + params.put("EMAIL", oEMAIL); + params.put("TEL", oTEL); + params.put("PHONE", oPHONE); + params.put("SEARCHDATE", oSEARCHDATE); + params.put("INPUTDATE", oINPUTDATE); + params.put("HOLE_NUMBER", oHOLE_NUMBER); + params.put("HOLE_ADMIN_NAME", oHOLE_ADMIN_NAME); + params.put("HOLE_COMPANY", oHOLE_COMPANY); + params.put("HOLE_TYPE", oHOLE_TYPE); + params.put("HOLE_SPOT_SD", oHOLE_SPOT_SD); + params.put("HOLE_SPOT_SGG", oHOLE_SPOT_SGG); + params.put("HOLE_SPOT", oHOLE_SPOT); + params.put("REMARK", oREMARK); + params.put("REPORT_TYPE", oREPORT_TYPE); + params.put("USERID",request.getSession().getAttribute("USERID")); + params.put("MODUSERID",request.getSession().getAttribute("USERID")); + //System.out.println("!!!!!!!!!!!params!!!!!!!!!!!!!!!+"+oPROJECT_NAME); + + //TEMP_PROJECT_INFO + params.put("PROJECT_START_SPOT_SD", oHOLE_SPOT_SD); + params.put("PROJECT_START_SPOT_SGG", oHOLE_SPOT_SGG); + params.put("PROJECT_START_SPOT", oHOLE_SPOT); + params.put("PROJECT_END_SPOT_SD", oHOLE_SPOT_SD); + params.put("PROJECT_END_SPOT_SGG", oHOLE_SPOT_SGG); + params.put("PROJECT_WORK_COMPANY", oHOLE_COMPANY); + params.put("PROJECT_HOLE_NUMBER", oHOLE_NUMBER); + params.put("STATE", "4"); + params.put("REPORT_TYPE", "CH"); + + // 사업명(프로젝트 명) 중복 검사를 수행한다. + + ArrayList> arrProjectCodeAndProjectName = getProjectCodeAndProjectNameByProjectName(params); + if( 0 < arrProjectCodeAndProjectName.size() ) { + //여기에서 프로젝트 중복되어서 다른 이름으로 지정해야한다는 메시지를 사용자에게 보여줘야 함. + model.addObject("result", "false"); + model.addObject("message", "해당 사업명이 이미 있습니다. 다른 사업명으로 입력 해주세요."); + model.setViewName("redirect:/index_db.do"); + return model; + } + + affectRow = insertMeta(params); + insertProject(params); + if("/insertMeta.do".equals(topPath)){ + rUrl = "/meta_info.do?REPORT_TYPE="+oREPORT_TYPE+"&PROJECT_CODE="+oPROJECT_CODE; + } + }else{ + params.put("PROJECT_CODE", oPROJECT_CODE); + params.put("PROJECT_NAME", oPROJECT_NAME); + params.put("INPUT_COMPANY", oINPUT_COMPANY); + params.put("DEPT", oDEPT); + params.put("ADMIN_NAME", oADMIN_NAME); + params.put("EMAIL", oEMAIL); + params.put("TEL", oTEL); + params.put("PHONE", oPHONE); + params.put("SEARCHDATE", oSEARCHDATE); + params.put("INPUTDATE", oINPUTDATE); + params.put("HOLE_NUMBER", oHOLE_NUMBER); + params.put("HOLE_ADMIN_NAME", oHOLE_ADMIN_NAME); + params.put("HOLE_COMPANY", oHOLE_COMPANY); + params.put("HOLE_TYPE", oHOLE_TYPE); + params.put("HOLE_SPOT_SD", oHOLE_SPOT_SD); + params.put("HOLE_SPOT_SGG", oHOLE_SPOT_SGG); + params.put("HOLE_SPOT", oHOLE_SPOT); + params.put("REMARK", oREMARK); + params.put("REPORT_TYPE", oREPORT_TYPE); + params.put("USERID",request.getSession().getAttribute("USERID")); + affectRow = updateMeta(params); + } + + if( oTEMP_CONSTRUCT_SITE_INFO_CID != null ) { + + params.put("PROJECT_CODE", oPROJECT_CODE); + params.put("CID", oTEMP_CONSTRUCT_SITE_INFO_CID); + params.put("PROJECT_STATE_CODE", 1); // 입력상태 1 = 입력 중 하드코딩되어있음. src\main\java\geoinfo\drilling\inquiry\service\impl\DrillingInquiryServiceImpl.java의 drillingInquiryList 메소드 참고. + + drillingInputService.updateProjectCodeAndProjectStateCodeByCid(request, params); + // TEMP_CONSTRUCT_SITE_INFO 테이블의 cid 해당하는 record의 PROJECT_CODE를 update한다. + } + + model.addObject("result", "true"); + model.addObject("oREPORT_TYPE", oREPORT_TYPE); + model.addObject("affectRow", affectRow); + model.addObject("oPROJECT_CODE", oPROJECT_CODE); + model.setViewName("redirect:/index_db.do"); + model.addObject("rUrl",rUrl); + return model; + } + @Override public int insertWebData(HashMap params) throws Exception { return projectListMapper.insertWebData(params); @@ -225,6 +369,87 @@ public class ProjectListServiceImpl implements ProjectListService { return projectListMapper.getConstNameByProjectNameFromTempConstructSiteInfo(params); } + @Override + public ModelAndView deleteAll(@RequestParam HashMap params, ModelAndView model ,HttpServletRequest request, HttpServletResponse response) throws Exception { + strUtil sUtil = new strUtil(); + int affectRow = 0; + UrlPathHelper urlPathHelper = new UrlPathHelper(); + String topPath = urlPathHelper.getOriginatingRequestUri(request); + String PROJECT_CODE = sUtil.checkNull(String.valueOf(params.get("PROJECT_CODE"))); + + // 2018-11-07 모의해킹 조치. 조현석 차장. + // 1. 프로젝트 코드 검사 유무 + if ( null != PROJECT_CODE && ! "".equals(PROJECT_CODE)) { + // 2. 관리자인지. + boolean ischk = false; + if ( request.getSession().getAttribute("CLS") != null && "9".equals(request.getSession().getAttribute("CLS") ) ) { + ischk = true; + } + if ( request.getSession().getAttribute("CLS") != null && "1".equals(request.getSession().getAttribute("CLS") ) ) { + // 기업회원일 경우 본인 프로젝트인지 확인. + String userId = (String) request.getSession().getAttribute("USERID"); + if ( userId != null && ! "".equals(userId)) { + HashMap projectMap = getInfo(params); + if ( projectMap != null && ! projectMap.isEmpty() ) { + String tmpID = (String) projectMap.get("USERID"); + System.out.println("userId - " + userId + " , tmpID = " + tmpID ); + // 프로젝트 생성 아이디가 같다면 삭제 권한 가능.. + if ( userId.equals( tmpID ) ) { + ischk = true; + } + } + } + //getInfo + } + + //3. 권한이 있는 경우에만 삭제가 가능하다. + if ( ischk ) { + String tableTemp[] = {"TEMP_META_INFO", "TEMP_PROJECT_INFO", "TEMP_TOPO_GEOLOGY", "TEMP_HEADER", "TEMP_HEADER_CORE", + "TEMP_SELECTCLASS_INFO", "TEMP_REFERENCE", "TEMP_LAYER_INFO", "TEMP_SPT", "TEMP_RQD", "TEMP_DSF", + "TEMP_FIELD_PRESSUREMETER", "TEMP_SLICKENSIDE_INFO", "TEMP_Q", "TEMP_RMR", "TEMP_FIELD_WATERPRESSURE", + "TEMP_WP_TEST", "TEMP_FIELD_PERMEABILITY", "TEMP_FIELDPER_SUB", "TEMP_FIELD_CONE_PENETRATION", + "TEMP_CONE_PENETRATION_IMAGES", "TEMP_SAMPLE_INFO", "TEMP_CLASSIFICATION", "TEMP_CONSOLIDATION_USUAL", + "TEMP_CONSOLIDATION", "TEMP_CBR_COMPAC", "TEMP_UNCONFINED_USUAL", "TEMP_TRIAXIAL_USUAL", "TEMP_TRIAXIAL_CU", + "TEMP_TRIAXIAL_UU", "TEMP_RESONANT_USUAL", "TEMP_RESONANT", "TEMP_REPEATED_TRIAXIAL_USUAL", + "TEMP_REPEATED_TRIAXIAL", "TEMP_ROCK_POINTLOAD", "TEMP_ROCK_JOINTSHEAR", "TEMP_ROCK_UNIAXIAL", + "TEMP_ROCK_TRIAXIAL", "TEMP_ROCK_RESONANT_USUAL", "TEMP_ROCK_RESONANT", "TEMP_ROCK_REPEATED_TRIAXIAL_U", + "TEMP_ROCK_REPEATED_TRIAXIAL", "TEMP_EXPERT_OPINION", "TEMP_RESISTIVITY_SURVEY", "TEMP_RESISTIVITY_SURVEY_SUB", + "TEMP_RESISTIVITY_SURVEY_FILE", "TEMP_REFRACTION_SURVEY", "TEMP_REFRACTION_SURVEY_SUB", + "TEMP_REFRACTION_SURVEY_FILE", "TEMP_BOREHOLE_WAVE", "TEMP_BOREHOLE_WAVE_PS", "TEMP_DOWNHOLE", + "TEMP_DOWNHOLE_PS", "TEMP_DENSITY", "TEMP_DENSITY_SUB"}; + params.put("PROJECT_CODE", PROJECT_CODE); + for(int i = 0; i src\main\java\geoinfo\drilling\inquiry\service\impl\DrillingInquiryServiceImpl.java의 drillingInquiryList 메소드 참고. + drillingInputService.updateProjectCodeAndProjectStateCodeByProjectCode(request, params); + + model.addObject("MODE", "DEL"); + model.addObject("affectRow", affectRow); + model.addObject("PROJECT_CODE", PROJECT_CODE); + model.setViewName("redirect:/index_db.do"); + } else { + model.addObject("MODE", "DEL"); + model.addObject("affectRow", -1); + model.addObject("PROJECT_CODE", PROJECT_CODE); + model.setViewName("redirect:/index_db.do"); + } + + } else { + model.addObject("MODE", "DEL"); + model.addObject("affectRow", 0); + model.addObject("PROJECT_CODE", null); + model.setViewName("redirect:/index_db.do"); + } + return model; + } + diff --git a/src/main/resources/egovframework/egovProps/globals.properties.sample b/src/main/resources/egovframework/egovProps/globals.properties.sample index f09b90e1..49734508 100644 --- a/src/main/resources/egovframework/egovProps/globals.properties.sample +++ b/src/main/resources/egovframework/egovProps/globals.properties.sample @@ -37,4 +37,9 @@ JWT.secret_key=RnrxhWlQksportalSystem!@!@$#@!@#@!$12442321 # The token expires in 1,800,000 milliseconds, which is equal to 30 minutes. JWT.access_expired=1800000 O2MAP.wms.url=http://10.dbnt.co.kr:2936/o2map/services/wms -LOCAL.wms.url=http://10.dbnt.co.kr:2936/o2map/services/wms \ No newline at end of file +LOCAL.wms.url=http://10.dbnt.co.kr:2936/o2map/services/wms + +############################################### +################### SHA256 ################# +############################################### +SHA256.secret_key=RnrxhwlQksportalSystem!@34$% \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/drilling/input/DrillingInputMapper.xml b/src/main/resources/egovframework/sqlmap/mapper/drilling/input/DrillingInputMapper.xml index 628aea1e..e5affc49 100644 --- a/src/main/resources/egovframework/sqlmap/mapper/drilling/input/DrillingInputMapper.xml +++ b/src/main/resources/egovframework/sqlmap/mapper/drilling/input/DrillingInputMapper.xml @@ -34,6 +34,7 @@ #{constCompanyTel}, 'C', #{userId}, + #{constUserid}, #{v_CID, mode=OUT, jdbcType=INTEGER}, #{v_RetCode, mode=OUT, jdbcType=INTEGER}, #{v_RetMsg, mode=OUT, jdbcType=VARCHAR} @@ -61,6 +62,23 @@ ) } + + + + + + `; if (tableId > 1) { @@ -338,6 +371,99 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe }); + document.querySelectorAll('.const-company-dept').forEach(function (companyNameInput) { + document.addEventListener('keyup', function (e) { + if (!e.target.classList.contains('const-company-dept')) return; + + const companyNameInput = e.target; + const companyName = companyNameInput.value.trim(); + const suggestionListDiv = companyNameInput + .closest('td') + .querySelector('.suggestionList'); + const hiddenUserIdInput = companyNameInput + .closest('td') + .querySelector('input[type="hidden"][name="const-user-id"]'); + const tableContainerDiv = companyNameInput + .closest('div') + if (!suggestionListDiv) return; + + if (companyName.length === 0) { + suggestionListDiv.style.display = 'none'; + return; + } + + $.ajax({ + type: 'GET', + url: '/drilling-company-list.json', + dataType: 'json', + data: { + companyName: companyName, + isProjectNameChecking: 'true' + }, + success: function (json) { + + suggestionListDiv.innerHTML = ''; + suggestionListDiv.style.display = 'none'; + + const list = json?.result?.list || []; + if (list.length === 0) return; + + list.forEach(function (item) { + + const suggestionItem = document.createElement('div'); + let maskedid = ''; + let partName = ''; + let newAddress = ''; + if (item.maskedid) maskedid = item.maskedid; + if (item.partName) partName = item.partName; + if (item.newAddress) newAddress = item.newAddress; + + const keyword = companyName; + const regex = new RegExp(keyword, 'gi'); + const boldCompanyName = item.companyName.replace( + regex, + '' + keyword + '' + ); + + suggestionItem.innerHTML = + '' + boldCompanyName + '
' + + '' + maskedid + '(' + partName + ')' + '/' + newAddress + ''; + + suggestionItem.addEventListener('click', function () { + companyNameInput.value = item.companyName; + hiddenUserIdInput.value = item.encryptId; + suggestionListDiv.style.display = 'none'; + setConstInfo(item.encryptId, tableContainerDiv); // 건설사 계정 선택시 이름, 연락처 자동 셋팅 + }); + + suggestionListDiv.appendChild(suggestionItem); + }); + + const rect = companyNameInput.getBoundingClientRect(); + suggestionListDiv.style.display = 'block'; + } + }); + }); + }); + + // 사용자가 추천 목록 외부를 클릭하면 목록 숨기기 (선택적) +/* document.onclick = function(event) { + if (event.target !== companyNameInput && event.target !== suggestionListDiv && !suggestionListDiv.contains(event.target)) { + suggestionListDiv.style.display = "none"; + } + };*/ + document.addEventListener('click', function (e) { + document.querySelectorAll('.suggestionList').forEach(function (list) { + + if (list.contains(e.target)) return; + + const input = list.closest('td')?.querySelector('.const-company-dept'); + if (input && input === e.target) return; + + list.style.display = 'none'; + }); + }); }); // 사업 등록 처리 @@ -390,6 +516,7 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe var constCompanyNameEle = document.getElementById('const-company-dept-' + dataIndexValue); if (constCompanyNameEle) { jsonItem.constCompanyName = constCompanyNameEle.value; + jsonItem.constCompanyName = constCompanyNameEle.value; } // 건설사 - 담당자 var constCompanyAdminEle = document.getElementById('const-company-admin-' + dataIndexValue); @@ -401,7 +528,10 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe if (constCompanyTelEle) { jsonItem.constCompanyTel = constCompanyTelEle.value; } - + + // 건설사 - 선택한 건설사 userid + var hiddenUseridEle = document.getElementById('const-user-id-' + dataIndexValue); + jsonItem.encUserid = hiddenUseridEle.value; if (cid) { jsonItem.cid=cid; } @@ -571,6 +701,24 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe         xhr.send();     } + function setConstInfo(encId, tblIdx) { + $.ajax({ + type: 'GET', + url: '/const-user-info.json', + dataType: 'json', + data: { + encUserid: encId + }, + success: function (json) { +// console.log(json) + let data = json.result.data + tblIdx.querySelector('input[id*=const-company-admin-]').value = data.userName; + tblIdx.querySelector('input[id*=const-company-tel-]').value = data.phone; + + } + }); + } + function triggerExcelUpload() { // 숨겨진 파일 선택 input을 클릭시킴 document.getElementById('excel-file-input').click(); @@ -704,13 +852,15 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe 건설사 - - + + + +