@Override
  public String getTargetTableName(String baseTableName, Object params, String mapperId) {
    if (params == null) {
      return baseTableName;
    }
    if (baseTableName == null
        || !BASE_TABLE_NAMES_FOR_SHARD.contains(baseTableName.toUpperCase())) {
      return baseTableName;
    }

    String targetTableName = baseTableName;
    if (params instanceof DubboMethodDayIP) {
      DubboMethodDayIP day = (DubboMethodDayIP) params;
      String appName = day.getAppName();

      if (!StringUtil.isEmpty(appName)) {
        targetTableName = baseTableName + "_" + appName.toString().toUpperCase();
      }
    } else if (params instanceof Map) {
      Map map = (Map) params;
      Object appName = map.get("appName");

      if (appName != null && !StringUtil.isEmpty(appName.toString())) {
        targetTableName = baseTableName + "_" + appName.toString().toUpperCase();
      }
    }

    if (!existsTableNames.contains(targetTableName)) {
      if (!isTableExists(targetTableName)) {
        createTable(targetTableName);
      }
      existsTableNames.add(targetTableName);
    }

    return targetTableName;
  }