diff --git a/.classpath b/.classpath index 6b85f05..5e8b180 100644 --- a/.classpath +++ b/.classpath @@ -26,6 +26,7 @@ + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs index ae94e20..1c02d2a 100644 --- a/.settings/org.eclipse.core.resources.prefs +++ b/.settings/org.eclipse.core.resources.prefs @@ -1,6 +1,7 @@ eclipse.preferences.version=1 encoding//src/main/java=UTF-8 encoding//src/main/java/geoinfo/admins/chLog/DownloadAppController.java=UTF-8 +encoding//src/main/webapp/WEB-INF/views/admins/constructionProjectManagement/construction-project-statistics-index.jsp=UTF-8 encoding//src/main/webapp/body/map/web3d/web3d.jsp=UTF-8 encoding//src/main/webapp/popups/pop_201705_01.jsp=UTF-8 encoding//src/test/java=UTF-8 diff --git a/2_apply.bat b/2_apply.bat index fed4a40..f5500a1 100644 --- a/2_apply.bat +++ b/2_apply.bat @@ -60,7 +60,7 @@ if /i "!workspace_path:~1,2!" == "\:" ( rem # target_prefix մϴ. set "target_prefix=!workspace_path!\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\geoinfo_admin\" -explorer "!target_prefix!" +#explorer "!target_prefix!" echo target_prefix: "!target_prefix!" @@ -117,7 +117,7 @@ if "!line:~-4!" == ".xml" ( set "target_file=%target_prefix%!relative_path!" ) -rem --- [ κ] --- +rem --- --- if defined source_file ( if exist "!source_file!" ( echo [COPY] diff --git a/admin_list.txt b/admin_list.txt index f6b519d..2a57f21 100644 --- a/admin_list.txt +++ b/admin_list.txt @@ -1,26 +1,3 @@ #게시판 - 자료실에 파일 업로드 안 되는 문제 수정 건 -#src\main\resources\egovframework\egovProps\globals.properties -src\main\java\geoinfo\admins\board\CommunityController.java -src\main\java\geoinfo\admins\board\GroundReportController.java -src\main\java\geoinfo\admins\board\RefrncRoomController.java -src\main\java\geoinfo\admins\chLog\service\impl\DownloadAppServiceImpl.java -src\main\java\geoinfo\admins\chLog\ChInfoController.java -src\main\java\geoinfo\admins\chLog\DownloadAppController.java -src\main\java\geoinfo\admins\notice\NoticeMngController.java -src\main\java\geoinfo\admins\user\GeneralUserMngController.java -src\main\java\geoinfo\com\file\FileController.java - - - -src\main\java\geoinfo\admins\apiManagement\ApiManagementController.java -src\main\webapp\WEB-INF\views\admins\frame\top.jsp -src\main\webapp\WEB-INF\views\admins\main\index.jsp -src\main\webapp\WEB-INF\views\admins\main\main.jsp -src\main\webapp\WEB-INF\views\admins\mgmtApi\api-request-statistics-index.jsp -src\main\webapp\WEB-INF\views\admins\mgmtApi\left.jsp -src\main\webapp\images\admins\mgmtApi\1_tit_01.gif -src\main\webapp\WEB-INF\views\admins\constructionProjectManagement\left.jsp -src\main\java\geoinfo\admins\apiManagement\ApiManagementController.java -src\main\java\geoinfo\admins\constructionProjectManagement\ConstructionProjectManagementController.java -src\main\webapp\WEB-INF\views\admins\constructionProjectManagement\construction-user-mgmt-index.jsp -src\main\webapp\WEB-INF\views\admins\constructionProjectManagement\left.jsp \ No newline at end of file +src\main\webapp\WEB-INF\views\admins\constructionProjectManagement\construction-project-statistics-index.jsp +src\main\resources\geoinfo\sqlmap\mappers\admins\constructionProjectManagement\ConstructionProjectManagementMapper.xml \ No newline at end of file diff --git a/open_builded.bat b/open_builded.bat index e32afe9..05d7e94 100644 --- a/open_builded.bat +++ b/open_builded.bat @@ -1,10 +1,65 @@ -explorer C:\Users\dbnt\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\geoinfo_admin +@echo off +setlocal enabledelayedexpansion +rem # ---------------------------------------------------------------------- +rem # ȯ : path.txt Ŭ θ а ũ̽ θ մϴ. +rem # ---------------------------------------------------------------------- -rem For 192.168.10.20 -hostname | find "DESKTOP-9C42CR8" > nul -if %errorlevel% == 0 ( -explorer D:\app_geoinfo\app\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\old-geoinfo-or-kr-admin -) else ( - echo goodbye +rem # target_directory ġ Ǵ η մϴ. +set "target_directory=%~dp0" +set "path_file=%target_directory%path.txt" +set "eclipse_path=" + +rem # path.txt ϴ Ȯմϴ. +if not exist "%path_file%" ( + echo [ERROR] "%path_file%" ã ϴ. ũƮ մϴ. + pause + exit /b ) + +rem # path.txt 'eclipse=' ϴ ã Ŭ θ մϴ. +for /f "tokens=1,* delims==" %%a in ('findstr /b "eclipse=" "%path_file%"') do ( + set "eclipse_path=%%b" +) + +if not defined eclipse_path ( + echo [ERROR] "%path_file%" Ŭ θ ã ϴ. + pause + exit /b +) + +rem # Ŭ θ ϴ. +set "prefs_file=!eclipse_path!\configuration\.settings\org.eclipse.ui.ide.prefs" + +if not exist "!prefs_file!" ( + echo [ERROR] Eclipse ã ϴ: "!prefs_file!" + pause + exit /b +) + +rem # Ͽ ֱ ũ̽ оɴϴ. +for /f "tokens=1,* delims==" %%a in ('findstr /b "RECENT_WORKSPACES=" "!prefs_file!"') do ( + set "workspaces_line=%%b" +) + +rem # \n ġȯϿ ΰ ù ° θ ɴϴ. +set "workspaces_line_cleaned=!workspaces_line:\n= !" +for /f "tokens=1" %%w in ("!workspaces_line_cleaned!") do ( + set "workspace_path=%%w" +) + +rem # ο Ե ̽ (\\) 齽(\) մϴ. +set "workspace_path=!workspace_path:\\=\!" + +rem # ̺ 'D\:\' ߸ 'D:\' ٷϴ. +set "drive_letter=!workspace_path:~0,1!" +if /i "!workspace_path:~1,2!" == "\:" ( + set "workspace_path=!drive_letter!:!workspace_path:~3!" +) + +rem # target_prefix մϴ. +set "target_prefix=!workspace_path!\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\ld-geoinfo-or-kr-admin\" + +explorer "!target_prefix!" + +echo target_prefix: "!target_prefix!" \ No newline at end of file diff --git a/src/main/java/geoinfo/admins/constructionProjectManagement/ConstructionProjectManagementController.java b/src/main/java/geoinfo/admins/constructionProjectManagement/ConstructionProjectManagementController.java index 3090fa0..dd90f38 100644 --- a/src/main/java/geoinfo/admins/constructionProjectManagement/ConstructionProjectManagementController.java +++ b/src/main/java/geoinfo/admins/constructionProjectManagement/ConstructionProjectManagementController.java @@ -6,6 +6,7 @@ import java.io.UnsupportedEncodingException; import java.util.Date; import java.util.HashMap; import java.util.List; +import java.util.Map; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; @@ -25,6 +26,7 @@ import org.springframework.web.bind.annotation.ResponseBody; import egovframework.rte.psl.dataaccess.util.EgovMap; import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import geoinfo.admins.constructionProjectManagement.service.ConstructionProjectManagementService; import geoinfo.admins.user.service.DrillingInquiryService; import geoinfo.admins.user.service.GeneralUserMngService; import geoinfo.admins.user.service.HomeTrainingService; @@ -32,8 +34,6 @@ import geoinfo.comm.util.strUtil; import geoinfo.session.UserInfo; import geoinfo.util.MyUtil; - - @Controller public class ConstructionProjectManagementController { @Resource(name = "generalUserMngService") @@ -43,11 +43,16 @@ public class ConstructionProjectManagementController { private HomeTrainingService homeTrainingService; - @Resource(name = "drillingInquiryService") - private DrillingInquiryService drillingInquiryService; + // [변경] 새로 만든 서비스 주입 + @Resource(name = "constructionProjectManagementService") + private ConstructionProjectManagementService constructionProjectManagementService; + + // [추가] 기존 검색/조회 기능을 위해 필요 (변수 선언 추가) + @Resource(name = "drillingInquiryService") + private DrillingInquiryService drillingInquiryService; /** - * 집합교육 화면 + * 건설현장 통계 화면 * @param params * @param model * @param response @@ -66,6 +71,41 @@ public class ConstructionProjectManagementController { return "admins/constructionProjectManagement/construction-project-statistics-index"; } + /** + * 건설현장 통계 데이터 조회 (AJAX) + */ + @RequestMapping(value = "admins/constructionProjectManagement/selectStatistics.do", method = RequestMethod.POST) + @ResponseBody + public JSONObject selectStatistics(HttpServletRequest request, @RequestBody String strJSON, HttpServletResponse response) { + JSONObject jsonResponse = new JSONObject(); + + try { + // 1. 파라미터 파싱 + JSONParser jsonParser = new JSONParser(); + JSONObject jsonObject = (JSONObject) jsonParser.parse(strJSON); + HashMap params = new HashMap<>(); + + if (jsonObject != null) { + for(Object key : jsonObject.keySet()){ + params.put((String)key, jsonObject.get(key)); + } + } + + // 2. 서비스 호출 (새로 만든 서비스 사용) + Map stats = constructionProjectManagementService.selectConstructionProjectStatistics(params); + + jsonResponse.put("result", "true"); + jsonResponse.put("data", stats); + + } catch (Exception e) { + jsonResponse.put("result", "false"); + jsonResponse.put("message", e.getMessage()); + e.printStackTrace(); + } + + return jsonResponse; + } + /** * 집합교육 추가 * @param request @@ -541,6 +581,26 @@ public class ConstructionProjectManagementController { return "admins/constructionProjectManagement/visit-training-approval-system"; } + /** + * 건설현장 조회 목록화면 + * @param params + * @param model + * @param response + * @param request + * @return + * @throws Exception + */ + @RequestMapping(value = "admins/constructionProjectManagement/construction-site-index.do") + public String constructionSiteIndex(@RequestParam HashMap params, ModelMap model, HttpServletResponse response, HttpServletRequest request) throws Exception { + + if (!UserInfo.isValidSession(request, response, "admin")) { + return ""; + } + + model.addAttribute("params", params); + return "admins/constructionProjectManagement/construction-site-index"; + } + /** * 건설현장 관리 > 발주기관 계정 화면 * @param params @@ -612,42 +672,51 @@ public class ConstructionProjectManagementController { return "admins/constructionProjectManagement/construction-user-detail"; } - // 발주기관 프로젝트목록 가져오기 -// @ResponseBody -// @RequestMapping(value = "/drilling-project-list", method = RequestMethod.GET, produces = "application/json; charset=UTF-8") -// public String getDrillingProjectList(HttpServletRequest request, HttpServletResponse response, @RequestParam HashMap params) throws Exception { -// if (!UserInfo.isValidSession(request, response, "admin")) { -// return ""; -// } -// JSONObject jsonObject = new JSONObject(); -// strUtil sUtil = new strUtil(); -// -// String projectName = sUtil.checkNull((String)params.get("projectName")); -// -// 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", drillingInquiryService.drillingInquiryAutocompleteList(request, 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 response + * @param params + * @return + * @throws Exception + */ + @ResponseBody + @RequestMapping(value = "/drilling-project-list", method = RequestMethod.GET, produces = "application/json; charset=UTF-8") + public String getDrillingProjectList(HttpServletRequest request, HttpServletResponse response, @RequestParam HashMap params) throws Exception { + if (!UserInfo.isValidSession(request, response, "admin")) { + return ""; + } + JSONObject jsonObject = new JSONObject(); + strUtil sUtil = new strUtil(); + + String projectName = sUtil.checkNull((String)params.get("projectName")); + + JSONArray jsonListObject = new JSONArray(); + JSONObject result = new JSONObject(); + result.put("list", drillingInquiryService.drillingInquiryAutocompleteList(request, 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 params + * @param response + * @return + * @throws IOException + */ @RequestMapping(value = "/drilling/inquiry/list.do", method = RequestMethod.GET, produces = { "application/json; charset=utf-8" }) @ResponseBody public ResponseEntity drillingInquiryList ( @@ -771,4 +840,4 @@ public class ConstructionProjectManagementController { return "admins/constructionProjectManagement/construction-user-login-history"; } -} +} \ No newline at end of file diff --git a/src/main/java/geoinfo/admins/constructionProjectManagement/service/ConstructionProjectManagementMapper.java b/src/main/java/geoinfo/admins/constructionProjectManagement/service/ConstructionProjectManagementMapper.java new file mode 100644 index 0000000..9ab65e5 --- /dev/null +++ b/src/main/java/geoinfo/admins/constructionProjectManagement/service/ConstructionProjectManagementMapper.java @@ -0,0 +1,58 @@ +package geoinfo.admins.constructionProjectManagement.service; + +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import egovframework.rte.psl.dataaccess.util.EgovMap; + +@Mapper("constructionProjectManagementMapper") +public interface ConstructionProjectManagementMapper { + + /** + * 전체 건설현장 등록 건수 조회 + */ + public Long selectTotalCount(HashMap params) throws SQLException; + + /** + * 지역별 통계 조회 + */ + public List selectRegionCount(HashMap params) throws SQLException; + + /** + * 단계별 통계 조회 + */ + public List selectStageCount(HashMap params) throws SQLException; + + /** + * 최근 입력된 건설현장 목록 조회 (상위 N개) + */ + public List selectRecentProjects(HashMap params) throws SQLException; + + /** + * 통계 대상 기관명 목록 조회 + */ + public List selectStatTargetCompanies() throws SQLException; + + /** + * 기관명을 이용해 지역코드(GL, GM, GS) 구하기 (Stored Procedure 호출) + */ + public void spGetMasterCompanyDistrict(HashMap params) throws SQLException; + + /** + * 지역코드로 건설현장 수 구하기 + */ + public int selectSiteCountByDistrictCodes(HashMap params) throws SQLException; + + /** + * [신규] 기관별 입력 상태별(PROJECT_STATE_CODE) 현황 조회 + */ + public List selectProjectStateCountByDistrictCodes(HashMap params) throws SQLException; + + /** + * [신규] 기관별 성과 현황(CONST_STATE_CODE - 공사단계) 조회 + */ + public List selectConstStateCountByDistrictCodes(HashMap params) throws SQLException; + +} \ No newline at end of file diff --git a/src/main/java/geoinfo/admins/constructionProjectManagement/service/ConstructionProjectManagementService.java b/src/main/java/geoinfo/admins/constructionProjectManagement/service/ConstructionProjectManagementService.java new file mode 100644 index 0000000..28b863c --- /dev/null +++ b/src/main/java/geoinfo/admins/constructionProjectManagement/service/ConstructionProjectManagementService.java @@ -0,0 +1,16 @@ +package geoinfo.admins.constructionProjectManagement.service; + +import java.util.HashMap; +import java.util.Map; + +public interface ConstructionProjectManagementService { + + /** + * 건설현장 통계 대시보드 데이터 조회 + * @param params 검색 조건 + * @return 통계 결과 Map (totalCount, regionList, stageList, recentList 등) + * @throws Exception + */ + public Map selectConstructionProjectStatistics(HashMap params) throws Exception; + +} \ No newline at end of file diff --git a/src/main/java/geoinfo/admins/constructionProjectManagement/service/impl/ConstructionProjectManagementServiceImpl.java b/src/main/java/geoinfo/admins/constructionProjectManagement/service/impl/ConstructionProjectManagementServiceImpl.java new file mode 100644 index 0000000..818c874 --- /dev/null +++ b/src/main/java/geoinfo/admins/constructionProjectManagement/service/impl/ConstructionProjectManagementServiceImpl.java @@ -0,0 +1,209 @@ +package geoinfo.admins.constructionProjectManagement.service.impl; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import egovframework.rte.psl.dataaccess.util.EgovMap; +import geoinfo.admins.constructionProjectManagement.service.ConstructionProjectManagementMapper; +import geoinfo.admins.constructionProjectManagement.service.ConstructionProjectManagementService; +import geoinfo.admins.user.service.DrillingInputService; +import geoinfo.util.MyUtil; + +@Service("constructionProjectManagementService") +public class ConstructionProjectManagementServiceImpl implements ConstructionProjectManagementService { + + @Resource(name = "constructionProjectManagementMapper") + private ConstructionProjectManagementMapper constructionProjectManagementMapper; + + @Autowired + private DrillingInputService drillingInputService; + + @Override + public Map selectConstructionProjectStatistics(HashMap params) throws Exception { + Map resultMap = new HashMap<>(); + + // 1. 사용자 권한 및 조직 코드 설정 + String userId = MyUtil.getStringFromObject(params.get("userId")); + if (userId != null && !userId.isEmpty()) { + HashMap orgCodes = drillingInputService.getOrganizationUserGlGmGsGfCodes(userId); + if (orgCodes != null) { + params.put("masterCompanyOCode", orgCodes.get("v_gl")); + params.put("masterCompanyTwCode", orgCodes.get("v_gm")); + params.put("masterCompanyThCode", orgCodes.get("v_gs")); + params.put("masterCompanyName", orgCodes.get("v_gf")); + } + } + + try { + // 2. 전체 등록 수 조회 + Long totalCount = constructionProjectManagementMapper.selectTotalCount(params); + resultMap.put("totalCount", totalCount); + + // ================================================================= + // [기관별 통계 로직] 데이터 합산 및 정렬 + // ================================================================= + // 중복 기관 합산을 위한 맵 (Key: 기관명) + Map> uniqueStatsMap = new HashMap<>(); + + List companyList = constructionProjectManagementMapper.selectStatTargetCompanies(); + int busanTotalCount = 0; + + if (companyList != null) { + for (String companyName : companyList) { + if (companyName == null || companyName.trim().isEmpty()) continue; + + HashMap spParams = new HashMap<>(); + spParams.put("projectMasterCompanyName", companyName); + + constructionProjectManagementMapper.spGetMasterCompanyDistrict(spParams); + + String v_gl = (String) spParams.get("v_gl"); + String v_gm = (String) spParams.get("v_gm"); + String v_gs = (String) spParams.get("v_gs"); + + // [필터링] v_gl이 '01'인 경우에만 처리 + if ("01".equals(v_gl)) { + + // [명칭 보정] 한국도로공사 코드인 경우 이름을 강제 통일 (울산광역시 -> 한국도로공사 등) + if ("01".equals(v_gl) && "02".equals(v_gm) && "002".equals(v_gs)) { + companyName = "한국도로공사"; + } + + HashMap queryParams = new HashMap<>(); + queryParams.put("v_gl", v_gl); + queryParams.put("v_gm", v_gm); + queryParams.put("v_gs", v_gs); + + // 1) 전체 건수 + int siteCount = constructionProjectManagementMapper.selectSiteCountByDistrictCodes(queryParams); + + // 2) 입력 상태별 현황 + List inputStateList = constructionProjectManagementMapper.selectProjectStateCountByDistrictCodes(queryParams); + int[] inputStatusData = new int[7]; + for(EgovMap m : inputStateList) { + int code = MyUtil.getIntegerFromObject(m.get("code")); + int cnt = MyUtil.getIntegerFromObject(m.get("cnt")); + if(code >= 0 && code <= 6) inputStatusData[code] = cnt; + } + + // 3) 성과 현황 + List perfStateList = constructionProjectManagementMapper.selectConstStateCountByDistrictCodes(queryParams); + int[] performanceData = new int[6]; + for(EgovMap m : perfStateList) { + int code = MyUtil.getIntegerFromObject(m.get("code")); + int cnt = MyUtil.getIntegerFromObject(m.get("cnt")); + if(code >= 1 && code <= 6) performanceData[code - 1] = cnt; + } + + // [데이터 합산 로직] 이미 존재하는 기관명이면 데이터 누적 + if (uniqueStatsMap.containsKey(companyName)) { + Map existing = uniqueStatsMap.get(companyName); + + // 건수 합산 + int currentCount = (Integer) existing.get("count"); + existing.put("count", currentCount + siteCount); + + // 입력상태 배열 합산 + int[] exInput = (int[]) existing.get("inputStatusData"); + for(int i=0; i<7; i++) exInput[i] += inputStatusData[i]; + existing.put("inputStatusData", exInput); + + // 성과현황 배열 합산 + int[] exPerf = (int[]) existing.get("performanceData"); + for(int i=0; i<6; i++) exPerf[i] += performanceData[i]; + existing.put("performanceData", exPerf); + + } else { + // 신규 추가 + Map stat = new HashMap<>(); + stat.put("name", companyName); + stat.put("count", siteCount); + stat.put("gl", v_gl); + stat.put("gm", v_gm); + stat.put("gs", v_gs); + stat.put("inputStatusData", inputStatusData); + stat.put("performanceData", performanceData); + + uniqueStatsMap.put(companyName, stat); + } + + busanTotalCount += siteCount; + } + } + } + + // Map 값을 List로 변환 + List> institutionStats = new ArrayList<>(uniqueStatsMap.values()); + + // [정렬] GL_CODE ASC, GM_CODE ASC, GS_CODE ASC 순서로 정렬 + Collections.sort(institutionStats, new Comparator>() { + @Override + public int compare(Map o1, Map o2) { + String gl1 = (String) o1.get("gl"); String gl2 = (String) o2.get("gl"); + int result = compareString(gl1, gl2); if (result != 0) return result; + + String gm1 = (String) o1.get("gm"); String gm2 = (String) o2.get("gm"); + result = compareString(gm1, gm2); if (result != 0) return result; + + String gs1 = (String) o1.get("gs"); String gs2 = (String) o2.get("gs"); + return compareString(gs1, gs2); + } + private int compareString(String s1, String s2) { + return (s1 == null ? "" : s1).compareTo(s2 == null ? "" : s2); + } + }); + + resultMap.put("institutionStats", institutionStats); + resultMap.put("busanCount", busanTotalCount); + + // 3. 지역별 통계 조회 + List regionList = constructionProjectManagementMapper.selectRegionCount(params); + resultMap.put("regionList", regionList); + + // 4. 단계별 통계 + List stageList = constructionProjectManagementMapper.selectStageCount(params); + Map stageCounts = new HashMap<>(); + stageCounts.put("feasibility", 0); + stageCounts.put("basicDesign", 0); + stageCounts.put("detailDesign", 0); + stageCounts.put("construction", 0); + stageCounts.put("completion", 0); + stageCounts.put("maintenance", 0); + + for (EgovMap map : stageList) { + String stateCode = String.valueOf(map.get("constStateCode")); + Integer cnt = Integer.parseInt(String.valueOf(map.get("cnt"))); + + if ("1".equals(stateCode)) stageCounts.put("feasibility", cnt); + else if ("2".equals(stateCode)) stageCounts.put("basicDesign", cnt); + else if ("3".equals(stateCode)) stageCounts.put("detailDesign", cnt); + else if ("4".equals(stateCode)) stageCounts.put("construction", cnt); + else if ("5".equals(stateCode)) stageCounts.put("completion", cnt); + else if ("6".equals(stateCode)) stageCounts.put("maintenance", cnt); + } + resultMap.put("stageCounts", stageCounts); + + // 5. 최근 입력된 건설현장 + params.put("firstIndex", 0); + params.put("recordCountPerPage", 5); + List recentList = constructionProjectManagementMapper.selectRecentProjects(params); + resultMap.put("recentList", recentList); + + } catch (SQLException e) { + e.printStackTrace(); + throw new Exception("통계 데이터 조회 중 오류가 발생했습니다."); + } + + return resultMap; + } +} \ No newline at end of file diff --git a/src/main/java/geoinfo/admins/user/service/DrillingInquiryMapper.java b/src/main/java/geoinfo/admins/user/service/DrillingInquiryMapper.java index 5fbbf95..1593a40 100644 --- a/src/main/java/geoinfo/admins/user/service/DrillingInquiryMapper.java +++ b/src/main/java/geoinfo/admins/user/service/DrillingInquiryMapper.java @@ -10,7 +10,7 @@ import egovframework.rte.psl.dataaccess.util.EgovMap; @Mapper("drillingInquiryMapper") public interface DrillingInquiryMapper { -// public List drillingInquiryAutocompleteList(HashMap params) throws SQLException; + public List drillingInquiryAutocompleteList(HashMap params) throws SQLException; public Long sPCntTblCsiByKeyword(HashMap params) throws SQLException; public List spGetTblCsiByKeyword(HashMap params) throws SQLException; diff --git a/src/main/java/geoinfo/admins/user/service/DrillingInquiryService.java b/src/main/java/geoinfo/admins/user/service/DrillingInquiryService.java index a4bfa6e..0adff82 100644 --- a/src/main/java/geoinfo/admins/user/service/DrillingInquiryService.java +++ b/src/main/java/geoinfo/admins/user/service/DrillingInquiryService.java @@ -12,7 +12,7 @@ import egovframework.rte.psl.dataaccess.util.EgovMap; public interface DrillingInquiryService { -// List drillingInquiryAutocompleteList(HttpServletRequest request, HashMap params) throws Exception; + List drillingInquiryAutocompleteList(HttpServletRequest request, HashMap params) throws Exception; public JSONObject drillingInquiryList(HttpServletRequest request, HashMap params) throws Exception; diff --git a/src/main/java/geoinfo/admins/user/service/impl/DrillingInquiryServiceImpl.java b/src/main/java/geoinfo/admins/user/service/impl/DrillingInquiryServiceImpl.java index ce07b84..0e93cbd 100644 --- a/src/main/java/geoinfo/admins/user/service/impl/DrillingInquiryServiceImpl.java +++ b/src/main/java/geoinfo/admins/user/service/impl/DrillingInquiryServiceImpl.java @@ -38,14 +38,14 @@ public class DrillingInquiryServiceImpl implements DrillingInquiryService { @Autowired DrillingInputService drillingInputService; -// @Override -// public List drillingInquiryAutocompleteList(HttpServletRequest request, HashMap params) throws Exception { -// HashMap map = new HashMap(); -// String userid = (String)params.get("userid"); -// map.put("userId", userid); -// -// EgovMap result = userMapper.selectInfo(map); -// + @Override + public List drillingInquiryAutocompleteList(HttpServletRequest request, HashMap params) throws Exception { + HashMap map = new HashMap(); + String userid = (String)params.get("userid"); + map.put("userId", userid); + + EgovMap result = userMapper.selectInfo(map); + // int cls = MyUtil.getIntegerFromObject(result.get("cls")); // // if( cls == 2 ) { @@ -63,54 +63,54 @@ public class DrillingInquiryServiceImpl implements DrillingInquiryService { // // } // -// -// -// -// try { -// try { -// List list = drillingInquiryMapper.drillingInquiryAutocompleteList(params); -// return list; -// } catch (SQLException e) { -// String strTxt = -// "---------- BUG REPORTING START ----------" + "\n" + -// "에러 문구:[" + request.getRequestURI() + " " + "]" + "\n" + -// "params:[\n" + params.toString() + "\n]\n" + -// "e.getMessage():[\n" + e.getMessage() + "\n]\n" + "\n" + -// "new Date().toString():[" + new Date().toString() + "]\n" + "\n" + -// "---------- BUG REPORTING END ----------" + "\n" + -// ""; -// System.out.println(strTxt); -// throw new Exception( "오류가 발생하였습니다." + "\n" + "SQLException" ); -// } -// -// -// } catch (org.json.simple.parser.ParseException e) { -// // TODO Auto-generated catch block -// throw new Exception( e.getMessage() ); -// } -// } + + + + try { + try { + List list = drillingInquiryMapper.drillingInquiryAutocompleteList(params); + return list; + } catch (SQLException e) { + String strTxt = + "---------- BUG REPORTING START ----------" + "\n" + + "에러 문구:[" + request.getRequestURI() + " " + "]" + "\n" + + "params:[\n" + params.toString() + "\n]\n" + + "e.getMessage():[\n" + e.getMessage() + "\n]\n" + "\n" + + "new Date().toString():[" + new Date().toString() + "]\n" + "\n" + + "---------- BUG REPORTING END ----------" + "\n" + + ""; + System.out.println(strTxt); + throw new Exception( "오류가 발생하였습니다." + "\n" + "SQLException" ); + } -// public HashMap getOrganizationUserGlGmGsGfCodes(String userId) throws Exception { -// -// String projectMasterCompanyName = userMapper.findProjectMasterCompanyNameByUserid(userId); -// -// if( projectMasterCompanyName == null ) { -// throw new Exception( "발주 기관 계정에 설정된 기관이 존재하지 않습니다" ); -// } -// -// HashMap spGetMasterCompanyDistrictParams = new HashMap(); -// -// //String[] words = projectMasterCompanyName.split(" "); -// //String lastWord = words[words.length - 1]; -// //spGetMasterCompanyDistrictParams.put("projectMasterCompanyName", lastWord); -// spGetMasterCompanyDistrictParams.put("projectMasterCompanyName", projectMasterCompanyName); -// -// -// drillingInputMapper.spGetMasterCompanyDistrict(spGetMasterCompanyDistrictParams); -// -// return spGetMasterCompanyDistrictParams; -// -// } + + } catch (org.json.simple.parser.ParseException e) { + // TODO Auto-generated catch block + throw new Exception( e.getMessage() ); + } + } + + public HashMap getOrganizationUserGlGmGsGfCodes(String userId) throws Exception { + + String projectMasterCompanyName = userMapper.findProjectMasterCompanyNameByUserid(userId); + + if( projectMasterCompanyName == null ) { + throw new Exception( "발주 기관 계정에 설정된 기관이 존재하지 않습니다" ); + } + + HashMap spGetMasterCompanyDistrictParams = new HashMap(); + + //String[] words = projectMasterCompanyName.split(" "); + //String lastWord = words[words.length - 1]; + //spGetMasterCompanyDistrictParams.put("projectMasterCompanyName", lastWord); + spGetMasterCompanyDistrictParams.put("projectMasterCompanyName", projectMasterCompanyName); + + + drillingInputMapper.spGetMasterCompanyDistrict(spGetMasterCompanyDistrictParams); + + return spGetMasterCompanyDistrictParams; + + } @Override public JSONObject drillingInquiryList(HttpServletRequest request, HashMap params) throws Exception { @@ -118,20 +118,20 @@ public class DrillingInquiryServiceImpl implements DrillingInquiryService { JSONObject jsonResponse = new JSONObject(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String userId = MyUtil.getStringFromObject( params.get("userId") ); - -// if( userId == null){ -// throw new Exception( "로그인이 필요한 서비스입니다." ); -// } - - - HashMap spGetMasterCompanyDistrictParams = drillingInputService.getOrganizationUserGlGmGsGfCodes(userId); - - String masterCompanyOCode = MyUtil.getStringFromObject( spGetMasterCompanyDistrictParams.get("v_gl") ); - String masterCompanyTwCode = MyUtil.getStringFromObject( spGetMasterCompanyDistrictParams.get("v_gm") ); - String masterCompanyThCode = MyUtil.getStringFromObject( spGetMasterCompanyDistrictParams.get("v_gs") ); - String masterCompanyName = MyUtil.getStringFromObject( spGetMasterCompanyDistrictParams.get("v_gf") ); + String masterCompanyOCode = ""; + String masterCompanyTwCode = ""; + String masterCompanyThCode = ""; + String masterCompanyName = ""; String sortfield = "C".equals(MyUtil.getStringFromObject(params.get("constTag"))) ? "0" : "2"; String sorttype = "2"; + + if( userId != null){ + HashMap spGetMasterCompanyDistrictParams = drillingInputService.getOrganizationUserGlGmGsGfCodes(userId); + masterCompanyOCode = MyUtil.getStringFromObject( spGetMasterCompanyDistrictParams.get("v_gl") ); + masterCompanyTwCode = MyUtil.getStringFromObject( spGetMasterCompanyDistrictParams.get("v_gm") ); + masterCompanyThCode = MyUtil.getStringFromObject( spGetMasterCompanyDistrictParams.get("v_gs") ); + masterCompanyName = MyUtil.getStringFromObject( spGetMasterCompanyDistrictParams.get("v_gf") ); + } params.put("masterCompanyOCode", masterCompanyOCode); params.put("masterCompanyTwCode", masterCompanyTwCode); params.put("masterCompanyThCode", masterCompanyThCode); diff --git a/src/main/resources/geoinfo/sqlmap/mappers/admins/constructionProjectManagement/ConstructionProjectManagementMapper.xml b/src/main/resources/geoinfo/sqlmap/mappers/admins/constructionProjectManagement/ConstructionProjectManagementMapper.xml new file mode 100644 index 0000000..9648494 --- /dev/null +++ b/src/main/resources/geoinfo/sqlmap/mappers/admins/constructionProjectManagement/ConstructionProjectManagementMapper.xml @@ -0,0 +1,151 @@ + + + + + + + + + AND A.CONST_NAME LIKE '%' || #{constName} || '%' + + + AND A.MASTER_COMPANY_NAME LIKE '%' || #{masterCompanyName} || '%' + + + AND A.MASTER_COMPANY_ADMIN LIKE '%' || #{masterCompanyAdmin} || '%' + + + AND A.MASTER_COMPANY_TEL LIKE '%' || #{masterCompanyTel} || '%' + + + AND A.CONST_TAG = #{constTag} + + + AND A.MASTER_COMPANY_O_CODE = #{masterCompanyOCode} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/geoinfo/sqlmap/mappers/admins/user/DrillingInquiryMapper.xml b/src/main/resources/geoinfo/sqlmap/mappers/admins/user/DrillingInquiryMapper.xml index 234c318..fc5f496 100644 --- a/src/main/resources/geoinfo/sqlmap/mappers/admins/user/DrillingInquiryMapper.xml +++ b/src/main/resources/geoinfo/sqlmap/mappers/admins/user/DrillingInquiryMapper.xml @@ -4,65 +4,65 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - -
- - -
-
- - -
-
- - -
- - -
- -
- - -

건설현장 등록 건수

-
-
-
-

전체 등록 수

-

12 건

-
-
-
-
-

부산광역시

-

12 건

-
-
-
-
-

대구광역시

-

0 건

-
-
-
-
-

세종특별자치시

-

0 건

-
-
-
- -
-
-
-

최근 입력된 건설현장

-

부산 북항 재개발 사업 - 부산광역시

-

가덕도 신공항 건설공사 - 부산광역시

-

부산 에코델타시티 조성사업 - 부산광역시

-

동해남부선 복선전철화 사업 - 부산광역시

-

부산 도시철도 1호선 연장 공사 - 부산광역시

-
-
- -
-
-
-
-
-
-

단계별 건수

-

타당성조사 및 계획검토: 12건

-

기본설계: 0건

-

실시설계: 0건

-

시공중: 0건

-

준공: 0건

-

유지보수: 0건

-
-
-
-
-

프로젝트 연결률

-

부산광역시: 8.33%

-

대전광역시: 0%

-

세종특별자치시: 0%

-

서울특별시: 0%

-

대구광역시: 0%

-
-
- -
-
-
-
-
-
-
-
-

Text

-
-
-
-
-

Text

-
-
-
- - - - - - - + +
+
+
+

전체 기관별 등록 건수

+
+ +
+
+
+
+ + +
+ +
+ + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/admins/constructionProjectManagement/construction-site-index.jsp b/src/main/webapp/WEB-INF/views/admins/constructionProjectManagement/construction-site-index.jsp new file mode 100644 index 0000000..e7e212e --- /dev/null +++ b/src/main/webapp/WEB-INF/views/admins/constructionProjectManagement/construction-site-index.jsp @@ -0,0 +1,509 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> + + + + + + + + + + +
+ + + +
+ +
+ +
+
+ + +
+
+ +
Total: -
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
연번사업명입력상태사업내용발주기관현황건설사현황
사업기간사업단계
(설계 시공 준공 유지관리)
담당부서담당자담당연락처건설사명담당자담당연락처
+
+
+
+
+
+ +
+
+ +
+
+ + + + + diff --git a/src/main/webapp/WEB-INF/views/admins/constructionProjectManagement/construction-user-detail.jsp b/src/main/webapp/WEB-INF/views/admins/constructionProjectManagement/construction-user-detail.jsp index 3c6c6a8..21b942b 100644 --- a/src/main/webapp/WEB-INF/views/admins/constructionProjectManagement/construction-user-detail.jsp +++ b/src/main/webapp/WEB-INF/views/admins/constructionProjectManagement/construction-user-detail.jsp @@ -62,7 +62,9 @@ dataListEle.innerHTML = ''; var content = ''; - + if (obj.datas.length < 1) { + content = '조회된 건설현장이 없습니다.'; + } for( idx in obj.datas ) { const constStartDate = obj.datas[idx].constStartDate == null ? '알 수 없음' : obj.datas[idx].constStartDate; const constEndDate = obj.datas[idx].constEndDate == null ? '알 수 없음' : obj.datas[idx].constEndDate; diff --git a/src/main/webapp/WEB-INF/views/admins/constructionProjectManagement/left.jsp b/src/main/webapp/WEB-INF/views/admins/constructionProjectManagement/left.jsp index 1f0dda4..26b4bd9 100644 --- a/src/main/webapp/WEB-INF/views/admins/constructionProjectManagement/left.jsp +++ b/src/main/webapp/WEB-INF/views/admins/constructionProjectManagement/left.jsp @@ -52,7 +52,7 @@ - + @@ -77,6 +77,9 @@ img { border:0; } + diff --git a/src/main/webapp/WEB-INF/views/admins/frame/mainframe.jsp b/src/main/webapp/WEB-INF/views/admins/frame/mainframe.jsp index c919e3d..069cbba 100644 --- a/src/main/webapp/WEB-INF/views/admins/frame/mainframe.jsp +++ b/src/main/webapp/WEB-INF/views/admins/frame/mainframe.jsp @@ -16,7 +16,7 @@ var waitWin; 727보다 크게 하는 경우는 문제 없습니다. --> - + diff --git a/src/main/webapp/WEB-INF/views/admins/frame/mainframe2.jsp b/src/main/webapp/WEB-INF/views/admins/frame/mainframe2.jsp index 0136078..5b81eaf 100644 --- a/src/main/webapp/WEB-INF/views/admins/frame/mainframe2.jsp +++ b/src/main/webapp/WEB-INF/views/admins/frame/mainframe2.jsp @@ -16,7 +16,7 @@ var waitWin; 727보다 크게 하는 경우는 문제 없습니다. --> - + diff --git a/src/main/webapp/WEB-INF/views/admins/greport/left.jsp b/src/main/webapp/WEB-INF/views/admins/greport/left.jsp index b12e45a..886e2a4 100644 --- a/src/main/webapp/WEB-INF/views/admins/greport/left.jsp +++ b/src/main/webapp/WEB-INF/views/admins/greport/left.jsp @@ -7,7 +7,7 @@ -
+ diff --git a/src/main/webapp/WEB-INF/views/admins/notice/left.jsp b/src/main/webapp/WEB-INF/views/admins/notice/left.jsp index 5cdb894..d38bf92 100644 --- a/src/main/webapp/WEB-INF/views/admins/notice/left.jsp +++ b/src/main/webapp/WEB-INF/views/admins/notice/left.jsp @@ -8,7 +8,7 @@ -
+ diff --git a/src/main/webapp/WEB-INF/views/admins/userLog/left.jsp b/src/main/webapp/WEB-INF/views/admins/userLog/left.jsp index 864057c..8bd59ab 100644 --- a/src/main/webapp/WEB-INF/views/admins/userLog/left.jsp +++ b/src/main/webapp/WEB-INF/views/admins/userLog/left.jsp @@ -9,7 +9,7 @@