package com.gx.obe.business; import java.util.Map; import org.apache.commons.lang3.StringUtils; import com.gx.obe.components.core.Constants; import com.gx.obe.components.core.enumeration.CommonEnum; import com.gx.obe.components.core.enumeration.UserEnum; import com.gx.obe.components.core.vo.AuthUserVo; import com.gx.obe.enttiytdo.BooleanResultDO; import com.gx.obe.enttiytdo.LoginUserDTO; import com.gx.obe.enttiytdo.PlatformResult; import com.gx.obe.http.json.JsonUtil; import com.gx.obe.http.util.ObjectUtil; import com.gx.obe.util.utils.MD5Utils; import com.gx.obe.util.utils.UuidUtils; import com.gx.obe.web.entity.Result.ResultEntity; import com.gx.obe.web.entity.auth.AuthUser; import com.gx.obe.web.platform.service.PlatformUserService; import com.gx.obe.web.service.UserService; import com.gx.obe.web.utils.DESUtils; /** * @Description: * @author mazc */ public class UserLogin { private UserService userService = new UserService(); private PlatformUserService platformUserService = new PlatformUserService(); private boolean isRemote; public BooleanResultDO loginUser(String userName,String password) { BooleanResultDO result = null; //验证本地用户信息(登录成功状态 用户信息) ResultEntity<AuthUserVo> resultUser = userService.loginUserAndPassword(userName,MD5Utils.getMD5String(password)); AuthUser user = null; if( null != resultUser.getData()) { user = resultUser.getData().getAuthUserEntity(); } //登录成功 if(ResultEntity.SUCCESS == resultUser.getCode()) { if(UserEnum.USER_SOURCE_REMOTE.equals(user.getSource())) { isRemote=true; //平台验证 result= platformVerification(userName,password); if(result.isStatus()) { //if(result.) Constants.USER = user; Constants.TOKEN = resultUser.getData().getAtuokthen(); } return result; }else { Constants.USER = user; Constants.TOKEN = resultUser.getData().getAtuokthen(); return new BooleanResultDO(true,""); } }else {//登录失败 if(null == user) { //账号不存在平台验证 result = accountNotExistPlatformVerification(userName,password); }else { // 更新账号密码 result = accountUpdatePassword( user, password , userName); } if(result.isStatus()) { Constants.USER = userService.valLoginNameAndPwd(userName,MD5Utils.getMD5String(password)); if(null == Constants.USER) { result.setStatus(false); result.setStrMessage("远程登录异常!"); } } return result; } } /** * @Description: 本地账号存在更新密码 * @author mazc * @param user * @param password * @param userName * @return */ private BooleanResultDO accountUpdatePassword(AuthUser user,String password ,String userName) { BooleanResultDO result = null; if(!UserEnum.USER_SOURCE_LOCAL.equals(user.getSource())) { //平台验证 result = platformVerification( userName, password); if(result.isStatus()) { Constants.USER = user; //修改本地用户密码 boolean updateResult = userService.updatePassword(userName, MD5Utils.getMD5String(password),result.getStrMessage().length()>4?result.getStrMessage():null); if(updateResult) { result.setStatus(true); result.setStrMessage("已更新本地密码,登录成功"); }else { result.setStrMessage("更新本地密码失败,登录失败"); } user.setUserPassword(MD5Utils.getMD5String(password)); Constants.USER = userService.loginRemote(user); if(null == Constants.USER) { result.setStatus(false); result.setStrMessage("远程登录异常!"); } }else { return new BooleanResultDO(false,"用户名或密码错误"); } return result; }else { Constants.USER = user; return new BooleanResultDO(false,"用户名或密码错误"); } } /** * @Description: 账号不存在平台验证 * @author mazc * @param userName * @param password * @return */ private BooleanResultDO accountNotExistPlatformVerification(String userName,String password) { BooleanResultDO result = null; // 平台验证 PlatformResult<LoginUserDTO> platformResult = platformUserService.userNameLogin(userName, password); if(null == platformResult) { return new BooleanResultDO(false,"登录异常"); } if(Constants.PLATFOR_STATUS_OK.equals((String) platformResult.getHeader().getRet())) { result = new BooleanResultDO(true,""); }else { result = new BooleanResultDO(false,(String) platformResult.getHeader().getMsg()); } LoginUserDTO loginUserDTO = platformResult.getData(); String checkUserLogin = loginUserDTO.getCheckUserLogin(); if(result.isStatus()) { // 用户保存到本地库 LoginUserDTO loginUser = platformResult.getData(); if(ObjectUtil.isNull(loginUser) ) { return new BooleanResultDO(false,"登录异常"); } AuthUser remoteUser = new AuthUser(); remoteUser.setId(UuidUtils.getUUID()); remoteUser.setUserName(loginUser.getUserName()); remoteUser.setUserAccount(userName); remoteUser.setUserPassword( MD5Utils.getMD5String(password)); remoteUser.setUseStatus(CommonEnum.REAL_STATUS); remoteUser.setCompany(loginUser.getOrgName()); remoteUser.setSource(UserEnum.USER_SOURCE_REMOTE); Constants.USER = userService.loginRemote(remoteUser); // remoteUser = userService.createUserInfo(remoteUser); if(null == Constants.USER) { return new BooleanResultDO(false,"远程登录异常!"); } } // else { //// TODO如果服务没升级可以用这个方式登录 // AuthUser user = userService.valLoginNameAndPwd(userName, MD5Utils.getMD5String(password)); // Constants.USER = user; // return new BooleanResultDO(true,""); // } return result; } /** * @Description: 平台验证 * @author mazc * @return */ private BooleanResultDO platformVerification(String userName,String password){ PlatformResult<LoginUserDTO> platformResult = platformUserService.userNameLogin(userName, password); if(null == platformResult) { return new BooleanResultDO(false,"登录异常"); } LoginUserDTO loginUserDTO = platformResult.getData(); String checkUserLogin = loginUserDTO.getCheckUserLogin(); if(StringUtils.isEmpty(checkUserLogin)) { return new BooleanResultDO(false,"登录异常"); } if(Constants.PLATFOR_STATUS_OK.equals((String) platformResult.getHeader().getRet())) { String result = platformUserService.verify(checkUserLogin); if(null == result) { return new BooleanResultDO(false,"登录异常"); } try { String decrypt = DESUtils.decrypt(result, "utf-8"); Map<String,String> resultMap = JsonUtil.strToMap(decrypt); if(resultMap.get("ret").equals(Constants.PLATFOR_STATUS_OK)) { return new BooleanResultDO(true,checkUserLogin); } return new BooleanResultDO(false,(String) platformResult.getHeader().getMsg()); } catch (Exception e) { // TODO Auto-generated catch block return new BooleanResultDO(false,"登录异常"); } }else { return new BooleanResultDO(false,checkUserLogin); } } }