package com.opentravelsoft.providers.hibernate; import org.springframework.core.annotation.AnnotationUtils; import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; import org.springframework.orm.hibernate3.SessionFactoryUtils; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Repository; import com.opentravelsoft.entity.Member; import com.opentravelsoft.providers.MemberDao; import com.opentravelsoft.util.RowDataUtil; import com.opentravelsoft.util.StringUtil; import javax.persistence.Table; import java.util.Calendar; import java.util.List; /** * This class interacts with Spring's HibernateTemplate to save/delete and * retrieve User objects. * */ @Repository("memberDao") public class MemberDaoHibernate extends GenericDaoHibernate<Member, Long> implements MemberDao // , UserDetailsService { /** * Constructor that sets the entity to User.class. */ public MemberDaoHibernate() { super(Member.class); } /** * {@inheritDoc} */ @SuppressWarnings("unchecked") public List<Member> getUsers() { return getHibernateTemplate().find( "from Member u order by upper(u.username)"); } /** * {@inheritDoc} */ public Member saveUser(Member user) { if (log.isDebugEnabled()) log.debug("member's id: " + user.getId()); getHibernateTemplate().saveOrUpdate(user); // necessary to throw a DataIntegrityViolation and catch it in // UserManager getHibernateTemplate().flush(); return user; } /** * Overridden simply to call the saveUser method. This is happenening because * saveUser flushes the session and saveObject of BaseDaoHibernate does not. * * @param member the user to save * @return the modified user (with a primary key set if they're new) */ @Override public Member save(Member member) { return this.saveUser(member); } /** * {@inheritDoc} */ @SuppressWarnings("unchecked") public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { List<Member> users = getHibernateTemplate().find( "from Member where username=?", username); if (users == null || users.isEmpty()) { throw new UsernameNotFoundException("member '" + username + "' not found..."); } else { return (UserDetails) users.get(0); } } /** * {@inheritDoc} */ public String getUserPassword(String username) { SimpleJdbcTemplate jdbcTemplate = new SimpleJdbcTemplate( SessionFactoryUtils.getDataSource(getSessionFactory())); Table table = AnnotationUtils.findAnnotation(Member.class, Table.class); return jdbcTemplate.queryForObject("select password from " + table.name() + " where username=?", String.class, username); } // --------------------------------------------------------------- public int register(Member customer) { Member member = new Member(); member.setPassword(customer.getPassword()); member.setUsername(customer.getUsername()); member.setMobile(customer.getMobile()); member.setEmail(customer.getEmail()); member.setIdCard(customer.getIdCard()); member.setSex(customer.getSex()); // member.setAddress(RowDataUtil.getString(customer.getAddress())); member.setBirthday(customer.getBirthday()); member.setPhone(RowDataUtil.getString(customer.getPhone())); member.setFax(RowDataUtil.getString(customer.getFax())); member.setNation(RowDataUtil.getString(customer.getNation())); member.setProvince(RowDataUtil.getString(customer.getProvince())); member.setCity(RowDataUtil.getString(customer.getCity())); member.setPostcode(RowDataUtil.getString(customer.getPostcode())); member.setReceiveMail(customer.getReceiveMail()); member.setVocation(customer.getVocation()); member.setEducate(customer.getEducate()); member.setPersonalIncome(customer.getPersonalIncome()); member.setHouseholdIncome(customer.getHouseholdIncome()); member.setTripTimes(customer.getTripTimes()); member.setExpendOneTrip(customer.getExpendOneTrip()); member.setMemberKey("Y"); // 会员卡号 member.setCardNo(customer.getCardNo()); getHibernateTemplate().save(member); return 0; } @SuppressWarnings("unchecked") public Member getMemberById(long memberId) { Object[] obj1 = { memberId }; StringBuilder sql = new StringBuilder(); sql.append("from Member where id = ?"); List<Member> members = getHibernateTemplate().find(sql.toString(), obj1); Member customer = null; if (members.size() > 0) { customer = members.get(0); } return customer; } @SuppressWarnings("unchecked") public Member getMemberByName(String userName) { Object[] obj1 = { userName }; StringBuilder sql = new StringBuilder(); sql.append("from Member where username = ?"); List<Member> members = getHibernateTemplate().find(sql.toString(), obj1); Member customer = null; if (members.size() > 0) { customer = members.get(0); } return customer; } @SuppressWarnings("unchecked") public int update(Member customer) { Object[] obj1 = { customer.getUsername() }; StringBuilder sql = new StringBuilder(); sql.append("from Member where username = ?"); List<Member> members = getHibernateTemplate().find(sql.toString(), obj1); if (members.size() > 0) { Member member = members.get(0); if (StringUtil.hasLength(customer.getPassword())) member.setPassword(customer.getPassword()); member.setUsername(customer.getUsername()); member.setMobile(customer.getMobile()); member.setEmail(customer.getEmail()); member.setIdCard(customer.getIdCard()); member.setSex(customer.getSex()); // member.setAddress(RowDataUtil.getString(customer.getAddress())); member.setBirthday(customer.getBirthday()); member.setPhone(RowDataUtil.getString(customer.getPhone())); member.setFax(RowDataUtil.getString(customer.getFax())); member.setNation(RowDataUtil.getString(customer.getNation())); member.setProvince(RowDataUtil.getString(customer.getProvince())); member.setCity(RowDataUtil.getString(customer.getCity())); member.setPostcode(RowDataUtil.getString(customer.getPostcode())); member.setReceiveMail(customer.getReceiveMail()); member.setVocation(customer.getVocation()); member.setEducate(customer.getEducate()); member.setMemberKey("Y"); // 会员卡号 member.setCardNo(customer.getCardNo()); getHibernateTemplate().update(member); } return 0; } @SuppressWarnings("unchecked") public String validUid(String uid) { Object[] obj1 = { uid }; StringBuilder sql = new StringBuilder(); sql.append("from Member where username = ?"); List<Member> members = getHibernateTemplate().find(sql.toString(), obj1); if (members.size() > 0) { return "false"; } return "true"; } @SuppressWarnings("unchecked") public String getMemberPwd(String mobileNo) { Object[] params = { mobileNo }; Member member = null; StringBuilder sql = new StringBuilder(); sql.append("from Member where mobile = ?"); List<Member> members = getHibernateTemplate().find(sql.toString(), params); if (members.size() > 0) { member = members.get(0); Calendar cal1 = Calendar.getInstance(); Calendar cal2 = Calendar.getInstance(); // Date sysdate = getSysdate(getSession()); if (null == member.getSendPwdDate()) { // member.setSendPwdDate(sysdate); getHibernateTemplate().update(member); return member.getPassword(); } cal1.setTime(member.getSendPwdDate()); // cal2.setTime(sysdate); if (cal1.get(Calendar.DAY_OF_MONTH) == cal2.get(Calendar.DAY_OF_MONTH) && cal1.get(Calendar.MONTH) == cal2.get(Calendar.MONTH) && cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR)) { // the same day return null; } else { // member.setSendPwdDate(sysdate); getHibernateTemplate().update(member); return member.getPassword(); } } return null; } public int modifyPassword(Member customer) { Member member = new Member(); member.setPassword(customer.getConfirmPassword()); member.setMemberKey("Y"); getHibernateTemplate().update(member); return 0; } }