Пример #1
0
  public void update() throws SQLException {
    Connection connection = database.getConnection();
    Statement statement = null;
    ResultSet resultSet = null;
    try {
      statement = connection.createStatement();
      List<VisitChainItem> toSquash = new ArrayList<VisitChainItem>();
      VisitChainItem previousVisitChainItem = new VisitChainItem(0, 0, null, null);
      resultSet =
          statement.executeQuery(
              "SELECT visit_id1, visit_id2, date_stopped1, date_stopped2 "
                  + "FROM visit_migration "
                  + "ORDER by patient_id asc, date_started1 asc");
      while (resultSet.next()) {
        VisitChainItem visitChainItem =
            new VisitChainItem(
                resultSet.getInt("visit_id1"),
                resultSet.getInt("visit_id2"),
                resultSet.getTimestamp("date_stopped1"),
                resultSet.getTimestamp("date_stopped2"));
        try {
          if (toSquash.size() == 0) {
            toSquash.add(visitChainItem);
            continue;
          }

          if (visitChainItem.getVisit1Id() != previousVisitChainItem.getVisit2Id()) {
            squash(toSquash);
            toSquash.clear();
          }
          toSquash.add(visitChainItem);
        } finally {
          previousVisitChainItem = visitChainItem;
        }
      }
    } catch (SQLException e) {
      throw new RuntimeException(e);
    } finally {
      resultSet.close();
      statement.close();
      connection.close();
      writeConnection.close();
    }
  }
Пример #2
0
  private void squash(List<VisitChainItem> visitChainItems) {
    for (VisitChainItem visitChainItem : visitChainItems) {
      System.out.println(visitChainItem);
    }
    System.out.println("----------");
    int rootVisitId = visitChainItems.get(0).getVisit1Id();
    Timestamp dateStoppedForRootVisit =
        visitChainItems.get(visitChainItems.size() - 1).getVisit2DateStopped();

    Connection connection = writeConnection;
    PreparedStatement statement = null;
    try {
      statement =
          connection.prepareStatement("update visit set date_stopped = ? where visit_id = ?");
      statement.setTimestamp(1, dateStoppedForRootVisit);
      statement.setInt(2, rootVisitId);
      statement.executeUpdate();
      statement.close();
    } catch (SQLException e) {
      throw new RuntimeException(e);
    }

    for (VisitChainItem visitChainItem : visitChainItems) {
      try {
        statement =
            connection.prepareStatement("update encounter set visit_id = ? where visit_id = ?");
        statement.setInt(1, rootVisitId);
        statement.setInt(2, visitChainItem.getVisit2Id());
        statement.executeUpdate();
        statement.close();

        statement =
            connection.prepareStatement(
                "update visit set voided = true, voided_by = 1, date_voided = curdate() where visit_id = ?");
        statement.setInt(1, visitChainItem.getVisit2Id());
        statement.executeUpdate();
        statement.close();
      } catch (SQLException e) {
        throw new RuntimeException(e);
      }
    }
  }