|
|
@@ -12,6 +12,8 @@ import com.fs.common.core.domain.R;
|
|
|
import com.fs.common.core.redis.RedisCache;
|
|
|
import com.fs.common.exception.ServiceException;
|
|
|
import com.fs.common.service.ISmsService;
|
|
|
+import com.fs.common.utils.ServletUtils;
|
|
|
+import com.fs.common.utils.ip.IpUtils;
|
|
|
import com.fs.common.utils.sign.Md5Utils;
|
|
|
import com.fs.core.config.WxOpenProperties;
|
|
|
import com.fs.his.config.FsSysConfig;
|
|
|
@@ -185,10 +187,13 @@ public class AppLoginController extends AppBaseController{
|
|
|
}
|
|
|
user.setUnionId(unionid);
|
|
|
user.setCreateTime(new Date());
|
|
|
+ user.setAppId(openProperties.getAppId());
|
|
|
user.setStatus(1);
|
|
|
if (StringUtils.isNotEmpty(param.getJpushId())) {
|
|
|
user.setJpushId(param.getJpushId());
|
|
|
}
|
|
|
+ String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest());
|
|
|
+ user.setLastIp(ipAddr);
|
|
|
userService.insertFsUser(user);
|
|
|
map.put("isNew", true);
|
|
|
map.put("unionid",unionid);
|
|
|
@@ -219,16 +224,61 @@ public class AppLoginController extends AppBaseController{
|
|
|
|
|
|
@ApiOperation("绑定手机号")
|
|
|
@PostMapping("/setPhone")
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public R setPhone(@Validated @RequestBody FsUserEditPhoneParam param) {
|
|
|
logger.info("fcj 绑定手机号入参:{}", param);
|
|
|
FsUser user = userService.selectFsUserByUnionid(param.getUnionId());
|
|
|
if (user==null){
|
|
|
return R.error("用户数据不存在");
|
|
|
}
|
|
|
+ //验证码绑定,需要校验验证码
|
|
|
+ if (param.getBindType()!=null){
|
|
|
+ String redisCode = redisCache.getCacheObject("sms:code:" + param.getPhone());
|
|
|
+ if (StringUtils.isEmpty(redisCode)){
|
|
|
+ return R.error("验证码已过期,请重新发送");
|
|
|
+ }
|
|
|
+ if (!redisCode.equals(param.getCode())) {
|
|
|
+ return R.error("验证码错误");
|
|
|
+ }
|
|
|
+ redisCache.deleteObject("sms:code:" + param.getPhone());
|
|
|
+ }
|
|
|
FsUser userMap = findUserByPhone(param.getPhone());
|
|
|
-// if (userMap!=null){
|
|
|
-// return R.error("该手机号已绑定其他账号");
|
|
|
-// }
|
|
|
+ //绑定的手机号已存在用户的情况,将微信登录的时候创建的新号的UnionId移动到老号中,删除新号(将两个号合并)
|
|
|
+ if (userMap!=null){
|
|
|
+ if (userMap.getUserId().equals(user.getUserId())) {
|
|
|
+ user.setPhone(param.getPhone());
|
|
|
+ user.setLoginDevice(param.getLoginDevice());
|
|
|
+ user.setSource(param.getSource());
|
|
|
+ String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest());
|
|
|
+ user.setLastIp(ipAddr);
|
|
|
+ userService.updateFsUser(user);
|
|
|
+ return generateTokenAndReturn(user);
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotEmpty(userMap.getUnionId())&&!userMap.getUnionId().equals(user.getUnionId())){
|
|
|
+ return R.error("该手机号已绑定其他微信");
|
|
|
+ }
|
|
|
+ //如果存在手机号也有用户,微信也有用户,保留创建时间比较久的用户
|
|
|
+ FsUser keepUser;
|
|
|
+ FsUser deleteUser;
|
|
|
+ if (userMap.getCreateTime().before(user.getCreateTime())){
|
|
|
+ keepUser = userMap;
|
|
|
+ deleteUser = user;
|
|
|
+ }else {
|
|
|
+ keepUser = user;
|
|
|
+ deleteUser = userMap;
|
|
|
+ }
|
|
|
+ keepUser.setLoginDevice(param.getLoginDevice() != null ? param.getLoginDevice() : null);
|
|
|
+ keepUser.setSource(param.getSource());
|
|
|
+ keepUser.setUnionId(user.getUnionId());
|
|
|
+ keepUser.setPhone(param.getPhone());
|
|
|
+ String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest());
|
|
|
+ keepUser.setLastIp(ipAddr);
|
|
|
+ if (userService.updateFsUser(keepUser)>0){
|
|
|
+ userService.realDeleteFsUserByUserId(deleteUser.getUserId());
|
|
|
+ return generateTokenAndReturn(keepUser);
|
|
|
+ }
|
|
|
+ return R.error("绑定手机号失败");
|
|
|
+ }
|
|
|
user.setPhone(param.getPhone());
|
|
|
user.setLoginDevice(param.getLoginDevice() != null ? param.getLoginDevice() : null );
|
|
|
user.setSource(param.getSource()!= null ? param.getSource() : null);
|
|
|
@@ -237,6 +287,8 @@ public class AppLoginController extends AppBaseController{
|
|
|
userMap.setSource(param.getSource());
|
|
|
userMap.setUserId(user.getUserId());
|
|
|
userMap.setPhone(param.getPhone());
|
|
|
+ String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest());
|
|
|
+ userMap.setLastIp(ipAddr);
|
|
|
if (userService.updateFsUser(userMap)>0){
|
|
|
return generateTokenAndReturn(user);
|
|
|
}
|
|
|
@@ -245,10 +297,14 @@ public class AppLoginController extends AppBaseController{
|
|
|
|
|
|
@ApiOperation("绑定微信")
|
|
|
@PostMapping("/bindWeChat")
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public R bindWeChat(@Validated @RequestBody FsUserEditUnionidParam param) {
|
|
|
try {
|
|
|
logger.info("zyp app绑定微信,param:{}", param);
|
|
|
Map result = WxUtil.getAccessToken(param.getCode(), openProperties.getAppId(), openProperties.getSecret());
|
|
|
+ if (!result.containsKey("access_token")) {
|
|
|
+ return R.error("微信授权失败");
|
|
|
+ }
|
|
|
String accessToken = result.get("access_token").toString();
|
|
|
String unionid = result.get("unionid").toString();
|
|
|
String openid = result.get("openid").toString();
|
|
|
@@ -259,21 +315,63 @@ public class AppLoginController extends AppBaseController{
|
|
|
FsUser user = findUserByPhone(param.getPhone());
|
|
|
if (user!=null && StringUtils.isEmpty(user.getUnionId())){
|
|
|
FsUser userByUnionId = userMapper.selectFsUserByUnionid(unionid);
|
|
|
-// if (userByUnionId!=null){
|
|
|
-// return R.error("该微信已绑定其他用户,请勿重复绑定!");
|
|
|
-// }
|
|
|
- user.setSource(param.getSource() != null ? param.getSource() : null );
|
|
|
- user.setLoginDevice(param.getLoginDevice() != null ? param.getLoginDevice() : null);
|
|
|
- user.setNickName(nickname);
|
|
|
- user.setAvatar(avatar);
|
|
|
- user.setSex(sex);
|
|
|
- user.setUnionId(unionid);
|
|
|
- if (userService.updateFsUser(user)>0){
|
|
|
- return generateTokenAndReturn(user);
|
|
|
+ //绑定的微信已存在用户的情况,将手机号一键登录的时候创建的新号的手机号移动到老号中,删除新号(将两个号合并)
|
|
|
+ if (userByUnionId!=null){
|
|
|
+ if (StringUtils.isNotEmpty(userByUnionId.getPhone())&&!user.getPhone().equals(userByUnionId.getPhone())){
|
|
|
+ return R.error("该微信已绑定其他手机号");
|
|
|
+ }
|
|
|
+ if (userByUnionId.getUserId().equals(user.getUserId())) {
|
|
|
+ user.setPhone(param.getPhone());
|
|
|
+ user.setLoginDevice(param.getLoginDevice());
|
|
|
+ user.setSource(param.getSource());
|
|
|
+ user.setUnionId(unionid);
|
|
|
+ String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest());
|
|
|
+ user.setLastIp(ipAddr);
|
|
|
+ userService.updateFsUser(user);
|
|
|
+ return generateTokenAndReturn(user);
|
|
|
+ }
|
|
|
+ FsUser keepUser;
|
|
|
+ FsUser deleteUser;
|
|
|
+ if (user.getCreateTime().before(userByUnionId.getCreateTime())){
|
|
|
+ keepUser = user;
|
|
|
+ deleteUser = userByUnionId;
|
|
|
+ } else {
|
|
|
+ keepUser = userByUnionId;
|
|
|
+ deleteUser = user;
|
|
|
+ }
|
|
|
+ keepUser.setUnionId(unionid);
|
|
|
+ keepUser.setPhone(param.getPhone());
|
|
|
+ keepUser.setSource(param.getSource() != null ? param.getSource() : null );
|
|
|
+ keepUser.setLoginDevice(param.getLoginDevice() != null ? param.getLoginDevice() : null);
|
|
|
+ keepUser.setNickName(nickname);
|
|
|
+ keepUser.setAvatar(avatar);
|
|
|
+ keepUser.setSex(sex);
|
|
|
+ String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest());
|
|
|
+ keepUser.setLastIp(ipAddr);
|
|
|
+ if (userService.updateFsUser(keepUser)>0){
|
|
|
+ userService.realDeleteFsUserByUserId(deleteUser.getUserId());
|
|
|
+ return generateTokenAndReturn(keepUser);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return R.error("绑定微信失败");
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ user.setSource(param.getSource() != null ? param.getSource() : null );
|
|
|
+ user.setLoginDevice(param.getLoginDevice() != null ? param.getLoginDevice() : null);
|
|
|
+ user.setNickName(nickname);
|
|
|
+ user.setAvatar(avatar);
|
|
|
+ user.setSex(sex);
|
|
|
+ user.setUnionId(unionid);
|
|
|
+ user.setAppOpenId(openid);
|
|
|
+ String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest());
|
|
|
+ user.setLastIp(ipAddr);
|
|
|
+ if (userService.updateFsUser(user)>0){
|
|
|
+ return generateTokenAndReturn(user);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return R.error("绑定微信失败");
|
|
|
+ }
|
|
|
}
|
|
|
-// else {
|
|
|
-// return R.error("绑定微信失败");
|
|
|
-// }
|
|
|
}
|
|
|
return R.error("数据参数异常!");
|
|
|
}catch (Exception e){
|
|
|
@@ -282,10 +380,16 @@ public class AppLoginController extends AppBaseController{
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
private void updateExistingUserJpushId(FsUser user, String jpushId) {
|
|
|
FsUser userMap = new FsUser();
|
|
|
userMap.setUserId(user.getUserId());
|
|
|
userMap.setJpushId(jpushId);
|
|
|
+ if (StringUtils.isNotEmpty(user.getAppOpenId())) {
|
|
|
+ userMap.setAppOpenId(user.getAppOpenId());
|
|
|
+ }
|
|
|
+ String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest());
|
|
|
+ userMap.setLastIp(ipAddr);
|
|
|
userService.updateFsUser(userMap);
|
|
|
}
|
|
|
|
|
|
@@ -329,20 +433,30 @@ public class AppLoginController extends AppBaseController{
|
|
|
}
|
|
|
|
|
|
private R handleLoginType3(FsUserLoginParam param) {
|
|
|
- if (StringUtils.isEmpty(param.getPhone())) {
|
|
|
- return R.error("获取手机号失败");
|
|
|
- }
|
|
|
// 根据手机号查询用户
|
|
|
- FsUser user = findUserByPhone(param.getPhone());
|
|
|
- if (user == null) {
|
|
|
- createNewUser(param);
|
|
|
+ FsUser user = null;
|
|
|
+ List<FsUser> usersByPhone = findUsersByPhone(param.getPhone());
|
|
|
+ if (CollectionUtil.isEmpty(usersByPhone)){
|
|
|
+ FsUser newUser = createNewUser(param);
|
|
|
+ if (StringUtils.isNotEmpty(newUser.getJpushId())) {
|
|
|
+// try {
|
|
|
+// //发送注册优惠券
|
|
|
+// fsUserCouponService.sendRegisterCoupon(newUser);
|
|
|
+// } catch (Exception e) {
|
|
|
+// logger.error("发送注册优惠券失败:{}",e.getMessage());
|
|
|
+// }
|
|
|
+ }
|
|
|
return R.ok().put("isNew",true).put("phone",encryptPhone(param.getPhone()));
|
|
|
- } else {
|
|
|
+ }
|
|
|
+ if (usersByPhone.size()==1){
|
|
|
+ user = usersByPhone.get(0);
|
|
|
if (user.getUnionId()==null){
|
|
|
if (user.getPhone().length()<=11){
|
|
|
FsUser fsUser = new FsUser();
|
|
|
fsUser.setUserId(user.getUserId());
|
|
|
fsUser.setPhone(encryptPhone(param.getPhone()));
|
|
|
+ String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest());
|
|
|
+ fsUser.setLastIp(ipAddr);
|
|
|
userMapper.updateFsUser(fsUser);
|
|
|
logger.info("zyp \n【手机加密】:{}",encryptPhone(param.getPhone()));
|
|
|
}
|
|
|
@@ -350,11 +464,33 @@ public class AppLoginController extends AppBaseController{
|
|
|
}
|
|
|
if (StringUtils.isNotEmpty(param.getJpushId())) {
|
|
|
updateExistingUserJpushId(user, param.getJpushId());
|
|
|
+// try {
|
|
|
+// //发送注册优惠券
|
|
|
+// fsUserCouponService.sendRegisterCoupon(user);
|
|
|
+// } catch (Exception e) {
|
|
|
+// logger.error("发送注册优惠券失败:{}",e.getMessage());
|
|
|
+// }
|
|
|
}
|
|
|
+ }else {
|
|
|
+ return R.ok().put("users",usersByPhone);
|
|
|
}
|
|
|
return generateTokenAndReturn(user);
|
|
|
}
|
|
|
|
|
|
+ private List<FsUser> findUsersByPhone(String phone) {
|
|
|
+ // 先根据加密手机号查询用户
|
|
|
+ String jiami = (encryptPhone(phone));
|
|
|
+ List<FsUser> fsUsers = userMapper.selectFsUsersByPhoneLimitOne(jiami);
|
|
|
+ if (CollectionUtil.isEmpty(fsUsers)) {
|
|
|
+ fsUsers = userMapper.selectFsUsersByPhoneLimitOne(encryptPhoneOldKey(phone));
|
|
|
+ }
|
|
|
+ // 如果没有找到用户,再根据手机号查询
|
|
|
+ if (CollectionUtil.isEmpty(fsUsers)) {
|
|
|
+ fsUsers = userMapper.selectFsUsersByPhoneLimitOne(phone);
|
|
|
+
|
|
|
+ }
|
|
|
+ return fsUsers;
|
|
|
+ }
|
|
|
private FsUser createNewUser(FsUserLoginParam param) {
|
|
|
FsUser newUser = new FsUser();
|
|
|
newUser.setLoginDevice(param.getLoginDevice() != null ? param.getLoginDevice() : null);
|
|
|
@@ -436,13 +572,13 @@ public class AppLoginController extends AppBaseController{
|
|
|
public R sendCode(@RequestBody Map<String, String> body){
|
|
|
String phone = body.get("phone");
|
|
|
String encryptPhone = encryptPhone(phone);
|
|
|
- List<FsUser> user = userService.selectFsUserListByPhone(encryptPhone);
|
|
|
- if(CollectionUtil.isEmpty(user)){
|
|
|
- user = userService.selectFsUserListByPhone(encryptPhoneOldKey(phone));
|
|
|
- }
|
|
|
- if (CollectionUtil.isEmpty(user)){
|
|
|
- return R.error("此电话号码未绑定用户");
|
|
|
- }
|
|
|
+// List<FsUser> user = userService.selectFsUserListByPhone(encryptPhone);
|
|
|
+// if(CollectionUtil.isEmpty(user)){
|
|
|
+// user = userService.selectFsUserListByPhone(encryptPhoneOldKey(phone));
|
|
|
+// }
|
|
|
+// if (CollectionUtil.isEmpty(user)){
|
|
|
+// return R.error("此电话号码未绑定用户");
|
|
|
+// }
|
|
|
|
|
|
// 验证码 key(3分钟有效)
|
|
|
String smsCodeKey = "sms:code:" + phone;
|