|  |  | 
 |  |  | import com.doumee.biz.system.SystemDictDataBiz; | 
 |  |  | import com.doumee.config.jwt.JwtTokenUtil; | 
 |  |  | import com.doumee.core.exception.BusinessException; | 
 |  |  | import com.doumee.core.utils.DateUtil; | 
 |  |  | import com.doumee.dao.system.dto.LoginCabinetDTO; | 
 |  |  | import com.doumee.dao.system.dto.LoginH5DTO; | 
 |  |  | import com.doumee.service.business.third.TmsService; | 
 |  |  | import com.doumee.service.business.third.model.LoginUserInfo; | 
 |  |  | 
 |  |  |                 throw e; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         LoginUserInfo user = dealLoginByPwdNewBiz(dto.getUsername(),dto.getPassword(),null,dto.getOpenid(),request); | 
 |  |  |         systemLoginLogService.create(loginLog); | 
 |  |  |         return  user; | 
 |  |  |         try { | 
 |  |  |             LoginUserInfo user = dealLoginByPwdNewBiz(dto.getUsername(),dto.getPassword(),null,dto.getOpenid(),dto.getDdUnionId(),request); | 
 |  |  |             systemLoginLogService.create(loginLog); | 
 |  |  |             return  user; | 
 |  |  |         }catch (BusinessException e){ | 
 |  |  |             loginLog.setSuccess(Boolean.FALSE); | 
 |  |  |             systemLoginLogService.create(loginLog); | 
 |  |  |             throw e; | 
 |  |  |  | 
 |  |  |         }catch (Exception e){ | 
 |  |  |             loginLog.setSuccess(Boolean.FALSE); | 
 |  |  |             systemLoginLogService.create(loginLog); | 
 |  |  |             throw e; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public LoginUserInfo loginByPasswordForCabinet(LoginCabinetDTO dto, ServerHttpRequest request) { | 
 |  |  |         SystemLoginLog loginLog = getInitLoginlog(dto.getUsername(),request); | 
 |  |  |         try { | 
 |  |  |             LoginUserInfo user = dealLoginByPwdNewBiz(dto.getUsername(),dto.getPassword(),null,null,null,request); | 
 |  |  |             systemLoginLogService.create(loginLog); | 
 |  |  |             return  user; | 
 |  |  |         }catch (BusinessException e){ | 
 |  |  |             loginLog.setSuccess(Boolean.FALSE); | 
 |  |  |             systemLoginLogService.create(loginLog); | 
 |  |  |             throw e; | 
 |  |  |  | 
 |  |  |         }catch (Exception e){ | 
 |  |  |             loginLog.setSuccess(Boolean.FALSE); | 
 |  |  |             systemLoginLogService.create(loginLog); | 
 |  |  |             throw e; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public LoginUserInfo loginH5 (LoginH5DTO dto, ServerHttpRequest request) { | 
 |  |  |         SystemLoginLog loginLog = getInitLoginlog(dto.getUsername(),request); | 
 |  |  | 
 |  |  |                 throw e; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         LoginUserInfo user = dealLoginByPwdNewBiz(dto.getUsername(),dto.getPassword(),null,dto.getOpenid(),request); | 
 |  |  |         LoginUserInfo user = dealLoginByPwdNewBiz(dto.getUsername(),dto.getPassword(),null,dto.getOpenid(),dto.getDdUnionId(),request); | 
 |  |  |         systemLoginLogService.create(loginLog); | 
 |  |  |         return  user; | 
 |  |  |     } | 
 |  |  | 
 |  |  |             loginLog.setPlatform(Utils.User_Client.getPlatform(request)); | 
 |  |  |             loginLog.setClientInfo(Utils.User_Client.getBrowser(request)); | 
 |  |  |             loginLog.setOsInfo(Utils.User_Client.getOS(request)); | 
 |  |  |             loginLog.setSuccess(Boolean.TRUE); | 
 |  |  |         } | 
 |  |  |         loginLog.setServerIp(Utils.Server.getIP()); | 
 |  |  |         return  loginLog; | 
 |  |  | 
 |  |  |     public LoginUserInfo loginH5ByPhone(LoginPhoneDTO dto, ServerHttpRequest request) { | 
 |  |  |         isCaptcheValide(dto.getPhone(),dto.getCode());//检查验证码 | 
 |  |  |         SystemLoginLog loginLog = getInitLoginlog(dto.getPhone(),request); | 
 |  |  |         LoginUserInfo userInfo = dealLoginByPwdNewBiz(null,null,dto.getPhone(),dto.getOpenid(), request ); | 
 |  |  |         systemLoginLogService.create(loginLog); | 
 |  |  |         return userInfo; | 
 |  |  |         try{ | 
 |  |  |             LoginUserInfo userInfo = dealLoginByPwdNewBiz(null,null,dto.getPhone(),dto.getOpenid(),dto.getDdUnionId(), request ); | 
 |  |  |             systemLoginLogService.create(loginLog); | 
 |  |  |             return userInfo; | 
 |  |  |         }catch (BusinessException e){ | 
 |  |  |             loginLog.setSuccess(Boolean.FALSE); | 
 |  |  |             systemLoginLogService.create(loginLog); | 
 |  |  |             throw e; | 
 |  |  |  | 
 |  |  |         }catch (Exception e){ | 
 |  |  |             loginLog.setSuccess(Boolean.FALSE); | 
 |  |  |             systemLoginLogService.create(loginLog); | 
 |  |  |             throw e; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |     private LoginUserInfo dealLoginByPwdNewBiz(String username,String pwd, String phone, String openid, ServerHttpRequest request) { | 
 |  |  |     private LoginUserInfo dealLoginByPwdNewBiz(String username,String pwd, String phone, String openid, String ddUnionId, ServerHttpRequest request) { | 
 |  |  |         // 根据用户名查询用户对象 | 
 |  |  |         SystemUser queryDto = new SystemUser(); | 
 |  |  |         queryDto.setMobile(phone); | 
 |  |  | 
 |  |  |         if(!Constants.equalsInteger(user.getSource(),Constants.ZERO)){ | 
 |  |  |             throw new BusinessException(ResponseStatus.NO_ALLOW_LOGIN); | 
 |  |  |         } | 
 |  |  |         if(StringUtils.isNotBlank( pwd)){ | 
 |  |  |             String pppp = Utils.Secure.encryptPassword(new String(pwd), user.getSalt()); | 
 |  |  |             // 比较密码 | 
 |  |  |             if( !StringUtils.equals(pppp, user.getPassword())){ | 
 |  |  |                 throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT); | 
 |  |  |             } | 
 |  |  |         this.checkPassword(user,pwd); | 
 |  |  | //        if(StringUtils.isNotBlank( pwd)){ | 
 |  |  | //            String pppp = Utils.Secure.encryptPassword(new String(pwd), user.getSalt()); | 
 |  |  | //            // 比较密码 | 
 |  |  | //            if( !StringUtils.equals(pppp, user.getPassword())){ | 
 |  |  | //                throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT); | 
 |  |  | //            } | 
 |  |  | //        } | 
 |  |  |         if(StringUtils.isNotBlank(openid)){ | 
 |  |  |             dealOpenIdBiz(user,openid); | 
 |  |  |         } | 
 |  |  |         dealOpenIdBiz(user,openid); | 
 |  |  |         if(StringUtils.isNotBlank(ddUnionId)){ | 
 |  |  |             dealDDUnionIdBiz(user,ddUnionId); | 
 |  |  |         } | 
 |  |  |         Company company = new Company(); | 
 |  |  |         if(Objects.nonNull(user.getCompanyId())){ | 
 |  |  |             company = companyMapper.selectById(user.getCompanyId()); | 
 |  |  | 
 |  |  |         return  userInfo; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     public void checkPassword(SystemUser user,String pwd){ | 
 |  |  |         //验证是否已禁止登录 | 
 |  |  |         this.prohibitLogin(user); | 
 |  |  |         String pppp = Utils.Secure.encryptPassword(new String(pwd), user.getSalt()); | 
 |  |  |         // 比较密码 | 
 |  |  |         if( !StringUtils.equals(pppp, user.getPassword())){ | 
 |  |  |             //是否开启密码错误禁止登录:0=否;1=是; | 
 |  |  |             SystemDictData prohibitLoginData = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PROHIBIT_LOGIN_OPEN); | 
 |  |  |             //密码错误禁止登录限制时间(分钟) | 
 |  |  |             SystemDictData prohibitTimeData = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PROHIBIT_TIME); | 
 |  |  |             updErrTimes(user,prohibitLoginData,prohibitTimeData); | 
 |  |  |             if(Objects.nonNull(prohibitLoginData)&&"1".equals(prohibitLoginData.getCode())){ | 
 |  |  |                 SystemDictData prohibitErrTimesData = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ERR_TIMES); | 
 |  |  |                 if(Objects.nonNull(prohibitErrTimesData)){ | 
 |  |  |                     if(Integer.valueOf(prohibitErrTimesData.getCode()) | 
 |  |  |                             -(Constants.formatIntegerNum(user.getErrTimes())+1) == Constants.ZERO){ | 
 |  |  |                         throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(),"账号密码错误,账户已锁定,请"+prohibitTimeData.getCode()+"分钟后重试!"); | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                     throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(),"账号密码错误,剩余尝试次数"+(Integer.valueOf(prohibitErrTimesData.getCode()) | 
 |  |  |                             -(Constants.formatIntegerNum(user.getErrTimes())+1))+"次,超出错误次数将锁定账号"); | 
 |  |  |                 } | 
 |  |  |                 throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT); | 
 |  |  |             }else{ | 
 |  |  |                 throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT); | 
 |  |  |             } | 
 |  |  |         }else{ | 
 |  |  |             systemUserMapper.update(null,new UpdateWrapper<SystemUser>().lambda() | 
 |  |  |                     .set(SystemUser::getProhibitStatus,Constants.ZERO) | 
 |  |  |                     .set(SystemUser::getErrTimes,Constants.ZERO) | 
 |  |  |                     .setSql(" PROHIBIT_TIME = null ") | 
 |  |  |                     .setSql(" PROHIBIT_REMARK = null ") | 
 |  |  |                     .eq(SystemUser::getId,user.getId()) | 
 |  |  |             ); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void updErrTimes(SystemUser systemUser,SystemDictData prohibitLoginData,SystemDictData prohibitTimeData){ | 
 |  |  |         //最大错误次数 进行登录限制 | 
 |  |  |         SystemDictData prohibitErrTimesData = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ERR_TIMES); | 
 |  |  |         if(Objects.isNull(prohibitTimeData)||Objects.isNull(prohibitLoginData)||Objects.isNull(prohibitTimeData)){ | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         systemUserMapper.update(null,new UpdateWrapper<SystemUser>().lambda() | 
 |  |  |                 .setSql( " PROHIBIT_STATUS = CASE WHEN "+prohibitLoginData.getCode()+" = 1 and ( IFNULL(ERR_TIMES,0) + 1  ) >= "+prohibitErrTimesData.getCode()+" then 1 else 0 end  ") | 
 |  |  |                 .setSql(" PROHIBIT_TIME = CASE WHEN  PROHIBIT_STATUS = 1  then DATE_ADD(NOW(), INTERVAL "+prohibitTimeData.getCode()+" MINUTE) else null end  ") | 
 |  |  |                 .setSql(" ERR_TIMES = (ifnull(ERR_TIMES,0) + 1) ") | 
 |  |  |                 .setSql(" PROHIBIT_REMARK = '于"+DateUtil.getCurrDateTime()+"登录密码错误次数过多,禁止登录!' ") | 
 |  |  |                 .eq(SystemUser::getId,systemUser.getId()) | 
 |  |  |         ); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void prohibitLogin(SystemUser systemUser){ | 
 |  |  |         if(Constants.equalsInteger(systemUser.getProhibitStatus(),Constants.ONE)){ | 
 |  |  |             Long betweenMin = DateUtil.getBetweenMin(new Date(),systemUser.getProhibitTime()); | 
 |  |  |             if(betweenMin <= 0L){ | 
 |  |  |                 betweenMin = 0L; | 
 |  |  |             } | 
 |  |  |             throw new BusinessException( ResponseStatus.NOT_ALLOWED.getCode(),"密码错误次数过多,请后"+ betweenMin +"分钟后重试"); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public LoginUserInfo loginByPasswordForPda(LoginDTO dto, ServerHttpRequest request) { | 
 |  |  |         SystemLoginLog loginLog =getInitLoginlog(dto.getUsername(),request); | 
 |  |  | 
 |  |  |         if(!Constants.equalsInteger(user.getSource(),Constants.ZERO)){ | 
 |  |  |             throw new BusinessException(ResponseStatus.NO_ALLOW_LOGIN); | 
 |  |  |         } | 
 |  |  |         String pwd = Utils.Secure.encryptPassword(new String(dto.getPassword()), user.getSalt()); | 
 |  |  |         // 比较密码 | 
 |  |  |         if( !StringUtils.equals(pwd, user.getPassword())){ | 
 |  |  |             throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  | //        String pwd = Utils.Secure.encryptPassword(new String(dto.getPassword()), user.getSalt()); | 
 |  |  | //        // 比较密码 | 
 |  |  | //        if( !StringUtils.equals(pwd, user.getPassword())){ | 
 |  |  | //            throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT); | 
 |  |  | //        } | 
 |  |  |  | 
 |  |  |         this.checkPassword(user,dto.getPassword()); | 
 |  |  |         dealOpenIdBiz(user,dto.getOpenid()); | 
 |  |  |         Company company = new Company(); | 
 |  |  |         if(Objects.nonNull(user.getCompanyId())){ | 
 |  |  | 
 |  |  |             ); | 
 |  |  |             systemUserMapper.update(null,new UpdateWrapper<SystemUser>().lambda() | 
 |  |  |                     .set(SystemUser::getOpenid,openid) | 
 |  |  |                     .set(SystemUser::getOpenidHkStatus,Constants.ZERO) | 
 |  |  |                     .set(SystemUser::getOpenidHkDate,null) | 
 |  |  |                     .set(SystemUser::getOpenidHkInfo,null) | 
 |  |  |                     .eq(SystemUser::getId,user.getId())); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private void dealDDUnionIdBiz(SystemUser user, String ddUnionId) { | 
 |  |  |         if(StringUtils.isNotBlank(ddUnionId)){ | 
 |  |  |             //如果openId不为空,绑定该用户openid | 
 |  |  |             systemUserMapper.update(null,new UpdateWrapper<SystemUser>().lambda() | 
 |  |  |                     .set(SystemUser::getDdUnionId,null) | 
 |  |  |                     .set(SystemUser::getOpenidHkStatus,Constants.ZERO) | 
 |  |  |                     .ne(SystemUser::getType,Constants.memberType.gkuser) | 
 |  |  |                     .eq(SystemUser::getDdUnionId,ddUnionId) | 
 |  |  |             ); | 
 |  |  |             systemUserMapper.update(null,new UpdateWrapper<SystemUser>().lambda() | 
 |  |  |                     .set(SystemUser::getDdUnionId,ddUnionId) | 
 |  |  |                     .set(SystemUser::getOpenidHkStatus,Constants.ZERO) | 
 |  |  |                     .set(SystemUser::getOpenidHkDate,null) | 
 |  |  |                     .set(SystemUser::getOpenidHkInfo,null) | 
 |  |  | 
 |  |  |             throw new BusinessException(ResponseStatus.NO_ALLOW_LOGIN.getCode(),"对不起,该账号不能登录司机端哦!"); | 
 |  |  |         } | 
 |  |  |         if(StringUtils.isNotBlank(password)){ | 
 |  |  |             String pwd = Utils.Secure.encryptPassword(new String(password), user.getSalt()); | 
 |  |  |             // 比较密码 | 
 |  |  |             if( !StringUtils.equals(pwd, user.getPassword())){ | 
 |  |  |                 throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT); | 
 |  |  |             } | 
 |  |  | //            String pwd = Utils.Secure.encryptPassword(new String(password), user.getSalt()); | 
 |  |  | //            // 比较密码 | 
 |  |  | //            if( !StringUtils.equals(pwd, user.getPassword())){ | 
 |  |  | //                throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT); | 
 |  |  | //            } | 
 |  |  |             this.checkPassword(user,password); | 
 |  |  |         } | 
 |  |  |         dealOpenIdBiz(user,openid); | 
 |  |  |         Company company = new Company(); |