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.user.LoginUserException;
|
import com.yeshi.buwan.exception.PPTVException;
|
import com.yeshi.buwan.pptv.PPTVApiUtil;
|
import com.yeshi.buwan.pptv.PPTVUtil;
|
import com.yeshi.buwan.service.inter.LoginUserService;
|
import org.springframework.stereotype.Service;
|
import org.yeshi.utils.StringUtil;
|
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());
|
extra.setPptvUid(PPTVUtil.getPPTVUid(extra.getId()));
|
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);
|
}
|
|
@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 && !other.getId().equalsIgnoreCase(loginUid)) {
|
throw new LoginUserException("QQ已被其他账户绑定");
|
}
|
LoginUser update = new LoginUser();
|
update.setId(loginUid);
|
update.setQqOpenId(openId);
|
loginUserDao.updateSelective(update);
|
|
LoginUserExtra extra = loginUserExtraDao.get(loginUid);
|
if (extra == null) {
|
extra = new LoginUserExtra();
|
extra.setId(loginUid);
|
}
|
extra.setQqNickName(nickName);
|
extra.setQqOpenId(openId);
|
extra.setQqPortrait(portrait);
|
if (extra.getId() == null) {
|
initExtra(extra);
|
} else {
|
loginUserExtraDao.save(extra);
|
}
|
|
}
|
|
@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 && !other.getId().equalsIgnoreCase(loginUid)) {
|
throw new LoginUserException("微信已被其他账户绑定");
|
}
|
LoginUser update = new LoginUser();
|
update.setId(loginUid);
|
update.setWxOpenId(weiXinUser.getOpenid());
|
update.setWxUnionId(weiXinUser.getUnionid());
|
loginUserDao.updateSelective(update);
|
|
LoginUserExtra extra = null;//loginUserExtraDao.get(loginUid);
|
if (extra == null) {
|
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 {
|
extra.setUpdateTime(new Date());
|
loginUserExtraDao.updateSelective(extra);
|
}
|
|
System.out.println("12213");
|
|
}
|
|
@Override
|
public LoginUserExtra getExtra(String uid) {
|
return loginUserExtraDao.get(uid);
|
}
|
|
@Override
|
public LoginUserExtra initExtra(String uid) {
|
LoginUser user = getLoginUser(uid);
|
if (user == null)
|
return null;
|
LoginUserExtra extra = new LoginUserExtra();
|
extra.setId(uid);
|
extra.setCreateTime(new Date());
|
//之前的用户邮箱登录
|
if (user.getLoginType() == LoginUser.LOGIN_TYPE_QQ) {
|
user.setQqOpenId(user.getOpenid());
|
extra.setQqOpenId(user.getOpenid());
|
extra.setQqPortrait(user.getPortrait());
|
} else if (user.getLoginType() == LoginUser.LOGIN_TYPE_EMAIL) {
|
user.setEmail(user.getOpenid());
|
extra.setEmail(user.getOpenid());
|
} else if (user.getLoginType() == LoginUser.LOGIN_TYPE_WX) {
|
user.setWxOpenId(user.getOpenid());
|
extra.setWxOpenId(user.getOpenid());
|
extra.setWxPortrait(user.getPortrait());
|
}
|
|
extra.setBirthday(user.getBirthday());
|
extra.setSex(user.getSex());
|
extra.setSign(user.getSign());
|
extra.setIpinfo(user.getIpinfo());
|
extra.setDevice(user.getDevice());
|
extra.setPptvUid(PPTVUtil.getPPTVUid(uid));
|
//TODO 初始化附加信息
|
loginUserDao.update(user);
|
loginUserExtraDao.save(extra);
|
return extra;
|
}
|
|
@Override
|
public LoginUserExtra initPPTVUid(String uid) {
|
LoginUserExtra extra = loginUserExtraDao.get(uid);
|
if (extra != null) {
|
LoginUserExtra update = new LoginUserExtra(uid);
|
update.setPptvUid(PPTVUtil.getPPTVUid(uid));
|
loginUserExtraDao.updateSelective(update);
|
extra.setPptvUid(update.getPptvUid());
|
}
|
return extra;
|
}
|
|
@Override
|
public void updateSelectiveByPrimaryKey(LoginUser loginUser) {
|
loginUserDao.updateSelective(loginUser);
|
}
|
|
@Override
|
public void updateSelectiveByPrimaryKey(LoginUserExtra extra) {
|
loginUserExtraDao.updateSelective(extra);
|
}
|
|
@Override
|
public String updatePPTVOpenId(String uid) throws PPTVException {
|
LoginUserExtra extra = getExtra(uid);
|
if (extra == null) {
|
extra = initExtra(uid);
|
}
|
String code = PPTVUtil.getPPTVCode(extra.getPptvUid());
|
|
boolean login = PPTVApiUtil.login(code);
|
if (!login) {
|
throw new PPTVException(101, "登录失败");
|
}
|
|
String openId = PPTVApiUtil.getOpenId(extra.getPptvUid());
|
if (StringUtil.isNullOrEmpty(openId)) {
|
throw new PPTVException(102, "openId获取失败");
|
}
|
LoginUserExtra update = new LoginUserExtra();
|
update.setId(uid);
|
update.setPptvOpenId(openId);
|
updateSelectiveByPrimaryKey(update);
|
return openId;
|
}
|
}
|