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 arrayListMemberIdx * @return List * */ //AdminMemberService @SuppressWarnings("unchecked") public List getMemberList(ArrayList 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 회원 리스트 * */ //AdminSiteService @SuppressWarnings({ "unchecked", "deprecation" }) public List 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 회원 리스트 * */ //AdminMemberService, MangerMemberService @SuppressWarnings({ "unchecked", "deprecation" }) public List 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= 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 회원 리스트 * */ //AdminMemberService, MangerMemberService @SuppressWarnings("unchecked") public List 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= 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 회원 리스트 * */ //AdminMemberService, MangerMemberService @SuppressWarnings({ "unchecked", "deprecation" }) public List 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= 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 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 * */ //ManagerMemberService @SuppressWarnings("unchecked") public Map 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= 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> list = criteria.list(); if(list.size() > 0){ return (Map)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 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 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; } }