fairnet/src/main/java/seed/dao/MemberDAOImpl.java
tolag3 495238e333 이준호 분쟁조정시스템 커밋
- hibernate 연동
 - 권한관리 개발중
2024-08-13 12:16:43 +09:00

665 lines
23 KiB
Java

package seed.dao;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.ProjectionList;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;
import seed.map.T_MEMBER;
/**
* T_MEMBER 테이블 정보를 select, insert, update, delete 하는 class
* */
@Repository
public class MemberDAOImpl implements MemberDAO{
private Logger log = Logger.getLogger(this.getClass());
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
/**
* memberId에 해당하는 회원 개수를 가지고 오는 메소드
* @param String memberId 회원 id
* @return Long 회원 개수
* */
//AdminMemberService, ManagerMemberService
public Long getMemberFormCnt(String memberId){
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(T_MEMBER.class);
criteria.add(Restrictions.eq("memberId", memberId));
criteria.setProjection(Projections.rowCount());
return (Long)criteria.uniqueResult();
}
/**
* arrayListMemberIdx 에 해당하는 회원 리스트를 가지고 오는 메소드
* arrayListMemberIdx 정보는 memberIdx in (arrayListMemberIdx) 조건에 사용된다.
* @param ArrayList<Integer> arrayListMemberIdx
* @return List<T_MEMBER>
* */
//AdminMemberService
@SuppressWarnings("unchecked")
public List<T_MEMBER> getMemberList(ArrayList<Integer> arrayListMemberIdx){
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(T_MEMBER.class);
criteria.add(Restrictions.in("memberIdx", arrayListMemberIdx));
return criteria.list();
}
/**
* siteIdx, column, search 에 해당하는 회원 개수를 가지고 오는 메소드
* @param String siteIdx 사이트 idx
* @param String column 검색 항목
* @param String search 검색 어
* @return Long 회원 개수
* */
//AdminMemberService, ManagerMemberService
@SuppressWarnings("deprecation")
public Long getMemberListCnt(String siteIdx, Integer selGroup, String column, String search){
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(T_MEMBER.class);
criteria.createCriteria("tGroups", "tGroups", Criteria.LEFT_JOIN);
criteria.add(Restrictions.eq("tGroups.tSite.siteIdx", siteIdx));
if(!selGroup.equals(0)){
criteria.add(Restrictions.eq("tGroups.tGroup.groupIdx", selGroup));
}
if(!column.equals("")){
if(column.equals("A")){
if(!search.equals("")){
criteria.add(
Restrictions.or(
Restrictions.like("memberId", search, MatchMode.ANYWHERE),
Restrictions.like("memberName", search, MatchMode.ANYWHERE)));
}
}else{
criteria.add(Restrictions.like(column, search, MatchMode.ANYWHERE));
}
}
criteria.setProjection(Projections.countDistinct("memberIdx"));
return (Long)criteria.uniqueResult();
}
/**
* siteIdx, column, search 에 해당하는 슈퍼관리자 및 회원 관리자 회원 개수를 가지고 오는 메소드
* @param String column 검색 항목
* @param String search 검색 어
* @return Long 회원 개수
* */
//AdminMemberService
public Long getMemberListCnt(String column, String search){
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(T_MEMBER.class);
criteria.add(
Restrictions.or(
Restrictions.eq("memberGrant", "U"),
Restrictions.eq("memberGrant", "S")));
if(!column.equals("")){
if(column.equals("A")){
if(!search.equals("")){
criteria.add(
Restrictions.or(
Restrictions.like("memberId", search, MatchMode.ANYWHERE),
Restrictions.like("memberName", search, MatchMode.ANYWHERE)));
}
}else{
criteria.add(Restrictions.like(column, search, MatchMode.ANYWHERE));
}
}
criteria.setProjection(Projections.countDistinct("memberIdx"));
return (Long)criteria.uniqueResult();
}
/**
* siteIdx, column, search 에 해당하는 슈퍼관리자 및 회원 관리자 회원 개수를 가지고 오는 메소드
* @param String column 검색 항목
* @param String search 검색 어
* @return Long 회원 개수
* */
//AdminMemberService
@SuppressWarnings("deprecation")
public Long getMemberPrivacyListCnt(String siteIdx, String column, String search, Integer privacyDate){
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(T_MEMBER.class);
criteria.createCriteria("tGroups", "tGroups", Criteria.LEFT_JOIN);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = new GregorianCalendar();
cal.setTime(new Date());
cal.add(Calendar.DAY_OF_YEAR, -privacyDate);
Date privacy = new Date();
try {
privacy = sdf.parse(sdf.format(cal.getTime()));
} catch (ParseException e) {
log.error("CHECK ERROR:",e);
return 0L;
}
criteria.add(
Restrictions.and(
Restrictions.and(
Restrictions.and(
Restrictions.and(
Restrictions.ne("memberGrant", "U"),
Restrictions.ne("memberGrant", "S")),
Restrictions.in("memberStatus", new String[]{"S", "D"})),
Restrictions.eq("tGroups.tSite.siteIdx", siteIdx)),
Restrictions.le("memberRegDate", privacy)));
if(!column.equals("")){
if(column.equals("A")){
if(!search.equals("")){
criteria.add(
Restrictions.or(
Restrictions.like("memberId", search, MatchMode.ANYWHERE),
Restrictions.like("memberName", search, MatchMode.ANYWHERE)));
}
}else{
criteria.add(Restrictions.like(column, search, MatchMode.ANYWHERE));
}
}
criteria.setProjection(Projections.countDistinct("memberIdx"));
return (Long)criteria.uniqueResult();
}
/**
* siteIdx 에 해당하는 회원 리스트를 가지고 오는 메소드
* @param String siteIdx 사이트 idx
* @return List<T_MEMBER> 회원 리스트
* */
//AdminSiteService
@SuppressWarnings({ "unchecked", "deprecation" })
public List<T_MEMBER> getMemberList(String siteIdx){
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(T_MEMBER.class);
criteria.createCriteria("tGroups", "tGroups", Criteria.LEFT_JOIN);
criteria.add(Restrictions.eq("tGroups.tSite.siteIdx", siteIdx));
return criteria.list();
}
/**
* siteIdx, column, search 에 해당하는 회원 리스트를 가지고 오는 메소드
* orderColumn 의로 정렬할 컬럼을 정의 하고 order 옵션으로 정렬 형식을 정의 한다.
* @param String siteIdx 사이트 idx
* @param int page 페이지 번호
* @param int row 개수
* @param String orderColumn order by 컬럼 정의
* @param String order order by 옵션정의 ex>DESC, ASC
* @param String column 검색 항목
* @param String search 검색 어
* @param String[] qryColumns select 컬럼 정의
* @return List<T_MEMBER> 회원 리스트
* */
//AdminMemberService, MangerMemberService
@SuppressWarnings({ "unchecked", "deprecation" })
public List<T_MEMBER> getMemberList(String siteIdx, int page, int row, String orderColumn, String order, Integer selGroup, String column, String search, String[] qryColumns){
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(T_MEMBER.class);
criteria.createCriteria("tGroups", "tGroups", Criteria.LEFT_JOIN);
criteria.setFirstResult(page);
criteria.setMaxResults(row);
if(qryColumns != null && qryColumns.length > 0){
ProjectionList projectionList = Projections.projectionList();
boolean groupCheck = false;
for(int q=0; q<qryColumns.length; q++){
if(!groupCheck && qryColumns[q].indexOf("groupBy") >= 0){
groupCheck = true;
continue;
}
if(groupCheck){
if(qryColumns[q].indexOf("Cnt") >= 0){
String qryColumn = qryColumns[q].substring(0, qryColumns[q].indexOf("Cnt"));
projectionList.add(Projections.count(qryColumn).as("_"+qryColumns[q].substring(qryColumns[q].lastIndexOf(".")+1)));
}else{
projectionList.add(Projections.groupProperty(qryColumns[q]).as("_"+qryColumns[q].substring(qryColumns[q].lastIndexOf(".")+1)));
}
}else{
projectionList.add(Projections.property(qryColumns[q]).as("_"+qryColumns[q].substring(qryColumns[q].lastIndexOf(".")+1)));
}
}
criteria.setProjection(projectionList);
criteria.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
}
criteria.add(Restrictions.eq("tGroups.tSite.siteIdx", siteIdx));
if(!selGroup.equals(0)){
criteria.add(Restrictions.eq("tGroups.tGroup.groupIdx", selGroup));
}
if(!column.equals("")){
if(column.equals("A")){
if(!search.equals("")){
criteria.add(
Restrictions.or(
Restrictions.like("memberId", search, MatchMode.ANYWHERE),
Restrictions.like("memberName", search, MatchMode.ANYWHERE)));
}
}else{
criteria.add(Restrictions.like(column, search, MatchMode.ANYWHERE));
}
}
if(order.equals("DESC")){
criteria.addOrder(Order.desc(orderColumn));
}else{
criteria.addOrder(Order.asc(orderColumn));
}
return criteria.list();
}
/**
* siteIdx, column, search 에 해당하는 슈퍼관리자 및 회원 관리자 회원 리스트를 가지고 오는 메소드
* orderColumn 의로 정렬할 컬럼을 정의 하고 order 옵션으로 정렬 형식을 정의 한다.
* @param int page 페이지 번호
* @param int row 개수
* @param String orderColumn order by 컬럼 정의
* @param String order order by 옵션정의 ex>DESC, ASC
* @param String column 검색 항목
* @param String search 검색 어
* @param String[] qryColumns select 컬럼 정의
* @return List<T_MEMBER> 회원 리스트
* */
//AdminMemberService, MangerMemberService
@SuppressWarnings("unchecked")
public List<T_MEMBER> getMemberList(int page, int row, String orderColumn, String order, String column, String search, String[] qryColumns){
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(T_MEMBER.class);
criteria.setFirstResult(page);
criteria.setMaxResults(row);
if(qryColumns != null && qryColumns.length > 0){
ProjectionList projectionList = Projections.projectionList();
boolean groupCheck = false;
for(int q=0; q<qryColumns.length; q++){
if(!groupCheck && qryColumns[q].indexOf("groupBy") >= 0){
groupCheck = true;
continue;
}
if(groupCheck){
if(qryColumns[q].indexOf("Cnt") >= 0){
String qryColumn = qryColumns[q].substring(0, qryColumns[q].indexOf("Cnt"));
projectionList.add(Projections.count(qryColumn).as("_"+qryColumns[q].substring(qryColumns[q].lastIndexOf(".")+1)));
}else{
projectionList.add(Projections.groupProperty(qryColumns[q]).as("_"+qryColumns[q].substring(qryColumns[q].lastIndexOf(".")+1)));
}
}else{
projectionList.add(Projections.property(qryColumns[q]).as("_"+qryColumns[q].substring(qryColumns[q].lastIndexOf(".")+1)));
}
}
criteria.setProjection(projectionList);
criteria.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
}
criteria.add(
Restrictions.or(
Restrictions.eq("memberGrant", "U"),
Restrictions.eq("memberGrant", "S")));
if(!column.equals("")){
if(column.equals("A")){
if(!search.equals("")){
criteria.add(
Restrictions.or(
Restrictions.like("memberId", search, MatchMode.ANYWHERE),
Restrictions.like("memberName", search, MatchMode.ANYWHERE)));
}
}else{
criteria.add(Restrictions.like(column, search, MatchMode.ANYWHERE));
}
}
if(order.equals("DESC")){
criteria.addOrder(Order.desc(orderColumn));
}else{
criteria.addOrder(Order.asc(orderColumn));
}
return criteria.list();
}
/**
* siteIdx, column, search 에 해당하는 슈퍼관리자 및 회원 관리자 회원 리스트를 가지고 오는 메소드
* orderColumn 의로 정렬할 컬럼을 정의 하고 order 옵션으로 정렬 형식을 정의 한다.
* @param int page 페이지 번호
* @param int row 개수
* @param String orderColumn order by 컬럼 정의
* @param String order order by 옵션정의 ex>DESC, ASC
* @param String column 검색 항목
* @param String search 검색 어
* @param String[] qryColumns select 컬럼 정의
* @return List<T_MEMBER> 회원 리스트
* */
//AdminMemberService, MangerMemberService
@SuppressWarnings({ "unchecked", "deprecation" })
public List<T_MEMBER> getMemberPrivacyList(String siteIdx, int page, int row, String orderColumn, String order, String column, String search, Integer privacyDate, String[] qryColumns){
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(T_MEMBER.class);
criteria.createCriteria("tGroups", "tGroups", Criteria.LEFT_JOIN);
criteria.setFirstResult(page);
criteria.setMaxResults(row);
if(qryColumns != null && qryColumns.length > 0){
ProjectionList projectionList = Projections.projectionList();
boolean groupCheck = false;
for(int q=0; q<qryColumns.length; q++){
if(!groupCheck && qryColumns[q].indexOf("groupBy") >= 0){
groupCheck = true;
continue;
}
if(groupCheck){
if(qryColumns[q].indexOf("Cnt") >= 0){
String qryColumn = qryColumns[q].substring(0, qryColumns[q].indexOf("Cnt"));
projectionList.add(Projections.count(qryColumn).as("_"+qryColumns[q].substring(qryColumns[q].lastIndexOf(".")+1)));
}else{
projectionList.add(Projections.groupProperty(qryColumns[q]).as("_"+qryColumns[q].substring(qryColumns[q].lastIndexOf(".")+1)));
}
}else{
projectionList.add(Projections.property(qryColumns[q]).as("_"+qryColumns[q].substring(qryColumns[q].lastIndexOf(".")+1)));
}
}
criteria.setProjection(projectionList);
criteria.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = new GregorianCalendar();
cal.setTime(new Date());
cal.add(Calendar.DAY_OF_YEAR, -privacyDate);
Date privacy = new Date();
try {
privacy = sdf.parse(sdf.format(cal.getTime()));
} catch (ParseException e) {
log.error("CHECK ERROR:",e);
return null;
}
criteria.add(
Restrictions.and(
Restrictions.and(
Restrictions.and(
Restrictions.and(
Restrictions.ne("memberGrant", "U"),
Restrictions.ne("memberGrant", "S")),
Restrictions.in("memberStatus", new String[]{"S", "D"})),
Restrictions.eq("tGroups.tSite.siteIdx", siteIdx)),
Restrictions.le("memberRegDate", privacy)));
if(!column.equals("")){
if(column.equals("A")){
if(!search.equals("")){
criteria.add(
Restrictions.or(
Restrictions.like("memberId", search, MatchMode.ANYWHERE),
Restrictions.like("memberName", search, MatchMode.ANYWHERE)));
}
}else{
criteria.add(Restrictions.like(column, search, MatchMode.ANYWHERE));
}
}
if(order.equals("DESC")){
criteria.addOrder(Order.desc(orderColumn));
}else{
criteria.addOrder(Order.asc(orderColumn));
}
return criteria.list();
}
/**
* memberId 에 해당하는 회원 정보를 가지고 오는 메소드
* @param String memberId 회원아이디
* @return T_MEMBER 회원 정보
* */
//AdminLoginService, ManagerLoginService
@SuppressWarnings("unchecked")
public T_MEMBER getMemberForm(String memberId){
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(T_MEMBER.class);
criteria.add(Restrictions.eq("memberId", memberId));
List<T_MEMBER> list = criteria.list();
if(list.size() > 0){
return (T_MEMBER)list.get(0);
}else{
return null;
}
}
/**
* memberIdx 에 해당하는 회원 정보를 가지고 오는 메소드
* @param Integer memberIdx 회원 idx
* @return T_MEMBER 회원 정보
* */
//AdminSiteService, AdminLoginService, ManagerLoginService, AdminSiteManagerService, AdminMemberService, ManagerSiteService, ManagerMemberService, UserMemberService
public T_MEMBER getMemberForm(Integer memberIdx){
return (T_MEMBER) this.sessionFactory.getCurrentSession().load(T_MEMBER.class, memberIdx);
}
/**
* memberIdx 에 해당하는 회원 정보를 가지고 오는 메소드
* @param Integer memberIdx 사이트 idx
* @param String[] qryColumns select 컬럼 정의
* @return Map<Object, Object>
* */
//ManagerMemberService
@SuppressWarnings("unchecked")
public Map<Object, Object> getMemberMapForm(Integer memberIdx, String[] qryColumns){
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(T_MEMBER.class);
if(qryColumns != null && qryColumns.length > 0){
ProjectionList projectionList = Projections.projectionList();
boolean groupCheck = false;
for(int q=0; q<qryColumns.length; q++){
if(!groupCheck && qryColumns[q].indexOf("groupBy") >= 0){
groupCheck = true;
continue;
}
if(groupCheck){
if(qryColumns[q].indexOf("Cnt") >= 0){
String qryColumn = qryColumns[q].substring(0, qryColumns[q].indexOf("Cnt"));
projectionList.add(Projections.count(qryColumn).as("_"+qryColumns[q].substring(qryColumns[q].lastIndexOf(".")+1)));
}else{
projectionList.add(Projections.groupProperty(qryColumns[q]).as("_"+qryColumns[q].substring(qryColumns[q].lastIndexOf(".")+1)));
}
}else{
projectionList.add(Projections.property(qryColumns[q]).as("_"+qryColumns[q].substring(qryColumns[q].lastIndexOf(".")+1)));
}
}
criteria.setProjection(projectionList);
criteria.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
}
criteria.add(Restrictions.eq("memberIdx", memberIdx));
List<Map<Object, Object>> list = criteria.list();
if(list.size() > 0){
return (Map<Object, Object>)list.get(0);
}else{
return null;
}
}
/**
* memberName, memberEmail1, memberEmail2 에 해당하는 회원 아이디를 가지고 오는 메소드
* @param String memberName 회원 이름
* @param String memberEmail1 회원 이메일1
* @param String memberEmail2 회원 이메일2
* @return String 회원 아이디
* */
//UserMemberService
@SuppressWarnings("unchecked")
public String getMemberIdFindForm(String memberName, String memberEmail1, String memberEmail2){
String memberId = "";
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(T_MEMBER.class);
criteria.add(
Restrictions.and(
Restrictions.and(
Restrictions.eq("memberName", memberName),
Restrictions.eq("memberEmail1", memberEmail1)),
Restrictions.eq("memberEmail2", memberEmail2)));
List<T_MEMBER> list = criteria.list();
if(list.size() > 0){
memberId = list.get(0).getMemberId();
}
return memberId;
}
/**
* memberName, memberEmail1, memberEmail2 에 해당하는 회원 아이디를 가지고 오는 메소드
* @param String memberName 회원 이름
* @param String memberEmail1 회원 이메일1
* @param String memberEmail2 회원 이메일2
* @return String 회원 아이디
* */
//UserMemberService
@SuppressWarnings("unchecked")
public Integer getMemberPwFindForm(String memberName, String memberId){
Integer memberIdx = 0;
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(T_MEMBER.class);
criteria.add(
Restrictions.and(
Restrictions.eq("memberId", memberId),
Restrictions.eq("memberName", memberName)));
List<T_MEMBER> list = criteria.list();
if(list.size() > 0){
return list.get(0).getMemberIdx();
}
return memberIdx;
}
/**
* 회원 정보를 저장하는 메소드
* @param T_MEMBER tMember 저장할 회원 정보
* @return T_MEMBER 저장된 회원 정보
* */
//AdminMemberService, ManagerMemberService
public T_MEMBER setMemberRegProc(T_MEMBER tMember){
this.sessionFactory.getCurrentSession().save(tMember);
this.sessionFactory.getCurrentSession().flush();
this.sessionFactory.getCurrentSession().clear();
return getMemberForm(tMember.getMemberIdx());
}
/**
* 회원 정보를 수정하는 메소드
* @param T_MEMBER tMember 수정할 회원 정보
* @return boolean 작업의 성공 여부
* */
//AdminSiteService, AdminLoginService, ManagerLoginService, AdminSiteManagerService, AdminMemberService, ManagerSiteService, ManagerMemberService
public boolean setMemberModProc(T_MEMBER tMember){
boolean success = false;
try{
this.sessionFactory.getCurrentSession().update(tMember);
this.sessionFactory.getCurrentSession().flush();
this.sessionFactory.getCurrentSession().clear();
success = true;
}catch(HibernateException ex){
log.error("CHECK ERROR:",ex);
}
return success;
}
/**
* 회원 정보를 삭제하는 메소드
* @param T_MEMBER tMember 삭제할 회원 정보
* @return boolean 작업의 성공 여부
* */
//AdminMemberService, ManagerMemberService
public boolean setMemberDelProc(T_MEMBER tMember){
boolean success = false;
try{
this.sessionFactory.getCurrentSession().delete(tMember);
this.sessionFactory.getCurrentSession().flush();
this.sessionFactory.getCurrentSession().clear();
success = true;
}catch(HibernateException ex){
log.error("CHECK ERROR:",ex);
}
return success;
}
}