Skip to content
Snippets Groups Projects
Commit b8f3b4d5 authored by adityab3's avatar adityab3
Browse files

[backend] Added ability to specify zipcode sig figs in diagnosis DAO

parent 99f29752
No related branches found
No related tags found
1 merge request!8UC14: Reqeust Biosurveillance
...@@ -9,6 +9,7 @@ import java.util.ArrayList; ...@@ -9,6 +9,7 @@ import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.lang.IllegalArgumentException;
import edu.ncsu.csc.itrust.DBUtil; import edu.ncsu.csc.itrust.DBUtil;
import edu.ncsu.csc.itrust.beans.DiagnosisBean; import edu.ncsu.csc.itrust.beans.DiagnosisBean;
import edu.ncsu.csc.itrust.beans.DiagnosisStatisticsBean; import edu.ncsu.csc.itrust.beans.DiagnosisStatisticsBean;
...@@ -33,8 +34,8 @@ import edu.ncsu.csc.itrust.exception.DBException; ...@@ -33,8 +34,8 @@ import edu.ncsu.csc.itrust.exception.DBException;
*/ */
public class DiagnosesDAO { public class DiagnosesDAO {
private DAOFactory factory; private DAOFactory factory;
private DiagnosisBeanLoader loader = new DiagnosisBeanLoader(true); private DiagnosisBeanLoader loader = new DiagnosisBeanLoader(true);
/** /**
* @param factory * @param factory
...@@ -68,7 +69,12 @@ public class DiagnosesDAO { ...@@ -68,7 +69,12 @@ public class DiagnosesDAO {
} finally { } finally {
DBUtil.closeConnection(conn, ps); DBUtil.closeConnection(conn, ps);
} }
} }
// Use default value of 3 for zipSFs
public DiagnosisStatisticsBean getDiagnosisCounts(String icdCode, String zipCode, java.util.Date lower, java.util.Date upper) throws DBException{
return getDiagnosisCounts(icdCode, zipCode, lower, upper, 3);
}
/** /**
* Gets a local zip code count and regional count of a specified diagnosis code * Gets a local zip code count and regional count of a specified diagnosis code
...@@ -77,11 +83,17 @@ public class DiagnosesDAO { ...@@ -77,11 +83,17 @@ public class DiagnosesDAO {
* @param zipCode The zip code to evaluate * @param zipCode The zip code to evaluate
* @param lower The starting date * @param lower The starting date
* @param upper The ending date * @param upper The ending date
* @param zipSFs The number of significant figures (maximum 5)
* @return A bean containing the local and regional counts * @return A bean containing the local and regional counts
* @throws DBException * @throws DBException
*/ */
public DiagnosisStatisticsBean getDiagnosisCounts(String icdCode, String zipCode, java.util.Date lower, java.util.Date upper) throws DBException { public DiagnosisStatisticsBean getDiagnosisCounts(String icdCode, String zipCode, java.util.Date lower, java.util.Date upper, int zipSFs) throws DBException {
Connection conn = null; // Make sure user is not asking for more than 5 sig figs in zip
if (zipSFs < 0 || zipSFs > 5) {
throw new IllegalArgumentException("Invalid zip code significant figures.");
}
Connection conn = null;
PreparedStatement ps = null; PreparedStatement ps = null;
DiagnosisStatisticsBean dsBean = null; DiagnosisStatisticsBean dsBean = null;
try { try {
...@@ -99,7 +111,7 @@ public class DiagnosesDAO { ...@@ -99,7 +111,7 @@ public class DiagnosesDAO {
ps.close(); ps.close();
ps = conn.prepareStatement("SELECT * FROM ovdiagnosis INNER JOIN officevisits ON ovdiagnosis.VisitID=officevisits.ID INNER JOIN patients ON officevisits.PatientID=patients.MID WHERE ICDCode=? AND zip LIKE ? AND visitDate >= ? AND visitDate <= ? "); ps = conn.prepareStatement("SELECT * FROM ovdiagnosis INNER JOIN officevisits ON ovdiagnosis.VisitID=officevisits.ID INNER JOIN patients ON officevisits.PatientID=patients.MID WHERE ICDCode=? AND zip LIKE ? AND visitDate >= ? AND visitDate <= ? ");
ps.setString(1, icdCode); ps.setString(1, icdCode);
ps.setString(2, zipCode.substring(0, 3) + "%"); ps.setString(2, zipCode.substring(0, zipSFs) + "%");
ps.setTimestamp(3, new Timestamp(lower.getTime())); ps.setTimestamp(3, new Timestamp(lower.getTime()));
// add 1 day's worth to include the upper // add 1 day's worth to include the upper
ps.setTimestamp(4, new Timestamp(upper.getTime() + 1000L * 60L * 60 * 24L)); ps.setTimestamp(4, new Timestamp(upper.getTime() + 1000L * 60L * 60 * 24L));
...@@ -119,7 +131,12 @@ public class DiagnosesDAO { ...@@ -119,7 +131,12 @@ public class DiagnosesDAO {
DBUtil.closeConnection(conn, ps); DBUtil.closeConnection(conn, ps);
} }
} }
public ArrayList<DiagnosisStatisticsBean> getWeeklyCounts(String icdCode, String zipCode, java.util.Date lower, java.util.Date upper) throws DBException {
return getWeeklyCounts(icdCode, zipCode, lower, upper, 3);
}
/** /**
* Gets a weekly local zip code count and regional count of a specified diagnosis code over a time period * Gets a weekly local zip code count and regional count of a specified diagnosis code over a time period
...@@ -131,9 +148,7 @@ public class DiagnosesDAO { ...@@ -131,9 +148,7 @@ public class DiagnosesDAO {
* @return A list of beans containing the local and regional count for each week in the time period * @return A list of beans containing the local and regional count for each week in the time period
* @throws DBException * @throws DBException
*/ */
public ArrayList<DiagnosisStatisticsBean> getWeeklyCounts(String icdCode, String zipCode, java.util.Date lower, java.util.Date upper, int zipSFs) throws DBException {
// TODO: change to zipcode high/low
public ArrayList<DiagnosisStatisticsBean> getWeeklyCounts(String icdCode, String zipCode, java.util.Date lower, java.util.Date upper) throws DBException {
Calendar cal = Calendar.getInstance(); Calendar cal = Calendar.getInstance();
cal.setTime(lower); cal.setTime(lower);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
...@@ -144,7 +159,7 @@ public class DiagnosesDAO { ...@@ -144,7 +159,7 @@ public class DiagnosesDAO {
ArrayList<DiagnosisStatisticsBean> weekStats = new ArrayList<DiagnosisStatisticsBean>(); ArrayList<DiagnosisStatisticsBean> weekStats = new ArrayList<DiagnosisStatisticsBean>();
do { do {
DiagnosisStatisticsBean db = getDiagnosisCounts(icdCode, zipCode, lowerDate, upperDate); DiagnosisStatisticsBean db = getDiagnosisCounts(icdCode, zipCode, lowerDate, upperDate, zipSFs);
weekStats.add(db); weekStats.add(db);
cal.setTime(upperDate); cal.setTime(upperDate);
...@@ -156,8 +171,12 @@ public class DiagnosesDAO { ...@@ -156,8 +171,12 @@ public class DiagnosesDAO {
return weekStats; return weekStats;
} }
public DiagnosisStatisticsBean getCountForWeekOf(String icdCode, String zipCode, java.util.Date lower) throws DBException { public DiagnosisStatisticsBean getCountForWeekOf(String icdCode, String zipCode, java.util.Date lower) throws DBException {
return getCountForWeekOf(icdCode, zipCode, lower, 3);
}
public DiagnosisStatisticsBean getCountForWeekOf(String icdCode, String zipCode, java.util.Date lower, int zipSFs) throws DBException {
Calendar cal = Calendar.getInstance(); Calendar cal = Calendar.getInstance();
cal.setTime(lower); cal.setTime(lower);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment