|  | @ -1996,7 +1996,7 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
 | 
	
		
			
				|  |  |         logger.info("after doctorCode :"+doctorCode);
 | 
	
		
			
				|  |  |         JSONObject map = null;
 | 
	
		
			
				|  |  |         try{
 | 
	
		
			
				|  |  |             map= oauthWlyyConfigService.checkWlyyUserDoctor(doctorCode);
 | 
	
		
			
				|  |  |             map= oauthWlyyConfigService.checkWlyyUserDoctor(doctorCode,wechatId);
 | 
	
		
			
				|  |  |         }catch (Exception e){
 | 
	
		
			
				|  |  |             logger.error(e);
 | 
	
		
			
				|  |  |             return ObjEnvelop.getError("授权失败");
 | 
	
	
		
			
				|  | @ -2047,6 +2047,191 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * iot i健康登陆
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param parameters  不定入参:
 | 
	
		
			
				|  |  |      *                    client_id 应用标识
 | 
	
		
			
				|  |  |      *                    captcha 验证码
 | 
	
		
			
				|  |  |      *                    password 密码
 | 
	
		
			
				|  |  |      *                    username 用户名/手机/身份证号
 | 
	
		
			
				|  |  |      *                    key 图形验证码键值
 | 
	
		
			
				|  |  |      *                    text 用户输入的图形验证码
 | 
	
		
			
				|  |  |      *                    login_type 用户类型 1或默认为user,2:医生登录,3:患者登录,4:第三方同步账号登录,5.易联众居民健康卡授权登录
 | 
	
		
			
				|  |  |      * @param httpSession
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      * @throws Exception
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     @RequestMapping(value = "/oauth/iotIjklogin", method = RequestMethod.POST)
 | 
	
		
			
				|  |  |     public ResponseEntity<Oauth2Envelop<WlyyUserSimple>> iotIjklogin(@RequestParam Map<String, String> parameters, HttpSession httpSession) throws Exception {
 | 
	
		
			
				|  |  |         logger.info("login:登录进入1");
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         String username = parameters.get("username");
 | 
	
		
			
				|  |  |         if (StringUtils.isEmpty(username)) {
 | 
	
		
			
				|  |  |             throw new InvalidRequestException("username");
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         String client_id = parameters.get("client_id");
 | 
	
		
			
				|  |  |         if (StringUtils.isEmpty(client_id)) {
 | 
	
		
			
				|  |  |             throw new InvalidRequestException("client_id");
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         if (StringUtils.isEmpty(parameters.get("captcha"))) {
 | 
	
		
			
				|  |  |             parameters.put("grant_type", "ihealthDcotor");
 | 
	
		
			
				|  |  |             //解密密码
 | 
	
		
			
				|  |  |             if (parameters.get("password") != null) {
 | 
	
		
			
				|  |  |                 KeyPair keyPair = (KeyPair) httpSession.getAttribute("privateKey");
 | 
	
		
			
				|  |  |                 String password = com.yihu.jw.security.utils.RSAUtils.decryptBase64(parameters.get("password"), keyPair);
 | 
	
		
			
				|  |  |                 logger.info("password:"+password);
 | 
	
		
			
				|  |  |                 String response = ykyyService.DoctorLogin(parameters.get("username"),password);
 | 
	
		
			
				|  |  |                 if (!StringUtils.isEmpty(response)){
 | 
	
		
			
				|  |  |                     JSONObject object = JSONObject.parseObject(response);
 | 
	
		
			
				|  |  |                     logger.info("眼科通登陆返回参数:"+object);
 | 
	
		
			
				|  |  |                     if (!object.getString("code").equalsIgnoreCase("10000")){
 | 
	
		
			
				|  |  |                         WlyyUserSimple userSimple = new WlyyUserSimple();
 | 
	
		
			
				|  |  |                         return getFailedResponse(object.getString("msg"),-1,userSimple);
 | 
	
		
			
				|  |  |                     }else {
 | 
	
		
			
				|  |  |                         JSONObject jsonObject = object.getJSONObject("value");
 | 
	
		
			
				|  |  |                         if (jsonObject!=null) {
 | 
	
		
			
				|  |  |                             String idCard = jsonObject.getString("idCard");
 | 
	
		
			
				|  |  |                             String verifyCode = jsonObject.getString("verifyCode");
 | 
	
		
			
				|  |  |                             String yktDoctorId= jsonObject.getString("id");
 | 
	
		
			
				|  |  |                             BaseDoctorDO doctorDOs = doctorDao.findByIdcard(idCard);
 | 
	
		
			
				|  |  |                             if (doctorDOs!=null){
 | 
	
		
			
				|  |  |                                 doctorDOs.setVerifyCode(verifyCode);
 | 
	
		
			
				|  |  |                                 doctorDOs.setYktDoctorId(yktDoctorId);
 | 
	
		
			
				|  |  |                                 /*doctorDOs.setYktCode();*/
 | 
	
		
			
				|  |  |                                 doctorDao.save(doctorDOs);
 | 
	
		
			
				|  |  |                             }else {
 | 
	
		
			
				|  |  |                                 WlyyUserSimple userSimple = new WlyyUserSimple();
 | 
	
		
			
				|  |  |                                 return getFailedResponse("您的账号未认证,请联系互联网医院工作人员,联系电话0592-2108763。",-1,userSimple);
 | 
	
		
			
				|  |  |                             }
 | 
	
		
			
				|  |  |                             if (idCard==null||idCard==""){
 | 
	
		
			
				|  |  |                                 logger.info("身份证为空");
 | 
	
		
			
				|  |  |                             }else {
 | 
	
		
			
				|  |  |                                 ykyyService.updateYkyyDoctor(idCard,verifyCode,yktDoctorId);
 | 
	
		
			
				|  |  |                             }
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 parameters.remove("password");
 | 
	
		
			
				|  |  |             } else if (parameters.get("mobile") != null) {
 | 
	
		
			
				|  |  |                 KeyPair keyPair = (KeyPair) httpSession.getAttribute("privateKey");
 | 
	
		
			
				|  |  |                 String mobile = com.yihu.jw.security.utils.RSAUtils.decryptBase64(parameters.get("mobile"), keyPair);
 | 
	
		
			
				|  |  |                 logger.info("mobile:"+mobile);
 | 
	
		
			
				|  |  |                 String password = null;
 | 
	
		
			
				|  |  |                 String res = ykyyService.getDoctorPhone(mobile);
 | 
	
		
			
				|  |  |                 if (res!=null&&res!=""){
 | 
	
		
			
				|  |  |                     JSONObject object = JSONObject.parseObject(res);
 | 
	
		
			
				|  |  |                     if (object.getString("code").equalsIgnoreCase("200")){
 | 
	
		
			
				|  |  |                         password = object.getString("data");
 | 
	
		
			
				|  |  |                     }else {
 | 
	
		
			
				|  |  |                         WlyyUserSimple userSimple = new WlyyUserSimple();
 | 
	
		
			
				|  |  |                         return getFailedResponse(object.getString("msg"),-1,userSimple);
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 String response = ykyyService.DoctorLogin(parameters.get("username"),password);
 | 
	
		
			
				|  |  |                 if (!StringUtils.isEmpty(response)){
 | 
	
		
			
				|  |  |                     JSONObject object = JSONObject.parseObject(response);
 | 
	
		
			
				|  |  |                     logger.info("眼科通登陆返回参数:"+object);
 | 
	
		
			
				|  |  |                     if (!object.getString("code").equalsIgnoreCase("10000")){
 | 
	
		
			
				|  |  |                         WlyyUserSimple userSimple = new WlyyUserSimple();
 | 
	
		
			
				|  |  |                         return getFailedResponse(object.getString("message"),-1,userSimple);
 | 
	
		
			
				|  |  |                     }else {
 | 
	
		
			
				|  |  |                         JSONObject jsonObject = object.getJSONObject("value");
 | 
	
		
			
				|  |  |                         if (jsonObject!=null) {
 | 
	
		
			
				|  |  |                             String idCard = jsonObject.getString("idCard");
 | 
	
		
			
				|  |  |                             String verifyCode = jsonObject.getString("verifyCode");
 | 
	
		
			
				|  |  |                             String yktDoctorId= jsonObject.getString("id");
 | 
	
		
			
				|  |  |                             BaseDoctorDO doctorDOs = doctorDao.findByIdcard(idCard);
 | 
	
		
			
				|  |  |                             if (doctorDOs!=null){
 | 
	
		
			
				|  |  |                                 doctorDOs.setVerifyCode(verifyCode);
 | 
	
		
			
				|  |  |                                 doctorDOs.setYktDoctorId(yktDoctorId);
 | 
	
		
			
				|  |  |                                 /*doctorDOs.setYktCode();*/
 | 
	
		
			
				|  |  |                                 doctorDao.save(doctorDOs);
 | 
	
		
			
				|  |  |                             }else {
 | 
	
		
			
				|  |  |                                 WlyyUserSimple userSimple = new WlyyUserSimple();
 | 
	
		
			
				|  |  |                                 return getFailedResponse("您的账号未认证,请联系互联网医院工作人员,联系电话0592-2108763。",-1,userSimple);
 | 
	
		
			
				|  |  |                             }
 | 
	
		
			
				|  |  |                             if (idCard==null||idCard==""){
 | 
	
		
			
				|  |  |                                 logger.info("身份证为空");
 | 
	
		
			
				|  |  |                             }else {
 | 
	
		
			
				|  |  |                                 ykyyService.updateYkyyDoctor(idCard,verifyCode,yktDoctorId);
 | 
	
		
			
				|  |  |                             }
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 parameters.remove("password");
 | 
	
		
			
				|  |  |             }else {
 | 
	
		
			
				|  |  |                 //第三方同步账号模式登录
 | 
	
		
			
				|  |  |                 parameters.put("grant_type", "ihealthDcotor");
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         } else {
 | 
	
		
			
				|  |  |             parameters.put("grant_type", "captcha");
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         logger.info("login:登录进入3");
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         ClientDetails authenticatedClient = clientDetailsService.loadClientByClientId(client_id);
 | 
	
		
			
				|  |  |         if (null == authenticatedClient) {
 | 
	
		
			
				|  |  |             throw new InvalidRequestException("client_id");
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         logger.info("login:登录进入4"+authenticatedClient.getClientId());
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         TokenRequest tokenRequest = oAuth2RequestFactory.createTokenRequest(parameters, authenticatedClient);
 | 
	
		
			
				|  |  |         oAuth2RequestValidator.validateScope(tokenRequest, authenticatedClient);
 | 
	
		
			
				|  |  |         OAuth2AccessToken token = getTokenGranter().grant(tokenRequest.getGrantType(), tokenRequest);
 | 
	
		
			
				|  |  |         if (token == null) {
 | 
	
		
			
				|  |  |             throw new UnsupportedGrantTypeException("Unsupported grant type: " + tokenRequest.getGrantType());
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         /*如果是移动端登陆则移除之前的token,
 | 
	
		
			
				|  |  |         在网关处通过HTTP状态码告知前端是过期(402)还是账号在别处登陆(403),
 | 
	
		
			
				|  |  |         实现同一账号只能在一处登陆*/
 | 
	
		
			
				|  |  |         HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
 | 
	
		
			
				|  |  |         if (request.getHeader("login-device") != null && (request.getHeader("login-device").equalsIgnoreCase("mobile")||request.getHeader("login-device").equalsIgnoreCase("pc"))) {
 | 
	
		
			
				|  |  |             tokenStore.removeAccessToken(token.getValue());
 | 
	
		
			
				|  |  |             tokenStore.removeRefreshToken(token.getRefreshToken().getValue());
 | 
	
		
			
				|  |  |             token = getTokenGranter().grant(tokenRequest.getGrantType(), tokenRequest);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         if (token == null) {
 | 
	
		
			
				|  |  |             throw new UnsupportedGrantTypeException("Unsupported grant type: " + tokenRequest.getGrantType());
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         WlyyUserSimple wlyyUserSimple = userDetailsService.authSuccess(parameters.get("username"));
 | 
	
		
			
				|  |  |         wlyyUserSimple.setAccessToken(token.getValue());
 | 
	
		
			
				|  |  |         wlyyUserSimple.setTokenType(token.getTokenType());
 | 
	
		
			
				|  |  |         wlyyUserSimple.setExpiresIn(token.getExpiresIn());
 | 
	
		
			
				|  |  |         wlyyUserSimple.setRefreshToken(token.getRefreshToken().getValue());
 | 
	
		
			
				|  |  |         wlyyUserSimple.setUser(parameters.get("username"));
 | 
	
		
			
				|  |  |         wlyyUserSimple.setState(parameters.get("state"));
 | 
	
		
			
				|  |  |         String loginType = parameters.get("login_type");
 | 
	
		
			
				|  |  |         String openid = parameters.get("openid");
 | 
	
		
			
				|  |  |         String wechatId = parameters.get("wechatId");
 | 
	
		
			
				|  |  |         logger.info("login:登录进入7");
 | 
	
		
			
				|  |  |         //更新患者openId
 | 
	
		
			
				|  |  |         BaseLoginLogDO baseLoginLogDO = new BaseLoginLogDO();
 | 
	
		
			
				|  |  |         logger.info("gengxin开始");
 | 
	
		
			
				|  |  |         if (!StringUtils.isEmpty(openid) && !"undefined".equalsIgnoreCase(openid) && ("3".equals(loginType)||"4".equalsIgnoreCase(loginType))) {
 | 
	
		
			
				|  |  |             baseLoginLogDO.setOpenid(openid);
 | 
	
		
			
				|  |  |             logger.info("gengxin进入"+openid);
 | 
	
		
			
				|  |  |             userDetailsService.updateOpenId(openid, wlyyUserSimple.getId());
 | 
	
		
			
				|  |  |             if (!StringUtils.isEmpty(wechatId)&& !"undefined".equalsIgnoreCase(wechatId)){
 | 
	
		
			
				|  |  |                 logger.info("gengxin进入"+wechatId);
 | 
	
		
			
				|  |  |                 userDetailsService.updateOpenIdAndWechatId(openid,wlyyUserSimple.getId(),wechatId);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         if (parameters.get("password") != null) {
 | 
	
		
			
				|  |  |             //使用密码登录成功后, 更新失败次数为 0
 | 
	
		
			
				|  |  |             userDetailsService.addFailureCount(username, 0);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         userDetailsService.setRolePhth(loginType, token, wlyyUserSimple.getId(), redisTemplate);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         baseLoginLogDO.setUserId(wlyyUserSimple.getId());
 | 
	
		
			
				|  |  |         baseLoginLogDO.setCreateTime(new Date());
 | 
	
		
			
				|  |  |         String userAgent = JSONObject.toJSONString(wlyyUserSimple);
 | 
	
		
			
				|  |  |         baseLoginLogDO.setUserAgent(userAgent);
 | 
	
		
			
				|  |  |         baseLoginLogDO.setLoginType(loginType);
 | 
	
		
			
				|  |  |         baseLoginLogService.save(baseLoginLogDO);
 | 
	
		
			
				|  |  |         return getResponse(wlyyUserSimple);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @RequestMapping(value = "/oauth/imgCaptcha", method = RequestMethod.GET)
 | 
	
		
			
				|  |  |     @ApiOperation("生成验证码")
 | 
	
		
			
				|  |  |     public ObjEnvelop createCaptcha()throws Exception{
 | 
	
	
		
			
				|  | @ -3624,4 +3809,5 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
 | 
	
		
			
				|  |  |         return getResponse(wlyyUserSimple);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | }
 |