feat: 발주기관 프로젝트 목록 가져오기 query 안정화

main
thkim 2025-11-11 11:46:36 +09:00
parent 82a20351cb
commit d4117d5d09
6 changed files with 53 additions and 33 deletions

View File

@ -4,6 +4,8 @@ import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import egovframework.rte.psl.dataaccess.mapper.Mapper;
import egovframework.rte.psl.dataaccess.util.EgovMap;
@ -11,7 +13,7 @@ import egovframework.rte.psl.dataaccess.util.EgovMap;
public interface DrillingHomeMapper {
List<EgovMap> drillingMapSearchHole(String comCode);
List<EgovMap> drillingMapSearchHoleWithMbr(HashMap<String, Object> params);
String projectCodesByProjectMasterCompanyCodeAsComma(HashMap<String, Object> params);
public List<String> projectCodesByProjectMasterCompanyCodeAsList(@Param("comCodeList") List<String> comCodeList);
}

View File

@ -10,5 +10,5 @@ public interface DrillingHomeService {
public List<EgovMap> drillingMapSearchHole(String projectCode);
public List<EgovMap> drillingMapSearchHoleWithMbr(HashMap<String, Object> params);
public String projectCodesByProjectMasterCompanyCodeAsComma(HashMap<String, Object> params);
public String projectCodesByProjectMasterCompanyCodeAsList(HashMap<String, Object> params) throws Exception;
}

View File

@ -11,6 +11,7 @@ import geoinfo.util.MyUtil;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@ -44,8 +45,32 @@ public class DrillingHomeServiceImpl implements DrillingHomeService {
}
@Override
public String projectCodesByProjectMasterCompanyCodeAsComma(HashMap<String, Object> params) {
return drillingHomeMapper.projectCodesByProjectMasterCompanyCodeAsComma(params);
public String projectCodesByProjectMasterCompanyCodeAsList(HashMap<String, Object> params) throws Exception {
if( params.get("COM_CODE") == null ) {
throw new Exception("comCode 값은 필수입니다.");
}
String comCode = MyUtil.getStringFromObject( params.get("COM_CODE") );
List<String> comCodeList = new ArrayList<String>();
comCodeList.add(comCode);
// 1. Mapper에서 List<String>으로 결과를 받습니다.
List<String> projectCodes = drillingHomeMapper.projectCodesByProjectMasterCompanyCodeAsList(comCodeList);
if (projectCodes == null || projectCodes.isEmpty()) {
return null;
}
// 2. StringBuilder를 사용해 쉼표(,)로 문자열을 조합합니다.
StringBuilder sb = new StringBuilder();
for (int i = 0; i < projectCodes.size(); i++) {
sb.append(projectCodes.get(i));
if (i < projectCodes.size() - 1) {
sb.append(",");
}
}
// 3. 조합된 문자열을 반환합니다.
return sb.toString();
}

View File

@ -334,7 +334,7 @@ public class MapLeftController {
HashMap<String, Object> paramsMasterCompanyCode = new HashMap<String, Object>();
paramsMasterCompanyCode.put("COM_CODE", masterCompanyCode);
masterCompanyProjectCodes = drillingHomeService.projectCodesByProjectMasterCompanyCodeAsComma(paramsMasterCompanyCode);
masterCompanyProjectCodes = drillingHomeService.projectCodesByProjectMasterCompanyCodeAsList(paramsMasterCompanyCode);
params.put("masterCompanyCode", masterCompanyCode);
params.put("masterCompanyProjectCodes", masterCompanyProjectCodes);

View File

@ -67,29 +67,25 @@
]]>
</select>
<select id="projectCodesByProjectMasterCompanyCodeAsComma" parameterType="String" resultType="String">
<![CDATA[
SELECT
LISTAGG(PROJECT_CODE, ',') WITHIN GROUP (ORDER BY PROJECT_CODE) AS PROJECT_CODE
FROM (
SELECT
'''' || tpi.PROJECT_CODE || '''' AS PROJECT_CODE
FROM
TBL_PROJECT_INFO tpi
WHERE
tpi.PROJECT_MASTER_COMPANY_CODE IN
(
SELECT
tmc.COM_CODE
FROM
TBL_MASTER_COMPANY tmc
WHERE
tmc.COM_CODE IN (
TRIM(#{COM_CODE})
)
)
)
]]>
<select id="projectCodesByProjectMasterCompanyCodeAsList" resultType="String">
SELECT
'''' || tpi.PROJECT_CODE || '''' AS PROJECT_CODE
FROM
TBL_PROJECT_INFO tpi
WHERE
tpi.PROJECT_MASTER_COMPANY_CODE IN
(
SELECT
tmc.COM_CODE
FROM
TBL_MASTER_COMPANY tmc
WHERE
tmc.COM_CODE IN
<foreach collection="param1" item="code" open="(" separator="," close=")">
#{code}
</foreach>
)
ORDER BY tpi.PROJECT_CODE
</select>

File diff suppressed because one or more lines are too long