관리자 > (메인)검수등록대기건수 > 좌표수정 목록 - 목록 표시 속도 개선

ROWNUM 처리 추가
main
유지인 2025-10-23 10:10:18 +09:00
parent 435f7dc795
commit 7b5c1a5146
6 changed files with 278 additions and 9 deletions

View File

@ -2,6 +2,7 @@ package geoinfo.regi.holeCoordinate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -12,10 +13,10 @@ import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import comm.util.strUtil; import comm.util.strUtil;
import comm.web.WebSupplyXml;
import egovframework.com.json.JSONObject; import egovframework.com.json.JSONObject;
import geoinfo.regi.holeCoordinate.service.HoleCoordinateService; import geoinfo.regi.holeCoordinate.service.HoleCoordinateService;
import geoinfo.regi.manageList.service.ManageListService; import geoinfo.regi.manageList.service.ManageListService;
@ -69,7 +70,8 @@ public class HoleCoordinateController {
// SelectBox형태로 map으로 받기 // SelectBox형태로 map으로 받기
HashMap<?, ?> mapCommon = wUtil.getCommCodeSel(commCode, arrayCommon, ""); HashMap<?, ?> mapCommon = wUtil.getCommCodeSel(commCode, arrayCommon, "");
ArrayList<?> result = masterService.getDataList(params); // ArrayList<?> result = masterService.getDataList(params);
ArrayList<?> result = new ArrayList<>();
JSONObject json = new JSONObject(); JSONObject json = new JSONObject();
json.put("items", result); json.put("items", result);
count = commonService.getCommonCodeCount(); count = commonService.getCommonCodeCount();
@ -86,6 +88,47 @@ public class HoleCoordinateController {
return "/web/manage/hole_coord"; return "/web/manage/hole_coord";
}; };
/**
* kendo grid AJAX
* @throws Exception
*/
@RequestMapping("/getHoleCoordList.do")
@ResponseBody
public Map<String, Object> getHoleCoordList(HttpServletRequest request, HttpServletResponse response, @RequestParam HashMap<String, Object> params) throws Exception {
int page = params.get("page").toString() != null ? Integer.parseInt(params.get("page").toString()) : 1;
int pageSize = params.get("pageSize") != null ? Integer.parseInt((String)params.get("pageSize")) : 10; // 기본값 10
int nCls = MyUtil.getIntegerFromObject(request.getSession().getAttribute("CLS"));
strUtil sUtil = new strUtil();
WebUtil wUtil = new WebUtil();
wUtil.topTabId = "manageCoordinate"; // 검수일때 tab 활성화 시켜주기 위해
String loginUserId = String.valueOf(request.getSession().getAttribute("USERID"));
// request
String srchStartDate = sUtil.checkNull(parseData.parseData((String)params.get("startDate")));
String srchEndDate = sUtil.checkNull(parseData.parseData((String)params.get("endDate")));
String searchProjectName = sUtil.checkNull(parseData.parseData((String)params.get("searchProjectName")));
String searchUserName = sUtil.checkNull(parseData.parseData((String)params.get("searchUserName")));
String searchCreateName = sUtil.checkNull(parseData.parseData((String)params.get("searchCreateName")));
params.put("loginUserId", loginUserId);
params.put("cls", nCls);
params.put("startRow", ((page - 1) * pageSize) + 1);
if (page > 1) {
params.put("endRow", (((page - 1) * pageSize) + 1) + pageSize - 1); // startRow + pageSize - 1
} else {
params.put("endRow", 10);
}
List<?> items = masterService.getDataListPaging(params);
int total = masterService.getDataListCount(params);
Map<String, Object> result = new HashMap<>();
result.put("items", items);
result.put("total", total);
return result;
}
// 좌표수정 (관리자) // 좌표수정 (관리자)
@RequestMapping(value = "/holeCoordModify.do") @RequestMapping(value = "/holeCoordModify.do")
public String holeCoordModify(@RequestParam HashMap<String, Object> params, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws Exception { public String holeCoordModify(@RequestParam HashMap<String, Object> params, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws Exception {

View File

@ -10,6 +10,8 @@ import egovframework.rte.psl.dataaccess.util.EgovMap;
@Mapper("holeCoordinateMapper") @Mapper("holeCoordinateMapper")
public interface HoleCoordinateMapper { public interface HoleCoordinateMapper {
public Integer getDataListCount(HashMap<String,Object> params) throws Exception;
public ArrayList<?> getDataListPaging(HashMap<String,Object> params) throws Exception;
public ArrayList<?> getDataList(HashMap<String,Object> params) throws Exception; public ArrayList<?> getDataList(HashMap<String,Object> params) throws Exception;
public ArrayList<?> getCoordList(HashMap<String,Object> params) throws Exception; public ArrayList<?> getCoordList(HashMap<String,Object> params) throws Exception;
public String getCoordName(HashMap<String,Object> params) throws Exception; public String getCoordName(HashMap<String,Object> params) throws Exception;

View File

@ -9,6 +9,8 @@ import egovframework.rte.psl.dataaccess.util.EgovMap;
public interface HoleCoordinateService { public interface HoleCoordinateService {
public Integer getDataListCount(HashMap<String,Object> params) throws Exception;
public ArrayList<?> getDataListPaging(HashMap<String,Object> params) throws Exception;
public ArrayList<?> getDataList(HashMap<String,Object> params) throws Exception; public ArrayList<?> getDataList(HashMap<String,Object> params) throws Exception;
public ArrayList<?> getCoordList(HashMap<String,Object> params) throws Exception; public ArrayList<?> getCoordList(HashMap<String,Object> params) throws Exception;
public String getCoordName(HashMap<String,Object> params) throws Exception; public String getCoordName(HashMap<String,Object> params) throws Exception;

View File

@ -18,6 +18,16 @@ public class HoleCoordinateServiceImpl implements HoleCoordinateService {
@Resource(name = "holeCoordinateMapper") @Resource(name = "holeCoordinateMapper")
private HoleCoordinateMapper holeCoordinateMapper; private HoleCoordinateMapper holeCoordinateMapper;
@Override
public Integer getDataListCount(HashMap<String,Object> params) throws Exception {
return holeCoordinateMapper.getDataListCount(params);
}
@Override
public ArrayList<?> getDataListPaging(HashMap<String,Object> params) throws Exception {
return holeCoordinateMapper.getDataListPaging(params);
}
@Override @Override
public ArrayList<?> getDataList(HashMap<String,Object> params) throws Exception { public ArrayList<?> getDataList(HashMap<String,Object> params) throws Exception {
return holeCoordinateMapper.getDataList(params); return holeCoordinateMapper.getDataList(params);

View File

@ -41,6 +41,111 @@
]]> ]]>
</select> </select>
<!-- 좌표수정 목록 데이타 건수 취득 -->
<select id="getDataListCount" parameterType="map" resultType="int">
<![CDATA[
SELECT COUNT(1)
FROM (
SELECT
CLASS_CODE, PROJECT_CODE, REPORT_TYPE, REPORT_TYPE_NAME,
REPLACE(REPLACE(PROJECT_NAME, '"',''''), '''', ' ') AS PROJECT_NAME,
USERID, USER_NAME, STATE, STATE_NAME, CREATE_NAME,
CREATE_USERID, DATETIME, MAP, INS, ROW_NUMBER() OVER (ORDER BY T.DATETIME DESC) AS RN
FROM (
SELECT
T.CLASS_CODE, T.PROJECT_CODE, T.REPORT_TYPE,
FUNC_COMM_NAME('CM016',REPORT_TYPE ) AS REPORT_TYPE_NAME,
T.PROJECT_NAME, T.USERID,
(SELECT USER_NAME FROM WEB_MEMBER_IN WHERE USERID = T.USERID) AS USER_NAME,
T.STATE, FUNC_COMM_NAME('CM001',STATE ) AS STATE_NAME,
(SELECT (SELECT USER_NAME FROM WEB_MEMBER_IN WHERE USERID = M.USERID)
FROM TEMP_MANAGE_STATE M WHERE M.PROJECT_CODE = T.PROJECT_CODE) AS CREATE_NAME,
(SELECT M.USERID FROM TEMP_MANAGE_STATE M WHERE M.PROJECT_CODE = T.PROJECT_CODE) AS CREATE_USERID,
TO_CHAR(T.DATETIME,'YYYY-MM-DD HH24:MI:SS') AS DATETIME,
DECODE(REPORT_TYPE,'CH','map','') AS MAP,
DECODE(STATE,'6','insert') AS INS,
T.PROJECT_MASTER_COMPANY_O_CODE
FROM TEMP_PROJECT_INFO T
WHERE NVL(USE_YN,' ') <> 'N'
AND STATE = '6'
AND REPORT_TYPE = 'CH'
]]>
) T
<where>
<if test="searchProjectName != null and searchProjectName != ''">
AND T.PROJECT_NAME LIKE '%' || #{searchProjectName} || '%'
</if>
<if test="searchUserName != null and searchUserName != ''">
AND T.USER_NAME = #{searchUserName}
</if>
<if test="searchCreateName != null and searchCreateName != ''">
AND T.CREATE_NAME = #{searchCreateName}
</if>
<if test="loginUserId != 'admin_user' and cls != 65535">
AND T.PROJECT_MASTER_COMPANY_O_CODE = (
SELECT MASTER_COMPANY_CODE
FROM WEB_MEMBER_IN
WHERE USERID = #{loginUserId}
)
</if>
</where>
) TB
WHERE 1=1
</select>
<!-- 좌표수정 목록 데이타 취득 -->
<select id="getDataListPaging" parameterType="map" resultType="egovMap">
<![CDATA[
SELECT TB.*
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY T.DATETIME DESC) AS RN,
CLASS_CODE, PROJECT_CODE, REPORT_TYPE, REPORT_TYPE_NAME,
REPLACE(REPLACE(PROJECT_NAME, '"',''''), '''', ' ') AS PROJECT_NAME,
USERID, USER_NAME, STATE, STATE_NAME, CREATE_NAME,
CREATE_USERID, DATETIME, MAP, INS
FROM (
SELECT
T.CLASS_CODE, T.PROJECT_CODE, T.REPORT_TYPE,
FUNC_COMM_NAME('CM016',REPORT_TYPE ) AS REPORT_TYPE_NAME,
T.PROJECT_NAME, T.USERID,
(SELECT USER_NAME FROM WEB_MEMBER_IN WHERE USERID = T.USERID) AS USER_NAME,
T.STATE, FUNC_COMM_NAME('CM001',STATE ) AS STATE_NAME,
(SELECT (SELECT USER_NAME FROM WEB_MEMBER_IN WHERE USERID = M.USERID)
FROM TEMP_MANAGE_STATE M WHERE M.PROJECT_CODE = T.PROJECT_CODE) AS CREATE_NAME,
(SELECT M.USERID FROM TEMP_MANAGE_STATE M WHERE M.PROJECT_CODE = T.PROJECT_CODE) AS CREATE_USERID,
TO_CHAR(T.DATETIME,'YYYY-MM-DD HH24:MI:SS') AS DATETIME,
DECODE(REPORT_TYPE,'CH','map','') AS MAP,
DECODE(STATE,'6','insert') AS INS,
T.PROJECT_MASTER_COMPANY_O_CODE
FROM TEMP_PROJECT_INFO T
WHERE NVL(USE_YN,' ') <> 'N'
AND STATE = '6'
AND REPORT_TYPE = 'CH'
]]>
) T
<where>
<if test="searchProjectName != null and searchProjectName != ''">
AND T.PROJECT_NAME LIKE '%' || #{searchProjectName} || '%'
</if>
<if test="searchUserName != null and searchUserName != ''">
AND T.USER_NAME = #{searchUserName}
</if>
<if test="searchCreateName != null and searchCreateName != ''">
AND T.CREATE_NAME = #{searchCreateName}
</if>
<if test="loginUserId != 'admin_user' and cls != 65535">
AND T.PROJECT_MASTER_COMPANY_O_CODE = (
SELECT MASTER_COMPANY_CODE
FROM WEB_MEMBER_IN
WHERE USERID = #{loginUserId}
)
</if>
</where>
) TB
WHERE 1=1
AND RN BETWEEN #{startRow} AND #{endRow}
</select>
<select id="getCoordList" parameterType="map" resultType="egovMap"> <select id="getCoordList" parameterType="map" resultType="egovMap">
<![CDATA[ <![CDATA[
SELECT PROJECT_CODE SELECT PROJECT_CODE

View File

@ -5,19 +5,20 @@
<%@ include file="/include/inc_head_2021_new.jsp" %> <%@ include file="/include/inc_head_2021_new.jsp" %>
<!-- 자바스크립트 데이터 배열 생성 --> <!-- 자바스크립트 데이터 배열 생성 -->
<c:import url="/includeDataArray.do" /> <%-- <c:import url="/includeDataArray.do" /> --%>
<!--function 정의 --> <!--function 정의 -->
<script type="text/javascript"> <script type="text/javascript">
var gridData = new Array(); //데이터 배열객체 // var gridData = new Array(); //데이터 배열객체
//조회 //조회
function fn_Search(){ function fn_Search(){
//날짜 체크 //날짜 체크
if(!fn_fromToCheckAlert($("#startDate").val(), $("#endDate").val(), "기간시작일", "기간종료일", "startDate"))return false; if(!fn_fromToCheckAlert($("#startDate").val(), $("#endDate").val(), "기간시작일", "기간종료일", "startDate"))return false;
document.frmSearch.submit(); // document.frmSearch.submit();
reloadGrid(); // 그리드 데이타를 새로 요청한다
} }
//load //load
@ -33,7 +34,8 @@ function fn_submit(report_type, project_code, proc){
//엔터키 이벤트 //엔터키 이벤트
function submitEvent(){ function submitEvent(){
if (event.keyCode == 13) { if (event.keyCode == 13) {
document.frmSearch.submit(); // document.frmSearch.submit();
reloadGrid();
} }
} }
@ -48,8 +50,9 @@ function fn_gourl(project_code){
} }
$(document).ready(function () { $(document).ready(function () {
fn_MakeDataArray(); // fn_MakeDataArray();
kendoGrid(); // kendoGrid();
reloadGrid()
}); });
//등록 및 유통자료 생성 버튼 //등록 및 유통자료 생성 버튼
@ -151,6 +154,108 @@ function kendoGrid() {
}); });
} }
function reloadGrid() {
var gridData = new kendo.data.DataSource({
transport: {
read: {
url: "/getHoleCoordList.do",
dataType: "json",
type: "POST",
data: function() {
return {
startDate: $("#startDate").val(),
endDate: $("#endDate").val(),
searchProjectName: $("#searchProjectName").val(),
searchUserName: $("#searchUserName").val(),
searchCreateName: $("#searchCreateName").val(),
page: 1,
pageSize: 10
};
}
}
},
schema: {
data: "items", // 서버에서 실제 데이터 Array key
total: "total" // 서버에서 전체 개수 key
},
serverPaging: true,
serverSorting: true,
pageSize: 10
});
kendoJQuery("#grid_type_1").kendoGrid({
dataSource: gridData,
scrollable: { virtual: true },
pageable: {
refresh: true,
numeric: true,
pageSizes: [50, 100, 200],
pageSize: 10
},
columns: [
{ field: "rowNumber", width: 50, title: "순번", template: "<span class='row-number'></span>" },
{
field: "projectName",
width: 262,
title: "프로젝트명",
template: function(data){
var param = "'"+data.projectCode+"'";
var url = "<a href=javascript:fn_gourl(" + param +");>" + data.projectName + "</a>";
return url;
},
attributes: { style:"text-align: left" }
},
{
field: "userName",
width: 80,
title: "공급자",
template: function(data){
var param = "'"+data.userid+"'";
var userName = data.userName == null ? "" : data.userName;
var url = "<a href=javascript:fn_ProviderInfoPopupDiv("+ param +",'ProviderInfo');>" + userName + "</a>";
return url;
},
},
{ field: "datetime", width: 130, title: "입력일시", template: "<div class='td-data'>#: datetime #</div>" },
{ field: "stateName", width: 80, title: "공급현황", template: "<div class='td-data'>#: stateName #</div>" },
{
field: "createName",
width: 80,
title: "등록자",
template: function(data){
var param = "'"+data.createUserid+"'";
var createName = data.createName == null ? "" : data.createName;
var url = "<a href=javascript:fn_ProviderInfoPopupDiv("+ param +",'ProviderInfo');>" + createName + "</a>";
return url;
},
},
{
field: "ins",
width: 60, title: "재등록",
template: "<div class='td-data'>#= insBtnTemplate(data.reportType, data.projectCode, data.createUserid, data.expertFile, data.ins) #</div>"
},
],
sortable: true,
scrollable: true,
selectable: true,
columnResizeHandleWidth: 20,
resizable: true,
pageable: {
refresh: false,
pageSizes: true,
pageSize: 10,
//buttonCount: 10,
input: true,
numeric: false,
},
noRecords: {
template: "등록된데이터가 없습니다."
},
dataBound: onDataBound,
});
}
/* 도움말 시작 */ /* 도움말 시작 */
function fn_help_tour(){ function fn_help_tour(){
var pageTitle = "좌표수정 목록"; var pageTitle = "좌표수정 목록";
@ -234,8 +339,10 @@ function fn_grid_refresh(){
<!-- 검색영역 시작 --> <!-- 검색영역 시작 -->
<div class="page-top-search" data-target="project-search"> <div class="page-top-search" data-target="project-search">
<form name="frmSearch" id="frmSearch" action="holeCoord.do" method="post"> <form name="frmSearch" id="frmSearch" action="getHoleCoordList.do" method="post">
<input type="hidden" id="page" name="page" value="1" />
<input type="hidden" id="pageSize" name="pageSize" value="10" />
<div class="form-inline row"> <div class="form-inline row">
<div class="input-group col-md-4 col-xs-4 col-sm-4"> <div class="input-group col-md-4 col-xs-4 col-sm-4">
<label class="input-label-display" for="searchProjectName">사업명</label> <label class="input-label-display" for="searchProjectName">사업명</label>