123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- package com.qxgmat.service;
- import com.github.pagehelper.Page;
- import com.nuliji.tools.AbstractService;
- import com.nuliji.tools.Tools;
- import com.nuliji.tools.Transform;
- import com.nuliji.tools.exception.ParameterException;
- import com.nuliji.tools.exception.SystemException;
- import com.nuliji.tools.mybatis.Example;
- import com.nuliji.tools.third.OauthData;
- import com.qxgmat.data.constants.enums.status.DirectionStatus;
- import com.qxgmat.data.dao.UserMapper;
- import com.qxgmat.data.dao.entity.User;
- import com.qxgmat.help.WechatHelp;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import javax.annotation.Resource;
- import java.beans.Transient;
- import java.util.Collection;
- import java.util.List;
- import java.util.Objects;
- /**
- * Created by GaoJie on 2017/11/1.
- */
- @Service
- public class UsersService extends AbstractService {
- final public String PLATORM_WECHAT_NATIVE = "wechat_openid_wechat";
- final public String PLATORM_WECHAT_PC = "wechat_openid_pc";
- final public String PLATORM_WECHAT = "wechat_unionid";
- @Resource
- private UserMapper userMapper;
- @Resource
- private WechatHelp wechatHelp;
- @Transactional
- public User Oauth(User user, String code, String platform){
- OauthData data;
- switch(platform){
- case "wechat_pc":
- data = wechatHelp.oauthPc(code);
- break;
- case "wechat_native":
- data = wechatHelp.oauthNative(code);
- break;
- default:
- throw new ParameterException("第三方平台"+platform+"不支持");
- }
- // 获取已关联的账号
- if (user == null){
- user = getByOpen(data.getOpenId(), data.getUnionId(), platform);
- } else {
- // 不需要校验是否已绑定,注册账号必定需要手机号
- // User openUser = getByOpen(data.getOpenId(), data.getUnionId(), platform);
- // if(openUser != null && openUser.getMobile().equals(user.getMobile())){
- // throw new ParameterException("第三方平台"+platform+"不支持");
- // }
- }
- if (user == null){
- user = new User();
- user.setAvatar(data.getAvatar());
- user.setNickname(data.getNickName());
- }
- switch(platform){
- case "wechat_pc":
- user.setWechatOpenidPc(data.getOpenId());
- user.setWechatUnionid(data.getUnionId());
- break;
- case "wechat_native":
- user.setWechatOpenidWechat(data.getOpenId());
- user.setWechatUnionid(data.getUnionId());
- user.setWechatAccessToken(data.getAccessToken());
- user.setWechatRefreshToken(data.getRefreshToken());
- user.setWechatExpireTime(data.getExpiresTime());
- break;
- }
- if (!user.getMobile().isEmpty()){
- // 直接更新数据
- edit(user);
- }
- return user;
- }
- @Transactional
- public User register(String mobile, String inviteCode, User openUser){
- User user = getByMobile(mobile);
- if (user != null){
- throw new ParameterException("手机号已注册");
- }
- // 注册,并且绑定邀请者
- user = User.builder().mobile(mobile).build();
- if (inviteCode != null && !inviteCode.isEmpty()){
- User origin = getByInviteCode(inviteCode);
- user.setOriginId(origin.getId());
- // todo 按逻辑进行奖励
- }
- // 绑定第三方登录信息
- if (openUser != null){
- user.setWechatOpenidPc(openUser.getWechatOpenidPc());
- user.setWechatOpenidWechat(openUser.getWechatOpenidWechat());
- user.setWechatExpireTime(openUser.getWechatExpireTime());
- user.setWechatUnionid(openUser.getWechatUnionid());
- user.setWechatAccessToken(openUser.getWechatAccessToken());
- user.setWechatRefreshToken(openUser.getWechatRefreshToken());
- user.setNickname(openUser.getNickname());
- user.setAvatar(openUser.getAvatar());
- }
- // 生成邀请码: 10位字符串
- user.setInviteCode(Tools.getRandomString(10));
- user = add(user);
- if(user == null)
- throw new SystemException("注册失败");
- return user;
- }
- public User getByMobile(String mobile){
- User user = User.builder().mobile(mobile).build();
- return one(userMapper, user);
- }
- public User getByOpen(String openId, String unionId, String platform){
- String platformField;
- String unionField;
- switch(platform){
- case "wechat_pc":
- platformField = PLATORM_WECHAT_PC;
- unionField = PLATORM_WECHAT;
- break;
- case "wechat_native":
- platformField = PLATORM_WECHAT_NATIVE;
- unionField = PLATORM_WECHAT;
- break;
- default:
- throw new ParameterException("第三方平台"+platform+"不支持");
- }
- Example example = new Example(User.class);
- example.or(
- example.createCriteria()
- .andEqualTo(platformField, openId)
- );
- if (unionId != null && !unionId.isEmpty()){
- example.or(
- example.createCriteria()
- .andEqualTo(unionField, unionId)
- );
- }
- return one(userMapper, example);
- }
- public boolean equalsPassword(User user, String password){
- return Objects.equals(user.getPassword(), Tools.stringMD5(Tools.stringMD5(password)));
- }
- public boolean changePassword(User user, String password){
- User updateUser = User.builder().id(user.getId()).password(Tools.stringMD5(Tools.stringMD5(password))).build();
- int result = update(userMapper, updateUser);
- return result > 0;
- }
- public User getByInviteCode(String inviteCode){
- User user = new User();
- Example example = new Example(User.class);
- // 查找手机或邀请码
- example.and(
- example.createCriteria()
- .orEqualTo("invite_code", inviteCode)
- .orEqualTo("mobile", inviteCode)
- );
- return one(userMapper, example);
- }
- public User add(User user){
- if(user.getPassword() != null) user.setPassword(Tools.stringMD5(user.getPassword()));
- int result = insert(userMapper, user);
- user = one(userMapper, user.getId());
- if(user == null){
- throw new SystemException("用户添加失败");
- }
- return user;
- }
- public User edit(User user){
- User in = one(userMapper, user.getId());
- if(in == null){
- throw new ParameterException("用户不存在");
- }
- if(user.getPassword() != null) user.setPassword(Tools.stringMD5(user.getPassword()));
- int result = update(userMapper, user);
- return user;
- }
- public boolean delete(Number id){
- User in = one(userMapper, id);
- if(in == null){
- throw new ParameterException("用户不存在");
- }
- int result = delete(userMapper, id);
- return result > 0;
- }
- public User selectOne(Number id){
- User in = one(userMapper, id);
- if(in == null){
- throw new ParameterException("用户不存在");
- }
- return in;
- }
- public Page<User> select(int page, int pageSize){return select(userMapper, page, pageSize);
- }
- public Page<User> select(int page, int pageSize, String keyword, Boolean real, String order, DirectionStatus direction){
- Example example = new Example(User.class);
- if(!keyword.isEmpty())
- example.and(
- example.createCriteria()
- .orLike("id", "%"+keyword+"%")
- .orLike("mobile", "%"+keyword+"%")
- );
- if (real != null)
- example.and(
- example.createCriteria().andEqualTo("realStatus", real?1:0)
- );
- if(order.isEmpty()) order = "id";
- if (direction != null){
- switch(direction){
- case ASC:
- example.orderBy(order).asc();
- break;
- case DESC:
- default:
- example.orderBy(order).desc();
- }
- } else {
- example.orderBy(order).desc();
- }
- return select(userMapper, example, page, pageSize);
- }
- public List<User> select(Collection ids){
- return select(userMapper, ids);
- }
- }
|