Browse Source

企业微信扫码登录

yurk 2 years ago
parent
commit
49e511c561

+ 101 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/AuthRedirectController.java

@@ -151,6 +151,107 @@ public class AuthRedirectController {
         return modelAndView;
     }
 
+    @RequestMapping("/corpWXScanningAuth")
+    public ModelAndView scanningAuth(String auth_code, String state)throws Exception {
+        Map<String,Object> reqParam = new HashMap<String,Object>(16);
+        String userAgent = request.getHeader("User-Agent");
+        //获取设备类型
+        String deviceType = UserAgentUtils.getDeviceType(userAgent);
+        boolean isMobile = "MOBILE".equals(deviceType);
+        String url = WeiXinCorpController.GET_CORP_SCANNING_CODE_LOGININFO_URL.replace("PROVIDER_ACCESS_TOKEN",wxCorpInfoService.getProviderAccessToken());
+        HttpHeaders headers = new HttpHeaders();
+        RestTemplate restTemplate = new RestTemplate();
+        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
+        headers.setContentType(type);
+        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
+        JSONObject ob = new JSONObject();
+        ob.put("auth_code", auth_code);
+        HttpEntity<JSONObject> Entity = new HttpEntity<>(ob, headers);
+        ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, Entity, String.class);
+        String redirecUrl = null;
+        if (responseEntity.getStatusCode() == HttpStatus.OK) {
+            String resp = responseEntity.getBody();
+            System.err.println(resp);
+            JSONObject obj = JSONObject.parseObject(resp);
+            if (obj.getIntValue("errcode") == 0) {
+                JSONObject userInfo = obj.getJSONObject("user_info");
+                System.out.println(obj.toString());
+                String wxUserId = userInfo.getString("userid");
+                String openUserId = userInfo.getString("open_userid");
+                JSONObject corpInfo = obj.getJSONObject("corp_info");
+                String corpId = corpInfo.getString("corpid");
+                System.out.println("登录 wxUserId="+wxUserId+", openUserId="+openUserId);
+                List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("corpwx_userid", openUserId));
+                Integer companyId = 0;
+                if (userList.size() > 0) {
+                    //该用户已存在
+                    User curUser = userList.get(0);
+                    System.out.println("找到用户corpwxUserid=="+curUser.getCorpwxUserid());
+                    companyId = curUser.getCompanyId();
+                    if (curUser.getIsActive() == 1) {
+                        reqParam.put("userId", curUser.getId());
+                    } else {
+                        //提示账号已停用
+                        //reqParam.put("errorMsg", "您的账号已停用,无法登录");
+                        reqParam.put("errorMsg", MessageUtils.message("user.inactive"));
+                    }
+                } else {
+                    //使用UserId比对,之前有的老用户存的是UserId
+                    WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectById(corpId);
+                    if (wxCorpInfo == null) {
+                        reqParam.put("errorMsg", MessageUtils.message("user.accountNoExist"));
+                    } else {
+                        User curUser = userMapper.selectOne(new QueryWrapper<User>().eq("company_id", wxCorpInfo.getCompanyId()).eq("corpwx_userid", wxUserId));
+                        if (curUser == null) {
+//                    reqParam.put("errorMsg", MessageUtils.message("user.accountNoExist"));
+                            //用户不存在,去生成该用户
+                            if (wxCorpInfo.getSaasSyncContact() == 1) {
+                                curUser = wxCorpInfoService.generateUserInfo(wxCorpInfo.getCompanyId(), openUserId);
+                            }
+                        }
+                        if (curUser != null) {
+                            if (curUser.getIsActive() == 1) {
+                                companyId = curUser.getCompanyId();
+                                reqParam.put("userId", curUser.getId());
+                            } else {
+                                //提示账号已停用
+                                //reqParam.put("errorMsg", "您的账号已停用,无法登录");
+                                reqParam.put("errorMsg", MessageUtils.message("user.inactive"));
+                            }
+                        } else {
+                            System.err.println("==生成企业微信User失败==");
+                            reqParam.put("errorMsg", MessageUtils.message("user.accountNoExist"));
+                        }
+
+                    }
+                }
+                reqParam.put("hasTriedAutoLogin", 1);
+                if (!StringUtils.isEmpty(state) && state.length() > 1) {
+                    reqParam.put("path", state);
+                }
+                String router = "index";
+                if (companyId > 0) {
+                    HashMap compExpireInfo = getCompExpireInfo(companyId);
+                    if (compExpireInfo != null) {
+                        //过期了
+                        router = "expire";
+                        reqParam.put("expDate", compExpireInfo.get("expDate"));
+                        reqParam.put("version", compExpireInfo.get("version"));
+                    }
+                }
+                if (isMobile) {
+                    redirecUrl = "http://mobworktime.ttkuaiban.com/#/" + router;
+                } else {
+                    redirecUrl = "http://worktime.ttkuaiban.com/#/" + router;
+                }
+            }
+        }
+        ModelAndView modelAndView = new ModelAndView(
+                new RedirectView(redirecUrl), reqParam);
+
+        return modelAndView;
+    }
+
 
     @RequestMapping("/corpInsideWXAuth")
     public ModelAndView authInside(String code, String state) throws Exception{

+ 2 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java

@@ -82,6 +82,8 @@ public class WeiXinCorpController {
     public static final String GET_LIST_MEMB_AUTH = "https://qyapi.weixin.qq.com/cgi-bin/user/list_member_auth?access_token=ACCESS_TOKEN";
     //网页获取企业内部用户信息
     public static final String GET_CORP_INSIDE_USERINFO_URL = "https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=ACCESS_TOKEN&code=CODE";
+    //扫码获取企业用户信息
+    public static final String GET_CORP_SCANNING_CODE_LOGININFO_URL = "https://qyapi.weixin.qq.com/cgi-bin/service/get_login_info?access_token=PROVIDER_ACCESS_TOKEN";
     //获取员工打卡日报统计信息
     public static final String GET_CHECKIN_DAYDATA = "https://qyapi.weixin.qq.com/cgi-bin/checkin/getcheckin_daydata?access_token=ACCESS_TOKEN";
 
@@ -1848,12 +1850,6 @@ public class WeiXinCorpController {
         return msg;
     }
 
-    //企业微信用户扫码登录
-    @RequestMapping(value = "/corpWeiXinScanningCodeLogin", method = RequestMethod.GET)
-    public HttpRespMsg corpWeiXinScanningCodeLogin(String code) {
-       return userService.corpWeiXinScanningCodeLogin(code);
-    }
-
     //获取企业微信考勤打卡统计数据
     @RequestMapping("/getUserCheckInDayData")
     public HttpRespMsg getUserCheckInDayData(int companyId, String userId, String startDate, String endDate) {

+ 0 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/UserService.java

@@ -75,6 +75,4 @@ public interface UserService extends IService<User> {
     HttpRespMsg loginAdminByThirdParty(String jobNumber, String token);
 
     HttpRespMsg importMonthCost(MultipartFile file, String ymonth, HttpServletRequest request);
-
-    HttpRespMsg corpWeiXinScanningCodeLogin(String code);
 }

+ 0 - 79
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java

@@ -72,8 +72,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
     private String providerSecret;
     public static final String GET_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
     public static final String GET_USERINFO_URL = "https://api.weixin.qq.com/sns/userinfo?access_token=accessToken&openid=openId&lang=zh_CN";
-    //扫码获取企业内部用户信息
-    public static final String GET_CORP_SCANNING_CODE_LOGININFO_URL = "https://qyapi.weixin.qq.com/cgi-bin/service/get_login_info?access_token=PROVIDER_ACCESS_TOKEN";
 
     //用于控制线程锁
     public static HashMap<String, CorpwxJobResult> corpwxJobCenter = new HashMap();
@@ -418,83 +416,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         return msg;
     }
 
-    @Override
-    public HttpRespMsg corpWeiXinScanningCodeLogin(String code) {
-        HttpRespMsg msg = new HttpRespMsg();
-
-        String url = null;
-        try {
-            url = GET_CORP_SCANNING_CODE_LOGININFO_URL.replace("PROVIDER_ACCESS_TOKEN", getProviderAccessToken());
-        } catch (Exception exception) {
-            exception.printStackTrace();
-            msg.setError(exception.getMessage());
-            return msg;
-        }
-        HttpHeaders headers = new HttpHeaders();
-        RestTemplate restTemplate = new RestTemplate();
-        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
-        headers.setContentType(type);
-        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
-        JSONObject reqParam = new JSONObject();
-        reqParam.put("auth_code", code);
-        HttpEntity<JSONObject> Entity = new HttpEntity<>(reqParam, headers);
-        ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, Entity, String.class);
-        if (responseEntity.getStatusCode() == HttpStatus.OK) {
-            String resp = responseEntity.getBody();
-            System.err.println(resp);
-            JSONObject obj = JSONObject.parseObject(resp);
-            if (obj.getIntValue("errcode") == 0) {
-                JSONObject userInfo = obj.getJSONObject("user_info");
-                String wxUserId = userInfo.getString("open_userid");
-                List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("corpwx_userid", wxUserId));
-                if (userList.size() > 0) {
-                    //该用户已存在
-                    User curUser = userList.get(0);
-
-                    //写死进行测试
-//            if (curUser.getName().equals("屈跃庭")) {
-//                curUser = userMapper.selectById("7913998191517310976");
-//            }
-                    Company company = companyMapper.selectOne(new QueryWrapper<Company>().eq("id", curUser.getCompanyId()));
-                    WxCorpInfo info = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", curUser.getCompanyId()));
-                    curUser.setUserNameNeedTranslate(info.getSaasSyncContact());
-                    //检测密码正确时
-                    UserVO userVO = new UserVO().setCompanyName(company.getCompanyName());
-                    userVO.setCompany(company);
-                    BeanUtils.copyProperties(curUser, userVO);
-                    if (userVO.getRoleId() == null || userVO.getRoleId() == 0) {
-                        //msg.setError("请先联系管理员为您分配角色");
-                        msg.setError(MessageUtils.message("user.noRole"));
-                        return msg;
-                    }
-                    //还要多返回一个公司名字
-                    userVO.setPassword("");
-                    LocalDateTime remainingTime = company.getExpirationDate() == null ? LocalDateTime.now() : company.getExpirationDate();
-                    userVO.setRemainingTime(remainingTime.toInstant(ZoneOffset.of("+8")).toEpochMilli() -
-                            LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli());
-                    //检测是否是项目经理,项目经理有审核功能权限
-                    userVO.setLeader(judgeIsLeader(userVO.getId()));
-                    userVO.setTimeType(timeTypeMapper.selectById(company.getId()));
-                    List<Department> manageDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", userVO.getId()));
-                    List<Integer> deptIds = manageDeptList.stream().map(Department::getDepartmentId).collect(Collectors.toList());
-                    int num = 0;
-                    if (deptIds.size() > 0) {
-                        num = auditWorkflowTimeSettingMapper.selectCount(new QueryWrapper<AuditWorkflowTimeSetting>().in("audit_dept_id", deptIds));
-                    }
-                    userVO.setHasAuditDept(num>0);
-                    setUserRoleMenu(userVO);
-                    msg.data = userVO;
-                } else {
-                    //msg.setError("该用户尚未绑定企业微信,需要通过账号密码登录");
-                    msg.setError(MessageUtils.message("wx.bindError"));
-                }
-            }else{
-                System.err.println("====================用户信息获取获取失败======================");
-            }
-        }
-        return msg;
-    }
-
 
     public void setUserRoleMenu(UserVO user) {
         Integer roleId = user.getRoleId();