You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
276 lines
18 KiB
276 lines
18 KiB
/* |
|
* To change this license header, choose License Headers in Project Properties. |
|
* To change this template file, choose Tools | Templates |
|
* and open the template in the editor. |
|
*/ |
|
|
|
package kr.co.kihyun.service; |
|
|
|
import java.util.List; |
|
import java.util.Map; |
|
import javax.jdo.PersistenceManager; |
|
import javax.jdo.Query; |
|
|
|
import kr.co.kihyun.beans.entity.MDept; |
|
import kr.co.kihyun.beans.entity.SysAuth; |
|
import kr.co.kihyun.lang.MString; |
|
import kr.co.kihyun.service.vo.UserPartVO; |
|
//import org.slf4j.Logger; |
|
//import org.slf4j.LoggerFactory; |
|
|
|
/** |
|
* |
|
* @author Kts |
|
*/ |
|
public class UserPartService extends BaseService { |
|
// private static final Logger LOG = LoggerFactory.getLogger(UserPartService.class); |
|
/** |
|
* 기본생성자 |
|
*/ |
|
public UserPartService() { |
|
|
|
} |
|
|
|
/** |
|
* 생성자 |
|
* @param pm PersistenceManager |
|
*/ |
|
public UserPartService(PersistenceManager pm) { |
|
super(pm); |
|
} |
|
|
|
/** |
|
* 검색어를 사용하여 사용자그룹목록을 반환하는 함수 |
|
* @param params - 검색조건맵(partName:그룹명, regDate:등록일, usrName:생성자, usrId:생성자id) |
|
*/ |
|
public void createUserPartListSearchQuery(Map params) { |
|
StringBuilder sbWhere = new StringBuilder(); |
|
StringBuilder sbSearch = new StringBuilder(); |
|
StringBuilder sbCount = new StringBuilder(); |
|
String userId = (String)params.get("usrId"); |
|
String dtID = (String)params.get("dtID"); |
|
String type = (String)params.get("type"); |
|
int sysAuth = (Integer)params.get("sysAuth"); |
|
|
|
MDept mDept = pm.getObjectById(MDept.class, dtID); |
|
String grade = mDept.getGrade().toString(); |
|
|
|
//================================== Search Query ================================== |
|
sbSearch.append("SELECT \n"); |
|
sbSearch.append(" PART.ID AS id \n"); |
|
sbSearch.append(" , PART.HANDYID AS handyId \n"); |
|
sbSearch.append(" , PART.USER_ID AS userId \n"); |
|
sbSearch.append(" , PART.NAME AS name \n"); |
|
sbSearch.append(" , PART.REG_DATE AS regDate \n"); |
|
sbSearch.append(" , PART.DES AS des \n"); |
|
sbSearch.append(" , PART.USE_YN AS useYn \n"); |
|
sbSearch.append(" , PART.MOD_DATE AS modDate \n"); |
|
sbSearch.append(" , SP_CM_DEC_FU(USR.NAME) AS userName \n"); |
|
sbSearch.append(" , DPT.NAME AS deptName \n"); |
|
// sbSearch.append(" , ROWNUMBER() OVER(ORDER BY PART.NAME ASC) AS rowNo \n"); |
|
// 2014.10.06 BY YOUNJUN CHO (각 그룹의 하위 부서갯수 구하는 서브쿼리 수정, 폐교된 부서인 경우 카운트하지 않도록 처리.) |
|
sbSearch.append(",( \n"); |
|
sbSearch.append(" SELECT COUNT(UD.USER_DEPT_ID) AS CNT \n"); |
|
sbSearch.append(" FROM MOUMI_USER_PART PART INNER JOIN MOUMI_USER_DEPT UD \n"); |
|
sbSearch.append(" ON UD.PART_ID = PART.ID \n"); |
|
sbSearch.append(" INNER JOIN MOUMI_DEPT DT \n"); |
|
sbSearch.append(" ON UD.ID = DT.ID \n"); |
|
sbSearch.append(" AND DT.IS_OUT = 'N' \n"); |
|
// sbSearch.append(") \n"); |
|
// sbSearch.append("+ ( \n"); |
|
// sbSearch.append(" SELECT COUNT(UU.USER_USER_ID) AS CNT \n"); |
|
// sbSearch.append(" FROM MOUMI_USER_USER UU \n"); |
|
// sbSearch.append(" INNER JOIN MOUMI_DEPT DT \n"); |
|
// sbSearch.append(" ON UU.PART_ID = PART.ID \n"); |
|
// sbSearch.append(" AND UU.ID = DT.ID \n"); |
|
// sbSearch.append(" AND DT.IS_OUT = 'N' \n"); |
|
sbSearch.append(") AS groupCount \n"); |
|
|
|
sbSearch.append("FROM \n"); |
|
sbSearch.append(" MOUMI_USER_PART PART \n"); |
|
sbSearch.append(" INNER JOIN \n"); |
|
sbSearch.append(" MOUMI_MUSER USR \n"); |
|
sbSearch.append("ON PART.USER_ID = USR.ID \n"); |
|
sbSearch.append(" INNER JOIN \n"); |
|
sbSearch.append(" MOUMI_DEPT DPT \n"); |
|
sbSearch.append("ON USR.DEPT_ID = DPT.ID \n"); |
|
if( sysAuth == SysAuth.SUB_SYSADM.ordinal() && MString.isNull(grade)){ |
|
sbSearch.append(" INNER JOIN \n"); |
|
sbSearch.append(" MOUMI_DEPT GR \n"); |
|
sbSearch.append("ON DPT.ORGAN = GR.ID \n"); |
|
} |
|
|
|
//================================== Count Query ================================== |
|
sbCount.append("SELECT COUNT(PART.ID) AS CNT \n"); |
|
sbCount.append("FROM \n"); |
|
sbCount.append(" MOUMI_USER_PART PART \n"); |
|
if( (sysAuth == SysAuth.SUB_SYSADM.ordinal() || sysAuth == SysAuth.SUB_TOTADM.ordinal()) && MString.isNull(grade)){ |
|
sbCount.append(" , MOUMI_MUSER USR \n"); |
|
sbCount.append(" , MOUMI_DEPT DPT \n"); |
|
sbCount.append(" , MOUMI_DEPT GR \n"); |
|
} |
|
|
|
//===================================================================================== |
|
|
|
//================================== Where Query ================================== |
|
sbWhere.append("WHERE 1=1 \n"); |
|
if( "name".equals(type)) { |
|
sbWhere.append(" AND PART.NAME LIKE '%' || :partName || '%' \n"); |
|
}else if("regDate".equals(type)) { |
|
sbWhere.append(" AND PART.REG_DATE BETWEEN CAST( :regDate || ' 00:00:00' AS DATE) \n"); |
|
sbWhere.append(" AND CAST( :regDate || ' 23:59:59' AS DATE) \n"); |
|
}else if("regPerson".equals(type)) { |
|
sbWhere.append(" AND EXISTS( \n"); |
|
sbWhere.append(" SELECT '' \n"); |
|
sbWhere.append(" FROM MOUMI_MUSER F \n"); |
|
sbWhere.append(" WHERE F.ID = PART.USER_ID \n"); |
|
sbWhere.append(" AND F.NAME = SP_CM_ENC_FU(:usrName) \n"); |
|
sbWhere.append(" ) \n"); |
|
} |
|
|
|
|
|
if( userId != null && !userId.equals("") && sysAuth == SysAuth.TOTPER.ordinal()) { |
|
sbWhere.append(" AND PART.USER_ID = :usrId \n"); |
|
}else if( sysAuth == SysAuth.REPOADM.ordinal() && !MString.isNull(grade)){ |
|
sbWhere.append(" AND PART.USER_ID = :usrId \n"); |
|
}else if( sysAuth == SysAuth.SUB_SYSADM.ordinal() && MString.isNull(grade)){ |
|
sbWhere.append(" AND PART.USER_ID = USR.ID \n"); |
|
sbWhere.append(" AND USR.DEPT_ID = DPT.ID \n"); |
|
sbWhere.append(" AND DPT.ORGAN = GR.ID \n"); |
|
sbWhere.append(" AND (part.user_id = :usrId or gr.id = ( SELECT OGR.id \n"); |
|
sbWhere.append(" FROM MOUMI_MUSER US \n"); |
|
sbWhere.append(" , MOUMI_DEPT DT \n"); |
|
sbWhere.append(" , MOUMI_DEPT OGR \n"); |
|
sbWhere.append(" WHERE US.ID= :usrId \n"); |
|
sbWhere.append(" AND US.DEPT_ID = DT.ID \n"); |
|
sbWhere.append(" AND DT.ORGAN = OGR.ID )) \n"); |
|
}else if( sysAuth == SysAuth.SUB_TOTADM.ordinal() && MString.isNull(grade)){ |
|
sbWhere.append(" AND PART.USER_ID = USR.ID \n"); |
|
sbWhere.append(" AND USR.DEPT_ID = DPT.ID \n"); |
|
sbWhere.append(" AND (part.user_id = :usrId or dpt.id = ( SELECT dt.id \n"); |
|
sbWhere.append(" FROM MOUMI_MUSER US \n"); |
|
sbWhere.append(" , MOUMI_DEPT DT \n"); |
|
sbWhere.append(" WHERE US.ID= :usrId \n"); |
|
sbWhere.append(" AND US.DEPT_ID = DT.ID)) \n"); |
|
} |
|
|
|
sbSearch.append(sbWhere); |
|
//================================== Order by ================================== |
|
sbSearch.append(" ORDER BY PART.NAME ASC \n"); |
|
sbCount.append(sbWhere); |
|
//레코드갯수를 구하는 부모클래스의 함수를 호출하기 위해서 멤버변수에 저장 |
|
this.setCountQuery(sbCount); |
|
|
|
//조건맵을 멤버변수에 저장 |
|
this.setParams(params); |
|
|
|
//검색쿼리를 멤버변수에 저장 |
|
this.setSearchQuery(sbSearch); |
|
|
|
|
|
} |
|
|
|
/** |
|
* 검색어를 사용하여 사용자그룹목록을 반환하는 함수 |
|
* @param params - 검색조건맵(partName:그룹명, regDate:등록일, usrName:생성자, usrId:생성자id) |
|
* @return List - 사용자그룹목록(사용자ID가 NULL인 경우 모든 그룹-관리자용, NOT_NULL인 경우 사용자가 만든 그룹) |
|
*/ |
|
public List<UserPartVO> getUserPartListWithSearchWord(Map params) { |
|
StringBuilder sbWhere = new StringBuilder(); |
|
StringBuilder sbSearch = new StringBuilder(); |
|
StringBuilder sbCount = new StringBuilder(); |
|
String userId = (String)params.get("usrId"); |
|
String type = (String)params.get("type"); |
|
|
|
//================================== Search Query ================================== |
|
sbSearch.append("SELECT \n"); |
|
sbSearch.append(" PART.ID AS id \n"); |
|
sbSearch.append(" , PART.HANDYID AS handyId \n"); |
|
sbSearch.append(" , PART.USER_ID AS userId \n"); |
|
sbSearch.append(" , PART.NAME AS name \n"); |
|
sbSearch.append(" , PART.REG_DATE AS regDate \n"); |
|
sbSearch.append(" , PART.DES AS des \n"); |
|
sbSearch.append(" , PART.USE_YN AS useYn \n"); |
|
sbSearch.append(" , PART.MOD_DATE AS modDate \n"); |
|
sbSearch.append(" , SP_CM_DEC_FU(USR.NAME) AS userName \n"); |
|
sbSearch.append(" , DPT.NAME AS deptName \n"); |
|
sbSearch.append(" , ROWNUMBER() OVER(ORDER BY PART.NAME ASC) AS rowNo \n"); |
|
// 2014.09.18 BY YOUNJUN CHO (각 그룹의 하위 부서갯수 구하는 서브쿼리 수정, 폐교된 부서인 경우 카운트하지 않도록 처리.) |
|
sbSearch.append(",( \n"); |
|
sbSearch.append(" SELECT COUNT(UD.USER_DEPT_ID) AS CNT \n"); |
|
sbSearch.append(" FROM MOUMI_USER_DEPT UD \n"); |
|
sbSearch.append(" INNER JOIN MOUMI_DEPT DT \n"); |
|
sbSearch.append(" ON UD.PART_ID = PART.ID \n"); |
|
sbSearch.append(" AND UD.ID = DT.ID \n"); |
|
sbSearch.append(" AND DT.IS_OUT = 'N' \n"); |
|
sbSearch.append(") \n"); |
|
sbSearch.append("+ ( \n"); |
|
sbSearch.append(" SELECT COUNT(UU.USER_USER_ID) AS CNT \n"); |
|
sbSearch.append(" FROM MOUMI_USER_USER UU \n"); |
|
sbSearch.append(" INNER JOIN MOUMI_DEPT DT \n"); |
|
sbSearch.append(" ON UU.PART_ID = PART.ID \n"); |
|
sbSearch.append(" AND UU.ID = DT.ID \n"); |
|
sbSearch.append(" AND DT.IS_OUT = 'N' \n"); |
|
sbSearch.append(") AS groupCount \n"); |
|
sbSearch.append("FROM \n"); |
|
sbSearch.append(" MOUMI_USER_PART PART \n"); |
|
sbSearch.append(" INNER JOIN \n"); |
|
sbSearch.append(" MOUMI_MUSER USR \n"); |
|
sbSearch.append("ON PART.USER_ID = USR.ID \n"); |
|
sbSearch.append(" INNER JOIN \n"); |
|
sbSearch.append(" MOUMI_DEPT DPT \n"); |
|
sbSearch.append("ON USR.DEPT_ID = DPT.ID \n"); |
|
|
|
//================================== Count Query ================================== |
|
sbCount.append("SELECT COUNT(PART.ID) AS CNT \n"); |
|
sbCount.append("FROM \n"); |
|
sbCount.append(" MOUMI_USER_PART PART \n"); |
|
if("regPerson".equals(type)) { |
|
sbCount.append(" INNER JOIN \n"); |
|
sbCount.append(" MOUMI_MUSER USR \n"); |
|
sbCount.append("ON PART.USER_ID = USR.ID \n"); |
|
} |
|
//===================================================================================== |
|
|
|
//================================== Where Query ================================== |
|
sbWhere.append("WHERE \n"); |
|
if("0".equals(type)) { |
|
sbWhere.append(" 1 = 1 \n"); |
|
}else if("name".equals(type)) { |
|
sbWhere.append(" PART.NAME LIKE '%' || :partName || '%' \n"); |
|
}else if("regDate".equals(type)) { |
|
sbWhere.append(" PART.REG_DATE BETWEEN CAST( :regDate || ' 00:00:00' AS DATE) \n"); |
|
sbWhere.append(" AND CAST( :regDate || ' 23:59:59' AS DATE) \n"); |
|
}else if("regPerson".equals(type)) { |
|
sbWhere.append(" USR.NAME = SP_CM_ENC_FU(:usrName) \n"); |
|
} |
|
|
|
if( userId != null && !userId.equals("")) { |
|
sbWhere.append(" AND PART.USER_ID = :usrId \n"); |
|
} |
|
|
|
sbSearch.append(sbWhere); |
|
//================================== Order by ================================== |
|
sbSearch.append(" ORDER BY PART.NAME ASC \n"); |
|
|
|
sbCount.append(sbWhere); |
|
|
|
//레코드갯수를 구하는 부모클래스의 함수를 호출하기 위해서 멤버변수에 저장 |
|
//페이징처리함수 호출전에 등록 필요. |
|
this.setCountQuery(sbCount); |
|
|
|
//레코드갯수를 구하는 부모클래스의 함수를 호출하기 위해서 멤버변수에 저장 |
|
this.setParams(params); |
|
|
|
//페이징처리쿼리생성함수 호출 |
|
StringBuilder pagenatingQuery = this.procPagenatingQuery(sbSearch, (Integer)params.get("endNo")); |
|
|
|
Query query = pm.newQuery("javax.jdo.query.SQL",pagenatingQuery.toString()); |
|
|
|
query.setResultClass(UserPartVO.class); |
|
|
|
List list = (List)query.executeWithMap(params); |
|
|
|
return list; |
|
} |
|
}
|
|
|