–chore: resolve merge conflict

main
thkim 2026-01-20 16:59:05 +09:00
commit 2856b4a956
11 changed files with 601 additions and 219 deletions

View File

@ -22,7 +22,29 @@ import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.SecretKeySpec;
import egovframework.com.cmm.service.EgovProperties;
public class CryptoUtil { 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 . * MD5 .
* *
@ -142,4 +164,27 @@ public class CryptoUtil {
byte[] decryptedTextBytes = cipher.doFinal(encryoptedTextBytes); byte[] decryptedTextBytes = cipher.doFinal(encryoptedTextBytes);
return new String(decryptedTextBytes); 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"
);
}
} }

View File

@ -171,6 +171,76 @@ public class DrillingInputController {
return jSONOResponse; 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<String,Object> 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<String,Object> 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이므로 반환 값은 필요 없습니다.
}
/** /**
* . * .
* @param request * @param request

View File

@ -15,6 +15,7 @@ public interface DrillingInputMapper {
public void spGetMasterCompanyDistrict(HashMap<String, Object> spGetMasterCompanyDistrictParams) throws SQLException; public void spGetMasterCompanyDistrict(HashMap<String, Object> spGetMasterCompanyDistrictParams) throws SQLException;
public List<EgovMap> selectConstructCompanyList(HashMap<String, Object> params) throws SQLException;
public EgovMap getDepartments(HashMap<String, Object> params) throws SQLException; public EgovMap getDepartments(HashMap<String, Object> params) throws SQLException;
public HashMap<String, Object> spUdtTblCsi(HashMap<String, Object> params) throws SQLException; public HashMap<String, Object> spUdtTblCsi(HashMap<String, Object> params) throws SQLException;

View File

@ -1,16 +1,23 @@
package geoinfo.drilling.input.service; package geoinfo.drilling.input.service;
import java.sql.SQLException;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.json.simple.JSONObject; import org.json.simple.JSONObject;
import egovframework.rte.psl.dataaccess.util.EgovMap;
public interface DrillingInputService { public interface DrillingInputService {
HashMap<String, Object> getOrganizationUserGlGmGsGfCodes(String userId) throws Exception; HashMap<String, Object> getOrganizationUserGlGmGsGfCodes(String userId) throws Exception;
HashMap<String, Object> drillingInputAdd(HttpServletRequest request, HttpServletResponse response, HashMap<String, Object> params) throws Exception; HashMap<String, Object> drillingInputAdd(HttpServletRequest request, HttpServletResponse response, HashMap<String, Object> params) throws Exception;
List<EgovMap> selectConstructCompanyList(HashMap<String, Object> params) throws Exception;
Map<String, Object> selectConstructUserInfo(HashMap<String, Object> params) throws Exception;
void getDepartments(HttpServletRequest request, HashMap<String, Object> params, JSONObject jsonResponse) throws Exception; void getDepartments(HttpServletRequest request, HashMap<String, Object> params, JSONObject jsonResponse) throws Exception;
HashMap<String, Object> updateProjectCodeAndProjectStateCodeByCid(HttpServletRequest request, HashMap<String, Object> params) throws Exception; HashMap<String, Object> updateProjectCodeAndProjectStateCodeByCid(HttpServletRequest request, HashMap<String, Object> params) throws Exception;
HashMap<String, Object> updateProjectCodeAndProjectStateCodeByProjectCode(HttpServletRequest request, HashMap<String, Object> params) throws Exception; HashMap<String, Object> updateProjectCodeAndProjectStateCodeByProjectCode(HttpServletRequest request, HashMap<String, Object> params) throws Exception;

View File

@ -6,27 +6,26 @@ import geoinfo.drilling.inquiry.service.DrillingInquiryService;
import geoinfo.main.login.service.LoginMapper; import geoinfo.main.login.service.LoginMapper;
import geoinfo.regi.common.service.CommonService; import geoinfo.regi.common.service.CommonService;
import geoinfo.regi.projectList.ProjectListController; import geoinfo.regi.projectList.ProjectListController;
import geoinfo.regi.projectList.service.ProjectListService;
import geoinfo.util.MyUtil; import geoinfo.util.MyUtil;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject; import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import egovframework.rte.psl.dataaccess.util.EgovMap; import egovframework.rte.psl.dataaccess.util.EgovMap;
import geoinfo.com.CryptoUtil;
@Service("drillingInputService") @Service("drillingInputService")
public class DrillingInputServiceImpl implements DrillingInputService { public class DrillingInputServiceImpl implements DrillingInputService {
@ -43,8 +42,9 @@ public class DrillingInputServiceImpl implements DrillingInputService {
@Resource(name ="commonService") @Resource(name ="commonService")
private CommonService 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("masterCompanyThCode", MyUtil.getStringFromObject( spGetMasterCompanyDistrictParams.get("v_gs") ));
params.put("masterCompanyName", MyUtil.getStringFromObject( spGetMasterCompanyDistrictParams.get("v_gf") )); 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 { try {
@ -108,6 +113,49 @@ public class DrillingInputServiceImpl implements DrillingInputService {
} }
@Override
public List<EgovMap> selectConstructCompanyList(HashMap<String, Object> params) throws Exception {
List<EgovMap> list = new ArrayList<EgovMap>();
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<String, Object> selectConstructUserInfo(HashMap<String, Object> params) throws Exception {
Map<String, Object> result = new HashMap<String, Object>();
// 건설사 계정 연결(암호화된 userid 복호화)
String encryptId = MyUtil.getStringFromObject( params.get("encUserid") );
String decryptId = CryptoUtil.decryptQuickAES(encryptId);
params.put("userid", decryptId);
Map<String, Object> infoData = loginMapper.selectWebMemberIn(params);
if (result != infoData) {
result.put("phone", infoData.get("phone"));
result.put("userName", infoData.get("user_name"));
}
return result;
}
@Override @Override
public void getDepartments(HttpServletRequest request, HashMap<String, Object> params, JSONObject jsonResponse) throws Exception { public void getDepartments(HttpServletRequest request, HashMap<String, Object> params, JSONObject jsonResponse) throws Exception {
@ -272,6 +320,11 @@ public class DrillingInputServiceImpl implements DrillingInputService {
findConstCompanyCodeByConstCompanyNameParams.put("masterCompanyThCode", MyUtil.getStringFromObject( findConstCompanyCodeByConstCompanyNameParams.get("v_gs") )); findConstCompanyCodeByConstCompanyNameParams.put("masterCompanyThCode", MyUtil.getStringFromObject( findConstCompanyCodeByConstCompanyNameParams.get("v_gs") ));
findConstCompanyCodeByConstCompanyNameParams.put("masterCompanyName", MyUtil.getStringFromObject( findConstCompanyCodeByConstCompanyNameParams.get("v_gf") )); 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 { try {
@ -376,7 +429,7 @@ public class DrillingInputServiceImpl implements DrillingInputService {
ModelAndView model = new ModelAndView(); ModelAndView model = new ModelAndView();
model = projectListController.insertMeta(metaParams, model, request, response); // insertMeta 호출 시 발생되는 오류는 조치하기. model = projectListService.insertMeta(metaParams, model, request, response); // insertMeta 호출 시 발생되는 오류는 조치하기.
return model; return model;
} }
@ -394,7 +447,7 @@ public class DrillingInputServiceImpl implements DrillingInputService {
// 2. ProjectListController의 deleteAll 호출 // 2. ProjectListController의 deleteAll 호출
ModelAndView model = new ModelAndView(); ModelAndView model = new ModelAndView();
model = projectListController.deleteAll(deleteParams, model, request, response); // deleteAll 호출 시 발생되는 오류는 조치하기. model = projectListService.deleteAll(deleteParams, model, request, response); // deleteAll 호출 시 발생되는 오류는 조치하기.
return model; return model;
} }

View File

@ -3,7 +3,6 @@ package geoinfo.regi.projectList;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.PrintWriter;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -12,7 +11,6 @@ import javax.servlet.http.HttpServletResponse;
import org.json.simple.JSONArray; import org.json.simple.JSONArray;
import org.json.simple.JSONObject; import org.json.simple.JSONObject;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@ -120,215 +118,14 @@ public class ProjectListController {
// 지반정보등록 // 지반정보등록
@RequestMapping(value = "/insertMeta.do") @RequestMapping(value = "/insertMeta.do")
public ModelAndView insertMeta(@RequestParam HashMap<String,Object> params, ModelAndView model ,HttpServletRequest request, HttpServletResponse response) throws Exception{ public ModelAndView insertMeta(@RequestParam HashMap<String,Object> params, ModelAndView model ,HttpServletRequest request, HttpServletResponse response) throws Exception{
UrlPathHelper urlPathHelper = new UrlPathHelper(); masterService.insertMeta(params, model, request, response);
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<HashMap<String, Object>> 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);
return model; return model;
} }
// 지반정보등록 (관리자) // 지반정보등록 (관리자)
@RequestMapping(value = "/deleteAll.do") @RequestMapping(value = "/deleteAll.do")
public ModelAndView deleteAll(@RequestParam HashMap<String,Object> params, ModelAndView model ,HttpServletRequest request, HttpServletResponse response) throws Exception{ public ModelAndView deleteAll(@RequestParam HashMap<String,Object> params, ModelAndView model ,HttpServletRequest request, HttpServletResponse response) throws Exception{
strUtil sUtil = new strUtil(); masterService.deleteAll(params, model, request, response);
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<tableTemp.length;i++){
params.put("tableName", tableTemp[i]);
affectRow += masterService.deleteProject(params);
}
affectRow += masterService.deleteWebData(params);
//발주기관에서 등록한 프로젝트와 연결이 된 경우, 해당 내용을 초기화 한다.
params.put("PROJECT_CODE", null);
params.put("WHERE_PROJECT_CODE", PROJECT_CODE);
params.put("PROJECT_STATE_CODE", 0); // 입력상태 0 = 미입력. 하드코딩되어있음 -> 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; return model;
} }

View File

@ -3,11 +3,18 @@ package geoinfo.regi.projectList.service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; 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 { public interface ProjectListService {
//170615 //170615
public int insertMeta(HashMap<String, Object> params) throws Exception; public int insertMeta(HashMap<String, Object> params) throws Exception;
public ModelAndView insertMeta(@RequestParam HashMap<String,Object> params, ModelAndView model ,HttpServletRequest request, HttpServletResponse response) throws Exception;
public int insertWebData(HashMap<String, Object> params) throws Exception; public int insertWebData(HashMap<String, Object> params) throws Exception;
public int insertProject(HashMap<String, Object> params) throws Exception; public int insertProject(HashMap<String, Object> params) throws Exception;
public int updateMeta(HashMap<String, Object> params) throws Exception; public int updateMeta(HashMap<String, Object> params) throws Exception;
@ -52,4 +59,7 @@ public interface ProjectListService {
public ArrayList<HashMap<String, Object>> getProjectCodeAndProjectNameByProjectName(HashMap<String, Object> params); public ArrayList<HashMap<String, Object>> getProjectCodeAndProjectNameByProjectName(HashMap<String, Object> params);
public ArrayList<HashMap<String, Object>> getProjectCodeAndProjectNameByProjectNameFromTempMetaInfo(HashMap<String, Object> params); public ArrayList<HashMap<String, Object>> getProjectCodeAndProjectNameByProjectNameFromTempMetaInfo(HashMap<String, Object> params);
public ArrayList<HashMap<String, Object>> getConstNameByProjectNameFromTempConstructSiteInfo(HashMap<String, Object> params); public ArrayList<HashMap<String, Object>> getConstNameByProjectNameFromTempConstructSiteInfo(HashMap<String, Object> params);
public ModelAndView deleteAll(@RequestParam HashMap<String,Object> params, ModelAndView model ,HttpServletRequest request, HttpServletResponse response) throws Exception;
} }

View File

@ -1,14 +1,23 @@
package geoinfo.regi.projectList.service.impl; package geoinfo.regi.projectList.service.impl;
import geoinfo.drilling.input.service.DrillingInputService;
import geoinfo.regi.projectList.service.ProjectListMapper; import geoinfo.regi.projectList.service.ProjectListMapper;
import geoinfo.regi.projectList.service.ProjectListService; import geoinfo.regi.projectList.service.ProjectListService;
import ictway.comm.util.strUtil;
import ictway.comm.web.WebUtil;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import javax.annotation.Resource; 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.stereotype.Service;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.util.UrlPathHelper;
@Service("projectListService") @Service("projectListService")
public class ProjectListServiceImpl implements ProjectListService { public class ProjectListServiceImpl implements ProjectListService {
@ -16,11 +25,146 @@ public class ProjectListServiceImpl implements ProjectListService {
@Resource(name = "projectListMapper") @Resource(name = "projectListMapper")
private ProjectListMapper projectListMapper; private ProjectListMapper projectListMapper;
@Autowired
private DrillingInputService drillingInputService;
//170615 //170615
@Override @Override
public int insertMeta(HashMap<String, Object> params) throws Exception { public int insertMeta(HashMap<String, Object> params) throws Exception {
return projectListMapper.insertMeta(params); return projectListMapper.insertMeta(params);
} }
@Override
public ModelAndView insertMeta(@RequestParam HashMap<String,Object> 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<HashMap<String, Object>> 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 @Override
public int insertWebData(HashMap<String, Object> params) throws Exception { public int insertWebData(HashMap<String, Object> params) throws Exception {
return projectListMapper.insertWebData(params); return projectListMapper.insertWebData(params);
@ -225,6 +369,87 @@ public class ProjectListServiceImpl implements ProjectListService {
return projectListMapper.getConstNameByProjectNameFromTempConstructSiteInfo(params); return projectListMapper.getConstNameByProjectNameFromTempConstructSiteInfo(params);
} }
@Override
public ModelAndView deleteAll(@RequestParam HashMap<String,Object> 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<tableTemp.length;i++){
params.put("tableName", tableTemp[i]);
affectRow += deleteProject(params);
}
affectRow += deleteWebData(params);
//발주기관에서 등록한 프로젝트와 연결이 된 경우, 해당 내용을 초기화 한다.
params.put("PROJECT_CODE", null);
params.put("WHERE_PROJECT_CODE", PROJECT_CODE);
params.put("PROJECT_STATE_CODE", 0); // 입력상태 0 = 미입력. 하드코딩되어있음 -> 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;
}

View File

@ -38,3 +38,8 @@ JWT.secret_key=RnrxhWlQksportalSystem!@!@$#@!@#@!$12442321
JWT.access_expired=1800000 JWT.access_expired=1800000
O2MAP.wms.url=http://10.dbnt.co.kr:2936/o2map/services/wms O2MAP.wms.url=http://10.dbnt.co.kr:2936/o2map/services/wms
LOCAL.wms.url=http://10.dbnt.co.kr:2936/o2map/services/wms LOCAL.wms.url=http://10.dbnt.co.kr:2936/o2map/services/wms
###############################################
################### SHA256 #################
###############################################
SHA256.secret_key=RnrxhwlQksportalSystem!@34$%

View File

@ -34,6 +34,7 @@
#{constCompanyTel}, #{constCompanyTel},
'C', 'C',
#{userId}, #{userId},
#{constUserid},
#{v_CID, mode=OUT, jdbcType=INTEGER}, #{v_CID, mode=OUT, jdbcType=INTEGER},
#{v_RetCode, mode=OUT, jdbcType=INTEGER}, #{v_RetCode, mode=OUT, jdbcType=INTEGER},
#{v_RetMsg, mode=OUT, jdbcType=VARCHAR} #{v_RetMsg, mode=OUT, jdbcType=VARCHAR}
@ -61,6 +62,23 @@
) } ) }
</select> </select>
<select id="selectConstructCompanyList" parameterType="map" resultType="egovMap">
SELECT
TRIM(wmi.COMPANY_NAME) AS COMPANY_NAME,
wmi.USERID,
SUBSTR(wmi.USERID, 1, 2) || '****' || SUBSTR(wmi.USERID, LENGTH(wmi.USERID)-1, 2) AS MaskedID,
TRIM(wmi.NEW_ADDRESS) AS NEW_ADDRESS,
TRIM(wmi.PART_NAME) AS PART_NAME,
wmi.COMPANY_REGIST_NO
FROM
web_member_in wmi
WHERE
wmi.CLS = 1
and wmi.COMPANY_NAME NOT IN ('111', 'a')
and wmi.COMPANY_NAME is not NULL
and wmi.COMPANY_NAME LIKE '%' || #{companyName} || '%'
</select>
<select id="getDepartments" parameterType="map" resultType="egovMap"> <select id="getDepartments" parameterType="map" resultType="egovMap">
SELECT SELECT
(SELECT tgd.GL_DISTRICT (SELECT tgd.GL_DISTRICT
@ -101,6 +119,7 @@
#{constCompanyAdmin}, #{constCompanyAdmin},
#{constCompanyTel}, #{constCompanyTel},
#{userId}, #{userId},
#{constUserid},
#{v_RetCode, mode=OUT, jdbcType=INTEGER}, #{v_RetCode, mode=OUT, jdbcType=INTEGER},
#{v_RetMsg, mode=OUT, jdbcType=VARCHAR} #{v_RetMsg, mode=OUT, jdbcType=VARCHAR}
) } ) }

View File

@ -35,6 +35,36 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
<c:import url="/drilling/common/includeTopMenu.do" charEncoding="UTF-8" /> <c:import url="/drilling/common/includeTopMenu.do" charEncoding="UTF-8" />
<!-- header end--> <!-- header end-->
<style>
.table-scrollable {
overflow: visible;
}
.info-row {
position: relative;
}
.suggestionList {
border: 1px solid #ccc;
width: 300px; /* 입력창 너비에 맞춰 조절 */
height: 160px;
overflow-y: scroll;
position: absolute;
top: 39px;
left: 6px;
background-color: white;
display: none;
z-index: 3;
}
.suggestionList div {
padding: 5px;
cursor: pointer;
}
.suggestionList div:hover {
background-color: #f0f0f0;
}
.suggestionList div .organizational-structure {
color: red;
}
</style>
<iframe class="iframe-body-none" name="hiddenFrame"></iframe> <iframe class="iframe-body-none" name="hiddenFrame"></iframe>
@ -87,6 +117,7 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
                        <button class="btn-green btn-excel-download" type="button" id="excel-download-btn"                         <button class="btn-green btn-excel-download" type="button" id="excel-download-btn"
onclick="javascript:fileDownload('발주기관_건설현장입력_양식.xls', 'drilling_construction_input_form.xls')">엑셀 양식 다운로드</button> onclick="javascript:fileDownload('발주기관_건설현장입력_양식.xls', 'drilling_construction_input_form.xls')">엑셀 양식 다운로드</button>
</div> </div>
<div id="suggestionList"></div>
<div id="table-container"> <div id="table-container">
</div> </div>
<div class="bottom-buttons"> <div class="bottom-buttons">
@ -229,13 +260,15 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
</tr> </tr>
<tr> <tr>
<th>건설사</th> <th>건설사</th>
<td colspan="3"> <td colspan="3" class="info-row">
<input type="text" value="" class="input-box information1" id="const-company-dept-` + tableId + `" placeholder="건설사명"> <input type="hidden" value="" id="const-user-id-` + tableId + `" name="const-user-id" />
<input type="text" value="" class="input-box information1 const-company-dept" id="const-company-dept-` + tableId + `" placeholder="건설사명">
<input type="text" value="" class="input-box information2" id="const-company-admin-` + tableId + `" placeholder="담당자"> <input type="text" value="" class="input-box information2" id="const-company-admin-` + tableId + `" placeholder="담당자">
<input type="text" value="010-0000-0000" class="input-box information3" id="const-company-tel-` + tableId + `" placeholder="담당자 연락처"> <input type="text" value="010-0000-0000" class="input-box information3" id="const-company-tel-` + tableId + `" placeholder="담당자 연락처">
<label class="check-box unselected-constructor-label" for="unselected-constructor-` + tableId + `"><input type="checkbox" id="unselected-constructor-` + tableId + `"> <label class="check-box unselected-constructor-label" for="unselected-constructor-` + tableId + `"><input type="checkbox" id="unselected-constructor-` + tableId + `">
<span class="unselected-constructor-label-text">건설사 미선정</span> <span class="unselected-constructor-label-text">건설사 미선정</span>
</label> </label>
<div style="display: none;" class="suggestionList"></div>
</td> </td>
</tr>`; </tr>`;
if (tableId > 1) { 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,
'<b style="background:yellow">' + keyword + '</b>'
);
suggestionItem.innerHTML =
'<span class="organizational-structure">' + boldCompanyName + '</span><br />' +
'<span>' + maskedid + '(' + partName + ')' + '/' + newAddress
'</span>';
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); var constCompanyNameEle = document.getElementById('const-company-dept-' + dataIndexValue);
if (constCompanyNameEle) { if (constCompanyNameEle) {
jsonItem.constCompanyName = constCompanyNameEle.value; jsonItem.constCompanyName = constCompanyNameEle.value;
jsonItem.constCompanyName = constCompanyNameEle.value;
} }
// 건설사 - 담당자 // 건설사 - 담당자
var constCompanyAdminEle = document.getElementById('const-company-admin-' + dataIndexValue); var constCompanyAdminEle = document.getElementById('const-company-admin-' + dataIndexValue);
@ -402,6 +529,9 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
jsonItem.constCompanyTel = constCompanyTelEle.value; jsonItem.constCompanyTel = constCompanyTelEle.value;
} }
// 건설사 - 선택한 건설사 userid
var hiddenUseridEle = document.getElementById('const-user-id-' + dataIndexValue);
jsonItem.encUserid = hiddenUseridEle.value;
if (cid) { if (cid) {
jsonItem.cid=cid; jsonItem.cid=cid;
} }
@ -571,6 +701,24 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
        xhr.send();         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() { function triggerExcelUpload() {
// 숨겨진 파일 선택 input을 클릭시킴 // 숨겨진 파일 선택 input을 클릭시킴
document.getElementById('excel-file-input').click(); document.getElementById('excel-file-input').click();
@ -704,13 +852,15 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
</tr> </tr>
<tr> <tr>
<th>건설사</th> <th>건설사</th>
<td colspan="3"> <td colspan="3" class="info-row">
<input type="text" value="` + const_company_dept + `" class="input-box information1" id="const-company-dept-` + tableId + `" placeholder="건설사명"> <input type="hidden" value="" id="const-user-id-` + tableId + `" name="const-user-id" />
<input type="text" value="` + const_company_dept + `" class="input-box information1 const-company-dept" id="const-company-dept-` + tableId + `" placeholder="건설사명">
<input type="text" value="` + const_company_name + `" class="input-box information2" id="const-company-admin-` + tableId + `" placeholder="담당자"> <input type="text" value="` + const_company_name + `" class="input-box information2" id="const-company-admin-` + tableId + `" placeholder="담당자">
<input type="text" value="` + const_company_tel + `" class="input-box information3" id="const-company-tel-` + tableId + `" placeholder="담당자 연락처"> <input type="text" value="` + const_company_tel + `" class="input-box information3" id="const-company-tel-` + tableId + `" placeholder="담당자 연락처">
<label class="check-box unselected-constructor-label" for="unselected-constructor-` + tableId + `"><input type="checkbox" id="unselected-constructor-` + tableId + `" ` + fin_const_company + `> <label class="check-box unselected-constructor-label" for="unselected-constructor-` + tableId + `"><input type="checkbox" id="unselected-constructor-` + tableId + `" ` + fin_const_company + `>
<span class="unselected-constructor-label-text">건설사 미선정</span> <span class="unselected-constructor-label-text">건설사 미선정</span>
</label> </label>
<div style="display: none;" class="suggestionList"></div>
</td> </td>
</tr> </tr>
<tr> <tr>