diff --git a/yanzhu-api/yanzhu-api-system/src/main/java/com/yanzhu/system/api/RemoteUserService.java b/yanzhu-api/yanzhu-api-system/src/main/java/com/yanzhu/system/api/RemoteUserService.java index 7f7d4e5b..8e8d1005 100644 --- a/yanzhu-api/yanzhu-api-system/src/main/java/com/yanzhu/system/api/RemoteUserService.java +++ b/yanzhu-api/yanzhu-api-system/src/main/java/com/yanzhu/system/api/RemoteUserService.java @@ -1,6 +1,7 @@ package com.yanzhu.system.api; import com.yanzhu.system.api.domain.SysUserUniopen; +import com.yanzhu.system.api.domain.vo.WxMaLoginBody; import com.yanzhu.system.api.model.LoginUser; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.*; @@ -30,6 +31,15 @@ public interface RemoteUserService @GetMapping("/sysUserUniopen/getMaOpenId/{code}") public R> getMaOpenId(@PathVariable("code") String code, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + /** + * 获取小程序手机号 + * @param body 加密参数 + * @param source 请求来源 + * @return + */ + @PostMapping("/sysUserUniopen/getMaPhoneNumber") + public R> getMaPhoneNumber(@RequestBody WxMaLoginBody body, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + /** * 查询小程序授权 * @param maOpenId 小程序授权id @@ -39,6 +49,26 @@ public interface RemoteUserService @GetMapping("/sysUserUniopen/findByMaOpenId/{maOpenId}") public R findByMaOpenId(@PathVariable("maOpenId") String maOpenId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + /** + * 新增小程序唯一授权 + * + * @param sysUserUniopen 小程序授权信息 + * @param source 请求来源 + * @return 结果 + */ + @PostMapping("/sysUserUniopen/add") + public R addSysUserUniopen(@RequestBody SysUserUniopen sysUserUniopen, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + /** + * 修改小程序唯一授权 + * + * @param sysUserUniopen 小程序授权信息 + * @param source 请求来源 + * @return 结果 + */ + @PutMapping("/sysUserUniopen/edit") + public R editSysUserUniopen(@RequestBody SysUserUniopen sysUserUniopen, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + /** * 通过用户名查询用户信息 * diff --git a/yanzhu-auth/src/main/java/com/yanzhu/auth/form/WxMaLoginBody.java b/yanzhu-api/yanzhu-api-system/src/main/java/com/yanzhu/system/api/domain/vo/WxMaLoginBody.java similarity index 80% rename from yanzhu-auth/src/main/java/com/yanzhu/auth/form/WxMaLoginBody.java rename to yanzhu-api/yanzhu-api-system/src/main/java/com/yanzhu/system/api/domain/vo/WxMaLoginBody.java index c0bca8bf..d048c317 100644 --- a/yanzhu-auth/src/main/java/com/yanzhu/auth/form/WxMaLoginBody.java +++ b/yanzhu-api/yanzhu-api-system/src/main/java/com/yanzhu/system/api/domain/vo/WxMaLoginBody.java @@ -1,4 +1,4 @@ -package com.yanzhu.auth.form; +package com.yanzhu.system.api.domain.vo; import io.swagger.annotations.ApiModel; import lombok.Data; @@ -25,6 +25,12 @@ public class WxMaLoginBody { @NotBlank(message = "授权编号不能为空") private String openId; + /** + * 授权密钥 + */ + @NotBlank(message = "授权密钥不能为空") + private String sessionKey; + /** * 加密代码 */ diff --git a/yanzhu-api/yanzhu-api-system/src/main/java/com/yanzhu/system/api/factory/RemoteUserFallbackFactory.java b/yanzhu-api/yanzhu-api-system/src/main/java/com/yanzhu/system/api/factory/RemoteUserFallbackFactory.java index 96406195..a7a8f38b 100644 --- a/yanzhu-api/yanzhu-api-system/src/main/java/com/yanzhu/system/api/factory/RemoteUserFallbackFactory.java +++ b/yanzhu-api/yanzhu-api-system/src/main/java/com/yanzhu/system/api/factory/RemoteUserFallbackFactory.java @@ -2,6 +2,7 @@ package com.yanzhu.system.api.factory; import com.yanzhu.system.api.RemoteUserService; import com.yanzhu.system.api.domain.SysUserUniopen; +import com.yanzhu.system.api.domain.vo.WxMaLoginBody; import com.yanzhu.system.api.model.LoginUser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,12 +36,30 @@ public class RemoteUserFallbackFactory implements FallbackFactory> getMaPhoneNumber(WxMaLoginBody body, String source) + { + return R.fail("获取小程序手机号失败:" + throwable.getMessage()); + } + @Override public R findByMaOpenId(String maOpenId, String source) { return R.fail("查询小程序授权失败:" + throwable.getMessage()); } + @Override + public R addSysUserUniopen(SysUserUniopen sysUserUniopen, String source) + { + return R.fail("获取小程序手机号失败:" + throwable.getMessage()); + } + + @Override + public R editSysUserUniopen(SysUserUniopen sysUserUniopen, String source) + { + return R.fail("获取小程序手机号失败:" + throwable.getMessage()); + } + @Override public R getUserInfo(String username, String source) { diff --git a/yanzhu-auth/src/main/java/com/yanzhu/auth/controller/TokenController.java b/yanzhu-auth/src/main/java/com/yanzhu/auth/controller/TokenController.java index 2d736ef5..b77c4aa5 100644 --- a/yanzhu-auth/src/main/java/com/yanzhu/auth/controller/TokenController.java +++ b/yanzhu-auth/src/main/java/com/yanzhu/auth/controller/TokenController.java @@ -2,7 +2,7 @@ package com.yanzhu.auth.controller; import com.yanzhu.auth.form.LoginBody; import com.yanzhu.auth.form.RegisterBody; -import com.yanzhu.auth.form.WxMaLoginBody; +import com.yanzhu.system.api.domain.vo.WxMaLoginBody; import com.yanzhu.auth.form.WxMaOpenIdBody; import com.yanzhu.auth.service.SysLoginService; import com.yanzhu.common.core.constant.SecurityConstants; @@ -67,7 +67,20 @@ public class TokenController @PostMapping("getMaOpenId") public R getMaOpenId(@RequestBody @Valid WxMaOpenIdBody body) { - String maOpenId = sysLoginService.getMaOpenId(body.getCode()); + Map data = sysLoginService.getMaOpenId(body.getCode()); + // 获取授权openId + return R.ok(data); + } + + /** + * 获取小程序手机号 + * @param body 请求参数 + * @return + */ + @PostMapping("getMaPhoneNumber") + public R getMaPhoneNumber(@RequestBody @Valid WxMaLoginBody body) + { + String maOpenId = sysLoginService.getMaPhoneNumber(body); // 获取授权openId return R.ok(maOpenId); } @@ -80,10 +93,10 @@ public class TokenController @PostMapping("maLogin") public R maLogin(@RequestBody @Valid WxMaLoginBody body) { - // 用户登录 - Map result = sysLoginService.maLogin(body); + // 微信用户登录 + LoginUser userInfo = sysLoginService.maLogin(body); // 获取登录token - return R.ok(result); + return R.ok(tokenService.createToken(userInfo)); } /** diff --git a/yanzhu-auth/src/main/java/com/yanzhu/auth/service/SysLoginService.java b/yanzhu-auth/src/main/java/com/yanzhu/auth/service/SysLoginService.java index 8a8c4e0c..26972b52 100644 --- a/yanzhu-auth/src/main/java/com/yanzhu/auth/service/SysLoginService.java +++ b/yanzhu-auth/src/main/java/com/yanzhu/auth/service/SysLoginService.java @@ -1,6 +1,6 @@ package com.yanzhu.auth.service; -import com.yanzhu.auth.form.WxMaLoginBody; +import com.yanzhu.system.api.domain.vo.WxMaLoginBody; import com.yanzhu.system.api.RemoteProService; import com.yanzhu.system.api.domain.SysUserUniopen; import org.springframework.beans.factory.annotation.Autowired; @@ -21,7 +21,6 @@ import com.yanzhu.system.api.RemoteUserService; import com.yanzhu.system.api.domain.SysUser; import com.yanzhu.system.api.model.LoginUser; -import java.util.List; import java.util.Map; import java.util.Objects; @@ -128,24 +127,81 @@ public class SysLoginService /** * 获取小程序授权 */ - public String getMaOpenId(String code) + public Map getMaOpenId(String code) { Map loginResult = remoteUserService.getMaOpenId(code,SecurityConstants.INNER).getData(); - return Convert.toStr(loginResult.get("openid")); + return loginResult; } + /** + * 获取小程序手机号 + */ + public String getMaPhoneNumber(WxMaLoginBody loginBody) + { + Map phoneResult = remoteUserService.getMaPhoneNumber(loginBody,SecurityConstants.INNER).getData(); + return Convert.toStr(phoneResult.get("phoneNumber")); + } /** * 微信小程序登录 */ - public Map maLogin(WxMaLoginBody loginBody) + public LoginUser maLogin(WxMaLoginBody loginBody) { + LoginUser userInfo; // 查询小程序授权情况 R uniResult = remoteUserService.findByMaOpenId(loginBody.getOpenId(),SecurityConstants.INNER); if(Objects.isNull(uniResult) || Objects.isNull(uniResult.getData())){ - throw new ServiceException("当前微信还未绑定账号!!!请使用账号登录一次"); + Map phoneResult = remoteUserService.getMaPhoneNumber(loginBody,SecurityConstants.INNER).getData(); + if(Objects.nonNull(phoneResult) && Objects.nonNull(phoneResult.get("phoneNumber"))){ + // 查询用户信息 + R userResult = remoteUserService.getUserInfo(Convert.toStr(phoneResult.get("phoneNumber")), SecurityConstants.INNER); + if(Objects.isNull(userResult.getData())){ + throw new ServiceException("登录失败,当前手机号未获取项目授权..."); + } + userInfo = userResult.getData(); + SysUserUniopen uniopen = new SysUserUniopen(); + uniopen.setUserId(userInfo.getUserid()); + uniopen.setUserName(userInfo.getUsername()); + uniopen.setUserNick(userInfo.getSysUser().getNickName()); + uniopen.setMaOpenId(loginBody.getOpenId()); + remoteUserService.addSysUserUniopen(uniopen,SecurityConstants.INNER); + }else{ + throw new ServiceException("获取授权手机号失败..."); + } + }else{ + R userResult = remoteUserService.getUserInfo(Convert.toStr(uniResult.getData().getUserName()), SecurityConstants.INNER); + if(Objects.isNull(userResult.getData())){ + throw new ServiceException("登录失败,当前手机号未获取项目授权..."); + } + userInfo = userResult.getData(); } - return null; + SysUser user = userInfo.getSysUser(); + if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) + { + recordLogService.recordLogininfor(user.getUserName(), Constants.LOGIN_FAIL, "对不起,您的账号已被删除"); + throw new ServiceException("对不起,您的账号:" + user.getUserName() + " 已被删除"); + } + if (UserStatus.DISABLE.getCode().equals(user.getStatus())) + { + recordLogService.recordLogininfor(user.getUserName(), Constants.LOGIN_FAIL, "用户已停用,请联系管理员"); + throw new ServiceException("对不起,您的账号:" + user.getUserName() + " 已停用"); + } + recordLogService.recordLogininfor(user.getUserName(), Constants.LOGIN_SUCCESS, "登录成功"); + + // 补充用户项目信息 + if(Objects.nonNull(user.getActiveComId())){ + userInfo.setProjectDeptId(user.getActiveComId()); + } + if(Objects.nonNull(user.getActiveComName())){ + userInfo.setProjectDeptName(user.getActiveComName()); + } + if(Objects.nonNull(user.getActiveProjectId())){ + userInfo.setProjectId(user.getActiveProjectId()); + } + if(Objects.nonNull(user.getActiveProjectName())){ + userInfo.setProjectName(user.getActiveProjectName()); + } + return userInfo; } /** diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/WxCallBackController.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/WxCallBackController.java deleted file mode 100644 index 8f821065..00000000 --- a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/WxCallBackController.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.yanzhu.manage.controller; - -import cn.binarywang.wx.miniapp.api.WxMaService; -import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; -import com.yanzhu.common.core.domain.R; -import com.yanzhu.common.core.utils.bean.BeanUtils; -import com.yanzhu.common.security.annotation.InnerAuth; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.Map; - -/** - * 微信接口 - */ -@RestController -@RequestMapping("/wxCallBack") -public class WxCallBackController { - - @Autowired - private WxMaService wxMaService; - - private static final Logger log = LoggerFactory.getLogger(WxCallBackController.class); - - /** - * 小程序登录 - */ - @InnerAuth - @GetMapping("/getMaOpenId/{code}") - public R> getMaOpenId(@PathVariable("code") String code) { - try { - WxMaJscode2SessionResult sessionInfo = - wxMaService.getUserService().getSessionInfo(code); - log.info("getMaOpenId==>{}...{}",code,sessionInfo.getOpenid()); - return R.ok(BeanUtils.beanToMap(sessionInfo)); - }catch (Exception e){ - return R.fail("小程序登录异常!!!"); - } - } - -} diff --git a/yanzhu-modules/yanzhu-system/src/main/java/com/yanzhu/system/controller/SysUserUniopenController.java b/yanzhu-modules/yanzhu-system/src/main/java/com/yanzhu/system/controller/SysUserUniopenController.java index 7582f017..bc0c07a8 100644 --- a/yanzhu-modules/yanzhu-system/src/main/java/com/yanzhu/system/controller/SysUserUniopenController.java +++ b/yanzhu-modules/yanzhu-system/src/main/java/com/yanzhu/system/controller/SysUserUniopenController.java @@ -2,8 +2,8 @@ package com.yanzhu.system.controller; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; +import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; import com.yanzhu.common.core.domain.R; -import com.yanzhu.common.core.utils.bean.BeanUtils; import com.yanzhu.common.core.utils.poi.ExcelUtil; import com.yanzhu.common.core.web.controller.BaseController; import com.yanzhu.common.core.web.domain.AjaxResult; @@ -13,6 +13,7 @@ import com.yanzhu.common.log.enums.BusinessType; import com.yanzhu.common.security.annotation.InnerAuth; import com.yanzhu.common.security.annotation.RequiresPermissions; import com.yanzhu.system.api.domain.SysUserUniopen; +import com.yanzhu.system.api.domain.vo.WxMaLoginBody; import com.yanzhu.system.service.ISysUserUniopenService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -20,6 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -119,7 +121,28 @@ public class SysUserUniopenController extends BaseController WxMaJscode2SessionResult sessionInfo = wxMaService.getUserService().getSessionInfo(code); log.info("getMaOpenId==>{}...{}",code,sessionInfo.getOpenid()); - return R.ok(BeanUtils.beanToMap(sessionInfo)); + Map data = new HashMap<>(); + data.put("openid",sessionInfo.getOpenid()); + data.put("sessionKey",sessionInfo.getSessionKey()); + return R.ok(data); + }catch (Exception e){ + return R.fail("小程序授权异常!!!"); + } + } + + /** + * 小程序授权 + */ + @InnerAuth + @GetMapping("/getMaPhoneNumber") + public R> getMaPhoneNumber(@RequestBody WxMaLoginBody body) { + try { + // 调用解密方法获取手机号 + WxMaPhoneNumberInfo phoneNumberInfo = wxMaService.getUserService().getPhoneNoInfo(body.getSessionKey(), body.getEncryptedData(), body.getIv()); + log.info("getMaPhoneNumber==>{}...{}",body.getOpenId(),phoneNumberInfo.getPhoneNumber()); + Map data = new HashMap<>(); + data.put("phoneNumber",phoneNumberInfo.getPhoneNumber()); + return R.ok(data); }catch (Exception e){ return R.fail("小程序授权异常!!!"); } @@ -154,4 +177,16 @@ public class SysUserUniopenController extends BaseController public R findByMpOpenId(@PathVariable("mpOpenId") String mpOpenId) { return R.ok(sysUserUniopenService.selectSysUserUniopenByMpOpenId(mpOpenId)); } + + @InnerAuth + @PostMapping("/add") + public R addSysUserUniopen(@RequestBody SysUserUniopen sysUserUniopen) { + return R.ok(sysUserUniopenService.insertSysUserUniopen(sysUserUniopen)); + } + + @InnerAuth + @PutMapping("/edit") + public R editSysUserUniopen(@RequestBody SysUserUniopen sysUserUniopen) { + return R.ok(sysUserUniopenService.updateSysUserUniopen(sysUserUniopen)); + } } diff --git a/yanzhu-modules/yanzhu-system/src/main/resources/mapper/system/SysUserMapper.xml b/yanzhu-modules/yanzhu-system/src/main/resources/mapper/system/SysUserMapper.xml index e9133d1a..c4a25e8d 100644 --- a/yanzhu-modules/yanzhu-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/yanzhu-modules/yanzhu-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -160,13 +160,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"