관리자 > (메인)검수등록대기건수 > 입력중인프로젝트 현황 목록 - 페이징처리,소팅처리

main
유지인 2025-10-23 17:49:40 +09:00
parent 694733546d
commit cfedd0a719
6 changed files with 244 additions and 32 deletions

View File

@ -70,12 +70,36 @@ public class ListRegController {
String searchUserName = sUtil.checkNull(parseData.parseData((String)params.get("searchUserName")));
//request
System.out.println("searchProjectName:"+request.getParameter("searchProjectName"));
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
// 정렬 필드/방향 처리
String sortField = (String) params.get("sort[0][field]");
String sortDir = (String) params.get("sort[0][dir]");
// 기본 정렬 지정 (없을 경우)
if (sortField == null || sortField.isEmpty()) sortField = "datetime";
if (sortDir == null || sortDir.isEmpty()) sortDir = "desc";
// MyBatis에 넣을 때는 깔끔하게 키 이름 정리
params.put("sortField", sortField);
params.put("sortDir", sortDir);
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);
}
//data정보
ArrayList result = masterService.getRegList(params);
int total = masterService.getRegListCount(params);
HashMap resultMap = new HashMap();
resultMap.put("dataList1", result);
resultMap.put("items", result);
resultMap.put("total", total);
JSONObject json = new JSONObject();
json.putAll( resultMap );

View File

@ -11,6 +11,7 @@ import egovframework.rte.psl.dataaccess.util.EgovMap;
@Mapper("listRegMapper")
public interface ListRegMapper {
public Integer getRegListCount(HashMap<String,Object> params) throws Exception;
public ArrayList<?> getRegList(HashMap<String,Object> params) throws Exception;
public void callSpChangeStateTempProject(HashMap<String, Object> params) throws SQLException;
}

View File

@ -12,6 +12,7 @@ import egovframework.rte.psl.dataaccess.util.EgovMap;
public interface ListRegService {
public Integer getRegListCount(HashMap<String,Object> params) throws Exception;
public ArrayList<?> getRegList(HashMap<String,Object> params) throws Exception;
public HashMap<String, Object> moveToManageWait(HttpServletRequest request, HttpServletResponse response, HashMap<String, Object> params) throws Exception;
}

View File

@ -20,6 +20,11 @@ public class ListRegServiceImpl implements ListRegService {
@Resource(name = "listRegMapper")
private ListRegMapper listRegMapper;
@Override
public Integer getRegListCount(HashMap<String,Object> params) throws Exception {
return listRegMapper.getRegListCount(params);
}
@Override
public ArrayList<?> getRegList(HashMap<String,Object> params) throws Exception {
return listRegMapper.getRegList(params);

View File

@ -3,35 +3,111 @@
<mapper namespace="geoinfo.regi.listReg.service.ListRegMapper">
<!-- 관리자 리스트 -->
<select id="getRegListCount" parameterType="map" resultType="int">
<![CDATA[
SELECT COUNT(*)
FROM (SELECT OA.*,
(SELECT USER_NAME FROM WEB_MEMBER_IN WHERE USERID = OA.USERID) AS USER_NAME
FROM (SELECT A.PROJECT_CODE,
A.PROJECT_NAME,
A.REPORT_TYPE,
COUNT(B.HOLE_CODE) HOLE_CNT,
A.USERID,
A.DATETIME
FROM TEMP_PROJECT_INFO A
LEFT OUTER JOIN TEMP_HEADER B ON A.PROJECT_CODE = B.PROJECT_CODE
AND NVL(B.USE_YN,' ') <> 'N'
WHERE NVL(A.USE_YN,' ') <> 'N'
AND A.STATE = '4'
]]>
<if test="searchProjectName != null and searchProjectName != ''">
<![CDATA[ AND A.PROJECT_NAME like '%' || #{searchProjectName} || '%' ]]>
</if>
<if test="searchUserName != null and searchUserName != ''">
<![CDATA[ AND A.USER_NAME like '%' || #{searchUserName} || '%' ]]>
</if>
<![CDATA[
GROUP BY A.PROJECT_CODE, A.PROJECT_NAME, A.REPORT_TYPE,A.USERID, A.DATETIME) OA
) F
WHERE 1=1
]]>
</select>
<!-- 관리자 리스트 -->
<select id="getRegList" parameterType="map" resultType="egovMap">
<![CDATA[
SELECT F.* FROM (
SELECT OA.*
,(SELECT USER_NAME FROM WEB_MEMBER_IN WHERE USERID = OA.USERID) AS USER_NAME
FROM (
SELECT A.PROJECT_CODE
, A.PROJECT_NAME
, A.REPORT_TYPE
, COUNT(B.HOLE_CODE) HOLE_CNT
, A.USERID
, A.DATETIME
FROM TEMP_PROJECT_INFO A LEFT OUTER JOIN TEMP_HEADER B
ON A.PROJECT_CODE = B.PROJECT_CODE AND NVL(B.USE_YN,' ') <> 'N'
WHERE NVL(A.USE_YN,' ') <> 'N' AND A.STATE = '4'
GROUP BY A.PROJECT_CODE, A.PROJECT_NAME, A.REPORT_TYPE,A.USERID, A.DATETIME
]]>
) OA
) F
WHERE 1=1
<if test="searchProjectName != null and searchProjectName != ''">
<![CDATA[ AND F.PROJECT_NAME like '%' || #{searchProjectName} || '%' ]]>
</if>
<if test="searchUserName != null and searchUserName != ''">
<![CDATA[ AND F.USER_NAME like '%' || #{searchUserName} || '%' ]]>
</if>
ORDER BY F.PROJECT_CODE DESC
SELECT TB.*
FROM (SELECT F.*
FROM (SELECT ROW_NUMBER() OVER (ORDER BY
]]>
<choose>
<!-- 프로젝트명 정렬 -->
<when test="sortField == 'projectName' and sortDir == 'asc'">
OA.PROJECT_NAME ASC
</when>
<!-- 프로젝트명 역순 정렬 -->
<when test="sortField == 'projectName' and sortDir == 'desc'">
OA.PROJECT_NAME DESC
</when>
<!-- 공급자명 정렬 -->
<when test="sortField == 'userName' and sortDir == 'asc'">
OA.USER_NAME ASC
</when>
<!-- 공급자명 역순 정렬 -->
<when test="sortField == 'userName' and sortDir == 'desc'">
OA.USER_NAME DESC
</when>
<!-- 시추공수 정렬 -->
<when test="sortField == 'holeCnt' and sortDir == 'asc'">
OA.HOLE_CNT ASC
</when>
<!-- 시추공수 역순 정렬 -->
<when test="sortField == 'holeCnt' and sortDir == 'desc'">
OA.HOLE_CNT DESC
</when>
<!-- 입력일시 정렬 -->
<when test="sortField == 'datetime' and sortDir == 'asc'">
OA.DATETIME ASC
</when>
<!-- 입력일시 역순 정렬 -->
<otherwise>
OA.DATETIME DESC
</otherwise>
</choose>
<![CDATA[
) AS RN,
OA.*,
(SELECT USER_NAME FROM WEB_MEMBER_IN WHERE USERID = OA.USERID) AS USER_NAME
FROM (SELECT A.PROJECT_CODE,
A.PROJECT_NAME,
A.REPORT_TYPE,
COUNT(B.HOLE_CODE) HOLE_CNT,
A.USERID,
A.DATETIME
FROM TEMP_PROJECT_INFO A
LEFT OUTER JOIN TEMP_HEADER B ON A.PROJECT_CODE = B.PROJECT_CODE
AND NVL(B.USE_YN,' ') <> 'N'
WHERE NVL(A.USE_YN,' ') <> 'N'
AND A.STATE = '4'
]]>
<if test="searchProjectName != null and searchProjectName != ''">
<![CDATA[ AND A.PROJECT_NAME like '%' || #{searchProjectName} || '%' ]]>
</if>
<if test="searchUserName != null and searchUserName != ''">
<![CDATA[ AND A.USER_NAME like '%' || #{searchUserName} || '%' ]]>
</if>
<![CDATA[
GROUP BY A.PROJECT_CODE, A.PROJECT_NAME, A.REPORT_TYPE,A.USERID, A.DATETIME) OA
) F
) TB
WHERE 1=1
AND RN BETWEEN #{startRow} AND #{endRow}
]]>
</select>

View File

@ -9,11 +9,12 @@
<!--function 정의 -->
<script type="text/javascript">
var gridData = new Array(); //데이터 배열객체
// var gridData = new Array(); //데이터 배열객체
var dataList;
$(document).ready(function () {
selectInit();
// selectInit();
reloadGrid(); // 그리드 데이타를 새로 요청한다
});
//========================================================
@ -45,12 +46,14 @@ function selectInit(){
function submitEvent(){
if (event.keyCode == 13) {
document.frmSearch.submit();
// document.frmSearch.submit();
reloadGrid(); // 그리드 데이타를 새로 요청한다
}
}
function fn_Search(){
document.frmSearch.submit();
// document.frmSearch.submit();
reloadGrid(); // 그리드 데이타를 새로 요청한다
}
function fn_gourl(project_code){
@ -221,6 +224,104 @@ function kendoGrid(dataList) {
});
}
function reloadGrid() {
var gridData = new kendo.data.DataSource({
transport: {
read: {
url: "/list_reg_jsondata.do",
dataType: "json",
type: "POST",
data: function() {
return {
searchProjectName: $("#searchProjectName").val(),
searchUserName: $("#searchUserName").val(),
page: 1,
pageSize: 10
};
}
}
},
schema: {
data: "dataList1", // 서버에서 실제 데이터 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",
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: "holeCnt", width: 100, title: "시추공수", template: "<div class='td-data'>#: holeCnt #</div>" },
{
field: "userName",
width: 80,
title: "공급자",
template: function(data){
var userName = data.userName == null ? "" : data.userName;
var url = "<div class='td-data'>" + userName + "</div>" ;
return url;
}
},
{ field: "datetime", width: 160, title: "입력일시__",
template: function(data){
var url = "<div class='td-data'>" + unixTimestampToFormattedDateTime(data.datetime.time) + "</div>";
return url;
}
},
{ field: "move", width: 160, title: "등록대기 이동",
template: function(data){
var param = "\""+data.projectCode+"\", \""+data.projectName+"\"";
var url = "<button type='button' class='k-button k-button-modifycall move-button' onclick='move("+ param +");'>등록대기 이동</button>";
return url;
},
attributes: { style:"text-align: center" },
},
],
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,
// 🔹 정렬 이벤트 추가
sort: function(e) {
var grid = this;
// 정렬 변경 시 첫 페이지로 이동
grid.dataSource.page(1);
},
});
}
/* 도움말 시작 */
function fn_help_tour(){
var pageTitle = "입력중인 프로젝트 현황";
@ -304,7 +405,11 @@ function fn_grid_refresh(){
<!-- 검색영역 시작 -->
<div class="page-top-search" data-target="project-search">
<form name="frmSearch" id="frmSearch" action="list_reg.do" method="post">
<!-- <form name="frmSearch" id="frmSearch" action="list_reg.do" method="post"> -->
<form name="frmSearch" id="frmSearch" action="list_reg_jsondata.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="input-group col-md-8 col-xs-8 col-sm-8">
<label class="input-label-display" for="searchProjectName">사업명</label>