From 3828b0e2628b38cbedb72971619f301f5949921b Mon Sep 17 00:00:00 2001 From: "bo.yang" Date: Tue, 27 Jul 2021 18:19:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E4=BF=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bps/controller/WechatApiController.java | 136 ------------------ .../ruoyi/bps/service/IWechatApiService.java | 6 - .../system/WechatApiController.java | 91 ++++++++++++ .../src/main/resources/application.yml | 2 +- .../system}/domain/WechatAccessToken.java | 2 +- .../ruoyi/system}/domain/WechatUserInfo.java | 2 +- .../ruoyi/system/mapper/SysUserMapper.java | 8 ++ .../mapper/WechatAccessTokenMapper.java | 4 +- .../ruoyi/system/service/ISysUserService.java | 8 ++ .../system/service/IWechatApiService.java | 9 ++ .../service/impl/SysUserServiceImpl.java | 11 ++ .../service/impl/WechatApiServiceImpl.java | 81 +++++++++-- .../resources/mapper/system/SysUserMapper.xml | 16 ++- .../system}/WechatAccessTokenMapper.xml | 2 +- 14 files changed, 218 insertions(+), 160 deletions(-) delete mode 100644 box-bps/src/main/java/com/ruoyi/bps/controller/WechatApiController.java delete mode 100644 box-bps/src/main/java/com/ruoyi/bps/service/IWechatApiService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/WechatApiController.java rename {box-bps/src/main/java/com/ruoyi/bps => ruoyi-system/src/main/java/com/ruoyi/system}/domain/WechatAccessToken.java (98%) rename {box-bps/src/main/java/com/ruoyi/bps => ruoyi-system/src/main/java/com/ruoyi/system}/domain/WechatUserInfo.java (99%) rename {box-bps/src/main/java/com/ruoyi/bps => ruoyi-system/src/main/java/com/ruoyi/system}/mapper/WechatAccessTokenMapper.java (94%) create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/IWechatApiService.java rename {box-bps/src/main/java/com/ruoyi/bps => ruoyi-system/src/main/java/com/ruoyi/system}/service/impl/WechatApiServiceImpl.java (55%) rename {box-bps/src/main/resources/mapper/bps => ruoyi-system/src/main/resources/mapper/system}/WechatAccessTokenMapper.xml (98%) diff --git a/box-bps/src/main/java/com/ruoyi/bps/controller/WechatApiController.java b/box-bps/src/main/java/com/ruoyi/bps/controller/WechatApiController.java deleted file mode 100644 index cdb7f0ead..000000000 --- a/box-bps/src/main/java/com/ruoyi/bps/controller/WechatApiController.java +++ /dev/null @@ -1,136 +0,0 @@ -package com.ruoyi.bps.controller; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.ruoyi.bps.domain.WechatUserInfo; -import com.ruoyi.bps.service.IWechatApiService; -import com.ruoyi.common.core.controller.BaseController; -import com.ruoyi.common.core.domain.AjaxResult; -import com.ruoyi.common.core.domain.entity.SysUser; -import com.ruoyi.common.utils.ServletUtils; -import com.ruoyi.common.utils.StringUtils; -import com.ruoyi.common.utils.http.HttpUtils; -import com.ruoyi.system.service.ISysUserService; -import org.apache.shiro.SecurityUtils; -import org.apache.shiro.authc.AuthenticationException; -import org.apache.shiro.authc.UsernamePasswordToken; -import org.apache.shiro.subject.Subject; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.context.request.ServletRequestAttributes; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.List; -import java.util.Map; - -@RestController -public class WechatApiController extends BaseController { - @Autowired - IWechatApiService wechatApiService; - - @Autowired - private ISysUserService userService; - - @RequestMapping("anon/getAccessToken") - public String getAccessToken() { - return wechatApiService.GetAccessToken(); - } - - - - - @PostMapping("/wxlogin") - @ResponseBody - public AjaxResult ajaxLogin(String username, String password, Boolean rememberMe) - { - - UsernamePasswordToken token = new UsernamePasswordToken(username, password, rememberMe); - Subject subject = SecurityUtils.getSubject(); - try - { - subject.login(token); - return success(); - } - catch (AuthenticationException e) - { - String msg = "用户或密码错误"; - if (StringUtils.isNotEmpty(e.getMessage())) - { - msg = e.getMessage(); - } - return error(msg); - } - } - - - - @GetMapping("anon/wechatLogin") - public String codeTest(HttpServletRequest request) - { - String code= request.getParameter("code"); - String state = request.getParameter("state"); - - //获取访问用户身份ID - String url="https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo"; - String param = "access_token="+wechatApiService.GetAccessToken()+"&code="+code; - // String userInfo = HttpUtils.sendGet(url,param); //测试已能正常返回UserInfo Json,正式使用时打开 - String userInfo = "{\"UserId\":\"359\",\"DeviceId\":\"10000589102865WJ\",\"errcode\":0,\"errmsg\":\"ok\"}"; //为避免去微信获取code麻烦,开发调试时打开 - JSONObject jsonObjectUserInfo = JSONObject.parseObject(userInfo); - //如果返回码不为0,则返回错误信息 - if ( Integer.parseInt(jsonObjectUserInfo.getString("errcode")) != 0){ - return jsonObjectUserInfo.getString("errmsg"); - } - String userId = jsonObjectUserInfo.getString("UserId"); - - //获取用户邮箱 - url="https://qyapi.weixin.qq.com/cgi-bin/user/get"; - param="access_token="+wechatApiService.GetAccessToken()+"&userid="+userId; - String userInfoDetail=HttpUtils.sendGet(url,param); //获取成员信息 - JSONObject jsonObjectUserInfoDetail=JSONObject.parseObject(userInfoDetail); - //如果返回码不为0,则返回错误信息 - if(Integer.parseInt(jsonObjectUserInfoDetail.getString("errcode")) != 0) - { - return jsonObjectUserInfo.getString("errmsg"); - } - String userEmail= jsonObjectUserInfoDetail.getString("email"); - String userName= jsonObjectUserInfoDetail.getString("name"); - - //根据邮箱名+用户名匹配本地用户对应的邮箱名与用户名 - SysUser sysUser=new SysUser(); - sysUser.setUserName(userName); - sysUser.setEmail(userEmail); - sysUser.setStatus("02"); //只获取从OA同步的用户,保持与企业微信一致。 - List userList= userService.selectUserList(sysUser); - int count= userList.size(); - if(count <= 0){ - return "false"; //系统里没有用户,没有从OA同步? 处理逻辑待定 - } - if(count > 1){ - return "false"; //本地数据库存在多个姓名与邮箱相同的记录,如何处理?? - } - - - - return userEmail; - } - - @GetMapping("anon/userInfo") - public Map getJSON(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - - BufferedReader streamReader = new BufferedReader( new InputStreamReader(request.getInputStream(), "UTF-8")); - StringBuilder responseStrBuilder = new StringBuilder(); - String inputStr; - while ((inputStr = streamReader.readLine()) != null) { - responseStrBuilder.append(inputStr); - } - Map params = JSON.parseObject(responseStrBuilder.toString(), Map.class); - return params; - } - - -} diff --git a/box-bps/src/main/java/com/ruoyi/bps/service/IWechatApiService.java b/box-bps/src/main/java/com/ruoyi/bps/service/IWechatApiService.java deleted file mode 100644 index 6a75b451c..000000000 --- a/box-bps/src/main/java/com/ruoyi/bps/service/IWechatApiService.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.ruoyi.bps.service; - -public interface IWechatApiService { - //获取Access Token - public String GetAccessToken(); -} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/WechatApiController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/WechatApiController.java new file mode 100644 index 000000000..c2b773b62 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/WechatApiController.java @@ -0,0 +1,91 @@ +package com.ruoyi.web.controller.system; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.http.HttpUtils; +import com.ruoyi.system.service.ISysUserService; +import com.ruoyi.system.service.IWechatApiService; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.UsernamePasswordToken; +import org.apache.shiro.subject.Subject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.List; +import java.util.Map; + +@RestController +public class WechatApiController extends BaseController { + @Autowired + IWechatApiService wechatApiService; + + + + @RequestMapping("anon/getAccessToken") + public String getAccessToken() { + return wechatApiService.GetAccessToken(); + } + + + + + + + + + @GetMapping("anon/wechatLogin") + @ResponseBody + public AjaxResult WechatLogin(HttpServletRequest request) + { + String code= request.getParameter("code"); + //String state = request.getParameter("state"); + String username=wechatApiService.GetLoginNameWithWechatCode(code); + String password=code; + String rememberMe="0"; + + UsernamePasswordToken token = new UsernamePasswordToken(username, password, rememberMe); + Subject subject = SecurityUtils.getSubject(); + try + { + subject.login(token); + return success(); + } + catch (AuthenticationException e) + { + String msg = "用户或密码错误"; + if (StringUtils.isNotEmpty(e.getMessage())) + { + msg = e.getMessage(); + } + return error(msg); + } + + + } + + @GetMapping("anon/userInfo") + public Map getJSON(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + + BufferedReader streamReader = new BufferedReader( new InputStreamReader(request.getInputStream(), "UTF-8")); + StringBuilder responseStrBuilder = new StringBuilder(); + String inputStr; + while ((inputStr = streamReader.readLine()) != null) { + responseStrBuilder.append(inputStr); + } + Map params = JSON.parseObject(responseStrBuilder.toString(), Map.class); + return params; + } + + +} diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 10b87328c..0c6577083 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -19,7 +19,7 @@ server: port: 80 servlet: # 应用的访问路径 - context-path: /it_war + context-path: /it tomcat: # tomcat的URI编码 uri-encoding: UTF-8 diff --git a/box-bps/src/main/java/com/ruoyi/bps/domain/WechatAccessToken.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/WechatAccessToken.java similarity index 98% rename from box-bps/src/main/java/com/ruoyi/bps/domain/WechatAccessToken.java rename to ruoyi-system/src/main/java/com/ruoyi/system/domain/WechatAccessToken.java index 95d318913..75a178f3a 100644 --- a/box-bps/src/main/java/com/ruoyi/bps/domain/WechatAccessToken.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/WechatAccessToken.java @@ -1,4 +1,4 @@ -package com.ruoyi.bps.domain; +package com.ruoyi.system.domain; import java.util.Date; diff --git a/box-bps/src/main/java/com/ruoyi/bps/domain/WechatUserInfo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/WechatUserInfo.java similarity index 99% rename from box-bps/src/main/java/com/ruoyi/bps/domain/WechatUserInfo.java rename to ruoyi-system/src/main/java/com/ruoyi/system/domain/WechatUserInfo.java index 15533af17..b66f361d3 100644 --- a/box-bps/src/main/java/com/ruoyi/bps/domain/WechatUserInfo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/WechatUserInfo.java @@ -1,4 +1,4 @@ -package com.ruoyi.bps.domain; +package com.ruoyi.system.domain; import java.util.List; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java index 22fb5cbf6..48365ff21 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java @@ -126,4 +126,12 @@ public interface SysUserMapper * 删除Ecology同步过来的用户 */ public void deleteEcologySyncUser(); + + /** + * 查询用户列表 + * + * @param sysUser 用户信息 + * @return 用户信息集合信息 + */ + public List selectUserLists(SysUser sysUser); } diff --git a/box-bps/src/main/java/com/ruoyi/bps/mapper/WechatAccessTokenMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/WechatAccessTokenMapper.java similarity index 94% rename from box-bps/src/main/java/com/ruoyi/bps/mapper/WechatAccessTokenMapper.java rename to ruoyi-system/src/main/java/com/ruoyi/system/mapper/WechatAccessTokenMapper.java index 541980bd7..5294bd138 100644 --- a/box-bps/src/main/java/com/ruoyi/bps/mapper/WechatAccessTokenMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/WechatAccessTokenMapper.java @@ -1,6 +1,6 @@ -package com.ruoyi.bps.mapper; +package com.ruoyi.system.mapper; -import com.ruoyi.bps.domain.WechatAccessToken; +import com.ruoyi.system.domain.WechatAccessToken; import org.apache.ibatis.annotations.Mapper; import java.util.List; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java index 40ebb36bb..0492ec362 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java @@ -209,4 +209,12 @@ public interface ISysUserService * Ecology人员信息同步 */ public int syncEcologyUser(String url,String params); + + /** + * 查询用户列表 + * + * @param user 用户信息 + * @return 用户信息集合信息 + */ + public List selectUserLists(SysUser user); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IWechatApiService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IWechatApiService.java new file mode 100644 index 000000000..d4968517f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IWechatApiService.java @@ -0,0 +1,9 @@ +package com.ruoyi.system.service; + +public interface IWechatApiService { + //获取Access Token + public String GetAccessToken(); + + //根据企业微信登录身份获取本地LoginName + public String GetLoginNameWithWechatCode(String code); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index 6b6cdf99e..eaf08e3ab 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -540,6 +540,17 @@ public class SysUserServiceImpl implements ISysUserService return result; } + /** + * 查询用户列表 + * + * @param user 用户信息 + * @return 用户信息集合信息 + */ + @Override + public List selectUserLists(SysUser user) { + return userMapper.selectUserLists(user); + } + @SuppressWarnings("unchecked") public int userSync(Map mapResult){ //如果接口返回状态码不为200,则不做同步处理 diff --git a/box-bps/src/main/java/com/ruoyi/bps/service/impl/WechatApiServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WechatApiServiceImpl.java similarity index 55% rename from box-bps/src/main/java/com/ruoyi/bps/service/impl/WechatApiServiceImpl.java rename to ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WechatApiServiceImpl.java index 58d589ecf..27152e025 100644 --- a/box-bps/src/main/java/com/ruoyi/bps/service/impl/WechatApiServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WechatApiServiceImpl.java @@ -1,12 +1,15 @@ -package com.ruoyi.bps.service.impl; +package com.ruoyi.system.service.impl; +import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; -import com.ruoyi.bps.domain.WechatAccessToken; -import com.ruoyi.bps.mapper.WechatAccessTokenMapper; -import com.ruoyi.bps.service.IWechatApiService; +import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.http.HttpUtils; +import com.ruoyi.system.domain.WechatAccessToken; +import com.ruoyi.system.mapper.WechatAccessTokenMapper; +import com.ruoyi.system.service.ISysUserService; +import com.ruoyi.system.service.IWechatApiService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -26,7 +29,14 @@ public class WechatApiServiceImpl implements IWechatApiService { @Autowired WechatAccessTokenMapper wechatAccessTokenMapper; + @Autowired + IWechatApiService wechatApiService; + + @Autowired + private ISysUserService userService; + /** + * * 获取企业微信Access Token * @return Access Token */ @@ -84,13 +94,62 @@ public class WechatApiServiceImpl implements IWechatApiService { return wechatAccessToken; } - /** - * - * @param minuendDate 被减数日期 - * @param subtractionDate 减数日期 - * @return 相差秒数 - */ - public int differenceSecond(Date minuendDate, Date subtractionDate ) { + //获取相两个日期相差秒数 + private int differenceSecond(Date minuendDate, Date subtractionDate ) { return (int)((minuendDate.getTime() - subtractionDate.getTime()) / 1000); } + + + /** + * 根据企业微信登录身份获取本地LoginName + * + * @param code + * @return LoginName + */ + @Override + public String GetLoginNameWithWechatCode(String code) + { + //获取访问用户身份ID + String url="https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo"; + String param = "access_token="+wechatApiService.GetAccessToken()+"&code="+code; + //String userInfo = HttpUtils.sendGet(url,param); //测试已能正常返回UserInfo Json,正式使用时打开 + String userInfo = "{\"UserId\":\"359\",\"DeviceId\":\"10000589102865WJ\",\"errcode\":0,\"errmsg\":\"ok\"}"; //为避免去微信获取code麻烦,开发调试时打开 + JSONObject jsonObjectUserInfo = JSONObject.parseObject(userInfo); + //如果返回码不为0,则返回错误信息 + if ( Integer.parseInt(jsonObjectUserInfo.getString("errcode")) != 0){ + return jsonObjectUserInfo.getString("errmsg"); + } + String userId = jsonObjectUserInfo.getString("UserId"); + + //获取用户邮箱与姓名 + url="https://qyapi.weixin.qq.com/cgi-bin/user/get"; + param="access_token="+wechatApiService.GetAccessToken()+"&userid="+userId; + String userInfoDetail=HttpUtils.sendGet(url,param); //获取成员信息 + JSONObject jsonObjectUserInfoDetail=JSONObject.parseObject(userInfoDetail); + //如果返回码不为0,则返回错误信息 + if(Integer.parseInt(jsonObjectUserInfoDetail.getString("errcode")) != 0) + { + return jsonObjectUserInfo.getString("errmsg"); + } + String userEmail= jsonObjectUserInfoDetail.getString("email"); + String userName= jsonObjectUserInfoDetail.getString("name"); + + //根据邮箱名+用户名匹配本地用户对应的邮箱名与用户名 + SysUser sysUser=new SysUser(); + sysUser.setUserName(userName); + sysUser.setEmail(userEmail); + sysUser.setUserType("02"); //只获取从OA同步的用户,保持与企业微信一致。 + List userList= userService.selectUserLists(sysUser); + int count= userList.size(); + if(count <= 0){ + return ""; //系统里没有用户,没有从OA同步? 处理逻辑待定 + } + if(count > 1){ + return ""; //本地数据库存在多个姓名与邮箱相同的记录,如何处理?? + } + String loginName= userList.get(0).getLoginName(); + return loginName; + + } + } diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml index 36acbf155..827c417b5 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -227,5 +227,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" delete from sys_user where user_type ='02' - + + + \ No newline at end of file diff --git a/box-bps/src/main/resources/mapper/bps/WechatAccessTokenMapper.xml b/ruoyi-system/src/main/resources/mapper/system/WechatAccessTokenMapper.xml similarity index 98% rename from box-bps/src/main/resources/mapper/bps/WechatAccessTokenMapper.xml rename to ruoyi-system/src/main/resources/mapper/system/WechatAccessTokenMapper.xml index d5dfc1c85..b14442540 100644 --- a/box-bps/src/main/resources/mapper/bps/WechatAccessTokenMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/WechatAccessTokenMapper.xml @@ -2,7 +2,7 @@ - +