|
@ -0,0 +1,155 @@
|
|
|
package com.yihu.wlyy.web.gateway.controller;
|
|
|
|
|
|
import com.yihu.wlyy.entity.doctor.profile.Doctor;
|
|
|
import com.yihu.wlyy.entity.login.LoginLog;
|
|
|
import com.yihu.wlyy.entity.security.Token;
|
|
|
import com.yihu.wlyy.service.common.SMSService;
|
|
|
import com.yihu.wlyy.service.common.account.DoctorService;
|
|
|
import com.yihu.wlyy.service.common.account.TokenService;
|
|
|
import com.yihu.wlyy.service.common.login.LoginLogService;
|
|
|
import com.yihu.wlyy.util.MD5;
|
|
|
import com.yihu.wlyy.util.RSAUtils;
|
|
|
import com.yihu.wlyy.web.gateway.vo.LoginModel;
|
|
|
import com.yihu.wlyy.web.gateway.vo.base.BaseResultModel;
|
|
|
import com.yihu.wlyy.web.gateway.vo.base.ResultOneModel;
|
|
|
import io.swagger.annotations.Api;
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
import io.swagger.annotations.ApiParam;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.json.JSONObject;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
|
/**
|
|
|
* Created by chenweida on 2017/8/18.
|
|
|
*/
|
|
|
@RestController
|
|
|
@RequestMapping("/wlyygc/")
|
|
|
@Api(description = "用户登陆服务")
|
|
|
public class GcLoginController {
|
|
|
@Autowired
|
|
|
private DoctorService doctorService;
|
|
|
@Autowired
|
|
|
private TokenService tokenService;
|
|
|
@Autowired
|
|
|
private LoginLogService loginLogService;
|
|
|
@Autowired
|
|
|
private SMSService smsService;
|
|
|
@Autowired
|
|
|
private RSAUtils rsaUtils;
|
|
|
/**
|
|
|
* 公钥生成并返回接口
|
|
|
*
|
|
|
* @return
|
|
|
*/
|
|
|
@RequestMapping(value = "public_key", method = RequestMethod.GET)
|
|
|
@ApiOperation("获取公钥")
|
|
|
public ResultOneModel publicKey() {
|
|
|
try {
|
|
|
String modulus = RSAUtils.getInstance(smsService).getModulus();
|
|
|
String exponent = RSAUtils.getInstance(smsService).getExponent();
|
|
|
if (StringUtils.isEmpty(modulus) || StringUtils.isEmpty(exponent)) {
|
|
|
return new ResultOneModel(BaseResultModel.codeEm.login_publickey_error.getCode(),BaseResultModel.codeEm.login_publickey_error.getMessage());
|
|
|
} else {
|
|
|
JSONObject json = new JSONObject();
|
|
|
json.put("modulus", modulus); //加密指数
|
|
|
json.put("exponent", exponent);//加密系数
|
|
|
return new ResultOneModel(json);
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
return new ResultOneModel(BaseResultModel.codeEm.login_publickey_error.getCode(),BaseResultModel.codeEm.login_publickey_error.getMessage());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 医生端要传 userAgent:{"id":4816,"uid":"xh1D2017031503333","token":"5d68d84dbb79996efba31192856139a4","platform":4,"imei":"05948CE4F079E998306CFCCF86A5A77F"}
|
|
|
*
|
|
|
* @param imei
|
|
|
* @param account
|
|
|
* @param platform
|
|
|
* @param password
|
|
|
* @return
|
|
|
*/
|
|
|
@RequestMapping(value = "/doctorlogin", method = RequestMethod.POST)
|
|
|
@ApiOperation("医生端登陆")
|
|
|
public ResultOneModel<LoginModel> doctorLogin(
|
|
|
@ApiParam(required = false, name = "imei", value = "imei号") @RequestParam(required = true, value = "imei") String imei,
|
|
|
@ApiParam(required = false, name = "account", value = "手机号/身份证") @RequestParam(required = false, value = "account") String account,
|
|
|
@ApiParam(required = false, name = "platform", value = "医生端pc,取药系统 或者对外系统") @RequestParam(required = false, defaultValue = "4") Integer platform,
|
|
|
@ApiParam(required = false, name = "password", value = "密码") @RequestParam(required = false) String password) {
|
|
|
|
|
|
String errorMessage;
|
|
|
LoginLog loginLog = new LoginLog();
|
|
|
loginLog.setCreateTime(new Date());
|
|
|
loginLog.setPhone(account);
|
|
|
loginLog.setType("2");
|
|
|
loginLog.setUserType("2");
|
|
|
try {
|
|
|
if (StringUtils.isEmpty(imei)) {
|
|
|
errorMessage = "获取IMEI码失败!";
|
|
|
loginLog.setErrorMessage(errorMessage);
|
|
|
loginLogService.saveLog(loginLog);
|
|
|
return new ResultOneModel<>(BaseResultModel.codeEm.login_IMEI_error.getCode(), BaseResultModel.codeEm.login_IMEI_error.getMessage());
|
|
|
}
|
|
|
if (platform == null) {
|
|
|
platform = 2;//默认为医生app端
|
|
|
}
|
|
|
//身份证登录
|
|
|
if (StringUtils.isNoneEmpty(account) && StringUtils.isNoneEmpty(password)) {
|
|
|
password = RSAUtils.getInstance(doctorService).decryptString(password);
|
|
|
password = StringUtils.reverse(password);
|
|
|
//根据电话号码找
|
|
|
Doctor doctor = doctorService.findDoctorByMobile(account);
|
|
|
if (doctor == null) {
|
|
|
//如果电话号码找不到 根据身份证找
|
|
|
doctor = doctorService.findbyIdCard(account);
|
|
|
}
|
|
|
|
|
|
loginLog.setLoginType("2");
|
|
|
if (doctor == null) {
|
|
|
errorMessage = "该号码未注册!";
|
|
|
loginLog.setErrorMessage(errorMessage);
|
|
|
loginLogService.saveLog(loginLog);
|
|
|
return new ResultOneModel<>(BaseResultModel.codeEm.login_account_error.getCode(), BaseResultModel.codeEm.login_account_error.getMessage());
|
|
|
}
|
|
|
loginLog.setUserCode(doctor.getCode());
|
|
|
String loginPassword = MD5.GetMD5Code(password + doctor.getSalt());
|
|
|
if (loginPassword.equals(doctor.getPassword())) {
|
|
|
|
|
|
Token token = tokenService.findDoctorToken(doctor.getCode());
|
|
|
if (token != null && platform == 4) {
|
|
|
//pc版本要做单点登陆 所以如果platform =4 并且 token存在直接返回之前的token
|
|
|
|
|
|
} else {
|
|
|
// 用户校验通过,生成token
|
|
|
token = tokenService.newToken(doctor.getCode(), imei, platform);
|
|
|
}
|
|
|
loginLog.setTokenId(token.getId());
|
|
|
loginLog.setType("1");
|
|
|
LoginModel loginModel = new LoginModel();
|
|
|
loginModel.setId(doctor.getId());
|
|
|
loginModel.setDoctorCode(doctor.getCode());
|
|
|
loginModel.setDoctorName(doctor.getName());
|
|
|
loginModel.setToken(token.getToken());
|
|
|
loginModel.setDoctorPhoto(doctor.getPhoto());
|
|
|
loginModel.setDoctorType(doctor.getLevel());
|
|
|
loginLogService.saveLog(loginLog);
|
|
|
|
|
|
return new ResultOneModel<>(loginModel);
|
|
|
} else {
|
|
|
errorMessage = "密码错误,登录失败";
|
|
|
loginLog.setErrorMessage(errorMessage);
|
|
|
loginLogService.saveLog(loginLog);
|
|
|
return new ResultOneModel<>(BaseResultModel.codeEm.login_password_error.getCode(), BaseResultModel.codeEm.login_password_error.getMessage());
|
|
|
}
|
|
|
}
|
|
|
return new ResultOneModel<>(BaseResultModel.codeEm.error_params.getCode(), BaseResultModel.codeEm.error_params.getMessage());
|
|
|
} catch (Exception e) {
|
|
|
loginLog.setErrorMessage(e.getMessage());
|
|
|
loginLogService.saveLog(loginLog);
|
|
|
return new ResultOneModel<>(BaseResultModel.codeEm.login_system_error.getCode(), BaseResultModel.codeEm.login_system_error.getMessage());
|
|
|
}
|
|
|
}
|
|
|
}
|