admin
2024-10-17 b30fb8afd3cd6228bda9b182dc412bb3c8daf69c
src/main/java/com/yeshi/buwan/service/imp/UserService.java
@@ -1,10 +1,18 @@
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 com.yeshi.buwan.service.inter.system.SystemConfigService;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.cache.annotation.Cacheable;
@@ -15,7 +23,7 @@
import com.yeshi.buwan.dao.user.LoginUserDao;
import com.yeshi.buwan.dao.UserDao;
import com.yeshi.buwan.domain.user.LoginUser;
import com.yeshi.buwan.domain.SystemInfo;
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;
@@ -34,18 +42,28 @@
    @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;
    @Resource
    private SystemConfigService systemConfigService;
    // 用户操作
    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 void setNickName(Long uid, String nickName) {
        LoginUser update = new LoginUser();
        update.setId(uid + "");
        update.setName(nickName);
        loginUserDao.updateSelective(update);
    }
    // 获取用户数量
@@ -79,7 +97,7 @@
    }
    public void updateLoginUserInfo(LoginUser lu) {
        loginUserDao.update(lu);
        loginUserDao.updateSelective(lu);
    }
    public String getUid(String device, String system, String imei, String mac, String lat, String lng) {
@@ -155,51 +173,226 @@
    /**
     * 登录
     *
     * @param openid
     * @param detailSystem
     * @param type 1-QQ 2-微信
     * @param portrait
     * @param name
     * @param ipInfo
     * @param dto
     * @return
     * @throws LoginUserException
     */
    @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();
    public LoginUser login(LoginInfoDto dto) throws LoginUserException {
                    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;
                    }
        LoginUser loginUser = null;
                } catch (Exception e) {
                    e.printStackTrace();
                    session.getTransaction().rollback();
        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, "邮箱和密码不能为空");
                }
                return null;
            }
        });
                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, "用户不存在");
                }
                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);
                //更新微信信息
                loginUser.setWxUnionId(dto.getWeiXinUser().getUnionid());
                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: {
                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.updateSelective(loginUser);
        }
        if (loginUserExtra != null) {
            loginUserExtra.setUtdId(dto.getUtdId());
            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(dto.getNickName());
                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())) {
            //TODO 昵称前缀
//            systemConfigService.getConfigValueByKeyCache("");
            //设置默认用户昵称
            String nickName = "ID_" + uid;
            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) {
@@ -210,6 +403,15 @@
        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;
    }
    public LoginUser getValidLoginUserByEmail(String email, String systemId) {
        List<LoginUser> userList = loginUserDao.list("from LoginUser lu where lu.systemId=? and lu.email=? and lu.state=?", systemId, email, LoginUser.STATE_NORMAL);
        if(userList!=null&&userList.size()>0){
             return userList.get(0);
        }
        return null;
    }
@@ -228,7 +430,7 @@
            throw new Exception("账户已被注销");
        }
        user.setState(LoginUser.STATE_UNREGISTER);
        loginUserDao.update(user);
        loginUserDao.updateSelective(user);
    }
    // 邮箱注册
@@ -264,12 +466,13 @@
        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();
                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;
            }
        });