Merge branch 'main' of https://git.dbnt.co.kr/DBNT/old-geoinfo-or-kr-admin
commit
0dd59ea9e3
|
|
@ -26,6 +26,7 @@
|
||||||
<classpathentry exported="true" kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
|
<classpathentry exported="true" kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
|
||||||
<attributes>
|
<attributes>
|
||||||
<attribute name="maven.pomderived" value="true"/>
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
|
||||||
</attributes>
|
</attributes>
|
||||||
</classpathentry>
|
</classpathentry>
|
||||||
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v8.5"/>
|
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v8.5"/>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
eclipse.preferences.version=1
|
eclipse.preferences.version=1
|
||||||
encoding//src/main/java=UTF-8
|
encoding//src/main/java=UTF-8
|
||||||
encoding//src/main/java/geoinfo/admins/chLog/DownloadAppController.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/body/map/web3d/web3d.jsp=UTF-8
|
||||||
encoding//src/main/webapp/popups/pop_201705_01.jsp=UTF-8
|
encoding//src/main/webapp/popups/pop_201705_01.jsp=UTF-8
|
||||||
encoding//src/test/java=UTF-8
|
encoding//src/test/java=UTF-8
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@ if /i "!workspace_path:~1,2!" == "\:" (
|
||||||
rem # 최종 target_prefix를 설정합니다.
|
rem # 최종 target_prefix를 설정합니다.
|
||||||
set "target_prefix=!workspace_path!\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\geoinfo_admin\"
|
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!"
|
echo target_prefix: "!target_prefix!"
|
||||||
|
|
||||||
|
|
@ -117,7 +117,7 @@ if "!line:~-4!" == ".xml" (
|
||||||
set "target_file=%target_prefix%!relative_path!"
|
set "target_file=%target_prefix%!relative_path!"
|
||||||
)
|
)
|
||||||
|
|
||||||
rem --- [수정된 부분] 파일 복사 실행 및 결과 출력 ---
|
rem --- 파일 복사 실행 및 결과 출력 ---
|
||||||
if defined source_file (
|
if defined source_file (
|
||||||
if exist "!source_file!" (
|
if exist "!source_file!" (
|
||||||
echo [COPY]
|
echo [COPY]
|
||||||
|
|
|
||||||
|
|
@ -1,26 +1,3 @@
|
||||||
#게시판 - 자료실에 파일 업로드 안 되는 문제 수정 건
|
#게시판 - 자료실에 파일 업로드 안 되는 문제 수정 건
|
||||||
#src\main\resources\egovframework\egovProps\globals.properties
|
src\main\webapp\WEB-INF\views\admins\constructionProjectManagement\construction-project-statistics-index.jsp
|
||||||
src\main\java\geoinfo\admins\board\CommunityController.java
|
src\main\resources\geoinfo\sqlmap\mappers\admins\constructionProjectManagement\ConstructionProjectManagementMapper.xml
|
||||||
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
|
|
||||||
|
|
@ -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
|
rem # target_directory를 현재 배치 파일이 실행되는 경로로 설정합니다.
|
||||||
hostname | find "DESKTOP-9C42CR8" > nul
|
set "target_directory=%~dp0"
|
||||||
if %errorlevel% == 0 (
|
set "path_file=%target_directory%path.txt"
|
||||||
explorer D:\app_geoinfo\app\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\old-geoinfo-or-kr-admin
|
set "eclipse_path="
|
||||||
) else (
|
|
||||||
echo goodbye
|
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!"
|
||||||
|
|
@ -6,6 +6,7 @@ import java.io.UnsupportedEncodingException;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
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;
|
||||||
|
|
@ -25,6 +26,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
|
||||||
import egovframework.rte.psl.dataaccess.util.EgovMap;
|
import egovframework.rte.psl.dataaccess.util.EgovMap;
|
||||||
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
|
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.DrillingInquiryService;
|
||||||
import geoinfo.admins.user.service.GeneralUserMngService;
|
import geoinfo.admins.user.service.GeneralUserMngService;
|
||||||
import geoinfo.admins.user.service.HomeTrainingService;
|
import geoinfo.admins.user.service.HomeTrainingService;
|
||||||
|
|
@ -32,8 +34,6 @@ import geoinfo.comm.util.strUtil;
|
||||||
import geoinfo.session.UserInfo;
|
import geoinfo.session.UserInfo;
|
||||||
import geoinfo.util.MyUtil;
|
import geoinfo.util.MyUtil;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Controller
|
@Controller
|
||||||
public class ConstructionProjectManagementController {
|
public class ConstructionProjectManagementController {
|
||||||
@Resource(name = "generalUserMngService")
|
@Resource(name = "generalUserMngService")
|
||||||
|
|
@ -43,11 +43,16 @@ public class ConstructionProjectManagementController {
|
||||||
private HomeTrainingService homeTrainingService;
|
private HomeTrainingService homeTrainingService;
|
||||||
|
|
||||||
|
|
||||||
@Resource(name = "drillingInquiryService")
|
// [변경] 새로 만든 서비스 주입
|
||||||
private DrillingInquiryService drillingInquiryService;
|
@Resource(name = "constructionProjectManagementService")
|
||||||
|
private ConstructionProjectManagementService constructionProjectManagementService;
|
||||||
|
|
||||||
|
// [추가] 기존 검색/조회 기능을 위해 필요 (변수 선언 추가)
|
||||||
|
@Resource(name = "drillingInquiryService")
|
||||||
|
private DrillingInquiryService drillingInquiryService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 집합교육 화면
|
* 건설현장 통계 화면
|
||||||
* @param params
|
* @param params
|
||||||
* @param model
|
* @param model
|
||||||
* @param response
|
* @param response
|
||||||
|
|
@ -66,6 +71,41 @@ public class ConstructionProjectManagementController {
|
||||||
return "admins/constructionProjectManagement/construction-project-statistics-index";
|
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<String, Object> params = new HashMap<>();
|
||||||
|
|
||||||
|
if (jsonObject != null) {
|
||||||
|
for(Object key : jsonObject.keySet()){
|
||||||
|
params.put((String)key, jsonObject.get(key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 서비스 호출 (새로 만든 서비스 사용)
|
||||||
|
Map<String, Object> 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
|
* @param request
|
||||||
|
|
@ -541,6 +581,26 @@ public class ConstructionProjectManagementController {
|
||||||
return "admins/constructionProjectManagement/visit-training-approval-system";
|
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<String, Object> 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
|
* @param params
|
||||||
|
|
@ -612,42 +672,51 @@ public class ConstructionProjectManagementController {
|
||||||
return "admins/constructionProjectManagement/construction-user-detail";
|
return "admins/constructionProjectManagement/construction-user-detail";
|
||||||
}
|
}
|
||||||
|
|
||||||
// 발주기관 프로젝트목록 가져오기
|
/**
|
||||||
// @ResponseBody
|
* 프로젝트 목록 조회 프로젝트명 자동검색
|
||||||
// @RequestMapping(value = "/drilling-project-list", method = RequestMethod.GET, produces = "application/json; charset=UTF-8")
|
* @param request
|
||||||
// public String getDrillingProjectList(HttpServletRequest request, HttpServletResponse response, @RequestParam HashMap<String,Object> params) throws Exception {
|
* @param response
|
||||||
// if (!UserInfo.isValidSession(request, response, "admin")) {
|
* @param params
|
||||||
// return "";
|
* @return
|
||||||
// }
|
* @throws Exception
|
||||||
// JSONObject jsonObject = new JSONObject();
|
*/
|
||||||
// strUtil sUtil = new strUtil();
|
@ResponseBody
|
||||||
//
|
@RequestMapping(value = "/drilling-project-list", method = RequestMethod.GET, produces = "application/json; charset=UTF-8")
|
||||||
// String projectName = sUtil.checkNull((String)params.get("projectName"));
|
public String getDrillingProjectList(HttpServletRequest request, HttpServletResponse response, @RequestParam HashMap<String,Object> params) throws Exception {
|
||||||
//
|
if (!UserInfo.isValidSession(request, response, "admin")) {
|
||||||
// JSONArray jsonListObject = new JSONArray();
|
return "";
|
||||||
//
|
}
|
||||||
//// if( projectName == ""){
|
JSONObject jsonObject = new JSONObject();
|
||||||
//// jsonObject.put("resultMessage", "OK");
|
strUtil sUtil = new strUtil();
|
||||||
//// jsonObject.put("resultCode", 200);
|
|
||||||
//// jsonObject.put("result", new JSONObject().put("list", jsonListObject));
|
String projectName = sUtil.checkNull((String)params.get("projectName"));
|
||||||
//// } else {
|
|
||||||
// JSONObject result = new JSONObject();
|
JSONArray jsonListObject = new JSONArray();
|
||||||
// result.put("list", drillingInquiryService.drillingInquiryAutocompleteList(request, params));
|
JSONObject result = new JSONObject();
|
||||||
//
|
result.put("list", drillingInquiryService.drillingInquiryAutocompleteList(request, params));
|
||||||
// jsonObject.put("resultMessage", "OK");
|
|
||||||
// jsonObject.put("resultCode", 200);
|
jsonObject.put("resultMessage", "OK");
|
||||||
// jsonObject.put("result", result);
|
jsonObject.put("resultCode", 200);
|
||||||
//// }
|
jsonObject.put("result", result);
|
||||||
//
|
|
||||||
// response.setContentType("application/json; charset=UTF-8"); // 응답 헤더 설정
|
response.setContentType("application/json; charset=UTF-8"); // 응답 헤더 설정
|
||||||
// response.setCharacterEncoding("UTF-8"); // 응답 데이터 인코딩 설정 (중요)
|
response.setCharacterEncoding("UTF-8"); // 응답 데이터 인코딩 설정 (중요)
|
||||||
//
|
|
||||||
// try (OutputStream os = response.getOutputStream()) { // OutputStream 사용
|
try (OutputStream os = response.getOutputStream()) { // OutputStream 사용
|
||||||
// os.write(jsonObject.toString().getBytes("UTF-8")); // UTF-8 인코딩하여 출력
|
os.write(jsonObject.toString().getBytes("UTF-8")); // UTF-8 인코딩하여 출력
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// return null; // @ResponseBody이므로 반환 값은 필요 없습니다.
|
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" })
|
@RequestMapping(value = "/drilling/inquiry/list.do", method = RequestMethod.GET, produces = { "application/json; charset=utf-8" })
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public ResponseEntity<JSONObject> drillingInquiryList (
|
public ResponseEntity<JSONObject> drillingInquiryList (
|
||||||
|
|
|
||||||
|
|
@ -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<String, Object> params) throws SQLException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 지역별 통계 조회
|
||||||
|
*/
|
||||||
|
public List<EgovMap> selectRegionCount(HashMap<String, Object> params) throws SQLException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 단계별 통계 조회
|
||||||
|
*/
|
||||||
|
public List<EgovMap> selectStageCount(HashMap<String, Object> params) throws SQLException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 최근 입력된 건설현장 목록 조회 (상위 N개)
|
||||||
|
*/
|
||||||
|
public List<EgovMap> selectRecentProjects(HashMap<String, Object> params) throws SQLException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 통계 대상 기관명 목록 조회
|
||||||
|
*/
|
||||||
|
public List<String> selectStatTargetCompanies() throws SQLException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 기관명을 이용해 지역코드(GL, GM, GS) 구하기 (Stored Procedure 호출)
|
||||||
|
*/
|
||||||
|
public void spGetMasterCompanyDistrict(HashMap<String, Object> params) throws SQLException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 지역코드로 건설현장 수 구하기
|
||||||
|
*/
|
||||||
|
public int selectSiteCountByDistrictCodes(HashMap<String, Object> params) throws SQLException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [신규] 기관별 입력 상태별(PROJECT_STATE_CODE) 현황 조회
|
||||||
|
*/
|
||||||
|
public List<EgovMap> selectProjectStateCountByDistrictCodes(HashMap<String, Object> params) throws SQLException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [신규] 기관별 성과 현황(CONST_STATE_CODE - 공사단계) 조회
|
||||||
|
*/
|
||||||
|
public List<EgovMap> selectConstStateCountByDistrictCodes(HashMap<String, Object> params) throws SQLException;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -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<String, Object> selectConstructionProjectStatistics(HashMap<String, Object> params) throws Exception;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -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<String, Object> selectConstructionProjectStatistics(HashMap<String, Object> params) throws Exception {
|
||||||
|
Map<String, Object> resultMap = new HashMap<>();
|
||||||
|
|
||||||
|
// 1. 사용자 권한 및 조직 코드 설정
|
||||||
|
String userId = MyUtil.getStringFromObject(params.get("userId"));
|
||||||
|
if (userId != null && !userId.isEmpty()) {
|
||||||
|
HashMap<String, Object> 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<String, Map<String, Object>> uniqueStatsMap = new HashMap<>();
|
||||||
|
|
||||||
|
List<String> companyList = constructionProjectManagementMapper.selectStatTargetCompanies();
|
||||||
|
int busanTotalCount = 0;
|
||||||
|
|
||||||
|
if (companyList != null) {
|
||||||
|
for (String companyName : companyList) {
|
||||||
|
if (companyName == null || companyName.trim().isEmpty()) continue;
|
||||||
|
|
||||||
|
HashMap<String, Object> 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<String, Object> 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<EgovMap> 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<EgovMap> 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<String, Object> 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<String, Object> 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<Map<String, Object>> institutionStats = new ArrayList<>(uniqueStatsMap.values());
|
||||||
|
|
||||||
|
// [정렬] GL_CODE ASC, GM_CODE ASC, GS_CODE ASC 순서로 정렬
|
||||||
|
Collections.sort(institutionStats, new Comparator<Map<String, Object>>() {
|
||||||
|
@Override
|
||||||
|
public int compare(Map<String, Object> o1, Map<String, Object> 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<EgovMap> regionList = constructionProjectManagementMapper.selectRegionCount(params);
|
||||||
|
resultMap.put("regionList", regionList);
|
||||||
|
|
||||||
|
// 4. 단계별 통계
|
||||||
|
List<EgovMap> stageList = constructionProjectManagementMapper.selectStageCount(params);
|
||||||
|
Map<String, Integer> 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<EgovMap> recentList = constructionProjectManagementMapper.selectRecentProjects(params);
|
||||||
|
resultMap.put("recentList", recentList);
|
||||||
|
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
throw new Exception("통계 데이터 조회 중 오류가 발생했습니다.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return resultMap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -10,7 +10,7 @@ import egovframework.rte.psl.dataaccess.util.EgovMap;
|
||||||
@Mapper("drillingInquiryMapper")
|
@Mapper("drillingInquiryMapper")
|
||||||
public interface DrillingInquiryMapper {
|
public interface DrillingInquiryMapper {
|
||||||
|
|
||||||
// public List<EgovMap> drillingInquiryAutocompleteList(HashMap<String, Object> params) throws SQLException;
|
public List<EgovMap> drillingInquiryAutocompleteList(HashMap<String, Object> params) throws SQLException;
|
||||||
|
|
||||||
public Long sPCntTblCsiByKeyword(HashMap<String, Object> params) throws SQLException;
|
public Long sPCntTblCsiByKeyword(HashMap<String, Object> params) throws SQLException;
|
||||||
public List<EgovMap> spGetTblCsiByKeyword(HashMap<String, Object> params) throws SQLException;
|
public List<EgovMap> spGetTblCsiByKeyword(HashMap<String, Object> params) throws SQLException;
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ import egovframework.rte.psl.dataaccess.util.EgovMap;
|
||||||
|
|
||||||
|
|
||||||
public interface DrillingInquiryService {
|
public interface DrillingInquiryService {
|
||||||
// List<EgovMap> drillingInquiryAutocompleteList(HttpServletRequest request, HashMap<String, Object> params) throws Exception;
|
List<EgovMap> drillingInquiryAutocompleteList(HttpServletRequest request, HashMap<String, Object> params) throws Exception;
|
||||||
|
|
||||||
public JSONObject drillingInquiryList(HttpServletRequest request, HashMap<String, Object> params) throws Exception;
|
public JSONObject drillingInquiryList(HttpServletRequest request, HashMap<String, Object> params) throws Exception;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,14 +38,14 @@ public class DrillingInquiryServiceImpl implements DrillingInquiryService {
|
||||||
@Autowired
|
@Autowired
|
||||||
DrillingInputService drillingInputService;
|
DrillingInputService drillingInputService;
|
||||||
|
|
||||||
// @Override
|
@Override
|
||||||
// public List<EgovMap> drillingInquiryAutocompleteList(HttpServletRequest request, HashMap<String, Object> params) throws Exception {
|
public List<EgovMap> drillingInquiryAutocompleteList(HttpServletRequest request, HashMap<String, Object> params) throws Exception {
|
||||||
// HashMap<String, Object> map = new HashMap<String, Object>();
|
HashMap<String, Object> map = new HashMap<String, Object>();
|
||||||
// String userid = (String)params.get("userid");
|
String userid = (String)params.get("userid");
|
||||||
// map.put("userId", userid);
|
map.put("userId", userid);
|
||||||
//
|
|
||||||
// EgovMap result = userMapper.selectInfo(map);
|
EgovMap result = userMapper.selectInfo(map);
|
||||||
//
|
|
||||||
// int cls = MyUtil.getIntegerFromObject(result.get("cls"));
|
// int cls = MyUtil.getIntegerFromObject(result.get("cls"));
|
||||||
//
|
//
|
||||||
// if( cls == 2 ) {
|
// if( cls == 2 ) {
|
||||||
|
|
@ -63,54 +63,54 @@ public class DrillingInquiryServiceImpl implements DrillingInquiryService {
|
||||||
//
|
//
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// try {
|
|
||||||
// try {
|
|
||||||
// List<EgovMap> 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() );
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// public HashMap<String, Object> getOrganizationUserGlGmGsGfCodes(String userId) throws Exception {
|
|
||||||
//
|
|
||||||
// String projectMasterCompanyName = userMapper.findProjectMasterCompanyNameByUserid(userId);
|
try {
|
||||||
//
|
try {
|
||||||
// if( projectMasterCompanyName == null ) {
|
List<EgovMap> list = drillingInquiryMapper.drillingInquiryAutocompleteList(params);
|
||||||
// throw new Exception( "발주 기관 계정에 설정된 기관이 존재하지 않습니다" );
|
return list;
|
||||||
// }
|
} catch (SQLException e) {
|
||||||
//
|
String strTxt =
|
||||||
// HashMap<String, Object> spGetMasterCompanyDistrictParams = new HashMap<String, Object>();
|
"---------- BUG REPORTING START ----------" + "\n" +
|
||||||
//
|
"에러 문구:[" + request.getRequestURI() + " " + "]" + "\n" +
|
||||||
// //String[] words = projectMasterCompanyName.split(" ");
|
"params:[\n" + params.toString() + "\n]\n" +
|
||||||
// //String lastWord = words[words.length - 1];
|
"e.getMessage():[\n" + e.getMessage() + "\n]\n" + "\n" +
|
||||||
// //spGetMasterCompanyDistrictParams.put("projectMasterCompanyName", lastWord);
|
"new Date().toString():[" + new Date().toString() + "]\n" + "\n" +
|
||||||
// spGetMasterCompanyDistrictParams.put("projectMasterCompanyName", projectMasterCompanyName);
|
"---------- BUG REPORTING END ----------" + "\n" +
|
||||||
//
|
"";
|
||||||
//
|
System.out.println(strTxt);
|
||||||
// drillingInputMapper.spGetMasterCompanyDistrict(spGetMasterCompanyDistrictParams);
|
throw new Exception( "오류가 발생하였습니다." + "\n" + "SQLException" );
|
||||||
//
|
}
|
||||||
// return spGetMasterCompanyDistrictParams;
|
|
||||||
//
|
|
||||||
// }
|
} catch (org.json.simple.parser.ParseException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
throw new Exception( e.getMessage() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public HashMap<String, Object> getOrganizationUserGlGmGsGfCodes(String userId) throws Exception {
|
||||||
|
|
||||||
|
String projectMasterCompanyName = userMapper.findProjectMasterCompanyNameByUserid(userId);
|
||||||
|
|
||||||
|
if( projectMasterCompanyName == null ) {
|
||||||
|
throw new Exception( "발주 기관 계정에 설정된 기관이 존재하지 않습니다" );
|
||||||
|
}
|
||||||
|
|
||||||
|
HashMap<String, Object> spGetMasterCompanyDistrictParams = new HashMap<String, Object>();
|
||||||
|
|
||||||
|
//String[] words = projectMasterCompanyName.split(" ");
|
||||||
|
//String lastWord = words[words.length - 1];
|
||||||
|
//spGetMasterCompanyDistrictParams.put("projectMasterCompanyName", lastWord);
|
||||||
|
spGetMasterCompanyDistrictParams.put("projectMasterCompanyName", projectMasterCompanyName);
|
||||||
|
|
||||||
|
|
||||||
|
drillingInputMapper.spGetMasterCompanyDistrict(spGetMasterCompanyDistrictParams);
|
||||||
|
|
||||||
|
return spGetMasterCompanyDistrictParams;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JSONObject drillingInquiryList(HttpServletRequest request, HashMap<String, Object> params) throws Exception {
|
public JSONObject drillingInquiryList(HttpServletRequest request, HashMap<String, Object> params) throws Exception {
|
||||||
|
|
@ -118,20 +118,20 @@ public class DrillingInquiryServiceImpl implements DrillingInquiryService {
|
||||||
JSONObject jsonResponse = new JSONObject();
|
JSONObject jsonResponse = new JSONObject();
|
||||||
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||||
String userId = MyUtil.getStringFromObject( params.get("userId") );
|
String userId = MyUtil.getStringFromObject( params.get("userId") );
|
||||||
|
String masterCompanyOCode = "";
|
||||||
// if( userId == null){
|
String masterCompanyTwCode = "";
|
||||||
// throw new Exception( "로그인이 필요한 서비스입니다." );
|
String masterCompanyThCode = "";
|
||||||
// }
|
String masterCompanyName = "";
|
||||||
|
|
||||||
|
|
||||||
HashMap<String, Object> 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 sortfield = "C".equals(MyUtil.getStringFromObject(params.get("constTag"))) ? "0" : "2";
|
String sortfield = "C".equals(MyUtil.getStringFromObject(params.get("constTag"))) ? "0" : "2";
|
||||||
String sorttype = "2";
|
String sorttype = "2";
|
||||||
|
|
||||||
|
if( userId != null){
|
||||||
|
HashMap<String, Object> 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("masterCompanyOCode", masterCompanyOCode);
|
||||||
params.put("masterCompanyTwCode", masterCompanyTwCode);
|
params.put("masterCompanyTwCode", masterCompanyTwCode);
|
||||||
params.put("masterCompanyThCode", masterCompanyThCode);
|
params.put("masterCompanyThCode", masterCompanyThCode);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,151 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
|
||||||
|
<mapper namespace="geoinfo.admins.constructionProjectManagement.service.ConstructionProjectManagementMapper">
|
||||||
|
|
||||||
|
<!-- [공통] 검색 조건 Fragment -->
|
||||||
|
<sql id="searchConditions">
|
||||||
|
<if test="constName != null and constName != ''">
|
||||||
|
AND A.CONST_NAME LIKE '%' || #{constName} || '%'
|
||||||
|
</if>
|
||||||
|
<if test="masterCompanyName != null and masterCompanyName != ''">
|
||||||
|
AND A.MASTER_COMPANY_NAME LIKE '%' || #{masterCompanyName} || '%'
|
||||||
|
</if>
|
||||||
|
<if test="masterCompanyAdmin != null and masterCompanyAdmin != ''">
|
||||||
|
AND A.MASTER_COMPANY_ADMIN LIKE '%' || #{masterCompanyAdmin} || '%'
|
||||||
|
</if>
|
||||||
|
<if test="masterCompanyTel != null and masterCompanyTel != ''">
|
||||||
|
AND A.MASTER_COMPANY_TEL LIKE '%' || #{masterCompanyTel} || '%'
|
||||||
|
</if>
|
||||||
|
<if test="constTag != null and constTag != ''">
|
||||||
|
AND A.CONST_TAG = #{constTag}
|
||||||
|
</if>
|
||||||
|
<if test="masterCompanyOCode != null and masterCompanyOCode != ''">
|
||||||
|
AND A.MASTER_COMPANY_O_CODE = #{masterCompanyOCode}
|
||||||
|
</if>
|
||||||
|
</sql>
|
||||||
|
|
||||||
|
<!-- 1. 전체 등록 수 조회 -->
|
||||||
|
<select id="selectTotalCount" parameterType="hashmap" resultType="long">
|
||||||
|
SELECT COUNT(*)
|
||||||
|
FROM TEMP_CONSTRUCT_SITE_INFO A
|
||||||
|
WHERE 1=1
|
||||||
|
<include refid="searchConditions" />
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- 2. 지역별 통계 조회 -->
|
||||||
|
<select id="selectRegionCount" parameterType="hashmap" resultType="egovMap">
|
||||||
|
SELECT
|
||||||
|
SUBSTR(B.PROJECT_START_SPOT, 1, 2) AS REGION_NAME,
|
||||||
|
COUNT(*) AS CNT
|
||||||
|
FROM TEMP_CONSTRUCT_SITE_INFO A
|
||||||
|
LEFT JOIN TBL_PROJECT_INFO B ON A.PROJECT_CODE = B.PROJECT_CODE
|
||||||
|
WHERE 1=1
|
||||||
|
AND B.PROJECT_START_SPOT IS NOT NULL
|
||||||
|
<include refid="searchConditions" />
|
||||||
|
GROUP BY SUBSTR(B.PROJECT_START_SPOT, 1, 2)
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- 3. 단계별 통계 조회 (전체) -->
|
||||||
|
<select id="selectStageCount" parameterType="hashmap" resultType="egovMap">
|
||||||
|
SELECT
|
||||||
|
CONST_STATE_CODE AS "constStateCode",
|
||||||
|
COUNT(*) AS "cnt"
|
||||||
|
FROM TEMP_CONSTRUCT_SITE_INFO A
|
||||||
|
WHERE 1=1
|
||||||
|
<include refid="searchConditions" />
|
||||||
|
GROUP BY CONST_STATE_CODE
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- 4. 최근 입력된 건설현장 목록 조회 -->
|
||||||
|
<select id="selectRecentProjects" parameterType="hashmap" resultType="egovMap">
|
||||||
|
SELECT *
|
||||||
|
FROM (
|
||||||
|
SELECT ROWNUM RN, TB.*
|
||||||
|
FROM (
|
||||||
|
SELECT
|
||||||
|
A.CID,
|
||||||
|
A.CONST_NAME,
|
||||||
|
B.PROJECT_START_SPOT,
|
||||||
|
A.CONST_STATE_CODE,
|
||||||
|
A.CONST_COMPANY_CODE,
|
||||||
|
A.PROJECT_STATE_CODE,
|
||||||
|
A.CRT_DT,
|
||||||
|
A.MOD_DT
|
||||||
|
FROM TEMP_CONSTRUCT_SITE_INFO A
|
||||||
|
LEFT JOIN TBL_PROJECT_INFO B ON A.PROJECT_CODE = B.PROJECT_CODE
|
||||||
|
WHERE 1=1
|
||||||
|
<include refid="searchConditions" />
|
||||||
|
ORDER BY A.CRT_DT DESC
|
||||||
|
) TB
|
||||||
|
)
|
||||||
|
WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- 5. 통계 대상 기관명 목록 조회 -->
|
||||||
|
<select id="selectStatTargetCompanies" resultType="string">
|
||||||
|
SELECT tmc.COM_NAME
|
||||||
|
FROM (
|
||||||
|
SELECT
|
||||||
|
wmi.*,
|
||||||
|
ROW_NUMBER() OVER (PARTITION BY wmi.PROJECT_MASTER_COMPANY_CODE ORDER BY wmi.DATETIME DESC) as rn
|
||||||
|
FROM
|
||||||
|
web_member_in wmi
|
||||||
|
WHERE
|
||||||
|
wmi.cls = 2
|
||||||
|
) wmi
|
||||||
|
LEFT JOIN TBL_MASTER_COMPANY tmc ON
|
||||||
|
TRIM(wmi.PROJECT_MASTER_COMPANY_CODE) = tmc.COM_CODE
|
||||||
|
WHERE rn = 1
|
||||||
|
AND tmc.COM_NAME IS NOT NULL
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- 6. 기관명을 이용해 지역코드 구하기 (SP 호출) -->
|
||||||
|
<select id="spGetMasterCompanyDistrict" statementType="CALLABLE" parameterType="hashmap">
|
||||||
|
{ call SP_GET_MASTER_COMPANY_DISTRICT (
|
||||||
|
#{projectMasterCompanyName, mode=IN, jdbcType=VARCHAR},
|
||||||
|
#{v_gl, mode=OUT, jdbcType=VARCHAR},
|
||||||
|
#{v_gm, mode=OUT, jdbcType=VARCHAR},
|
||||||
|
#{v_gs, mode=OUT, jdbcType=VARCHAR},
|
||||||
|
#{v_gf, mode=OUT, jdbcType=VARCHAR}
|
||||||
|
)}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- 7. 지역코드로 건설현장 수 구하기 -->
|
||||||
|
<select id="selectSiteCountByDistrictCodes" parameterType="hashmap" resultType="int">
|
||||||
|
SELECT COUNT(*)
|
||||||
|
FROM TEMP_CONSTRUCT_SITE_INFO
|
||||||
|
WHERE MASTER_COMPANY_O_CODE = #{v_gl}
|
||||||
|
AND MASTER_COMPANY_TW_CODE = #{v_gm}
|
||||||
|
AND MASTER_COMPANY_TH_CODE = #{v_gs}
|
||||||
|
<!-- 유효한 현장만 카운트할 경우 아래 주석 해제 -->
|
||||||
|
<!-- AND CONST_TAG = 'Y' -->
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- [수정] 8. 기관별 입력 상태별(PROJECT_STATE_CODE) 현황 조회 -->
|
||||||
|
<!-- CONST_TAG = 'Y' 조건 제거 -->
|
||||||
|
<select id="selectProjectStateCountByDistrictCodes" parameterType="hashmap" resultType="egovMap">
|
||||||
|
SELECT
|
||||||
|
PROJECT_STATE_CODE AS "code",
|
||||||
|
COUNT(*) AS "cnt"
|
||||||
|
FROM TEMP_CONSTRUCT_SITE_INFO
|
||||||
|
WHERE MASTER_COMPANY_O_CODE = #{v_gl}
|
||||||
|
AND MASTER_COMPANY_TW_CODE = #{v_gm}
|
||||||
|
AND MASTER_COMPANY_TH_CODE = #{v_gs}
|
||||||
|
GROUP BY PROJECT_STATE_CODE
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- [수정] 9. 기관별 성과 현황(CONST_STATE_CODE) 조회 -->
|
||||||
|
<!-- CONST_TAG = 'Y' 조건 제거 -->
|
||||||
|
<select id="selectConstStateCountByDistrictCodes" parameterType="hashmap" resultType="egovMap">
|
||||||
|
SELECT
|
||||||
|
CONST_STATE_CODE AS "code",
|
||||||
|
COUNT(*) AS "cnt"
|
||||||
|
FROM TEMP_CONSTRUCT_SITE_INFO
|
||||||
|
WHERE MASTER_COMPANY_O_CODE = #{v_gl}
|
||||||
|
AND MASTER_COMPANY_TW_CODE = #{v_gm}
|
||||||
|
AND MASTER_COMPANY_TH_CODE = #{v_gs}
|
||||||
|
GROUP BY CONST_STATE_CODE
|
||||||
|
</select>
|
||||||
|
|
||||||
|
</mapper>
|
||||||
|
|
@ -4,65 +4,65 @@
|
||||||
<mapper namespace="geoinfo.admins.user.service.DrillingInquiryMapper">
|
<mapper namespace="geoinfo.admins.user.service.DrillingInquiryMapper">
|
||||||
|
|
||||||
|
|
||||||
<!-- <select id="drillingInquiryAutocompleteList" parameterType="map" resultType="egovMap"> -->
|
<select id="drillingInquiryAutocompleteList" parameterType="map" resultType="egovMap">
|
||||||
<!-- SELECT -->
|
SELECT
|
||||||
<!-- tgld.GL_DISTRICT, -->
|
tgld.GL_DISTRICT,
|
||||||
<!-- tgmd.GM_DISTRICT, -->
|
tgmd.GM_DISTRICT,
|
||||||
<!-- tgsd.GS_DISTRICT, -->
|
tgsd.GS_DISTRICT,
|
||||||
<!-- tcsi.CID, -->
|
tcsi.CID,
|
||||||
<!-- tcsi.CONST_NAME, -->
|
tcsi.CONST_NAME,
|
||||||
<!-- tcsi.CONST_START_DATE -->
|
tcsi.CONST_START_DATE
|
||||||
<!-- FROM -->
|
FROM
|
||||||
<!-- TEMP_CONSTRUCT_SITE_INFO tcsi -->
|
TEMP_CONSTRUCT_SITE_INFO tcsi
|
||||||
<!-- LEFT JOIN ( -->
|
LEFT JOIN (
|
||||||
<!-- SELECT -->
|
SELECT
|
||||||
<!-- * -->
|
*
|
||||||
<!-- FROM -->
|
FROM
|
||||||
<!-- tbl_gl_district -->
|
tbl_gl_district
|
||||||
<!-- WHERE -->
|
WHERE
|
||||||
<!-- use_yn = 'Y' -->
|
use_yn = 'Y'
|
||||||
<!-- ORDER BY -->
|
ORDER BY
|
||||||
<!-- gl_code -->
|
gl_code
|
||||||
<!-- ) tgld ON tcsi.MASTER_COMPANY_O_CODE = tgld.GL_CODE -->
|
) tgld ON tcsi.MASTER_COMPANY_O_CODE = tgld.GL_CODE
|
||||||
<!-- LEFT JOIN ( -->
|
LEFT JOIN (
|
||||||
<!-- SELECT -->
|
SELECT
|
||||||
<!-- * -->
|
*
|
||||||
<!-- FROM -->
|
FROM
|
||||||
<!-- tbl_gm_district -->
|
tbl_gm_district
|
||||||
<!-- WHERE -->
|
WHERE
|
||||||
<!-- use_yn = 'Y' -->
|
use_yn = 'Y'
|
||||||
<!-- ORDER BY -->
|
ORDER BY
|
||||||
<!-- gm_code -->
|
gm_code
|
||||||
<!-- ) tgmd ON tcsi.MASTER_COMPANY_O_CODE = tgmd.GL_CODE AND tcsi.MASTER_COMPANY_TW_CODE = tgmd.GM_CODE -->
|
) tgmd ON tcsi.MASTER_COMPANY_O_CODE = tgmd.GL_CODE AND tcsi.MASTER_COMPANY_TW_CODE = tgmd.GM_CODE
|
||||||
<!-- LEFT JOIN ( -->
|
LEFT JOIN (
|
||||||
<!-- SELECT -->
|
SELECT
|
||||||
<!-- * -->
|
*
|
||||||
<!-- FROM -->
|
FROM
|
||||||
<!-- tbl_gs_district -->
|
tbl_gs_district
|
||||||
<!-- WHERE -->
|
WHERE
|
||||||
<!-- use_yn = 'Y' -->
|
use_yn = 'Y'
|
||||||
<!-- ORDER BY -->
|
ORDER BY
|
||||||
<!-- gs_code -->
|
gs_code
|
||||||
<!-- ) tgsd ON -->
|
) tgsd ON
|
||||||
<!-- tcsi.MASTER_COMPANY_O_CODE = tgsd.GL_CODE AND -->
|
tcsi.MASTER_COMPANY_O_CODE = tgsd.GL_CODE AND
|
||||||
<!-- tcsi.MASTER_COMPANY_TW_CODE = tgsd.GM_CODE AND -->
|
tcsi.MASTER_COMPANY_TW_CODE = tgsd.GM_CODE AND
|
||||||
<!-- tcsi.MASTER_COMPANY_TH_CODE = tgsd.GS_CODE -->
|
tcsi.MASTER_COMPANY_TH_CODE = tgsd.GS_CODE
|
||||||
<!-- WHERE -->
|
WHERE
|
||||||
<!-- tcsi.PROJECT_CODE IS NULL -->
|
tcsi.PROJECT_CODE IS NULL
|
||||||
<!-- <if test="projectName != null and projectName != ''"> -->
|
<if test="projectName != null and projectName != ''">
|
||||||
<!-- AND tcsi.CONST_NAME LIKE '%' || #{projectName} || '%' -->
|
AND tcsi.CONST_NAME LIKE '%' || #{projectName} || '%'
|
||||||
<!-- </if> -->
|
</if>
|
||||||
<!-- <if test="glDistrict != null"> -->
|
<if test="glDistrict != null">
|
||||||
<!-- <![CDATA[ AND tgld.GL_CODE = #{glDistrict} ]]> -->
|
<![CDATA[ AND tgld.GL_CODE = #{glDistrict} ]]>
|
||||||
<!-- </if> -->
|
</if>
|
||||||
<!-- <if test="gmDistrict != null"> -->
|
<if test="gmDistrict != null">
|
||||||
<!-- <![CDATA[ AND tgmd.GM_CODE = #{gmDistrict} ]]> -->
|
<![CDATA[ AND tgmd.GM_CODE = #{gmDistrict} ]]>
|
||||||
<!-- </if> -->
|
</if>
|
||||||
<!-- <if test="gsDistrict != null"> -->
|
<if test="gsDistrict != null">
|
||||||
<!-- <![CDATA[ AND tgsd.GS_CODE = #{gsDistrict} ]]> -->
|
<![CDATA[ AND tgsd.GS_CODE = #{gsDistrict} ]]>
|
||||||
<!-- </if> -->
|
</if>
|
||||||
<!-- ORDER BY tcsi.CRT_DT DESC -->
|
ORDER BY tcsi.CRT_DT DESC
|
||||||
<!-- </select> -->
|
</select>
|
||||||
|
|
||||||
<select id="sPCntTblCsiByKeyword" parameterType="map" resultType="long">
|
<select id="sPCntTblCsiByKeyword" parameterType="map" resultType="long">
|
||||||
SELECT SP_CNT_TBL_CSI_BY_KEYWORD(
|
SELECT SP_CNT_TBL_CSI_BY_KEYWORD(
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
<!--
|
<!--
|
||||||
body
|
body
|
||||||
{
|
{
|
||||||
background-image: url(${pageContext.request.contextPath}/images/admins/left_bak.jpg);
|
background-image: url(${pageContext.request.contextPath}/images/admins/left_bak_2511.jpg);
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
|
|
@ -21,7 +21,7 @@ img { border: 0; }
|
||||||
<body>
|
<body>
|
||||||
<table id="Table_01" width="244" height="100%" border="0" cellpadding="0" cellspacing="0" background="${pageContext.request.contextPath}/images/admins/left_back.gif">
|
<table id="Table_01" width="244" height="100%" border="0" cellpadding="0" cellspacing="0" background="${pageContext.request.contextPath}/images/admins/left_back.gif">
|
||||||
<tr>
|
<tr>
|
||||||
<td width="244" height="668" valign="top" background="${pageContext.request.contextPath}/images/admins/left_bak.jpg">
|
<td width="244" height="738" valign="top" background="${pageContext.request.contextPath}/images/admins/left_bak_2511.jpg">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="${pageContext.request.contextPath}/images/admins/board/5_tit_01.gif" width="244" height="62" /></td>
|
<td><img src="${pageContext.request.contextPath}/images/admins/board/5_tit_01.gif" width="244" height="62" /></td>
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ function goUrlForState(pId, menuId) {
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
body
|
body
|
||||||
{
|
{
|
||||||
background-image: url(${pageContext.request.contextPath}/images/admins/left_bak.jpg);
|
background-image: url(${pageContext.request.contextPath}/images/admins/left_bak_2511.jpg);
|
||||||
margin-left:0;
|
margin-left:0;
|
||||||
margin-top:0;
|
margin-top:0;
|
||||||
margin-right:0;
|
margin-right:0;
|
||||||
|
|
@ -29,7 +29,7 @@ img { border:0; }
|
||||||
<body>
|
<body>
|
||||||
<table id="Table_01" width="244" height="100%" border="0" cellpadding="0" cellspacing="0" background="${pageContext.request.contextPath}/images/admins/left_bak.gif">
|
<table id="Table_01" width="244" height="100%" border="0" cellpadding="0" cellspacing="0" background="${pageContext.request.contextPath}/images/admins/left_bak.gif">
|
||||||
<tr>
|
<tr>
|
||||||
<td width="244" height="668" valign="top" background="${pageContext.request.contextPath}/images/admins/left_bak.jpg">
|
<td width="244" height="738" valign="top" background="${pageContext.request.contextPath}/images/admins/left_bak_2511.jpg">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="${pageContext.request.contextPath}/images/admins/chLog/3_tit_01.gif" width="244" height="62" /></td>
|
<td><img src="${pageContext.request.contextPath}/images/admins/chLog/3_tit_01.gif" width="244" height="62" /></td>
|
||||||
|
|
|
||||||
|
|
@ -3,175 +3,318 @@
|
||||||
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
|
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
|
||||||
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
|
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
|
||||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
|
<!-- Chart.js 라이브러리 -->
|
||||||
<!-- <script src="${pageContext.request.contextPath}/js/admins/chart.js"></script> -->
|
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
|
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
|
||||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
|
<link rel="stylesheet" HREF="${pageContext.request.contextPath}/css/admins/style.css" type="text/css">
|
||||||
<script src="${pageContext.request.contextPath}/js/admins/common.js"></script>
|
|
||||||
<link rel="stylesheet" HREF="${pageContext.request.contextPath}/css/admins/style.css" type="text/css">
|
|
||||||
|
|
||||||
<script>
|
<style>
|
||||||
var context = "${pageContext.request.contextPath}";
|
/* 그래프 컨테이너 스타일 */
|
||||||
|
.chart-wrapper {
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
padding: 20px;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 0 2px 4px rgba(0,0,0,0.05);
|
||||||
|
}
|
||||||
|
.chart-header {
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #333;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
border-bottom: 2px solid #c87202;
|
||||||
|
}
|
||||||
|
.sub-chart-title {
|
||||||
|
text-align: center;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
color: #555;
|
||||||
|
}
|
||||||
|
.sub-chart-box {
|
||||||
|
height: 300px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
let xhr;
|
<script>
|
||||||
if(window.XMLHttpRequest) {
|
var context = "${pageContext.request.contextPath}";
|
||||||
xhr = new XMLHttpRequest();
|
var myChartInstance = null; // 상단 전체 단계별 차트
|
||||||
} else {
|
var instChartInstance = null; // 하단 전체 기관별 차트
|
||||||
// IE5, IE6 일때
|
|
||||||
xhr = new ActiveXObject("Microsoft.XMLHTTP");
|
|
||||||
}
|
|
||||||
|
|
||||||
const ctx = document.getElementById('myChart');
|
// [1] 문서 로드 완료 시 초기 실행 (Vanilla JS)
|
||||||
|
document.addEventListener("DOMContentLoaded", function() {
|
||||||
|
moveConstructionUserDetail();
|
||||||
|
});
|
||||||
|
|
||||||
new Chart(ctx, {
|
// [2] 통계 조회 함수 (Vanilla JS)
|
||||||
type: 'bar',
|
function moveConstructionUserDetail() {
|
||||||
data: {
|
var params = { constTag: "Y" };
|
||||||
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
|
var xhr = new XMLHttpRequest();
|
||||||
datasets: [{
|
xhr.open("POST", context + "/admins/constructionProjectManagement/selectStatistics.do", true);
|
||||||
label: '# of Votes',
|
xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
|
||||||
data: [12, 19, 3, 5, 2, 3],
|
|
||||||
borderWidth: 1
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
options: {
|
|
||||||
scales: {
|
|
||||||
y: {
|
|
||||||
beginAtZero: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
xhr.onreadystatechange = function() {
|
||||||
<h1>건설현장 통계</h1>
|
if (xhr.readyState === 4) {
|
||||||
<div class="home-trainning">
|
if (xhr.status === 200) {
|
||||||
|
try {
|
||||||
|
var res = JSON.parse(xhr.responseText);
|
||||||
|
if(res.result == "true" || res.result == true) {
|
||||||
|
renderStatistics(res.data);
|
||||||
|
} else {
|
||||||
|
alert("통계 데이터를 불러오는 중 오류가 발생했습니다: " + (res.message || ""));
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error("JSON 파싱 오류:", e);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.error("AJAX Error:", xhr.statusText);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
xhr.send(JSON.stringify(params));
|
||||||
|
}
|
||||||
|
|
||||||
|
// [3] 화면 갱신 메인 함수
|
||||||
|
function renderStatistics(data) {
|
||||||
|
// (1) 상단 요약 수치 갱신 (Vanilla JS)
|
||||||
|
var totalElem = document.getElementById("total-count");
|
||||||
|
if (totalElem) totalElem.textContent = (data.totalCount || 0) + " 건";
|
||||||
|
|
||||||
|
var busanElem = document.getElementById("busan-count");
|
||||||
|
if (data.busanCount !== undefined && busanElem) {
|
||||||
|
busanElem.textContent = data.busanCount + " 건";
|
||||||
|
}
|
||||||
|
|
||||||
|
// (2) 상단 전체 단계별 차트 갱신
|
||||||
|
updateStageChart(data.stageCounts || {});
|
||||||
|
|
||||||
|
// (3) [신규] 기관별 상세 그래프 동적 생성 (입력상태, 성과현황)
|
||||||
|
createInstitutionDetailCharts(data.institutionStats || []);
|
||||||
|
|
||||||
|
// (4) 하단 전체 기관 등록 건수 차트 갱신
|
||||||
|
updateInstitutionChart(data.institutionStats || []);
|
||||||
|
}
|
||||||
|
|
||||||
|
// [상단] 전체 단계별 차트
|
||||||
|
function updateStageChart(stageCounts) {
|
||||||
|
var chartData = [
|
||||||
|
stageCounts.feasibility || 0,
|
||||||
|
stageCounts.basicDesign || 0,
|
||||||
|
stageCounts.detailDesign || 0,
|
||||||
|
stageCounts.construction || 0,
|
||||||
|
stageCounts.completion || 0,
|
||||||
|
stageCounts.maintenance || 0
|
||||||
|
];
|
||||||
|
|
||||||
|
// 텍스트 업데이트 (Vanilla JS)
|
||||||
|
var stageElem = document.getElementById("stage-feasibility");
|
||||||
|
if (stageElem) stageElem.textContent = (stageCounts.feasibility || 0) + "건";
|
||||||
|
|
||||||
|
var canvas = document.getElementById('myChart');
|
||||||
|
if(!canvas) return;
|
||||||
|
|
||||||
|
if (myChartInstance) myChartInstance.destroy();
|
||||||
|
|
||||||
|
myChartInstance = new Chart(canvas, {
|
||||||
|
type: 'bar',
|
||||||
|
data: {
|
||||||
|
labels: ['타당성조사', '기본설계', '실시설계', '시공중', '준공', '유지보수'],
|
||||||
|
datasets: [{
|
||||||
|
label: '건설현장 단계별 건수',
|
||||||
|
data: chartData,
|
||||||
|
backgroundColor: 'rgba(54, 162, 235, 0.2)',
|
||||||
|
borderColor: 'rgba(54, 162, 235, 1)',
|
||||||
|
borderWidth: 1
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
options: { scales: { y: { beginAtZero: true } } }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// [중단] 기관별 상세 차트 동적 생성 함수
|
||||||
|
function createInstitutionDetailCharts(instStats) {
|
||||||
|
var container = document.getElementById("institution-detail-area");
|
||||||
|
if (!container) return;
|
||||||
|
|
||||||
|
container.innerHTML = ""; // 기존 내용 초기화
|
||||||
|
|
||||||
|
instStats.forEach(function(stat, index) {
|
||||||
|
// 라벨 보정
|
||||||
|
var name = stat.name;
|
||||||
|
if (name === '울산광역시') name = '한국도로공사';
|
||||||
|
|
||||||
|
// Canvas ID 생성
|
||||||
|
var inputChartId = 'inputChart_' + index;
|
||||||
|
var perfChartId = 'perfChart_' + index;
|
||||||
|
|
||||||
|
// HTML 구조 생성
|
||||||
|
var html = '';
|
||||||
|
html += '<div class="col-sm-12">';
|
||||||
|
html += ' <div class="chart-wrapper">';
|
||||||
|
html += ' <div class="chart-header">' + name + ' (총 ' + stat.count + '건)</div>';
|
||||||
|
html += ' <div class="row">';
|
||||||
|
html += ' <div class="col-sm-6">';
|
||||||
|
html += ' <div class="sub-chart-title">건설현장 프로젝트 입력상태</div>';
|
||||||
|
html += ' <div class="sub-chart-box"><canvas id="' + inputChartId + '"></canvas></div>';
|
||||||
|
html += ' </div>';
|
||||||
|
html += ' <div class="col-sm-6">';
|
||||||
|
html += ' <div class="sub-chart-title">기관별 성과 현황</div>';
|
||||||
|
html += ' <div class="sub-chart-box"><canvas id="' + perfChartId + '"></canvas></div>';
|
||||||
|
html += ' </div>';
|
||||||
|
html += ' </div>';
|
||||||
|
html += ' </div>';
|
||||||
|
html += '</div>';
|
||||||
|
|
||||||
|
// DOM에 추가
|
||||||
|
var div = document.createElement("div");
|
||||||
|
div.className = "row"; // 행 단위로 추가
|
||||||
|
div.innerHTML = html;
|
||||||
|
container.appendChild(div);
|
||||||
|
|
||||||
|
// 1) 입력상태 파이 차트 그리기
|
||||||
|
drawPieChart(inputChartId, stat.inputStatusData);
|
||||||
|
|
||||||
|
// 2) 성과현황 막대 차트 그리기
|
||||||
|
drawBarChart(perfChartId, stat.performanceData);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function drawPieChart(id, dataArr) {
|
||||||
|
var canvas = document.getElementById(id);
|
||||||
|
if(!canvas) return;
|
||||||
|
|
||||||
|
new Chart(canvas, {
|
||||||
|
type: 'pie',
|
||||||
|
data: {
|
||||||
|
labels: ['미입력', '입력중', '검수대기', '검수중', '수정요청', '검수완료', '등록완료'],
|
||||||
|
datasets: [{
|
||||||
|
data: dataArr,
|
||||||
|
backgroundColor: [
|
||||||
|
'#e0e0e0', // 미입력 (회색)
|
||||||
|
'#ffcd56', // 입력중 (노랑)
|
||||||
|
'#36a2eb', // 검수대기 (파랑)
|
||||||
|
'#ff6384', // 검수중 (빨강)
|
||||||
|
'#ff9f40', // 수정요청 (주황)
|
||||||
|
'#4bc0c0', // 검수완료 (청록)
|
||||||
|
'#9966ff' // 등록완료 (보라)
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
options: {
|
||||||
|
responsive: true,
|
||||||
|
maintainAspectRatio: false,
|
||||||
|
plugins: {
|
||||||
|
legend: { position: 'right' }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function drawBarChart(id, dataArr) {
|
||||||
|
var canvas = document.getElementById(id);
|
||||||
|
if(!canvas) return;
|
||||||
|
|
||||||
|
new Chart(canvas, {
|
||||||
|
type: 'bar',
|
||||||
|
data: {
|
||||||
|
labels: ['타당성조사', '기본설계', '실시설계', '시공중', '준공', '유지보수'],
|
||||||
|
datasets: [{
|
||||||
|
label: '건수',
|
||||||
|
data: dataArr,
|
||||||
|
backgroundColor: '#36a2eb',
|
||||||
|
borderWidth: 1
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
options: {
|
||||||
|
responsive: true,
|
||||||
|
maintainAspectRatio: false,
|
||||||
|
scales: {
|
||||||
|
y: { beginAtZero: true, ticks: { stepSize: 1 } }
|
||||||
|
},
|
||||||
|
plugins: {
|
||||||
|
legend: { display: false }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// [하단] 전체 기관별 등록 건수 차트
|
||||||
|
function updateInstitutionChart(instStats) {
|
||||||
|
var canvas = document.getElementById('institutionChart');
|
||||||
|
if(!canvas) return;
|
||||||
|
|
||||||
|
if (instChartInstance) instChartInstance.destroy();
|
||||||
|
|
||||||
|
var labels = [];
|
||||||
|
var data = [];
|
||||||
|
|
||||||
|
instStats.forEach(function(stat) {
|
||||||
|
var name = stat.name;
|
||||||
|
if (name === '울산광역시') name = '한국도로공사';
|
||||||
|
labels.push(name);
|
||||||
|
data.push(stat.count);
|
||||||
|
});
|
||||||
|
|
||||||
|
instChartInstance = new Chart(canvas, {
|
||||||
|
type: 'bar',
|
||||||
|
data: {
|
||||||
|
labels: labels,
|
||||||
|
datasets: [{
|
||||||
|
label: '등록 건수',
|
||||||
|
data: data,
|
||||||
|
backgroundColor: 'rgba(75, 192, 192, 0.5)',
|
||||||
|
borderColor: 'rgba(75, 192, 192, 1)',
|
||||||
|
borderWidth: 1
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
options: {
|
||||||
|
responsive: true,
|
||||||
|
maintainAspectRatio: false,
|
||||||
|
scales: { y: { beginAtZero: true, ticks: { stepSize: 1 } } },
|
||||||
|
plugins: {
|
||||||
|
legend: { display: false },
|
||||||
|
title: { display: true, text: '전체 기관별 등록 현황' }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<h1>건설현장 통계</h1>
|
||||||
|
<div class="home-trainning">
|
||||||
|
<div class="container-fluid">
|
||||||
|
<div class="row content">
|
||||||
|
<div class="col-sm-12">
|
||||||
|
|
||||||
|
|
||||||
<div class="container-fluid">
|
<!-- 전체 기관별 등록 건수 종합 그래프 -->
|
||||||
<div class="row content">
|
<div class="row" style="margin-top: 30px;">
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
<h4>검색</h4>
|
<div class="well" style="background-color: #fff;">
|
||||||
<div class="well">
|
<p class="fw-bold" style="font-size: 18px; color:#c87202; margin-bottom: 15px;">전체 기관별 등록 건수</p>
|
||||||
<div class="container mt-5">
|
<div style="height: 400px;">
|
||||||
<form class="form-inline">
|
<canvas id="institutionChart"></canvas>
|
||||||
<div class="form-group mb-2 mr-2">
|
</div>
|
||||||
<label for="project-name" class="mr-2">프로젝트명:</label>
|
</div>
|
||||||
<input type="text" class="form-control" id="project-name" placeholder="프로젝트명 입력">
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group mb-2 mr-2">
|
|
||||||
<label for="client-name" class="mr-2">발주기관 명:</label>
|
|
||||||
<input type="text" class="form-control" id="client-name" placeholder="발주기관 명 입력">
|
|
||||||
</div>
|
|
||||||
<div class="form-group mb-2 mr-2 w-50">
|
|
||||||
<label for="manager-name" class="mr-2">담당자:</label>
|
|
||||||
<input type="text" class="form-control" id="manager-name" placeholder="담당자 이름 입력">
|
|
||||||
</div>
|
|
||||||
<div class="form-group mb-2 mr-2">
|
|
||||||
<label for="contact-number" class="mr-2">연락처:</label>
|
|
||||||
<input type="text" class="form-control" id="contact-number" placeholder="연락처 입력">
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
<div class="text-right mt-3">
|
|
||||||
<button type="submit" class="btn btn-primary mb-2">검색</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h4>건설현장 등록 건수</h4>
|
<!-- 기관별 상세 통계 그래프 영역 (동적 생성) -->
|
||||||
<div class="row">
|
<div id="institution-detail-area" style="margin-top: 30px;">
|
||||||
<div class="col-sm-3">
|
<!-- 여기에 Javascript로 기관별 그래프들이 추가됨 -->
|
||||||
<div class="well">
|
</div>
|
||||||
<h4>전체 등록 수</h4>
|
|
||||||
<p>12 건</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-3">
|
|
||||||
<div class="well">
|
|
||||||
<h4>부산광역시</h4>
|
|
||||||
<p>12 건</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-3">
|
|
||||||
<div class="well">
|
|
||||||
<h4>대구광역시</h4>
|
|
||||||
<p>0 건</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-3">
|
|
||||||
<div class="well">
|
|
||||||
<h4>세종특별자치시</h4>
|
|
||||||
<p>0 건</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
</div>
|
||||||
<div class="col-sm-4">
|
</div>
|
||||||
<div class="well">
|
</div>
|
||||||
<p class="fw-bold" style="font-size: 18px; color:#c87202;">최근 입력된 건설현장</p>
|
</div>
|
||||||
<p>부산 북항 재개발 사업 - 부산광역시</p>
|
</body>
|
||||||
<p>가덕도 신공항 건설공사 - 부산광역시</p>
|
|
||||||
<p>부산 에코델타시티 조성사업 - 부산광역시</p>
|
|
||||||
<p>동해남부선 복선전철화 사업 - 부산광역시</p>
|
|
||||||
<p>부산 도시철도 1호선 연장 공사 - 부산광역시</p>
|
|
||||||
<div class="d-flex justify-content-between align-items-center">
|
|
||||||
<div class="btn-group">
|
|
||||||
<button type="button" class="btn btn-sm btn-outline-secondary">+ 더 보기</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-4">
|
|
||||||
<div class="well">
|
|
||||||
<p class="fw-bold" style="font-size: 18px; color:#c87202;">단계별 건수</p>
|
|
||||||
<p><b>타당성조사 및 계획검토:</b> 12건</p>
|
|
||||||
<p><b>기본설계:</b> 0건</p>
|
|
||||||
<p><b>실시설계:</b> 0건</p>
|
|
||||||
<p><b>시공중:</b> 0건</p>
|
|
||||||
<p><b>준공:</b> 0건</p>
|
|
||||||
<p><b>유지보수:</b> 0건</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-4">
|
|
||||||
<div class="well">
|
|
||||||
<p class="fw-bold" style="font-size: 18px; color:#c87202;">프로젝트 연결률</p>
|
|
||||||
<p><b>부산광역시:</b> 8.33%</p>
|
|
||||||
<p><b>대전광역시:</b> 0%</p>
|
|
||||||
<p><b>세종특별자치시:</b> 0%</p>
|
|
||||||
<p><b>서울특별시:</b> 0%</p>
|
|
||||||
<p><b>대구광역시:</b> 0%</p>
|
|
||||||
<div class="d-flex justify-content-between align-items-center">
|
|
||||||
<div class="btn-group">
|
|
||||||
<button type="button" class="btn btn-sm btn-outline-secondary">+ 더 보기</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-sm-8">
|
|
||||||
<div class="well">
|
|
||||||
<p>Text</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-4">
|
|
||||||
<div class="well">
|
|
||||||
<p>Text</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</
|
|
||||||
div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
</html>
|
||||||
|
|
@ -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" %>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<script src="${pageContext.request.contextPath}/js/jquery/jquery-1.10.2.min.js"></script>
|
||||||
|
<script src="${pageContext.request.contextPath}/js/admins/common.js"></script>
|
||||||
|
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
|
||||||
|
<link rel="stylesheet" HREF="${pageContext.request.contextPath}/css/admins/style.css" type="text/css">
|
||||||
|
<script>
|
||||||
|
const userId = "${params.userid}"
|
||||||
|
function backBtn() {
|
||||||
|
window.history.back();
|
||||||
|
// location.href = "${pageContext.request.contextPath}/admins/constructionProjectManagement/construction-user-mgmt-index.do";
|
||||||
|
}
|
||||||
|
|
||||||
|
function onClickBtnSearch() {
|
||||||
|
const pagingEle = document.getElementById('paging');
|
||||||
|
const activeLinks = pagingEle.querySelectorAll('li.is-active a');
|
||||||
|
|
||||||
|
|
||||||
|
const constTag = trim( document.getElementById('const-tag').value );
|
||||||
|
const constName = trim( document.getElementById('const-name').value );
|
||||||
|
const constStartDate = trim( document.getElementById('const-start-date').value );
|
||||||
|
const constEndDate = trim( document.getElementById('const-end-date').value );
|
||||||
|
|
||||||
|
|
||||||
|
const constStateCode = trim( document.getElementById('const-state-code').value );
|
||||||
|
const constCompanyName = trim( document.getElementById('company-dept').value );
|
||||||
|
const constCompanyAdmin = trim( document.getElementById('company-admin').value );
|
||||||
|
const constCompanyTel = trim( document.getElementById('company-tel').value );
|
||||||
|
|
||||||
|
|
||||||
|
const nCount = Number(pagingEle.getAttribute('data-ncount'));
|
||||||
|
const nPage = Number(pagingEle.getAttribute('data-npage'));
|
||||||
|
|
||||||
|
xhr = new XMLHttpRequest();
|
||||||
|
xhr.open('GET', '/drilling/inquiry/list.do?' +
|
||||||
|
'constTag='+ constTag +
|
||||||
|
'&' +'constName='+ constName +
|
||||||
|
'&' +'constStartDate='+ constStartDate +
|
||||||
|
'&' +'constEndDate='+ constEndDate +
|
||||||
|
'&' +'constStateCode='+ constStateCode +
|
||||||
|
'&' +'constCompanyName='+ constCompanyName +
|
||||||
|
'&' +'constCompanyAdmin='+ constCompanyAdmin +
|
||||||
|
'&' +'constCompanyTel='+ constCompanyTel +
|
||||||
|
'&' +'nPage='+ nPage +
|
||||||
|
'&' +'nCount='+ nCount,
|
||||||
|
true);
|
||||||
|
xhr.setRequestHeader('Content-type', 'application/json');
|
||||||
|
|
||||||
|
xhr.onreadystatechange = function() {
|
||||||
|
if (xhr.readyState === 4 && xhr.status === 200) {
|
||||||
|
// 요청 성공 시 처리
|
||||||
|
console.log('%o', xhr.responseText);
|
||||||
|
const obj = JSON.parse(xhr.responseText);
|
||||||
|
var dataListEle = document.getElementById('data-list');
|
||||||
|
dataListEle.innerHTML = '';
|
||||||
|
|
||||||
|
var content = '';
|
||||||
|
|
||||||
|
if (obj.datas.length < 1) {
|
||||||
|
content = '<tr><td colspan="11">조회된 건설현장이 없습니다.</td></tr>';
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
const masterCompanyDept = obj.datas[idx].masterCompanyDept == null ? '-' : obj.datas[idx].masterCompanyDept;
|
||||||
|
const masterCompanyAdmin = obj.datas[idx].masterCompanyAdmin == null ? '-' : obj.datas[idx].masterCompanyAdmin;
|
||||||
|
const masterCompanyTel = obj.datas[idx].masterCompanyTel == null ? '-' : obj.datas[idx].masterCompanyTel;
|
||||||
|
const coinstCompanyDept = obj.datas[idx].coinstCompanyDept == null ? '-' : obj.datas[idx].coinstCompanyDept;
|
||||||
|
const constCompanyAdmin = obj.datas[idx].constCompanyAdmin == null ? '-' : obj.datas[idx].constCompanyAdmin;
|
||||||
|
const constCompanyTel = obj.datas[idx].constCompanyTel == null ? '-' : obj.datas[idx].constCompanyTel;
|
||||||
|
|
||||||
|
// content += '<tr onclick="location.href=\'modify.do?CID=' + obj.datas[idx].cid + '\';" data-cid="' + obj.datas[idx].cid + '">';
|
||||||
|
content += '<tr <%--onmousedown="handleMouseDown()" onmousemove="handleMouseMove()" --%> onmouseup="handleRowClick(' + obj.datas[idx].cid + ')" data-cid="' + obj.datas[idx].cid + '">';
|
||||||
|
content += '<td>' + (obj.count - idx - (nCount * (nPage - 1))) + '</td>';
|
||||||
|
content += '<td style="text-align: left; text-indent: 10px;">' + obj.datas[idx].constName + '</td>';
|
||||||
|
content += '<td>' + obj.datas[idx].projectStateCodeName + '</td>';
|
||||||
|
content += '<td>' + constStartDate + ' ~ ' + constEndDate + '</td>';
|
||||||
|
content += '<td>' + obj.datas[idx].constStateCodeName + '</td>';
|
||||||
|
content += '<td>' + masterCompanyDept + '</td>';
|
||||||
|
content += '<td>' + masterCompanyAdmin + '</td>';
|
||||||
|
content += '<td>' + masterCompanyTel + '</td>';
|
||||||
|
content += '<td>' + coinstCompanyDept + '</td>';
|
||||||
|
content += '<td>' + constCompanyAdmin + '</td>';
|
||||||
|
content += '<td>' + constCompanyTel + '</td>';
|
||||||
|
content += '</tr>';
|
||||||
|
}
|
||||||
|
dataListEle.innerHTML = content;
|
||||||
|
|
||||||
|
document.getElementById('count').innerHTML = obj.count;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
let firstIndicator = (Math.floor((nPage - 1) / nCount) * nCount) + 1; // 현재 페이지의 첫번째 페이지인디케이터 번호
|
||||||
|
let lastIndicator = Math.ceil(nPage / nCount) * 10; // 현재 페이지의 마지막 페이지인디케이터 번호
|
||||||
|
let totalIndicator = Math.ceil(obj.count / nCount); // 총 페이지인디케이터 번호
|
||||||
|
let pagingEleHTML = "<ul>"
|
||||||
|
if (!((firstIndicator - 1) < 1)) {
|
||||||
|
pagingEleHTML = pagingEleHTML + '<li data-npage="' + (firstIndicator - 1) + '" class="page-button"><a href="javascript:void()"><img src="/com/img/common/icon/ico_chevron.svg" alt="Chevron-prev" class="page-prev"></a></li>';
|
||||||
|
}
|
||||||
|
|
||||||
|
for( let i = firstIndicator; i<lastIndicator+1; i++ ) {
|
||||||
|
if (i <= totalIndicator) {
|
||||||
|
if( i === nPage ) {
|
||||||
|
pagingEleHTML += `<li data-npage="` + i + `" class="page-button is-active"><a href="javascript:void()">` + i + `</a></li>`;
|
||||||
|
} else {
|
||||||
|
pagingEleHTML += `<li data-npage="` + i + `" class="page-button" ><a href="javascript:void()">` + i + `</a></li>`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lastIndicator < totalIndicator) {
|
||||||
|
pagingEleHTML += `<li data-npage="` + (lastIndicator+1) +`" class="page-button"><a href="javascript:void()"><img src="/com/img/common/icon/ico_chevron.svg" alt="Chevron-next" class="page-next"></a></li>`;
|
||||||
|
}
|
||||||
|
pagingEleHTML += "</ul>";
|
||||||
|
pagingEle.innerHTML = pagingEleHTML;
|
||||||
|
|
||||||
|
|
||||||
|
// 모든 .page-button 요소 가져오기
|
||||||
|
const pageButtons = document.querySelectorAll('.page-button');
|
||||||
|
|
||||||
|
// 각 버튼에 클릭 이벤트 리스너 추가
|
||||||
|
pageButtons.forEach(button => {
|
||||||
|
button.addEventListener('click', () => {
|
||||||
|
// 클릭된 버튼의 내용 (페이지 번호 등) 가져오기
|
||||||
|
const pageNumber = button.getAttribute('data-npage');
|
||||||
|
|
||||||
|
// 페이지 이동 등 원하는 동작 수행
|
||||||
|
console.log(`페이지 ` + pageNumber + `로 이동합니다.`);
|
||||||
|
pagingEle.setAttribute('data-npage', pageNumber);
|
||||||
|
onClickBtnSearch()
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
} else if (xhr.readyState === 4) {
|
||||||
|
// 요청 실패 시 처리
|
||||||
|
console.error('요청 실패:', xhr.status);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
xhr.send();
|
||||||
|
}
|
||||||
|
|
||||||
|
function onClickBtnViewOnMap() {
|
||||||
|
alert('위치가 지정된 시추공이 존재하지 않습니다.');
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
|
||||||
|
document.getElementById('btn-search').addEventListener('click', function() {
|
||||||
|
const pagingEle = document.getElementById('paging');
|
||||||
|
pagingEle.setAttribute('data-npage', 1);
|
||||||
|
onClickBtnSearch();
|
||||||
|
});
|
||||||
|
|
||||||
|
<%-- document.getElementById('btn-view-on-map').addEventListener('click', function() {
|
||||||
|
onClickBtnViewOnMap();
|
||||||
|
});--%>
|
||||||
|
|
||||||
|
|
||||||
|
// 초기 테이블 추가 트리거
|
||||||
|
document.getElementById('btn-search').click();
|
||||||
|
|
||||||
|
|
||||||
|
document.getElementById('const-name').addEventListener('keydown', function(event) {
|
||||||
|
if (event.key === 'Enter') {
|
||||||
|
event.preventDefault(); // 폼 제출 방지
|
||||||
|
document.getElementById('btn-search').click();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
document.getElementById('company-dept').addEventListener('keydown', function(event) {
|
||||||
|
if (event.key === 'Enter') {
|
||||||
|
event.preventDefault(); // 폼 제출 방지
|
||||||
|
document.getElementById('btn-search').click();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
document.getElementById('company-admin').addEventListener('keydown', function(event) {
|
||||||
|
if (event.key === 'Enter') {
|
||||||
|
event.preventDefault(); // 폼 제출 방지
|
||||||
|
document.getElementById('btn-search').click();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
document.getElementById('company-tel').addEventListener('keydown', function(event) {
|
||||||
|
if (event.key === 'Enter') {
|
||||||
|
event.preventDefault(); // 폼 제출 방지
|
||||||
|
document.getElementById('btn-search').click();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var projectNameInput = document.getElementById('const-name');
|
||||||
|
var suggestionListDiv = document.getElementById("suggestionList");
|
||||||
|
|
||||||
|
projectNameInput.onkeyup = function() {
|
||||||
|
|
||||||
|
var projectName = String(this.value).trim();
|
||||||
|
|
||||||
|
if (projectName.length > 0) {
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
type : "GET",
|
||||||
|
data : {
|
||||||
|
projectName : projectName,
|
||||||
|
isProjectNameChecking : "true"
|
||||||
|
},
|
||||||
|
url : "/drilling-project-list.json",
|
||||||
|
dataType : "json",
|
||||||
|
success : function( json ) {
|
||||||
|
suggestionListDiv.innerHTML = ""; // 이전 목록 비우기
|
||||||
|
suggestionListDiv.style.display = "none";
|
||||||
|
var list = json.result.list;
|
||||||
|
var matchingProjects = [];
|
||||||
|
for (var i = 0; i < list.length; i++) {
|
||||||
|
matchingProjects.push(list[i]);
|
||||||
|
}
|
||||||
|
if (matchingProjects.length > 0) {
|
||||||
|
for (var i = 0; i < matchingProjects.length; i++) {
|
||||||
|
var suggestionItem = document.createElement("div");
|
||||||
|
|
||||||
|
var organHierarchy = " " + matchingProjects[i].glDistrict !== null ? matchingProjects[i].glDistrict : "";
|
||||||
|
if( matchingProjects[i].gmDistrict !== null ) {
|
||||||
|
organHierarchy = organHierarchy + " > " + matchingProjects[i].gmDistrict;
|
||||||
|
}
|
||||||
|
if( matchingProjects[i].gsDistrict !== null ) {
|
||||||
|
organHierarchy = organHierarchy + " > " + matchingProjects[i].gsDistrict;
|
||||||
|
}
|
||||||
|
|
||||||
|
suggestionItem.setAttribute('data-const-name', matchingProjects[i].constName);
|
||||||
|
suggestionItem.setAttribute('data-cid', matchingProjects[i].cid);
|
||||||
|
|
||||||
|
// 검색어를 굵게 표시
|
||||||
|
var constName = matchingProjects[i].constName;
|
||||||
|
var projectName = String(projectNameInput.value).trim();
|
||||||
|
// 정규식으로 검색어를 찾고, 대소문자 구분 없이 처리
|
||||||
|
var regex = new RegExp(projectName, "gi");
|
||||||
|
var boldConstName = constName.replace(regex, '<b>' + projectName + '</b>');
|
||||||
|
|
||||||
|
suggestionItem.innerHTML =
|
||||||
|
'<span>' + boldConstName + '</span><br />\n' +
|
||||||
|
'<span class="organizational-structure" data->' +
|
||||||
|
"발주처: " + organHierarchy
|
||||||
|
'</span>';
|
||||||
|
|
||||||
|
suggestionItem.onclick = function() {
|
||||||
|
projectNameInput.value = this.getAttribute('data-const-name');
|
||||||
|
suggestionListDiv.style.display = "none";
|
||||||
|
};
|
||||||
|
|
||||||
|
suggestionListDiv.appendChild(suggestionItem);
|
||||||
|
}
|
||||||
|
// suggestionListDiv 위치 설정
|
||||||
|
var rect = projectNameInput.getBoundingClientRect();
|
||||||
|
suggestionListDiv.style.position = 'absolute';
|
||||||
|
//suggestionListDiv.style.left = rect.left + 'px';
|
||||||
|
//suggestionListDiv.style.top = (rect.bottom + window.scrollY) + 'px';
|
||||||
|
//suggestionListDiv.style.float = 'left';
|
||||||
|
suggestionListDiv.style.width = rect.width + 'px';
|
||||||
|
suggestionListDiv.style.display = "block";
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
error: function(xhr, option, error){
|
||||||
|
alert(xhr.status); //오류코드
|
||||||
|
alert(error); //오류내용
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 사용자가 추천 목록 외부를 클릭하면 목록 숨기기 (선택적)
|
||||||
|
document.onclick = function(event) {
|
||||||
|
if (event.target !== projectNameInput && event.target !== suggestionListDiv && !suggestionListDiv.contains(event.target)) {
|
||||||
|
suggestionListDiv.style.display = "none";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 발주기관 목록화면 tr 드래그 시 상세화면 이동 방지처리
|
||||||
|
* 드래그 이벤트와 클릭이벤트를 구분하여 감지한다.
|
||||||
|
*/
|
||||||
|
function handleRowClick(CID) {
|
||||||
|
if (!isDragging) {
|
||||||
|
window.location.href = 'modify.do?CID=' + CID;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function trim(str) {
|
||||||
|
str = String(str);
|
||||||
|
return str.replace(/^\s+|\s+$/g, '');
|
||||||
|
}
|
||||||
|
</script><style>
|
||||||
|
.drilling .page-content-inner {
|
||||||
|
padding: 30px 0;
|
||||||
|
}
|
||||||
|
li {
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
@keyframes shake {
|
||||||
|
0% { transform: translateX(0); }
|
||||||
|
10% { transform: translateX(-5px); }
|
||||||
|
20% { transform: translateX(5px); }
|
||||||
|
30% { transform: translateX(-5px); }
|
||||||
|
40% { transform: translateX(5px); }
|
||||||
|
50% { transform: translateX(-5px); }
|
||||||
|
60% { transform: translateX(5px); }
|
||||||
|
70% { transform: translateX(-5px); }
|
||||||
|
80% { transform: translateX(5px); }
|
||||||
|
90% { transform: translateX(-5px); }
|
||||||
|
100% { transform: translateX(0); }
|
||||||
|
}
|
||||||
|
|
||||||
|
.shake-animation {
|
||||||
|
animation: shake 0.6s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The snackbar - position it at the bottom and in the middle of the screen */
|
||||||
|
#snackbar {
|
||||||
|
visibility: hidden; /* Hidden by default. Visible on click */
|
||||||
|
min-width: 250px; /* Set a default minimum width */
|
||||||
|
margin-left: -125px; /* Divide value of min-width by 2 */
|
||||||
|
background-color: #000000; /* Black background color */
|
||||||
|
color: #ff0000; /* White text color */
|
||||||
|
text-align: center; /* Centered text */
|
||||||
|
border-radius: 2px; /* Rounded borders */
|
||||||
|
padding: 16px; /* Padding */
|
||||||
|
position: fixed; /* Sit on top of the screen */
|
||||||
|
z-index: 1; /* Add a z-index if needed */
|
||||||
|
left: 50%; /* Center the snackbar */
|
||||||
|
bottom: 80px; /* 30px from the bottom */
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Show the snackbar when clicking on a button (class added with JavaScript) */
|
||||||
|
#snackbar.show {
|
||||||
|
visibility: visible; /* Show the snackbar */
|
||||||
|
/* Add animation: Take 0.5 seconds to fade in and out the snackbar.
|
||||||
|
However, delay the fade out process for 2.5 seconds */
|
||||||
|
-webkit-animation: fadein 0.5s, fadeout 0.5s 2.5s;
|
||||||
|
animation: fadein 0.5s, fadeout 0.5s 2.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Animations to fade the snackbar in and out */
|
||||||
|
@-webkit-keyframes fadein {
|
||||||
|
from {bottom: 0; opacity: 0;}
|
||||||
|
to {bottom: 80px; opacity: 1;}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes fadein {
|
||||||
|
from {bottom: 0; opacity: 0;}
|
||||||
|
to {bottom: 80px; opacity: 1;}
|
||||||
|
}
|
||||||
|
|
||||||
|
@-webkit-keyframes fadeout {
|
||||||
|
from {bottom: 80px; opacity: 1;}
|
||||||
|
to {bottom: 0; opacity: 0;}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes fadeout {
|
||||||
|
from {bottom: 80px; opacity: 1;}
|
||||||
|
to {bottom: 0; opacity: 0;}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#suggestionList {
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
width: 300px; /* 입력창 너비에 맞춰 조절 */
|
||||||
|
position_: absolute;
|
||||||
|
background-color: white;
|
||||||
|
display: none;
|
||||||
|
left: 82px;
|
||||||
|
top: 42px;
|
||||||
|
z-index: 3;
|
||||||
|
}
|
||||||
|
#suggestionList div {
|
||||||
|
padding: 5px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
#suggestionList div:hover {
|
||||||
|
background-color: #f0f0f0;
|
||||||
|
}
|
||||||
|
#suggestionList div .organizational-structure {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
|
||||||
|
#const-state-code {
|
||||||
|
width: 160px;
|
||||||
|
}
|
||||||
|
.drilling .page-content-inner{
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<form id="searchForm" name="searchForm" method="post">
|
||||||
|
<input type="hidden" id="pageIndex" name="pageIndex" value="${params.pageIndex}" />
|
||||||
|
<input type="hidden" id="cls" name="cls" value="2" />
|
||||||
|
<!-- 페이지 컨테이너 시작 -->
|
||||||
|
<section class="drilling-page-container">
|
||||||
|
<input id="PROJECT_NAME" name="PROJECT_NAME" maxlength="2000" type="hidden" value="" valid="notnull" validNm="사업명" />
|
||||||
|
<div class="page-content-wrapper drilling inquiry">
|
||||||
|
<!-- 콘텐츠 시작 -->
|
||||||
|
<div class="page-content">
|
||||||
|
<div class="page-content-inner">
|
||||||
|
<!-- 카테고리 끝 -->
|
||||||
|
<!-- 내용 시작 -->
|
||||||
|
<div class="content-wrapper">
|
||||||
|
<div class="content1">
|
||||||
|
<div class="page-top-search">
|
||||||
|
<form class="form-inline">
|
||||||
|
<label class="input-label-display">검색</label>
|
||||||
|
<input type="hidden" id="const-tag" name="const-tag" value="C" >
|
||||||
|
<input type="search" id="const-name" name="const-name" class="input" placeholder="프로젝트명" title="" value="">
|
||||||
|
<div id="suggestionList"></div>
|
||||||
|
<input type="date" id="const-start-date" name="const-start-date" >
|
||||||
|
<span>~</span>
|
||||||
|
<input type="date" id="const-end-date" name="const-end-date" >
|
||||||
|
<input type="hidden" >
|
||||||
|
<select id="const-state-code" name="const-state-code">
|
||||||
|
<option value="" selected="selected">전체</option>
|
||||||
|
<option value="1">미입력</option>
|
||||||
|
<option value="2">입력 중</option>
|
||||||
|
<option value="3">검수 준비 대기중</option>
|
||||||
|
<option value="4">검수 중</option>
|
||||||
|
<option value="6">수정 요청</option>
|
||||||
|
<option value="7">등록 완료</option>
|
||||||
|
</select>
|
||||||
|
</form>
|
||||||
|
<form class="form-inline-row">
|
||||||
|
<input type="text" id="company-dept" name="company-dept" class="input input-1" placeholder="담당부서,건설사명" title="" value="" style="margin-left: 0">
|
||||||
|
<input type="text" id="company-admin" name="company-admin" class="input input-2" placeholder="담당자" title="" value="">
|
||||||
|
<input type="text" id="company-tel" name="company-tel" class="input input-3" placeholder="담당 연락처" title="" value="">
|
||||||
|
<button type="button" id="btn-search" class="btn btn-search">
|
||||||
|
<span>조회하기</span>
|
||||||
|
</button>
|
||||||
|
<%-- <button type="button" id="btn-view-on-map" class="btn btn-view-on-map">
|
||||||
|
<span>지도보기</span>
|
||||||
|
</button>--%>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="table-info-group">Total: <span id="count">-</span>건</div>
|
||||||
|
<div class="table-wrap">
|
||||||
|
<table>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 3%;">
|
||||||
|
<col style="width: 27%;">
|
||||||
|
<col style="width: 5%;">
|
||||||
|
<col style="width: 10%;">
|
||||||
|
<col style="width: 10%;">
|
||||||
|
<col style="width: 13%;">
|
||||||
|
<col style="width: 5%;">
|
||||||
|
<col style="width: 7%;">
|
||||||
|
<col style="width: 8%;">
|
||||||
|
<col style="width: 5%;">
|
||||||
|
<col style="width: 7%;">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th rowspan="2">연번</th>
|
||||||
|
<th rowspan="2">사업명</th>
|
||||||
|
<th rowspan="2">입력상태</th>
|
||||||
|
<th colspan="2">사업내용</th>
|
||||||
|
<th colspan="3">발주기관현황</th>
|
||||||
|
<th colspan="3">건설사현황</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>사업기간</th>
|
||||||
|
<th>사업단계 <br>(설계 시공 준공 유지관리)</th>
|
||||||
|
<th>담당부서</th>
|
||||||
|
<th>담당자</th>
|
||||||
|
<th>담당연락처</th>
|
||||||
|
<th>건설사명</th>
|
||||||
|
<th>담당자</th>
|
||||||
|
<th>담당연락처</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody id="data-list">
|
||||||
|
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div id="paging" class="paging" data-npage="1" data-ncount="10">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- 내용 끝 -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- 콘텐츠 끝 -->
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<!-- 페이지 컨테이너 끝 -->
|
||||||
|
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -62,7 +62,9 @@
|
||||||
dataListEle.innerHTML = '';
|
dataListEle.innerHTML = '';
|
||||||
|
|
||||||
var content = '';
|
var content = '';
|
||||||
|
if (obj.datas.length < 1) {
|
||||||
|
content = '<tr><td colspan="11">조회된 건설현장이 없습니다.</td></tr>';
|
||||||
|
}
|
||||||
for( idx in obj.datas ) {
|
for( idx in obj.datas ) {
|
||||||
const constStartDate = obj.datas[idx].constStartDate == null ? '알 수 없음' : obj.datas[idx].constStartDate;
|
const constStartDate = obj.datas[idx].constStartDate == null ? '알 수 없음' : obj.datas[idx].constStartDate;
|
||||||
const constEndDate = obj.datas[idx].constEndDate == null ? '알 수 없음' : obj.datas[idx].constEndDate;
|
const constEndDate = obj.datas[idx].constEndDate == null ? '알 수 없음' : obj.datas[idx].constEndDate;
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@
|
||||||
<!--
|
<!--
|
||||||
body
|
body
|
||||||
{
|
{
|
||||||
background-image: url(${pageContext.request.contextPath}/images/admins/left_bak.jpg);
|
background-image: url(${pageContext.request.contextPath}/images/admins/left_bak_2511.jpg);
|
||||||
margin-left:0;
|
margin-left:0;
|
||||||
margin-top:0;
|
margin-top:0;
|
||||||
margin-right:0;
|
margin-right:0;
|
||||||
|
|
@ -67,7 +67,7 @@ img { border:0; }
|
||||||
<!-- <tr height=10><td colspan="3"><img src="/admins/img/left_top_border.gif"></td></tr>
|
<!-- <tr height=10><td colspan="3"><img src="/admins/img/left_top_border.gif"></td></tr>
|
||||||
<tr height=30><td colspan="3"><img src="/admins/img/user/left_title.gif"></td></tr>-->
|
<tr height=30><td colspan="3"><img src="/admins/img/user/left_title.gif"></td></tr>-->
|
||||||
<tr>
|
<tr>
|
||||||
<td width="244" height="668" valign="top" background="${pageContext.request.contextPath}/images/admins/left_bak.jpg">
|
<td width="244" height="738" valign="top" background="${pageContext.request.contextPath}/images/admins/left_bak_2511.jpg">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="${pageContext.request.contextPath}/images/admins/constructionProjectManagement/1_tit_01.gif" width="244" height="62" /></td>
|
<td><img src="${pageContext.request.contextPath}/images/admins/constructionProjectManagement/1_tit_01.gif" width="244" height="62" /></td>
|
||||||
|
|
@ -77,6 +77,9 @@ img { border:0; }
|
||||||
<div class="menu-item ${pId eq 'construction-project-statistics-index' ? 'active' : ''}">
|
<div class="menu-item ${pId eq 'construction-project-statistics-index' ? 'active' : ''}">
|
||||||
<span style="cursor:hand" onClick="javascript:goUrl('construction-project-statistics-index', '${menuId}')"><img src="${pageContext.request.contextPath}/images/renew/arrow-right.png" /> 건설현장 통계</span>
|
<span style="cursor:hand" onClick="javascript:goUrl('construction-project-statistics-index', '${menuId}')"><img src="${pageContext.request.contextPath}/images/renew/arrow-right.png" /> 건설현장 통계</span>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="menu-item ${pId eq 'construction-site-index' ? 'active' : ''}">
|
||||||
|
<span style="cursor:hand" onClick="javascript:goUrl('construction-site-index', '${menuId}')"><img src="${pageContext.request.contextPath}/images/renew/arrow-right.png" /> 건설현장 조회</span>
|
||||||
|
</div>
|
||||||
<div class="menu-item ${pId eq 'construction-user-mgmt-index' ? 'active' : ''}">
|
<div class="menu-item ${pId eq 'construction-user-mgmt-index' ? 'active' : ''}">
|
||||||
<span style="cursor:hand" onClick="javascript:goUrl('construction-user-mgmt-index', '${menuId}')"><img src="${pageContext.request.contextPath}/images/renew/arrow-right.png" /> 발주기관 계정</span>
|
<span style="cursor:hand" onClick="javascript:goUrl('construction-user-mgmt-index', '${menuId}')"><img src="${pageContext.request.contextPath}/images/renew/arrow-right.png" /> 발주기관 계정</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ var waitWin;
|
||||||
727보다 크게 하는 경우는 문제 없습니다.
|
727보다 크게 하는 경우는 문제 없습니다.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<iframe src="${pageContext.request.contextPath}/admins/${menuId}/${pId}.do?isFirst=true" frameborder="0" height="650" width="100%" scrolling="yes" name="iframeMain" style="overflow-x: hidden;"></iframe>
|
<iframe src="${pageContext.request.contextPath}/admins/${menuId}/${pId}.do?isFirst=true" frameborder="0" height="740" width="100%" scrolling="yes" name="iframeMain" style="overflow-x: hidden;"></iframe>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ var waitWin;
|
||||||
727보다 크게 하는 경우는 문제 없습니다.
|
727보다 크게 하는 경우는 문제 없습니다.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<iframe src="${pageContext.request.contextPath}/admins/board/${viewName}.do?idx=${idx}" frameborder="0" height="650" width="1200" scrolling="yes" name="iframeMain" style="overflow-x: hidden;"></iframe>
|
<iframe src="${pageContext.request.contextPath}/admins/board/${viewName}.do?idx=${idx}" frameborder="0" height="740" width="1200" scrolling="yes" name="iframeMain" style="overflow-x: hidden;"></iframe>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
<!--
|
<!--
|
||||||
body
|
body
|
||||||
{
|
{
|
||||||
background-image: url(${pageContext.request.contextPath}/images/admins/left_bak.jpg);
|
background-image: url(${pageContext.request.contextPath}/images/admins/left_bak_2511.jpg);
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
|
|
@ -21,7 +21,7 @@ img { border: 0; }
|
||||||
<body>
|
<body>
|
||||||
<table id="Table_01" width="244" height="100%" border="0" cellpadding="0" cellspacing="0" background="${pageContext.request.contextPath}/images/admins/left_back.gif">
|
<table id="Table_01" width="244" height="100%" border="0" cellpadding="0" cellspacing="0" background="${pageContext.request.contextPath}/images/admins/left_back.gif">
|
||||||
<tr>
|
<tr>
|
||||||
<td width="244" height="668" valign="top" background="${pageContext.request.contextPath}/images/admins/left_bak.jpg">
|
<td width="244" height="738" valign="top" background="${pageContext.request.contextPath}/images/admins/left_bak_2511.jpg">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="${pageContext.request.contextPath}/images/admins/board/5_tit_01.gif" width="244" height="62" /></td>
|
<td><img src="${pageContext.request.contextPath}/images/admins/board/5_tit_01.gif" width="244" height="62" /></td>
|
||||||
|
|
|
||||||
|
|
@ -124,13 +124,13 @@ document.addEventListener('keyup', function(e) {
|
||||||
<td width="100%">
|
<td width="100%">
|
||||||
<table width="100%" border="0" cellspacing="0" cellpadding="0">
|
<table width="100%" border="0" cellspacing="0" cellpadding="0">
|
||||||
<tr>
|
<tr>
|
||||||
<td width="244" height="668" valign="top" background="${pageContext.request.contextPath}/images/admins/left_bak.jpg">
|
<td width="244" height="738" valign="top" background="${pageContext.request.contextPath}/images/admins/left_bak_2511.jpg">
|
||||||
<iframe width="244" height="668" marginheight="0" src="${pageContext.request.contextPath}/admins/${menuId}/left.do?pId=${pId}&menuId=${menuId}" name="leftFrame" frameborder="0" scrolling="no"></iframe>
|
<iframe width="244" height="738" marginheight="0" src="${pageContext.request.contextPath}/admins/${menuId}/left.do?pId=${pId}&menuId=${menuId}" name="leftFrame" frameborder="0" scrolling="no"></iframe>
|
||||||
</td>
|
</td>
|
||||||
<td width="10" valign="top"> </td>
|
<td width="10" valign="top"> </td>
|
||||||
|
|
||||||
<td width="100%" valign="top">
|
<td width="100%" valign="top">
|
||||||
<iframe height="650" width="100%" marginheight="0" src="${pageContext.request.contextPath}/admins/frame/mainframe.do?menuId=${menuId}&pId=${pId}&viewName=${viewName}&idx=${idx}" name="mainFrame" frameborder="0" scrolling="no"></iframe>
|
<iframe height="740" width="100%" marginheight="0" src="${pageContext.request.contextPath}/admins/frame/mainframe.do?menuId=${menuId}&pId=${pId}&viewName=${viewName}&idx=${idx}" name="mainFrame" frameborder="0" scrolling="no"></iframe>
|
||||||
|
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
body
|
body
|
||||||
{
|
{
|
||||||
background-image: url(${pageContext.request.contextPath}/images/admins/left_bak.jpg);
|
background-image: url(${pageContext.request.contextPath}/images/admins/left_bak_2511.jpg);
|
||||||
margin-left:0;
|
margin-left:0;
|
||||||
margin-top:0;
|
margin-top:0;
|
||||||
margin-right:0;
|
margin-right:0;
|
||||||
|
|
@ -18,7 +18,7 @@ img { border:0; }
|
||||||
<body>
|
<body>
|
||||||
<table id="Table_01" width="244" height="100%" border="0" cellpadding="0" cellspacing="0" background="${pageContext.request.contextPath}/images/admins/left_bak.gif">
|
<table id="Table_01" width="244" height="100%" border="0" cellpadding="0" cellspacing="0" background="${pageContext.request.contextPath}/images/admins/left_bak.gif">
|
||||||
<tr>
|
<tr>
|
||||||
<td width="244" height="668" valign="top" background="${pageContext.request.contextPath}/images/admins/left_bak.jpg">
|
<td width="244" height="738" valign="top" background="${pageContext.request.contextPath}/images/admins/left_bak_2511.jpg">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@
|
||||||
<!--
|
<!--
|
||||||
body
|
body
|
||||||
{
|
{
|
||||||
background-image: url(${pageContext.request.contextPath}/images/admins/left_bak.jpg);
|
background-image: url(${pageContext.request.contextPath}/images/admins/left_bak_2511.jpg);
|
||||||
margin-left:0;
|
margin-left:0;
|
||||||
margin-top:0;
|
margin-top:0;
|
||||||
margin-right:0;
|
margin-right:0;
|
||||||
|
|
@ -67,7 +67,7 @@ img { border:0; }
|
||||||
<!-- <tr height=10><td colspan="3"><img src="/admins/img/left_top_border.gif"></td></tr>
|
<!-- <tr height=10><td colspan="3"><img src="/admins/img/left_top_border.gif"></td></tr>
|
||||||
<tr height=30><td colspan="3"><img src="/admins/img/user/left_title.gif"></td></tr>-->
|
<tr height=30><td colspan="3"><img src="/admins/img/user/left_title.gif"></td></tr>-->
|
||||||
<tr>
|
<tr>
|
||||||
<td width="244" height="668" valign="top" background="${pageContext.request.contextPath}/images/admins/left_bak.jpg">
|
<td width="244" height="738" valign="top" background="${pageContext.request.contextPath}/images/admins/left_bak_2511.jpg">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="${pageContext.request.contextPath}/images/admins/${menuId}/1_tit_01.gif" width="244" height="62" /></td>
|
<td><img src="${pageContext.request.contextPath}/images/admins/${menuId}/1_tit_01.gif" width="244" height="62" /></td>
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
<!--
|
<!--
|
||||||
body
|
body
|
||||||
{
|
{
|
||||||
background-image: url(${pageContext.request.contextPath}/images/admins/left_bak.jpg);
|
background-image: url(${pageContext.request.contextPath}/images/admins/left_bak_2511.jpg);
|
||||||
margin-left:0;
|
margin-left:0;
|
||||||
margin-top:0;
|
margin-top:0;
|
||||||
margin-right:0;
|
margin-right:0;
|
||||||
|
|
@ -22,7 +22,7 @@ img { border:0; }
|
||||||
<body>
|
<body>
|
||||||
<table id="Table_01" width="244" height="100%" border="0" cellpadding="0" cellspacing="0" background="${pageContext.request.contextPath}/images/admins/left_bak.gif">
|
<table id="Table_01" width="244" height="100%" border="0" cellpadding="0" cellspacing="0" background="${pageContext.request.contextPath}/images/admins/left_bak.gif">
|
||||||
<tr>
|
<tr>
|
||||||
<td width="244" height="668" valign="top" background="${pageContext.request.contextPath}/images/admins/left_bak.jpg">
|
<td width="244" height="738" valign="top" background="${pageContext.request.contextPath}/images/admins/left_bak_2511.jpg">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@
|
||||||
<!--
|
<!--
|
||||||
body
|
body
|
||||||
{
|
{
|
||||||
background-image: url(${pageContext.request.contextPath}/images/admins/left_bak.jpg);
|
background-image: url(${pageContext.request.contextPath}/images/admins/left_bak_2511.jpg);
|
||||||
margin-left:0;
|
margin-left:0;
|
||||||
margin-top:0;
|
margin-top:0;
|
||||||
margin-right:0;
|
margin-right:0;
|
||||||
|
|
@ -67,7 +67,7 @@ img { border:0; }
|
||||||
<!-- <tr height=10><td colspan="3"><img src="/admins/img/left_top_border.gif"></td></tr>
|
<!-- <tr height=10><td colspan="3"><img src="/admins/img/left_top_border.gif"></td></tr>
|
||||||
<tr height=30><td colspan="3"><img src="/admins/img/user/left_title.gif"></td></tr>-->
|
<tr height=30><td colspan="3"><img src="/admins/img/user/left_title.gif"></td></tr>-->
|
||||||
<tr>
|
<tr>
|
||||||
<td width="244" height="668" valign="top" background="${pageContext.request.contextPath}/images/admins/left_bak.jpg">
|
<td width="244" height="738" valign="top" background="${pageContext.request.contextPath}/images/admins/left_bak_2511.jpg">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="${pageContext.request.contextPath}/images/admins/user/1_tit_01.gif" width="244" height="62" /></td>
|
<td><img src="${pageContext.request.contextPath}/images/admins/user/1_tit_01.gif" width="244" height="62" /></td>
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
body
|
body
|
||||||
{
|
{
|
||||||
background-image: url(${pageContext.request.contextPath}/images/admins/left_bak.jpg);
|
background-image: url(${pageContext.request.contextPath}/images/admins/left_bak_2511.jpg);
|
||||||
margin-left:0;
|
margin-left:0;
|
||||||
margin-top:0;
|
margin-top:0;
|
||||||
margin-right:0;
|
margin-right:0;
|
||||||
|
|
@ -21,7 +21,7 @@ img { border:0; }
|
||||||
<body>
|
<body>
|
||||||
<table id="Table_01" width="244" height="100%" border="0" cellpadding="0" cellspacing="0" background="${pageContext.request.contextPath}/images/admins/left_bak.gif">
|
<table id="Table_01" width="244" height="100%" border="0" cellpadding="0" cellspacing="0" background="${pageContext.request.contextPath}/images/admins/left_bak.gif">
|
||||||
<tr>
|
<tr>
|
||||||
<td width="244" height="668" valign="top" background="${pageContext.request.contextPath}/images/admins/left_bak.jpg">
|
<td width="244" height="738" valign="top" background="${pageContext.request.contextPath}/images/admins/left_bak_2511.jpg">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="${pageContext.request.contextPath}/images/admins/userLog/2_tit_01.gif" width="244" height="62" /></td>
|
<td><img src="${pageContext.request.contextPath}/images/admins/userLog/2_tit_01.gif" width="244" height="62" /></td>
|
||||||
|
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 1.8 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.5 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 26 KiB |
Loading…
Reference in New Issue