|
@ -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);
|
|
|
}
|
|
|
|
|
|
|
|
|
}
|