admin
2021-03-18 b37275dba6b782bf3bb3817c4504f6cdef1bef7c
src/main/java/com/yeshi/buwan/service/imp/UserService.java
@@ -1,10 +1,17 @@
package com.yeshi.buwan.service.imp;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import com.yeshi.buwan.dao.user.LoginUserExtraDao;
import com.yeshi.buwan.domain.user.LoginUserExtra;
import com.yeshi.buwan.dto.user.LoginInfoDto;
import com.yeshi.buwan.exception.user.LoginUserException;
import com.yeshi.buwan.exception.user.RegisterUserException;
import com.yeshi.buwan.service.inter.LoginUserService;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.cache.annotation.Cacheable;
@@ -12,10 +19,10 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.yeshi.buwan.dao.LoginUserDao;
import com.yeshi.buwan.dao.user.LoginUserDao;
import com.yeshi.buwan.dao.UserDao;
import com.yeshi.buwan.domain.LoginUser;
import com.yeshi.buwan.domain.SystemInfo;
import com.yeshi.buwan.domain.user.LoginUser;
import com.yeshi.buwan.domain.system.SystemInfo;
import com.yeshi.buwan.domain.UserData;
import com.yeshi.buwan.domain.UserInfo;
import com.yeshi.buwan.util.Constant;
@@ -24,242 +31,426 @@
@Service
public class UserService {
   public UserService() {
    public UserService() {
   }
    }
   @Resource
   private UserDao userDao;
    @Resource
    private UserDao userDao;
   @Resource
   private LoginUserDao loginUserDao;
    @Resource
    private LoginUserDao loginUserDao;
   public UserDao getUserDao() {
      return userDao;
   }
    @Resource
    private LoginUserExtraDao loginUserExtraDao;
   public void setUserDao(UserDao userDao) {
      this.userDao = userDao;
   }
    @Resource
    private LoginUserService loginUserService;
   // 用户操作
   public List<UserInfo> getUserList(int system, int page) {
      return userDao.list("from UserInfo u where u.system.id=? order by u.createtime desc",
            (page - 1) * Constant.pageCount, Constant.pageCount, new String[] { system + "" });
   }
   // 获取用户数量
   public long getUserInfoCount(int system) {
    // 用户操作
    public List<UserInfo> getUserList(int system, int page) {
        return userDao.list("from UserInfo u where u.system.id=? order by u.createtime desc",
                (page - 1) * Constant.pageCount, Constant.pageCount, new String[]{system + ""});
    }
      return userDao.getCount("select count(*)  from UserInfo u where u.system.id=?", new String[] { system + "" });
   }
    // 获取用户数量
    public long getUserInfoCount(int system) {
   // 获取总的用户数量
   public long getUserInfoCount() {
        return userDao.getCount("select count(*)  from UserInfo u where u.system.id=?", new String[]{system + ""});
    }
      return userDao.getCount("select count(*)  from UserInfo u");
   }
    // 获取总的用户数量
    public long getUserInfoCount() {
   // 获取用户的页数
   public long getUserInfoPage(int system) {
      long count = getUserInfoCount(system);
      return count % Constant.pageCount == 0 ? count / Constant.pageCount : count / Constant.pageCount + 1;
   }
        return userDao.getCount("select count(*)  from UserInfo u");
    }
   // 获取某个用户的详细信息
   @Cacheable(value = "longTimeCache", key = "'getUserInfo'+'-'+#id")
   public UserInfo getUserInfo(String id) {
    // 获取用户的页数
    public long getUserInfoPage(int system) {
        long count = getUserInfoCount(system);
        return count % Constant.pageCount == 0 ? count / Constant.pageCount : count / Constant.pageCount + 1;
    }
      return userDao.find(UserInfo.class, id);
   }
    // 获取某个用户的详细信息
    @Cacheable(value = "longTimeCache", key = "'getUserInfo'+'-'+#id")
    public UserInfo getUserInfo(String id) {
   // 更新用户信息
   public void updateUserInfo(UserInfo userInfo) {
      userDao.update(userInfo);
   }
        return userDao.find(UserInfo.class, id);
    }
   public void updateLoginUserInfo(LoginUser lu) {
      loginUserDao.update(lu);
   }
    // 更新用户信息
    public void updateUserInfo(UserInfo userInfo) {
        userDao.update(userInfo);
    }
   public String getUid(String device, String system, String imei, String mac, String lat, String lng) {
      UserInfo info;
      info = new UserInfo();
      info.setDevice(device);
      if (!StringUtil.isNullOrEmpty(imei))
         info.setImei(imei);
      if (!StringUtil.isNullOrEmpty(mac))
         info.setMac(mac);
      if (!StringUtil.isNullOrEmpty(lat))
         info.setLat(lat);
      if (!StringUtil.isNullOrEmpty(lng))
         info.setLng(lng);
      String s;
      List<UserInfo> list = userDao.list("from UserInfo u where u.device=? and u.system.id=" + system,
            new String[] { device });
    public void updateLoginUserInfo(LoginUser lu) {
        loginUserDao.update(lu);
    }
      if (list.size() <= 0) {//
         info.setScore("0");
         info.setCreatetime((new StringBuilder(String.valueOf(System.currentTimeMillis()))).toString());
         SystemInfo sys = new SystemInfo();
         sys.setId(system);
         info.setSystem(sys);
         userDao.create(info);
         s = queryUid(device, system);
      } else {
         UserInfo u = (UserInfo) list.get(0);
         s = u.getId();
         if (!StringUtil.isNullOrEmpty(imei))
            u.setImei(imei);
         if (!StringUtil.isNullOrEmpty(mac))
            u.setMac(mac);
         if (!StringUtil.isNullOrEmpty(lat))
            u.setLat(lat);
         if (!StringUtil.isNullOrEmpty(lng))
            u.setLng(lng);
         userDao.update(u);
      }
    public String getUid(String device, String system, String imei, String mac, String lat, String lng) {
        UserInfo info;
        info = new UserInfo();
        info.setDevice(device);
        if (!StringUtil.isNullOrEmpty(imei))
            info.setImei(imei);
        if (!StringUtil.isNullOrEmpty(mac))
            info.setMac(mac);
        if (!StringUtil.isNullOrEmpty(lat))
            info.setLat(lat);
        if (!StringUtil.isNullOrEmpty(lng))
            info.setLng(lng);
        String s;
        List<UserInfo> list = userDao.list("from UserInfo u where u.device=? and u.system.id=" + system,
                device);
      return s;
   }
        if (list.size() <= 0) {//
            info.setScore("0");
            info.setCreatetime((new StringBuilder(String.valueOf(System.currentTimeMillis()))).toString());
            SystemInfo sys = new SystemInfo();
            sys.setId(system);
            info.setSystem(sys);
            userDao.create(info);
            s = queryUid(device, system);
        } else {
            UserInfo u = (UserInfo) list.get(0);
            s = u.getId();
            if (!StringUtil.isNullOrEmpty(imei))
                u.setImei(imei);
            if (!StringUtil.isNullOrEmpty(mac))
                u.setMac(mac);
            if (!StringUtil.isNullOrEmpty(lat))
                u.setLat(lat);
            if (!StringUtil.isNullOrEmpty(lng))
                u.setLng(lng);
            userDao.update(u);
        }
   @SuppressWarnings("unchecked")
   public String queryUid(String device, String system) {
      String s = "0";
      List<UserInfo> list = userDao.list("from UserInfo u where u.device=? and u.system.id=" + system,
            new String[] { device });
      if (list.size() <= 0)
         s = "0";
      else
         s = ((UserInfo) list.get(0)).getId();
      return s;
   }
        return s;
    }
   @Cacheable(value = "userCache", key = "'getUserData'+'-'+#uid")
   public UserData getUserData(String uid) {
      UserData data = new UserData();
      data.setCollectCount((new StringBuilder(String.valueOf(userDao.getCount(
            (new StringBuilder("select count(*)  from Collection c where c.user.id=")).append(uid).toString()))))
                  .toString());
      data.setWatchCount((new StringBuilder(String.valueOf(userDao.getCount(
            (new StringBuilder("select count(*)  from GetScoreWatch c where c.user.id=")).append(uid).toString()))))
                  .toString());
      List<UserInfo> user = userDao
            .list((new StringBuilder("select count(*)  from UserInfo u where u.id=")).append(uid).toString());
      // if (user != null && user.size() > 0)
      // data.setScore(((UserInfo) user.get(0)).getScore());
      // else
      // data.setScore("0");
      return data;
   }
    @SuppressWarnings("unchecked")
    public String queryUid(String device, String system) {
        String s = "0";
        List<UserInfo> list = userDao.list("from UserInfo u where u.device=? and u.system.id=" + system,
                new String[]{device});
        if (list.size() <= 0)
            s = "0";
        else
            s = ((UserInfo) list.get(0)).getId();
        return s;
    }
   @SuppressWarnings("unchecked")
   public LoginUser getLoginUser(final String openid, final String detailSystem, final int type, final String portrait,
         final String name, final String ipInfo) {
      return (LoginUser) userDao.excute(new HibernateCallback<LoginUser>() {
         public LoginUser doInHibernate(Session session) throws HibernateException {
            try {
               List<LoginUser> list = session
                     .createQuery("from LoginUser lu where lu.openid=? and  lu.loginType=?")
                     .setParameter(0, openid).setParameter(1, type).list();
    @Cacheable(value = "userCache", key = "'getUserData'+'-'+#uid")
    public UserData getUserData(String uid) {
        UserData data = new UserData();
        data.setCollectCount((new StringBuilder(String.valueOf(userDao.getCount(
                (new StringBuilder("select count(*)  from Collection c where c.user.id=")).append(uid).toString()))))
                .toString());
        data.setWatchCount((new StringBuilder(String.valueOf(userDao.getCount(
                (new StringBuilder("select count(*)  from GetScoreWatch c where c.user.id=")).append(uid).toString()))))
                .toString());
        List<UserInfo> user = userDao
                .list((new StringBuilder("select count(*)  from UserInfo u where u.id=")).append(uid).toString());
        // if (user != null && user.size() > 0)
        // data.setScore(((UserInfo) user.get(0)).getScore());
        // else
        // data.setScore("0");
        return data;
    }
               if (list != null && list.size() > 0)
                  return list.get(0);
               else {
                  session.getTransaction().begin();
                  LoginUser lu = new LoginUser();
                  lu.setCreatetime(System.currentTimeMillis() + "");
                  lu.setDetailsystem(detailSystem);
                  lu.setLoginType(type);
                  lu.setName(name);
                  lu.setOpenid(openid);
                  lu.setPortrait(portrait);
                  lu.setIpinfo(ipInfo);
                  session.save(lu);
                  session.flush();
                  session.getTransaction().commit();
                  return lu;
               }
            } catch (Exception e) {
               e.printStackTrace();
               session.getTransaction().rollback();
            }
            return null;
         }
      });
    /**
     * 登录
     *
     * @param dto
     * @return
     * @throws LoginUserException
     */
    public LoginUser login(LoginInfoDto dto) throws LoginUserException {
   }
        LoginUser loginUser = null;
   public LoginUser getLoginUser(String id) {
      return loginUserDao.find(LoginUser.class, id);
   }
        LoginUserExtra loginUserExtra = null;
        switch (dto.getLoginType()) {
            case LoginUser.LOGIN_TYPE_EMAIL: {
                if (StringUtil.isNullOrEmpty(dto.getEmail()) || StringUtil.isNullOrEmpty(dto.getPwd())) {
                    throw new LoginUserException(LoginUserException.CODE_PARAMS_NOT_ENOUGH, "邮箱和密码不能为空");
                }
                List<LoginUser> userList = loginUserDao.list("from LoginUser lu where lu.systemId=? and lu.email=? and lu.state=?", dto.getSystemId(), dto.getEmail(), LoginUser.STATE_NORMAL);
                if (userList == null || userList.size() == 0) {
                    throw new LoginUserException(LoginUserException.CODE_NO_USER, "用户不存在");
                }
   public LoginUser getLoginUserByOpenId(String openid) {
      List<LoginUser> list = loginUserDao.list("from LoginUser lu where lu.openid=?", new Serializable[] { openid });
      if (list != null && list.size() > 0)
         return list.get(0);
      return null;
   }
                if (!dto.getPwd().equalsIgnoreCase(userList.get(0).getPwd())) {
                    throw new LoginUserException(LoginUserException.CODE_PWD_WRONG, "密码错误");
                }
                loginUser = userList.get(0);
                loginUserExtra = new LoginUserExtra(loginUser.getId());
                loginUserExtra.setEmail(dto.getEmail());
            }
            break;
            case LoginUser.LOGIN_TYPE_QQ: {
                if (dto.getQqUserInfo() == null || StringUtil.isNullOrEmpty(dto.getQqUserInfo().getOpenId())) {
                    throw new LoginUserException(LoginUserException.CODE_PARAMS_NOT_ENOUGH, "QQ授权信息为空");
                }
                List<LoginUser> userList = loginUserDao.list("from LoginUser lu where lu.systemId=? and lu.qqOpenId=? and lu.state=?", dto.getSystemId(), dto.getQqUserInfo().getOpenId(), LoginUser.STATE_NORMAL);
                if (userList == null || userList.size() == 0) {
                    throw new LoginUserException(LoginUserException.CODE_NO_USER, "用户不存在");
                }
                loginUser = userList.get(0);
                loginUserExtra = new LoginUserExtra(loginUser.getId());
                loginUserExtra.setQqPortrait(dto.getQqUserInfo().getPortrait());
                loginUserExtra.setQqOpenId(dto.getQqUserInfo().getOpenId());
                loginUserExtra.setQqNickName(dto.getQqUserInfo().getName());
            }
            break;
            case LoginUser.LOGIN_TYPE_WX: {
                if (dto.getWeiXinUser() == null || StringUtil.isNullOrEmpty(dto.getWeiXinUser().getOpenid())) {
                    throw new LoginUserException(LoginUserException.CODE_PARAMS_NOT_ENOUGH, "微信授权信息为空");
                }
                List<LoginUser> userList = loginUserDao.list("from LoginUser lu where lu.systemId=? and lu.wxOpenId=? and lu.state=?", dto.getSystemId(), dto.getWeiXinUser().getOpenid(), LoginUser.STATE_NORMAL);
                if (userList == null || userList.size() == 0) {
                    throw new LoginUserException(LoginUserException.CODE_NO_USER, "用户不存在");
                }
                loginUser = userList.get(0);
   /**
    * 用户注销
    *
    * @param uid
    */
   @Transactional
   public void unRegister(Long uid) throws Exception {
      LoginUser user = loginUserDao.find(LoginUser.class, uid+"");
      if (user == null) {
         throw new Exception("用户不存在");
      }
      if (user.getState() != LoginUser.STATE_NORMAL) {
         throw new Exception("账户已被注销");
      }
      user.setState(LoginUser.STATE_UNREGISTER);
      loginUserDao.update(user);
   }
                //更新微信信息
                loginUser.setWxUnionId(dto.getWeiXinUser().getUnionid());
   // 邮箱注册
   public String registerByEmail(final LoginUser user) {
      return userDao.excute(new HibernateCallback<String>() {
         @SuppressWarnings("unchecked")
         public String doInHibernate(Session session) throws HibernateException {
            List<LoginUser> list = session.createQuery("from LoginUser lu where lu.openid=? and lu.loginType=?")
                  .setParameter(0, user.getOpenid()).setParameter(1, user.getLoginType()).list();
            if (list != null && list.size() > 0)
               return "该邮箱已注册";
            try {
               session.getTransaction().begin();
               session.save(user);
               session.flush();
               session.getTransaction().commit();
               return "注册成功";
            } catch (Exception e) {
               return "注册失败";
            }
         }
      }) + "";
   }
                loginUserExtra = new LoginUserExtra(loginUser.getId());
                loginUserExtra.setWxPortrait(dto.getWeiXinUser().getHeadimgurl());
                loginUserExtra.setWxOpenId(dto.getWeiXinUser().getOpenid());
                loginUserExtra.setWxNickName(dto.getWeiXinUser().getNickname());
                loginUserExtra.setWxSex(dto.getWeiXinUser().getSex());
                loginUserExtra.setWxUnionId(dto.getWeiXinUser().getUnionid());
            }
            break;
            case LoginUser.LOGIN_TYPE_PHONE: {
   /**
    * 邮箱登录
    *
    * @param user
    * @return
    */
   public LoginUser loginByEmail(final LoginUser user) {
      return (LoginUser) userDao.excute(new HibernateCallback<LoginUser>() {
         @SuppressWarnings("unchecked")
         public LoginUser doInHibernate(Session session) throws HibernateException {
            List<LoginUser> list = session.createQuery("from LoginUser lu where lu.openid=? and lu.loginType=?")
                  .setParameter(0, user.getOpenid()).setParameter(1, user.getLoginType()).list();
            if (list != null && list.size() > 0) {
               if (list.get(0).getPwd().equalsIgnoreCase(user.getPwd()))
                  return list.get(0);
            }
            return null;
         }
      });
   }
                if (StringUtil.isNullOrEmpty(dto.getPhone())) {
                    throw new LoginUserException(LoginUserException.CODE_PARAMS_NOT_ENOUGH, "手机号为空");
                }
                List<LoginUser> userList = loginUserDao.list("from LoginUser lu where lu.systemId=? and lu.phone=? and lu.state=?", dto.getSystemId(), dto.getPhone(), LoginUser.STATE_NORMAL);
                if (userList == null || userList.size() == 0) {
                    throw new LoginUserException(LoginUserException.CODE_NO_USER, "用户不存在");
                }
                loginUser = userList.get(0);
                loginUserExtra = new LoginUserExtra(loginUser.getId());
            }
            break;
        }
        if (loginUser != null) {
            loginUser.setLoginType(dto.getLoginType());
            loginUserDao.update(loginUser);
        }
        if (loginUserExtra != null) {
            loginUserExtraDao.updateSelective(loginUserExtra);
        }
        return loginUser;
    }
    /**
     * 注册
     *
     * @param dto
     */
    public LoginUser register(LoginInfoDto dto) throws RegisterUserException {
        LoginUser loginUser = null;
        LoginUserExtra loginUserExtra = null;
        switch (dto.getLoginType()) {
            case LoginUser.LOGIN_TYPE_EMAIL: {
                if (StringUtil.isNullOrEmpty(dto.getEmail()) || StringUtil.isNullOrEmpty(dto.getPwd())) {
                    throw new RegisterUserException(RegisterUserException.CODE_PARAMS_NOT_ENOUGH, "邮箱和密码不能为空");
                }
                List<LoginUser> userList = loginUserDao.list("from LoginUser lu where lu.systemId=? and lu.email=? and lu.state=?", dto.getSystemId(), dto.getEmail(), LoginUser.STATE_NORMAL);
                if (userList != null && userList.size() > 0) {
                    throw new RegisterUserException(RegisterUserException.CODE_USER_EXIST, "用户已存在");
                }
                loginUser = new LoginUser();
                loginUser.setLoginType(LoginUser.LOGIN_TYPE_EMAIL);
                loginUser.setEmail(dto.getEmail());
                loginUser.setPwd(dto.getPwd());
                loginUser.setName(dto.getNickName());
                loginUser.setState(LoginUser.STATE_NORMAL);
                loginUser.setSystemId(dto.getSystemId());
                loginUserExtra = new LoginUserExtra();
                loginUserExtra.setEmail(dto.getEmail());
            }
            break;
            case LoginUser.LOGIN_TYPE_QQ: {
                if (dto.getQqUserInfo() == null || StringUtil.isNullOrEmpty(dto.getQqUserInfo().getOpenId())) {
                    throw new RegisterUserException(RegisterUserException.CODE_PARAMS_NOT_ENOUGH, "QQ授权信息为空");
                }
                List<LoginUser> userList = loginUserDao.list("from LoginUser lu where lu.systemId=? and lu.qqOpenId=? and lu.state=?", dto.getSystemId(), dto.getQqUserInfo().getOpenId(), LoginUser.STATE_NORMAL);
                if (userList != null && userList.size() > 0) {
                    throw new RegisterUserException(RegisterUserException.CODE_USER_EXIST, "用户已存在");
                }
                loginUser = new LoginUser();
                loginUser.setLoginType(LoginUser.LOGIN_TYPE_QQ);
                loginUser.setQqOpenId(dto.getQqUserInfo().getOpenId());
                loginUser.setName(dto.getQqUserInfo().getName());
                loginUser.setPortrait(dto.getQqUserInfo().getPortrait());
                loginUserExtra = new LoginUserExtra();
                loginUserExtra.setQqPortrait(dto.getQqUserInfo().getPortrait());
                loginUserExtra.setQqOpenId(dto.getQqUserInfo().getOpenId());
                loginUserExtra.setQqNickName(dto.getQqUserInfo().getName());
            }
            break;
            case LoginUser.LOGIN_TYPE_WX: {
                if (dto.getWeiXinUser() == null || StringUtil.isNullOrEmpty(dto.getWeiXinUser().getOpenid())) {
                    throw new RegisterUserException(RegisterUserException.CODE_PARAMS_NOT_ENOUGH, "微信授权信息为空");
                }
                List<LoginUser> userList = loginUserDao.list("from LoginUser lu where lu.systemId=? and lu.wxOpenId=? and lu.state=?", dto.getSystemId(), dto.getWeiXinUser().getOpenid(), LoginUser.STATE_NORMAL);
                if (userList != null && userList.size() > 0) {
                    throw new RegisterUserException(RegisterUserException.CODE_USER_EXIST, "用户已存在");
                }
                loginUser = new LoginUser();
                loginUser.setLoginType(LoginUser.LOGIN_TYPE_WX);
                loginUser.setWxUnionId(dto.getWeiXinUser().getUnionid());
                loginUser.setName(dto.getWeiXinUser().getNickname());
                loginUser.setWxOpenId(dto.getWeiXinUser().getOpenid());
                loginUser.setPortrait(dto.getWeiXinUser().getHeadimgurl());
                loginUserExtra = new LoginUserExtra();
                loginUserExtra.setWxPortrait(dto.getWeiXinUser().getHeadimgurl());
                loginUserExtra.setWxOpenId(dto.getWeiXinUser().getOpenid());
                loginUserExtra.setWxNickName(dto.getWeiXinUser().getNickname());
                loginUserExtra.setWxSex(dto.getWeiXinUser().getSex());
                loginUserExtra.setWxUnionId(dto.getWeiXinUser().getUnionid());
            }
            break;
            case LoginUser.LOGIN_TYPE_PHONE: {
                if (StringUtil.isNullOrEmpty(dto.getPhone())) {
                    throw new RegisterUserException(RegisterUserException.CODE_PARAMS_NOT_ENOUGH, "手机号为空");
                }
                List<LoginUser> userList = loginUserDao.list("from LoginUser lu where lu.systemId=? and lu.phone=? and lu.state=?", dto.getSystemId(), dto.getPhone(), LoginUser.STATE_NORMAL);
                if (userList != null && userList.size() > 0) {
                    throw new RegisterUserException(RegisterUserException.CODE_USER_EXIST, "用户已存在");
                }
                loginUser = new LoginUser();
                loginUser.setLoginType(LoginUser.LOGIN_TYPE_PHONE);
                loginUser.setName(null);
                loginUser.setPhone(dto.getPhone());
                loginUserExtra = new LoginUserExtra();
            }
            break;
        }
        if (loginUser == null) {
            throw new RegisterUserException(RegisterUserException.CODE_PARAMS_NOT_ENOUGH, "注册类型出错");
        }
        loginUser.setIpinfo(dto.getIpInfo());
        loginUser.setState(LoginUser.STATE_NORMAL);
        loginUser.setSystemId(dto.getSystemId());
        loginUser.setCreatetime(System.currentTimeMillis() + "");
        Serializable uid = loginUserDao.save(loginUser);
        loginUser.setId(uid + "");
        if (StringUtil.isNullOrEmpty(loginUser.getName())) {
            //设置默认用户昵称
            String nickName = "无名氏";
            LoginUser update = new LoginUser();
            update.setId(uid + "");
            update.setName(nickName);
            loginUserDao.updateSelective(update);
        }
        loginUserExtra.setId(loginUser.getId());
        loginUserExtra.setCreateTime(new Date());
        loginUserService.initExtra(loginUserExtra);
        return loginUser;
    }
    public LoginUser getLoginUser(String id) {
        return loginUserDao.find(LoginUser.class, id);
    }
    public LoginUser getLoginUserByOpenId(String openid) {
        List<LoginUser> list = loginUserDao.list("from LoginUser lu where lu.openid=?", new Serializable[]{openid});
        if (list != null && list.size() > 0)
            return list.get(0);
        return null;
    }
    /**
     * 用户注销
     *
     * @param uid
     */
    @Transactional
    public void unRegister(Long uid) throws Exception {
        LoginUser user = loginUserDao.find(LoginUser.class, uid + "");
        if (user == null) {
            throw new Exception("用户不存在");
        }
        if (user.getState() != LoginUser.STATE_NORMAL) {
            throw new Exception("账户已被注销");
        }
        user.setState(LoginUser.STATE_UNREGISTER);
        loginUserDao.update(user);
    }
    // 邮箱注册
    public String registerByEmail(final LoginUser user) {
        return userDao.excute(new HibernateCallback<String>() {
            @SuppressWarnings("unchecked")
            public String doInHibernate(Session session) throws HibernateException {
                List<LoginUser> list = session.createQuery("from LoginUser lu where lu.openid=? and lu.loginType=?")
                        .setParameter(0, user.getOpenid()).setParameter(1, user.getLoginType()).list();
                if (list != null && list.size() > 0)
                    return "该邮箱已注册";
                try {
                    user.setState(LoginUser.STATE_NORMAL);
                    session.getTransaction().begin();
                    session.save(user);
                    session.flush();
                    session.getTransaction().commit();
                    return "注册成功";
                } catch (Exception e) {
                    return "注册失败";
                }
            }
        }) + "";
    }
    /**
     * 邮箱登录
     *
     * @param user
     * @return
     */
    public LoginUser loginByEmail(final LoginUser user) {
        return (LoginUser) userDao.excute(new HibernateCallback<LoginUser>() {
            @SuppressWarnings("unchecked")
            public LoginUser doInHibernate(Session session) throws HibernateException {
                List<LoginUser> list = session.createQuery("from LoginUser lu where lu.email=?")
                        .setParameter(0, user.getOpenid()).list();
                if (list != null && list.size() > 0) {
                    if (list.get(0).getPwd().equalsIgnoreCase(user.getPwd()))
                        return list.get(0);
                }
                return null;
            }
        });
    }
}