feat: 발주기관 통계 및 알림 내역 template추가

main
thkim 2025-08-27 17:00:24 +09:00
parent 2d6bfce180
commit 18eb6b9b91
13 changed files with 1552 additions and 72 deletions

View File

@ -56,7 +56,7 @@ public class GeoinfoApiV1Controller {
public JSONObject handleApiService(
@ApiParam(value = "URL 경로에 포함된 서비스 이름", required = true, example = "getProjectInfo") @PathVariable("spName") String spName,
HttpServletRequest request,
@RequestParam HashMap<String, String> params,
@RequestParam HashMap<String, Object> params,
HttpServletResponse response) {
@ -66,7 +66,7 @@ public class GeoinfoApiV1Controller {
// 2. HashMap을 사용하여 JSONObject 생성
JSONObject jsonObject = new JSONObject();
for (HashMap.Entry<String, String> entry : params.entrySet()) {
for (HashMap.Entry<String, Object> entry : params.entrySet()) {
if ("".equals(entry.getValue())) {
entry.setValue(null);
jsonObject.put(entry.getKey(), entry.getValue());

View File

@ -7,10 +7,129 @@ import java.util.HashMap;
import egovframework.rte.psl.dataaccess.mapper.Mapper;
import egovframework.rte.psl.dataaccess.util.EgovMap;
/**
* Geoinfo API v1 Mapper
* @author
* @since 2025.08.18
* @version 1.0
* @see
*
* <pre>
* << (Modification Information) >>
*
*
* ------- -------- ---------------------------
* 2025.08.18
*
* </pre>
*/
@Mapper("geoinfoApiV1Mapper")
public interface GeoinfoApiV1Mapper {
public ArrayList<EgovMap> spGetTblProjectInfo(HashMap<String, String> params) throws SQLException;
// ==================================================================================================
// 프로젝트 정보 (Project Info)
// ==================================================================================================
public ArrayList<EgovMap> spGetTblProjectInfo(HashMap<String, Object> params) throws SQLException;
public int spCntTblProjectInfo(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetSelectclassInfoP(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetSelectclassInfoPh(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblTopoGeology(HashMap<String, Object> params) throws SQLException;
public int spCntTblTopoGeology(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblResistivitySurvey(HashMap<String, Object> params) throws SQLException;
public int spCntTblResistivitySurvey(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblRefractionSurvey(HashMap<String, Object> params) throws SQLException;
public int spCntTblRefractionSurvey(HashMap<String, Object> params) throws SQLException;
// ==================================================================================================
// 시추공 정보 (Borehole Info)
// ==================================================================================================
public ArrayList<EgovMap> spGetTblHeader(HashMap<String, Object> params) throws SQLException;
public int spCntTblHeader(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetSelectclassInfoH(HashMap<String, Object> params) throws SQLException;
// ==================================================================================================
// 시추공 부속 정보 (Borehole Appendix)
// ==================================================================================================
// 지층/시료 정보
public ArrayList<EgovMap> spGetTblLayerInfo(HashMap<String, Object> params) throws SQLException;
public int spCntTblLayerInfo(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblSampleInfo(HashMap<String, Object> params) throws SQLException;
public int spCntTblSampleInfo(HashMap<String, Object> params) throws SQLException;
// 현장 시험
public ArrayList<EgovMap> spGetTblSpt(HashMap<String, Object> params) throws SQLException;
public int spCntTblSpt(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblSlickensideInfo(HashMap<String, Object> params) throws SQLException;
public int spCntTblSlickensideInfo(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblRqd(HashMap<String, Object> params) throws SQLException;
public int spCntTblRqd(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblDsf(HashMap<String, Object> params) throws SQLException;
public int spCntTblDsf(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblRmr(HashMap<String, Object> params) throws SQLException;
public int spCntTblRmr(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblQ(HashMap<String, Object> params) throws SQLException;
public int spCntTblQ(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblFieldWaterpressure(HashMap<String, Object> params) throws SQLException;
public int spCntTblFieldWaterpressure(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblWpTest(HashMap<String, Object> params) throws SQLException;
public int spCntTblWpTest(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblFieldPermeability(HashMap<String, Object> params) throws SQLException;
public int spCntTblFieldPermeability(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblFieldperSub(HashMap<String, Object> params) throws SQLException;
public int spCntTblFieldperSub(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblFieldPressuremeter(HashMap<String, Object> params) throws SQLException;
public int spCntTblFieldPressuremeter(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblFieldConePenetra(HashMap<String, Object> params) throws SQLException;
public int spCntTblFieldConePenetra(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblBoreholeWave(HashMap<String, Object> params) throws SQLException;
public int spCntTblBoreholeWave(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblDownhole(HashMap<String, Object> params) throws SQLException;
public int spCntTblDownhole(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblDensity(HashMap<String, Object> params) throws SQLException;
public int spCntTblDensity(HashMap<String, Object> params) throws SQLException;
// 실내 시험
public ArrayList<EgovMap> spGetTblClassification(HashMap<String, Object> params) throws SQLException;
public int spCntTblClassification(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblCbrCompac(HashMap<String, Object> params) throws SQLException;
public int spCntTblCbrCompac(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblConsolidationUsual(HashMap<String, Object> params) throws SQLException;
public int spCntTblConsolidationUsual(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblConsolidation(HashMap<String, Object> params) throws SQLException;
public int spCntTblConsolidation(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblUnconfinedUsual(HashMap<String, Object> params) throws SQLException;
public int spCntTblUnconfinedUsual(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblTriaxialUsual(HashMap<String, Object> params) throws SQLException;
public int spCntTblTriaxialUsual(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblTriaxialCu(HashMap<String, Object> params) throws SQLException;
public int spCntTblTriaxialCu(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblTriaxialUu(HashMap<String, Object> params) throws SQLException;
public int spCntTblTriaxialUu(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblResonantUsual(HashMap<String, Object> params) throws SQLException;
public int spCntTblResonantUsual(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblResonant(HashMap<String, Object> params) throws SQLException;
public int spCntTblResonant(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblRepeatedTriaxialU(HashMap<String, Object> params) throws SQLException;
public int spCntTblRepeatedTriaxialU(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblRepeatedTriaxial(HashMap<String, Object> params) throws SQLException;
public int spCntTblRepeatedTriaxial(HashMap<String, Object> params) throws SQLException;
// 암석 시험
public ArrayList<EgovMap> spGetTblRockUniaxial(HashMap<String, Object> params) throws SQLException;
public int spCntTblRockUniaxial(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblRockTriaxial(HashMap<String, Object> params) throws SQLException;
public int spCntTblRockTriaxial(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblRockPointload(HashMap<String, Object> params) throws SQLException;
public int spCntTblRockPointload(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblRockJointshear(HashMap<String, Object> params) throws SQLException;
public int spCntTblRockJointshear(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblRockResonantUsual(HashMap<String, Object> params) throws SQLException;
public int spCntTblRockResonantUsual(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblRockReptTriU(HashMap<String, Object> params) throws SQLException;
public int spCntTblRockReptTriU(HashMap<String, Object> params) throws SQLException;
public ArrayList<EgovMap> spGetTblRockReptTri(HashMap<String, Object> params) throws SQLException;
public int spCntTblRockReptTri(HashMap<String, Object> params) throws SQLException;
}

View File

@ -8,5 +8,5 @@ import org.json.simple.JSONObject;
public interface GeoinfoApiV1Service {
int handleApiService(HttpServletRequest request, HashMap<String, String> params, String spName, JSONObject jsonResponse) throws Exception;
int handleApiService(HttpServletRequest request, HashMap<String, Object> params, String spName, JSONObject jsonResponse) throws Exception;
}

View File

@ -2,24 +2,16 @@ package geoinfo.api.geoinfo.service.impl;
import geoinfo.api.geoinfo.service.GeoinfoApiV1Mapper;
import geoinfo.api.geoinfo.service.GeoinfoApiV1Service;
import geoinfo.drilling.input.service.DrillingInputMapper;
import geoinfo.drilling.input.service.DrillingInputService;
import geoinfo.drilling.inquiry.service.DrillingInquiryService;
import geoinfo.main.login.service.LoginMapper;
import geoinfo.util.MyUtil;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.springframework.beans.factory.annotation.Autowired;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import egovframework.rte.psl.dataaccess.util.EgovMap;
@ -27,48 +19,199 @@ import egovframework.rte.psl.dataaccess.util.EgovMap;
@Service("geoinfoApiV1Service")
public class GeoinfoApiV1ServiceImpl implements GeoinfoApiV1Service {
private static final Logger LOGGER = LoggerFactory.getLogger(GeoinfoApiV1ServiceImpl.class);
@Resource(name="geoinfoApiV1Mapper")
private GeoinfoApiV1Mapper geoinfoApiV1Mapper;
public int handleApiService(HttpServletRequest request, HashMap<String, String> params, String spName, JSONObject jsonResponse) throws Exception {
public int handleApiService(HttpServletRequest request, HashMap<String, Object> params, String spName, JSONObject jsonResponse) throws Exception {
//호출 프로시저 유효성 체크
spName = spName.trim();
// 서비스 이름에 따라 분기 처리
HashMap<String, Object> resultMap = null;
int nRetCode = -1;
String lpszRetMsg = null;
if ("sp-get-tbl-project-info".equalsIgnoreCase(spName)) {
ArrayList<EgovMap> hashMapList = geoinfoApiV1Mapper.spGetTblProjectInfo(params);
jsonResponse.put("data", hashMapList);
//nRetCode = MyUtil.getIntegerFromObject(hashMap.get("v_RetCode"));
//lpszRetMsg = MyUtil.getStringFromObject(hashMap.get("v_RetMsg"));
} else if ("def".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblProjectInfo(params));
} else if ("sp-cnt-tbl-project-info".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblProjectInfo(params));
} else if ("sp-get-selectclass-info-p".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetSelectclassInfoP(params));
} else if ("sp-get-selectclass-info-ph".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetSelectclassInfoPh(params));
} else if ("sp-get-tbl-topo-geology".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblTopoGeology(params));
} else if ("sp-cnt-tbl-topo-geology".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblTopoGeology(params));
} else if ("sp-get-tbl-resistivity-survey".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblResistivitySurvey(params));
} else if ("sp-cnt-tbl-resistivity-survey".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblResistivitySurvey(params));
} else if ("sp-get-tbl-refraction-survey".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblRefractionSurvey(params));
} else if ("sp-cnt-tbl-refraction-survey".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblRefractionSurvey(params));
} else if ("sp-get-tbl-header".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblHeader(params));
} else if ("sp-cnt-tbl-header".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblHeader(params));
} else if ("sp-get-selectclass-info-h".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetSelectclassInfoH(params));
} else if ("sp-get-tbl-layer-info".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblLayerInfo(params));
} else if ("sp-cnt-tbl-layer-info".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblLayerInfo(params));
} else if ("sp-get-tbl-sample-info".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblSampleInfo(params));
} else if ("sp-cnt-tbl-sample-info".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblSampleInfo(params));
} else if ("sp-get-tbl-spt".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblSpt(params));
} else if ("sp-cnt-tbl-spt".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblSpt(params));
} else if ("sp-get-tbl-slickenside-info".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblSlickensideInfo(params));
} else if ("sp-cnt-tbl-slickenside-info".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblSlickensideInfo(params));
} else if ("sp-get-tbl-rqd".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblRqd(params));
} else if ("sp-cnt-tbl-rqd".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblRqd(params));
} else if ("sp-get-tbl-dsf".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblDsf(params));
} else if ("sp-cnt-tbl-dsf".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblDsf(params));
} else if ("sp-get-tbl-rmr".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblRmr(params));
} else if ("sp-cnt-tbl-rmr".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblRmr(params));
} else if ("sp-get-tbl-q".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblQ(params));
} else if ("sp-cnt-tbl-q".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblQ(params));
} else if ("sp-get-tbl-field-waterpressure".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblFieldWaterpressure(params));
} else if ("sp-cnt-tbl-field-waterpressure".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblFieldWaterpressure(params));
} else if ("sp-get-tbl-wp-test".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblWpTest(params));
} else if ("sp-cnt-tbl-wp-test".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblWpTest(params));
} else if ("sp-get-tbl-field-permeability".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblFieldPermeability(params));
} else if ("sp-cnt-tbl-field-permeability".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblFieldPermeability(params));
} else if ("sp-get-tbl-fieldper-sub".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblFieldperSub(params));
} else if ("sp-cnt-tbl-fieldper-sub".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblFieldperSub(params));
} else if ("sp-get-tbl-field-pressuremeter".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblFieldPressuremeter(params));
} else if ("sp-cnt-tbl-field-pressuremeter".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblFieldPressuremeter(params));
} else if ("sp-get-tbl-field-cone-penetra".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblFieldConePenetra(params));
} else if ("sp-cnt-tbl-field-cone-penetra".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblFieldConePenetra(params));
} else if ("sp-get-tbl-borehole-wave".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblBoreholeWave(params));
} else if ("sp-cnt-tbl-borehole-wave".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblBoreholeWave(params));
} else if ("sp-get-tbl-downhole".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblDownhole(params));
} else if ("sp-cnt-tbl-downhole".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblDownhole(params));
} else if ("sp-get-tbl-density".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblDensity(params));
} else if ("sp-cnt-tbl-density".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblDensity(params));
} else if ("sp-get-tbl-classification".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblClassification(params));
} else if ("sp-cnt-tbl-classification".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblClassification(params));
} else if ("sp-get-tbl-cbr-compac".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblCbrCompac(params));
} else if ("sp-cnt-tbl-cbr-compac".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblCbrCompac(params));
} else if ("sp-get-tbl-consolidation-usual".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblConsolidationUsual(params));
} else if ("sp-cnt-tbl-consolidation-usual".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblConsolidationUsual(params));
} else if ("sp-get-tbl-consolidation".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblConsolidation(params));
} else if ("sp-cnt-tbl-consolidation".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblConsolidation(params));
} else if ("sp-get-tbl-unconfined-usual".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblUnconfinedUsual(params));
} else if ("sp-cnt-tbl-unconfined-usual".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblUnconfinedUsual(params));
} else if ("sp-get-tbl-triaxial-usual".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblTriaxialUsual(params));
} else if ("sp-cnt-tbl-triaxial-usual".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblTriaxialUsual(params));
} else if ("sp-get-tbl-triaxial-cu".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblTriaxialCu(params));
} else if ("sp-cnt-tbl-triaxial-cu".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblTriaxialCu(params));
} else if ("sp-get-tbl-triaxial-uu".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblTriaxialUu(params));
} else if ("sp-cnt-tbl-triaxial-uu".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblTriaxialUu(params));
} else if ("sp-get-tbl-resonant-usual".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblResonantUsual(params));
} else if ("sp-cnt-tbl-resonant-usual".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblResonantUsual(params));
} else if ("sp-get-tbl-resonant".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblResonant(params));
} else if ("sp-cnt-tbl-resonant".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblResonant(params));
} else if ("sp-get-tbl-repeated-triaxial-u".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblRepeatedTriaxialU(params));
} else if ("sp-cnt-tbl-repeated-triaxial-u".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblRepeatedTriaxialU(params));
} else if ("sp-get-tbl-repeated-triaxial".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblRepeatedTriaxial(params));
} else if ("sp-cnt-tbl-repeated-triaxial".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblRepeatedTriaxial(params));
} else if ("sp-get-tbl-rock-uniaxial".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblRockUniaxial(params));
} else if ("sp-cnt-tbl-rock-uniaxial".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblRockUniaxial(params));
} else if ("sp-get-tbl-rock-triaxial".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblRockTriaxial(params));
} else if ("sp-cnt-tbl-rock-triaxial".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblRockTriaxial(params));
} else if ("sp-get-tbl-rock-pointload".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblRockPointload(params));
} else if ("sp-cnt-tbl-rock-pointload".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblRockPointload(params));
} else if ("sp-get-tbl-rock-jointshear".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblRockJointshear(params));
} else if ("sp-cnt-tbl-rock-jointshear".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblRockJointshear(params));
} else if ("sp-get-tbl-rock-resonant-usual".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblRockResonantUsual(params));
} else if ("sp-cnt-tbl-rock-resonant-usual".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblRockResonantUsual(params));
} else if ("sp-get-tbl-rock-rept-tri-u".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblRockReptTriU(params));
} else if ("sp-cnt-tbl-rock-rept-tri-u".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblRockReptTriU(params));
} else if ("sp-get-tbl-rock-rept-tri".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spGetTblRockReptTri(params));
} else if ("sp-cnt-tbl-rock-rept-tri".equalsIgnoreCase(spName)) {
jsonResponse.put("data", geoinfoApiV1Mapper.spCntTblRockReptTri(params));
} else {
// 지원하지 않는 서비스명인 경우 오류 처리
throw new Exception("Unsupported service name: " + spName);
}
if( false ) {
if( nRetCode == 100 ) {
jsonResponse.put("resultCode", nRetCode);
// 성공 응답 기본값 설정
jsonResponse.put("resultCode", 0);
jsonResponse.put("result", "true");
jsonResponse.put("message", "SUCCESS");
} else {
jsonResponse.put("resultCode", nRetCode);
jsonResponse.put("result", "false");
jsonResponse.put("message", lpszRetMsg);
}
// 성공 코드 반환
return 0;
}
return nRetCode;
}
}

View File

@ -0,0 +1,53 @@
package geoinfo.drilling.statistics;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.simple.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import geoinfo.drilling.inquiry.service.DrillingInquiryService;
import geoinfo.util.MyUtil;
@Controller
public class DrillingStatisticsController {
private static final Logger LOGGER = LoggerFactory.getLogger(DrillingStatisticsController.class);
@Autowired
DrillingInquiryService drillingInquiryService;
@RequestMapping(value = "/drilling/statistics.do")
public String drillingStatistics(@RequestParam HashMap<String, Object> params, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws Exception {
if(request.getSession().getAttribute("USERNAME") == null){
return "redirect:/index.do";
}
return "/drilling/statistics/drilling_statistics";
}
@RequestMapping(value = "/drilling/notice.do")
public String drillingNotice(@RequestParam HashMap<String, Object> params, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws Exception {
if(request.getSession().getAttribute("USERNAME") == null){
return "redirect:/index.do";
}
return "/drilling/statistics/drilling_notice";
}
}

View File

@ -0,0 +1,15 @@
package geoinfo.drilling.statistics.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("drillingStatisticsMapper")
public interface DrillingStatisticsMapper {
}

View File

@ -0,0 +1,16 @@
package geoinfo.drilling.statistics.service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.json.simple.JSONObject;
import egovframework.rte.psl.dataaccess.util.EgovMap;
public interface DrillingStatisticsService {
}

View File

@ -0,0 +1,53 @@
package geoinfo.drilling.statistics.service.impl;
import geoinfo.drilling.input.service.DrillingInputMapper;
import geoinfo.drilling.input.service.DrillingInputService;
import geoinfo.drilling.inquiry.service.DrillingInquiryMapper;
import geoinfo.drilling.inquiry.service.DrillingInquiryService;
import geoinfo.drilling.statistics.service.DrillingStatisticsService;
import geoinfo.main.login.service.LoginMapper;
import geoinfo.main.login.service.LoginService;
import geoinfo.util.MyUtil;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import oracle.sql.TIMESTAMP;
import org.json.simple.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import egovframework.rte.psl.dataaccess.util.EgovMap;
@Service("drillingStatisticsService")
public class DrillingStatisticsServiceImpl implements DrillingStatisticsService {
@Resource(name="drillingInquiryMapper")
private DrillingInquiryMapper drillingInquiryMapper;
@Resource(name="drillingInputMapper")
private DrillingInputMapper drillingInputMapper;
@Autowired
DrillingInputService drillingInputService;
@Resource(name = "loginService")
private LoginService loginService;
@Resource(name="loginMapper")
private LoginMapper loginMapper;
}

View File

@ -3,10 +3,10 @@
<mapper namespace="geoinfo.api.geoinfo.service.GeoinfoApiV1Mapper">
<!--
Oracle 테이블 반환 함수(SP_GET_TBL_PROJECT_INFO)를 호출하는 MyBatis 쿼리입니다.
- id: 서비스 레이어에서 호출할 쿼리의 고유 식별자입니다.
-->
<!-- ================================================================================================== -->
<!-- 프로젝트 정보 (Project Info) -->
<!-- ================================================================================================== -->
<select id="spGetTblProjectInfo" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_PROJECT_INFO(
#{prjCode, jdbcType=VARCHAR},
@ -18,9 +18,6 @@
))
</select>
<!--
Oracle 함수(SP_CNT_TBL_PROJECT_INFO)를 호출하여 조건에 맞는 프로젝트 정보의 총 개수를 반환합니다.
-->
<select id="spCntTblProjectInfo" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_PROJECT_INFO(
#{prjCode, jdbcType=VARCHAR},
@ -32,25 +29,548 @@
) FROM DUAL
</select>
<!--
Oracle 함수(SP_GET_ADDR_BY_ADDRCODE)를 호출하여 주소 코드를 전체 주소 문자열로 변환합니다.
-->
<select id="spGetAddrByAddrCode" parameterType="map" resultType="String">
SELECT SP_GET_ADDR_BY_ADDRCODE(
#{prjCode, jdbcType=VARCHAR},
#{addrCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<!--
Oracle 테이블 반환 함수(SP_GET_SELECTCLASS_INFO_P)를 호출하여 프로젝트와 관련된 각 테이블의 데이터 개수를 조회합니다.
- resultType: "egovMap"으로 설정하여 결과 행을 Map 객체로 받습니다.
-->
<select id="spGetSelectclassInfoP" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_SELECTCLASS_INFO_P(
#{projCode, jdbcType=VARCHAR}
))
</select>
<select id="spGetSelectclassInfoPh" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_SELECTCLASS_INFO_PH(
#{projCode, jdbcType=VARCHAR}
))
</select>
<select id="spGetTblTopoGeology" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_TOPO_GEOLOGY(
#{projCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblTopoGeology" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_TOPO_GEOLOGY(
#{projCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblResistivitySurvey" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_RESISTIVITY_SURVEY(
#{projCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblResistivitySurvey" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_RESISTIVITY_SURVEY(
#{projCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblRefractionSurvey" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_REFRACTION_SURVEY(
#{projCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblRefractionSurvey" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_REFRACTION_SURVEY(
#{projCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<!-- ================================================================================================== -->
<!-- 시추공 정보 (Borehole Info) -->
<!-- ================================================================================================== -->
<select id="spGetTblHeader" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_HEADER(
#{prjCode, jdbcType=VARCHAR},
#{holeCode, jdbcType=VARCHAR},
#{holeName, jdbcType=VARCHAR},
#{addr, jdbcType=VARCHAR},
#{minX, jdbcType=DECIMAL},
#{minY, jdbcType=DECIMAL},
#{maxX, jdbcType=DECIMAL},
#{maxY, jdbcType=DECIMAL},
#{startDate, jdbcType=VARCHAR},
#{endDate, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblHeader" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_HEADER(
#{prjCode, jdbcType=VARCHAR},
#{holeCode, jdbcType=VARCHAR},
#{holeName, jdbcType=VARCHAR},
#{addr, jdbcType=VARCHAR},
#{minX, jdbcType=DECIMAL},
#{minY, jdbcType=DECIMAL},
#{maxX, jdbcType=DECIMAL},
#{maxY, jdbcType=DECIMAL},
#{startDate, jdbcType=VARCHAR},
#{endDate, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetSelectclassInfoH" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_SELECTCLASS_INFO_H(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<!-- ================================================================================================== -->
<!-- 시추공 부속 정보 (Borehole Appendix) -->
<!-- ================================================================================================== -->
<!-- 지층/시료 정보 -->
<select id="spGetTblLayerInfo" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_LAYER_INFO(
#{holeCode, jdbcType=VARCHAR},
#{layerCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblLayerInfo" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_LAYER_INFO(
#{holeCode, jdbcType=VARCHAR},
#{layerCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblSampleInfo" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_SAMPLE_INFO(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblSampleInfo" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_SAMPLE_INFO(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<!-- 현장 시험 -->
<select id="spGetTblSpt" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_SPT(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblSpt" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_SPT(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblSlickensideInfo" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_SLICKENSIDE_INFO(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblSlickensideInfo" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_SLICKENSIDE_INFO(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblRqd" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_RQD(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblRqd" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_RQD(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblDsf" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_DSF(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblDsf" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_DSF(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblRmr" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_RMR(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblRmr" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_RMR(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblQ" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_Q(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblQ" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_Q(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblFieldWaterpressure" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_FIELD_WATERPRESSURE(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblFieldWaterpressure" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_FIELD_WATERPRESSURE(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblWpTest" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_WP_TEST(
#{holeCode, jdbcType=VARCHAR},
#{wpCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblWpTest" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_WP_TEST(
#{holeCode, jdbcType=VARCHAR},
#{wpCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblFieldPermeability" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_FIELD_PERMEABILITY(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblFieldPermeability" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_FIELD_PERMEABILITY(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblFieldperSub" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_FIELDPER_SUB(
#{holeCode, jdbcType=VARCHAR},
#{fielderCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblFieldperSub" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_FIELDPER_SUB(
#{holeCode, jdbcType=VARCHAR},
#{fielderCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblFieldPressuremeter" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_FIELD_PRESSUREMETER(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblFieldPressuremeter" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_FIELD_PRESSUREMETER(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblFieldConePenetra" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_FIELD_CONE_PENETRA(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblFieldConePenetra" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_FIELD_CONE_PENETRA(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblBoreholeWave" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_BOREHOLE_WAVE(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblBoreholeWave" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_BOREHOLE_WAVE(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblDownhole" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_DOWNHOLE(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblDownhole" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_DOWNHOLE(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblDensity" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_DENSITY(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblDensity" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_DENSITY(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<!-- 실내 시험 -->
<select id="spGetTblClassification" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_CLASSIFICATION(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblClassification" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_CLASSIFICATION(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblCbrCompac" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_CBR_COMPAC(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblCbrCompac" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_CBR_COMPAC(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblConsolidationUsual" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_CONSOLIDATION_USUAL(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblConsolidationUsual" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_CONSOLIDATION_USUAL(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblConsolidation" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_CONSOLIDATION(
#{holeCode, jdbcType=VARCHAR},
#{sampleCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblConsolidation" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_CONSOLIDATION(
#{holeCode, jdbcType=VARCHAR},
#{sampleCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblUnconfinedUsual" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_UNCONFINED_USUAL(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblUnconfinedUsual" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_UNCONFINED_USUAL(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblTriaxialUsual" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_TRIAXIAL_USUAL(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblTriaxialUsual" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_TRIAXIAL_USUAL(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblTriaxialCu" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_TRIAXIAL_CU(
#{holeCode, jdbcType=VARCHAR},
#{sampleCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblTriaxialCu" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_TRIAXIAL_CU(
#{holeCode, jdbcType=VARCHAR},
#{sampleCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblTriaxialUu" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_TRIAXIAL_UU(
#{holeCode, jdbcType=VARCHAR},
#{sampleCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblTriaxialUu" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_TRIAXIAL_UU(
#{holeCode, jdbcType=VARCHAR},
#{sampleCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblResonantUsual" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_RESONANT_USUAL(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblResonantUsual" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_RESONANT_USUAL(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblResonant" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_RESONANT(
#{holeCode, jdbcType=VARCHAR},
#{sampleCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblResonant" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_RESONANT(
#{holeCode, jdbcType=VARCHAR},
#{sampleCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblRepeatedTriaxialU" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_REPEATED_TRIAXIAL_U(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblRepeatedTriaxialU" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_REPEATED_TRIAXIAL_U(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblRepeatedTriaxial" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_REPEATED_TRIAXIAL(
#{holeCode, jdbcType=VARCHAR},
#{sampleCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblRepeatedTriaxial" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_REPEATED_TRIAXIAL(
#{holeCode, jdbcType=VARCHAR},
#{sampleCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<!-- 암석 시험 -->
<select id="spGetTblRockUniaxial" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_ROCK_UNIAXIAL(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblRockUniaxial" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_ROCK_UNIAXIAL(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblRockTriaxial" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_ROCK_TRIAXIAL(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblRockTriaxial" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_ROCK_TRIAXIAL(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblRockPointload" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_ROCK_POINTLOAD(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblRockPointload" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_ROCK_POINTLOAD(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblRockJointshear" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_ROCK_JOINTSHEAR(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblRockJointshear" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_ROCK_JOINTSHEAR(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblRockResonantUsual" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_ROCK_RESONANT_USUAL(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblRockResonantUsual" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_ROCK_RESONANT_USUAL(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblRockReptTriU" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_ROCK_REPT_TRI_U(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblRockReptTriU" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_ROCK_REPT_TRI_U(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
<select id="spGetTblRockReptTri" parameterType="map" resultType="egovMap">
SELECT * FROM TABLE(SP_GET_TBL_ROCK_REPT_TRI(
#{holeCode, jdbcType=VARCHAR}
))
</select>
<select id="spCntTblRockReptTri" parameterType="map" resultType="int">
SELECT SP_CNT_TBL_ROCK_REPT_TRI(
#{holeCode, jdbcType=VARCHAR}
) FROM DUAL
</select>
</mapper>

View File

@ -0,0 +1,6 @@
<?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.drilling.statistics.service.DrillingStatisticsMapper">
</mapper>

View File

@ -178,6 +178,12 @@
</a>
</li>
<li class="">
<a href="/drilling/statistics.do">
통계
</a>
</li>
<li class="" style="display: none;">
<a href="/drilling/input.do">
입력 하기

View File

@ -0,0 +1,148 @@
<%@ 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="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%
if (request.getSession().getAttribute("USERID") == null) {
%>
<script>alert('로그인후 이용하실 수 있습니다.');window.location.href='/index.do';</script>
<%
return;
}
%>
<%
if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSession().getAttribute("CLS") ) == false ) {
%>
<script>alert('발주 기관 회원만 이용가능합니다.');window.location.href='/index.do';</script>
<%
return;
}
%>
<%@ include file="/include/inc_head_2021_new.jsp" %>
<!-- header start-->
<c:import url="/drilling/common/includeTopMenu.do" charEncoding="UTF-8" />
<!-- Tailwind CSS CDN -->
<script src="https://cdn.tailwindcss.com"></script>
<!-- Google Fonts: Inter -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Noto+Sans+KR:wght@400;500;700&display=swap" rel="stylesheet">
<!-- header end-->
<style>
/* Minimal styles needed for this page */
</style>
<!-- javascript start-->
<script type="text/javascript">
</script>
<!-- javascript end-->
<!-- 페이지 컨테이너 시작 -->
<section class="drilling-page-container">
<div class="page-content-wrapper drilling inquiry">
<!-- 서브메뉴 시작 -->
<div class="page-sidebar-wrapper">
<div class="page-sidebar">
<div class="treeview-project-name">
<p class="project-title">알림</p>
<p class="project-value"><a href="/drilling/statistics.do">통계</a></p>
<p class="project-value value-is-active">알림 내역</p>
</div>
</div>
</div>
<!-- 서브메뉴 끝 -->
<!-- 콘텐츠 시작 -->
<div class="page-content">
<div class="page-content-inner">
<!-- 카테고리 시작 -->
<div class="category-wrapper">
<ul class="page-category">
<li class="category-item"></li>
<li class="category-item">알림 내역</li>
</ul>
<a href="#" class="btn btn-help">도움말</a>
</div>
<!-- 카테고리 끝 -->
<h1 class="page-title-1depth">알림 내역</h1>
<!-- 내용 시작 -->
<div class="content-wrapper">
<!-- Main Content -->
<main class="w-full">
<div class="bg-white p-6 rounded-lg shadow-md">
<div class="border-b pb-4 mb-4">
<h3 class="font-semibold text-gray-800 text-4xl">건설현장 프로젝트 상태 변경 이력</h3>
</div>
<div class="space-y-6">
<!-- Notification Item 1 -->
<div class="flex items-start p-4 bg-gray-50 rounded-lg">
<div class="bg-green-500 text-white rounded-full h-10 w-10 flex-shrink-0 flex items-center justify-center mr-4">
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg>
</div>
<div class="flex-grow">
<p class="text-3xl font-medium text-gray-800">'충북선 달천 충주간' 프로젝트</p>
<p class="text-2xl text-gray-600">상태가 <span class="font-semibold text-yellow-600">검수중</span>에서 <span class="font-semibold text-green-600">검수 완료</span>로 변경되었습니다.</p>
</div>
<div class="text-right text-gray-500 text-xl">
<p>2025-08-27</p>
<p>14:30</p>
</div>
</div>
<!-- Notification Item 2 -->
<div class="flex items-start p-4 bg-gray-50 rounded-lg">
<div class="bg-blue-500 text-white rounded-full h-10 w-10 flex-shrink-0 flex items-center justify-center mr-4">
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg>
</div>
<div class="flex-grow">
<p class="text-3xl font-medium text-gray-800">'제3연륙교 건설 공사' 프로젝트</p>
<p class="text-2xl text-gray-600">상태가 <span class="font-semibold text-green-600">검수 완료</span>에서 <span class="font-semibold text-blue-600">수정 요청</span>으로 변경되었습니다.</p>
</div>
<div class="text-right text-gray-500 text-xl">
<p>2025-08-26</p>
<p>11:15</p>
</div>
</div>
<!-- Notification Item 3 -->
<div class="flex items-start p-4 bg-gray-50 rounded-lg">
<div class="bg-yellow-500 text-white rounded-full h-10 w-10 flex-shrink-0 flex items-center justify-center mr-4">
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"></path></svg>
</div>
<div class="flex-grow">
<p class="text-3xl font-medium text-gray-800">'수도권 제2순환고속도로' 프로젝트</p>
<p class="text-2xl text-gray-600">상태가 <span class="font-semibold text-gray-600">미입력</span>에서 <span class="font-semibold text-yellow-600">검수중</span>으로 변경되었습니다.</p>
</div>
<div class="text-right text-gray-500 text-xl">
<p>2025-08-25</p>
<p>09:05</p>
</div>
</div>
</div>
</div>
</main>
</div>
<!-- 내용 끝 -->
</div>
</div>
<!-- 콘텐츠 끝 -->
</div>
</section>
<!-- 페이지 컨테이너 끝 -->
<div id="calenderDiv" class="trViewOff" style="position:absolute;"></div>
<%@ include file="/include/inc_footer_2021_new.jsp" %>

View File

@ -0,0 +1,401 @@
<%@ 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="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%
if (request.getSession().getAttribute("USERID") == null) {
%>
<script>alert('로그인후 이용하실 수 있습니다.');window.location.href='/index.do';</script>
<%
return;
}
%>
<%
if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSession().getAttribute("CLS") ) == false ) {
%>
<script>alert('발주 기관 회원만 이용가능합니다.');window.location.href='/index.do';</script>
<%
return;
}
%>
<%@ include file="/include/inc_head_2021_new.jsp" %>
<!-- header start-->
<c:import url="/drilling/common/includeTopMenu.do" charEncoding="UTF-8" />
<!-- Tailwind CSS CDN -->
<script src="https://cdn.tailwindcss.com"></script>
<!-- Chart.js CDN for creating charts -->
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<!-- Google Fonts: Inter -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Noto+Sans+KR:wght@400;500;700&display=swap" rel="stylesheet">
<!-- header end-->
<style>
@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: 91px;
top: 54px;
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;
}
</style>
<!-- javascript start-->
<script type="text/javascript">
</script>
<!-- javascript end-->
<!-- 페이지 컨테이너 시작 -->
<section class="drilling-page-container">
<div class="page-content-wrapper drilling inquiry">
<!-- 서브메뉴 시작 -->
<div class="page-sidebar-wrapper">
<div class="page-sidebar">
<div class="treeview-project-name">
<p class="project-title">통계</p>
<p class="project-value value-is-active">통계</p>
<p class="project-value"><a href="/drilling/notice.do">알림 내역</a></p>
</div>
</div>
</div>
<!-- 서브메뉴 끝 -->
<!-- 콘텐츠 시작 -->
<div class="page-content">
<div class="page-content-inner">
<!-- 카테고리 시작 -->
<div class="category-wrapper">
<ul class="page-category">
<li class="category-item"></li>
<li class="category-item">통계</li>
</ul>
<a href="#" class="btn btn-help">도움말</a>
</div>
<!-- 카테고리 끝 -->
<h1 class="page-title-1depth">통계</h1>
<!-- 내용 시작 -->
<div class="content-wrapper">
<!-- Main Content -->
<main class="flex flex-col lg:flex-row gap-4">
<!-- Right Sidebar -->
<aside class="w-full flex flex-col gap-4">
<!-- Wrapper div for side-by-side layout on large screens -->
<div class="flex flex-col lg:flex-row gap-4">
<!-- Project Status Chart -->
<div class="w-full lg:w-1/2 bg-white p-4 rounded-lg shadow-md">
<h3 class="font-semibold text-gray-800 mb-2 text-4xl">건설현장 프로젝트 입력상태 별 그래프</h3>
<div class="w-full h-[28rem] flex justify-center items-center">
<canvas id="projectStatusChart"></canvas>
</div>
</div>
<!-- Notifications -->
<div class="w-full lg:w-1/2 bg-white p-4 rounded-lg shadow-md flex flex-col">
<div class="flex justify-between items-center mb-2">
<h3 class="font-semibold text-gray-800 text-4xl">알림 내역</h3>
<a href="../drilling/notice.do" class="text-3xl text-blue-600 hover:underline">모두 보기</a>
</div>
<div class="space-y-3 flex-grow">
<div class="flex items-start p-2 bg-blue-50 rounded-lg">
<div class="bg-blue-500 text-white rounded-full h-8 w-8 flex-shrink-0 flex items-center justify-center mr-3">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg>
</div>
<div>
<p class="text-3xl font-medium text-gray-800">수정 요청</p>
<p class="text-2xl text-gray-600">'제3연륙교 건설 공사' 프로젝트의 시추정보 수정이 필요합니다.</p>
</div>
</div>
<div class="flex items-start p-2 rounded-lg">
<div class="bg-green-500 text-white rounded-full h-8 w-8 flex-shrink-0 flex items-center justify-center mr-3">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg>
</div>
<div>
<p class="text-3xl font-medium text-gray-800">검수 완료</p>
<p class="text-2xl text-gray-600">'충북선 달천 충주간' 프로젝트가 검수 완료되었습니다.</p>
</div>
</div>
</div>
</div>
</div>
<!-- Report Download Section -->
<div class="bg-white p-4 rounded-lg shadow-md">
<h3 class="font-semibold text-gray-800 mb-2 text-4xl">통계 보고서 다운로드</h3>
<p class="text-2xl text-gray-600 mb-4">발주기관 통계 기능을 보고서 형태로 다운로드 받을 수 있습니다.</p>
<!-- MODIFIED: Changed grid to 3 columns to allow for different chart widths -->
<div class="grid grid-cols-1 md:grid-cols-3 gap-4 mb-4">
<!-- MODIFIED: Set column span to 1 -->
<div class="md:col-span-1 flex flex-col items-center">
<h4 class="text-2xl font-medium text-center text-gray-700 mb-2">위험도 현황</h4>
<div class="relative h-96 w-96">
<canvas id="riskChart"></canvas>
</div>
</div>
<!-- MODIFIED: Set column span to 2 to make it twice as wide -->
<div class="md:col-span-2 flex flex-col items-center">
<h4 class="text-2xl font-medium text-center text-gray-700 mb-2">프로젝트 재정 현황</h4>
<!-- MODIFIED: Changed width to w-full to fill the new column span -->
<div class="relative h-96 w-full">
<canvas id="financialChart"></canvas>
</div>
</div>
</div>
<!-- MODIFIED: Wrapped button in a flex container to center it and reduced its width -->
<div class="flex justify-center">
<!-- MODIFIED: Reduced width from md:w-1/4 to md:w-[15%] (40% reduction) -->
<button class="w-full md:w-[15%] bg-red-500 hover:bg-red-600 text-white font-bold py-2 px-4 rounded-lg flex items-center justify-center transition duration-300 text-3xl">
<svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"></path></svg>
PDF로 내보내기
</button>
</div>
</div>
</aside>
</main>
<script>
// Chart.js initialization
document.addEventListener('DOMContentLoaded', () => {
// 1. Project Status Pie Chart
const ctxProjectStatus = document.getElementById('projectStatusChart').getContext('2d');
new Chart(ctxProjectStatus, {
type: 'pie',
data: {
labels: ['등록완료', '미입력', '검수중', '수정요청'],
datasets: [{
label: '프로젝트 상태',
data: [34, 32, 18, 16],
backgroundColor: [
'rgba(239, 68, 68, 0.8)', // Red
'rgba(245, 158, 11, 0.8)', // Amber
'rgba(16, 185, 129, 0.8)', // Emerald
'rgba(59, 130, 246, 0.8)' // Blue
],
borderColor: [
'rgba(239, 68, 68, 1)',
'rgba(245, 158, 11, 1)',
'rgba(16, 185, 129, 1)',
'rgba(59, 130, 246, 1)'
],
borderWidth: 1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
position: 'top',
},
tooltip: {
callbacks: {
label: function(context) {
let label = context.label || '';
if (label) {
label += ': ';
}
if (context.parsed !== null) {
label += context.parsed + '%';
}
return label;
}
}
}
}
}
});
// 2. Risk Status Donut Chart
const ctxRisk = document.getElementById('riskChart').getContext('2d');
new Chart(ctxRisk, {
type: 'doughnut',
data: {
labels: ['낮은 위험', '중간 위험', '높은 위험'],
datasets: [{
data: [41, 22, 37],
backgroundColor: [
'rgba(34, 197, 94, 0.8)', // Green
'rgba(245, 158, 11, 0.8)', // Amber
'rgba(239, 68, 68, 0.8)' // Red
],
borderColor: [
'rgba(34, 197, 94, 1)',
'rgba(245, 158, 11, 1)',
'rgba(239, 68, 68, 1)'
],
borderWidth: 1
}]
},
options: {
responsive: true,
maintainAspectRatio: true,
plugins: {
legend: {
position: 'bottom',
labels: {
boxWidth: 12
}
}
}
}
});
// 3. Financial Status Bar Chart
const ctxFinancial = document.getElementById('financialChart').getContext('2d');
new Chart(ctxFinancial, {
type: 'bar',
data: {
labels: ['프로젝트 A', '프로젝트 B', '프로젝트 C', '프로젝트 D'],
datasets: [{
label: '예산',
data: [65, 59, 80, 81],
backgroundColor: 'rgba(59, 130, 246, 0.7)',
borderColor: 'rgba(59, 130, 246, 1)',
borderWidth: 1
}, {
label: '실제 비용',
data: [45, 49, 60, 70],
backgroundColor: 'rgba(239, 68, 68, 0.7)',
borderColor: 'rgba(239, 68, 68, 1)',
borderWidth: 1
},{
label: '예상 비용',
data: [75, 69, 90, 91],
backgroundColor: 'rgba(16, 185, 129, 0.7)',
borderColor: 'rgba(16, 185, 129, 1)',
borderWidth: 1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
y: {
beginAtZero: true,
ticks: {
callback: function(value) {
return value + '억';
}
}
}
},
plugins: {
legend: {
display: false
}
}
}
});
});
</script>
</div>
<!-- 내용 끝 -->
</div>
</div>
<!-- 콘텐츠 끝 -->
</div>
</section>
<!-- 페이지 컨테이너 끝 -->
<div id="calenderDiv" class="trViewOff" style="position:absolute;"></div>
<%@ include file="/include/inc_footer_2021_new.jsp" %>