@Override
  @Transactional(readOnly = false, rollbackFor = Throwable.class)
  public int login(
      String loginName,
      String loginPwd,
      String checkCode,
      Long systemId,
      HttpServletRequest request)
      throws Exception {
    // 检查验证码是否正确
    if (!SessionUtils.checkSessionValue(
        request, SessionNameConstants.IMG_CHECK_CODE, checkCode)) // 验证失败
    {
      return ResultConstants.IMG_CODE_FAILED;
    }

    // 检查登录名和密码是否正确 MD5Utils.toMD5(loginPwd)
    SysLogin sysLogin =
        ((SysLoginDAO) baseDao).login(loginName, MD5Utils.toMD5(loginPwd), systemId);
    if (sysLogin == null) {
      return ResultConstants.LOGIN_INFO_FAILED;
    }
    if (sysLogin.getStatus().equals(CommonConstants.STATUS_INVALID)) {
      return ResultConstants.LOGIN_INFO_INVAILD;
    }

    // 加载登录用户的相关信息到登录令牌
    LoginToken loginToken = this.getAdminLoginToken(sysLogin);
    // 保存登录用户信息到http session
    SessionUtils.setObjectAttribute(request, SessionNameConstants.LOGIN_TOKEN, loginToken);

    // 修改最后登录时间
    sysLogin.setLoginLastTime(DateTimeUtil.getChar14());
    baseDao.update(sysLogin);
    // 保存系统日志
    sysLogService.save(SysLog.OPERATE_TYPE_LOGIN, "【用户登录】用户名:" + sysLogin.getLoginName());
    return ResultConstants.LOGIN_SUCCESS;
  }