package com.yeshi.buwan.service.imp;
|
|
import com.yeshi.buwan.dao.user.LoginUserDao;
|
import com.yeshi.buwan.dao.user.LoginUserExtraDao;
|
import com.yeshi.buwan.domain.user.LoginUser;
|
import com.yeshi.buwan.domain.user.LoginUserExtra;
|
import com.yeshi.buwan.exception.LoginUserException;
|
import com.yeshi.buwan.service.inter.LoginUserService;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.yeshi.utils.entity.wx.WeiXinUser;
|
|
import javax.annotation.Resource;
|
import java.util.Date;
|
|
@Service
|
public class LoginUserServiceImpl implements LoginUserService {
|
|
@Resource
|
private LoginUserDao loginUserDao;
|
|
@Resource
|
private LoginUserExtraDao loginUserExtraDao;
|
|
|
@Override
|
public void initExtra(LoginUserExtra extra) {
|
if (extra.getCreateTime() == null)
|
extra.setCreateTime(new Date());
|
loginUserExtraDao.save(extra);
|
}
|
|
@Override
|
public LoginUser getLoginUser(String id) {
|
return loginUserDao.find(LoginUser.class, id);
|
}
|
|
@Override
|
public LoginUser getLoginUserByOpenId(String systemId, String openid) {
|
return loginUserDao.findOne("from LoginUser u where u.systemId=? and u.openid=?", systemId, openid);
|
}
|
|
@Override
|
public LoginUser getLoginUserByEmail(String systemId, String email) {
|
return loginUserDao.findOne("from LoginUser u where u.systemId=? and u.email=?", systemId, email);
|
}
|
|
@Override
|
public LoginUser getLoginUserByQQOpenId(String systemId, String openId) {
|
return loginUserDao.findOne("from LoginUser u where u.systemId=? and u.qqOpenId=?", systemId, openId);
|
}
|
|
@Override
|
public LoginUser getLoginUserByWxUnionId(String systemId, String unionId) {
|
return loginUserDao.findOne("from LoginUser u where u.systemId=? and u.wxUnionId=?", systemId, unionId);
|
}
|
|
@Override
|
public LoginUser getLoginUserByPhone(String systemId, String phone) {
|
return loginUserDao.findOne("from LoginUser u where u.systemId=? and u.phone=?", systemId, phone);
|
}
|
|
@Override
|
public void bindPhone(String loginUid, String phone) throws LoginUserException {
|
LoginUser user = getLoginUser(loginUid);
|
if (user == null) {
|
throw new LoginUserException("用户不存在");
|
}
|
|
LoginUser other = getLoginUserByPhone(user.getSystemId(), phone);
|
if (other != null) {
|
throw new LoginUserException("手机号已被其他账户绑定");
|
}
|
user.setPhone(phone);
|
loginUserDao.update(user);
|
}
|
|
@Transactional(rollbackFor = Exception.class)
|
@Override
|
public void bindQQ(String loginUid, String openId, String nickName, String portrait) throws LoginUserException {
|
|
LoginUser user = getLoginUser(loginUid);
|
if (user == null) {
|
throw new LoginUserException("用户不存在");
|
}
|
|
LoginUser other = getLoginUserByQQOpenId(user.getSystemId(), openId);
|
if (other != null) {
|
throw new LoginUserException("QQ已被其他账户绑定");
|
}
|
|
user.setQqOpenId(openId);
|
loginUserDao.update(user);
|
|
LoginUserExtra extra = new LoginUserExtra();
|
extra.setId(loginUid);
|
extra.setQqNickName(nickName);
|
extra.setQqOpenId(openId);
|
extra.setQqPortrait(portrait);
|
if (loginUserExtraDao.get(loginUid) == null) {
|
initExtra(extra);
|
} else {
|
loginUserExtraDao.updateSelective(extra);
|
}
|
|
|
}
|
|
@Transactional(rollbackFor = Exception.class)
|
@Override
|
public void bindWX(String loginUid, WeiXinUser weiXinUser) throws LoginUserException {
|
LoginUser user = getLoginUser(loginUid);
|
if (user == null) {
|
throw new LoginUserException("用户不存在");
|
}
|
|
LoginUser other = getLoginUserByWxUnionId(user.getSystemId(), weiXinUser.getUnionid());
|
if (other != null) {
|
throw new LoginUserException("微信已被其他账户绑定");
|
}
|
user.setWxOpenId(weiXinUser.getOpenid());
|
user.setWxUnionId(weiXinUser.getUnionid());
|
loginUserDao.update(user);
|
|
LoginUserExtra extra = new LoginUserExtra();
|
extra.setId(loginUid);
|
extra.setWxNickName(weiXinUser.getNickname());
|
extra.setWxOpenId(weiXinUser.getOpenid());
|
extra.setWxUnionId(weiXinUser.getUnionid());
|
extra.setWxPortrait(weiXinUser.getHeadimgurl());
|
extra.setWxSex(weiXinUser.getSex());
|
if (loginUserExtraDao.get(loginUid) == null) {
|
initExtra(extra);
|
} else {
|
loginUserExtraDao.updateSelective(extra);
|
}
|
|
|
}
|
}
|