From 0fd2997bebbb36f006e8193c80eb9fa3f8a3980f Mon Sep 17 00:00:00 2001 From: pegahtah Date: Mon, 17 May 2021 15:30:39 -0400 Subject: [PATCH 1/6] Tool for migrating kits from file to db --- .../dsm/util/tools/TbosUPSKitTool.java | 416 ++++++++++++++++++ 1 file changed, 416 insertions(+) create mode 100644 src/test/java/org/broadinstitute/dsm/util/tools/TbosUPSKitTool.java diff --git a/src/test/java/org/broadinstitute/dsm/util/tools/TbosUPSKitTool.java b/src/test/java/org/broadinstitute/dsm/util/tools/TbosUPSKitTool.java new file mode 100644 index 000000000..f0bd5f2e9 --- /dev/null +++ b/src/test/java/org/broadinstitute/dsm/util/tools/TbosUPSKitTool.java @@ -0,0 +1,416 @@ +package org.broadinstitute.dsm.util.tools; + +import org.apache.commons.lang3.StringUtils; +import org.broadinstitute.ddp.db.SimpleResult; +import org.broadinstitute.dsm.db.DDPInstance; +import org.broadinstitute.dsm.statics.DBConstants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.FileNotFoundException; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.time.Instant; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.Scanner; + +import static org.broadinstitute.ddp.db.TransactionWrapper.inTransaction; + +public class TbosUPSKitTool { + private static final Logger logger = LoggerFactory.getLogger(TbosUPSKitTool.class); + private static final String SQL_SELECT_KIT_BY_KIT_LABEL = "Select kit.dsm_kit_request_id, req.*, activity.*, pack.tracking_number " + + "FROM ddp_kit kit " + + " LEFT JOIN ddp_kit_request req ON (kit.dsm_kit_request_id = req.dsm_kit_request_id) " + + " left join ups_shipment shipment on (shipment.dsm_kit_request_id = kit.dsm_kit_request_id) " + + " left join ups_package pack on ( pack.ups_shipment_id = shipment.ups_shipment_id) " + + " left join ups_activity activity on (pack.ups_package_id = activity.ups_package_id) " + + " WHERE req.ddp_instance_id = ? and ( kit_label not like \"%\\\\_1\" ) and kit.dsm_kit_request_id > 0 " + + " and (shipment.ups_shipment_id is null or activity.ups_activity_id is null or activity.ups_activity_id in " + + " ( SELECT ac.ups_activity_id " + + " FROM ups_package pac INNER JOIN " + + " ( SELECT ups_package_id, MAX(ups_activity_id) maxId " + + " FROM ups_activity " + + " GROUP BY ups_package_id ) lastActivity ON pac.ups_package_id = lastActivity.ups_package_id INNER JOIN " + + " ups_activity ac ON lastActivity.ups_package_id = ac.ups_package_id " + + " AND lastActivity.maxId = ac.ups_activity_id " + + " )) " + + " and kit_label=? "; + private static final String SQL_SELECT_OUTBOUND = "and pack.tracking_number = kit.tracking_to_id "; + private static final String SQL_SELECT_INBOUND = "and pack.tracking_number = kit.tracking_return_id "; + private static final String SQL_INSERT_SHIPMENT = "INSERT INTO ups_shipment ( dsm_kit_request_id ) VALUES (?) "; + private static final String SQL_INSERT_PACKAGE = "INSERT INTO ups_package ( ups_shipment_id , tracking_number ) VALUES (?, ?) "; + private static final String SQL_INSERT_ACTIVITY = "INSERT INTO ups_activity ( ups_package_id, ups_status_description, ups_activity_date_time) VALUES (?, ?, ?)"; + + private static Map readFile(String fileName) { + Map> participants = new HashMap(); + String[] headers = new String[0]; //first row + File csv = new File(fileName); + try { + Scanner scanner = new Scanner(csv); + String headerString = scanner.nextLine(); + headers = headerString.split(","); + Kit kit = null; + String shortId = null; + while (scanner.hasNextLine()) { + if (kit != null && StringUtils.isNotBlank(shortId)) {// last kit of the participant in the last line + if (!participants.containsKey(shortId)) { + participants.put(shortId, new ArrayList()); + } + ArrayList list = participants.get(shortId); + list.add(kit); + participants.put(shortId, list); + kit = null; + } + String participantLine = scanner.nextLine(); + String[] participantInfo = participantLine.split(","); + String guid = participantInfo[0]; //read first cell + shortId = participantInfo[1]; //read second cell + int i = 2; + for (String header : headers) { + String value = participantInfo[i]; + if (StringUtils.isBlank(value) || "-".equals(value)) { + i++; + continue; + } + if ("kit label".equals(header)) { + if (kit != null) { + if (!participants.containsKey(shortId)) { + participants.put(shortId, new ArrayList()); + } + ArrayList list = participants.get(shortId); + list.add(kit); + participants.put(shortId, list); + kit = null; + } + } + if (kit == null) { + kit = new Kit(); + kit.shortId = shortId; + kit.guid = guid; + } + kit.setValue(header, value); + i++; + } + } + + } + catch (FileNotFoundException e) { + throw new RuntimeException(e); + } + return participants; + } + + private static void insertFileInfo(Map> participants) { + DDPInstance ddpInstance = DDPInstance.getDDPInstance("testboston"); + String[] shortIds = participants.keySet().toArray(new String[0]); + for (String participantShortId : shortIds) { + ArrayList kits = participants.get(participantShortId); + for (Kit kit : kits) { + Kit outboundKit = getDDBKitBasedOnKitLabel(SQL_SELECT_KIT_BY_KIT_LABEL + SQL_SELECT_OUTBOUND, kit.kitLabel, ddpInstance.getDdpInstanceId()); + //todo check if matches the kit in details + if (kit.guid != outboundKit.guid || kit.shortId != outboundKit.shortId) { + throw new RuntimeException("2 kits don't match for outbound for kitLabel " + kit.kitLabel + " file kit is for participant (" + kit.shortId + "," + kit.guid + ") and DB kit is for participant (" + outboundKit.shortId + "," + outboundKit.guid + ")"); + } + kit.dsmKitRequestId = outboundKit.dsmKitRequestId; + kit.trackingToId = outboundKit.trackingToId; + kit.shipmentId = outboundKit.shipmentId; + kit.packageId = outboundKit.packageId; + if (StringUtils.isBlank(outboundKit.lastActivityDesc)) { + insertValuesForKit(kit, false); + } + kit.packageId = null; + Kit inboundKit = getDDBKitBasedOnKitLabel(SQL_SELECT_KIT_BY_KIT_LABEL + SQL_SELECT_INBOUND, kit.kitLabel, ddpInstance.getDdpInstanceId()); + //todo check if matches the kit in details + if (kit.guid != inboundKit.guid || kit.shortId != inboundKit.shortId) { + throw new RuntimeException("2 kits don't match for inbound for kitLabel " + kit.kitLabel + " file kit is for participant (" + kit.shortId + "," + kit.guid + ") and DB kit is for participant (" + inboundKit.shortId + "," + inboundKit.guid + ")"); + } + kit.dsmKitRequestId = inboundKit.dsmKitRequestId; + kit.trackingReturnId = inboundKit.trackingReturnId; + kit.shipmentId = inboundKit.shipmentId; + kit.packageId = inboundKit.packageId; + if (StringUtils.isBlank(inboundKit.lastActivityDesc)) { + insertValuesForKit(kit, true); + } + } + } + } + + private static void insertValuesForKit(Kit kit, boolean isReturn) { + logger.info("Inserting new kit information for kit " + kit.dsmKitRequestId); + if (!isReturn && StringUtils.isBlank(kit.shipmentId)) { + kit.shipmentId = insertShipmentForKit(kit.dsmKitRequestId) + ""; + } + if (StringUtils.isBlank(kit.packageId)) { + String trackingNumber = isReturn ? kit.trackingReturnId : kit.trackingToId; + kit.packageId = insertPackageForKit(kit, trackingNumber) + ""; + } + if (!isReturn) { + insertActivityForPackage(kit.packageId, "shipped", kit.shippedAt); + insertActivityForPackage(kit.packageId, "Delivered AT", kit.deliveredAt); + } + else { + insertActivityForPackage(kit.packageId, "Picked up", kit.pickedUpAt); + insertActivityForPackage(kit.packageId, "Delivered AT", kit.receivedAt); + } + + } + + private static void insertActivityForPackage(String packageId, String status, String timeStamp) { + String sqlDateTime = getSQLDateTimeString(timeStamp);// we need EST time in DB + SimpleResult results = inTransaction((conn) -> { + SimpleResult dbVals = new SimpleResult(); + try (PreparedStatement insertStmt = conn.prepareStatement(SQL_INSERT_ACTIVITY)) { + insertStmt.setString(1, packageId); + insertStmt.setString(2, status); + insertStmt.setString(3, sqlDateTime); + insertStmt.executeUpdate(); + } + catch (SQLException ex) { + logger.error("Error inserting new activity for package " + packageId); + dbVals.resultException = ex; + } + return dbVals; + }); + + if (results.resultException != null) { + throw new RuntimeException("Error getting list of realms ", results.resultException); + } + } + + private static int insertShipmentForKit(String dsmKitRequestId) { + SimpleResult results = inTransaction((conn) -> { + SimpleResult dbVals = new SimpleResult(); + try (PreparedStatement insertStmt = conn.prepareStatement(SQL_INSERT_SHIPMENT, Statement.RETURN_GENERATED_KEYS)) { + insertStmt.setString(1, dsmKitRequestId); + insertStmt.executeUpdate(); + try (ResultSet rs = insertStmt.getGeneratedKeys()) { + if (rs.next()) { + dbVals.resultValue = rs.getInt(1); + } + } + catch (Exception e) { + throw new RuntimeException("Error getting the id of inserted shipment for dsm_kit_request_id " + dsmKitRequestId, e); + } + } + catch (SQLException ex) { + logger.error("Error inserting shipment for dsm_kit_request_id " + dsmKitRequestId); + dbVals.resultException = ex; + } + return dbVals; + }); + + if (results.resultException != null) { + throw new RuntimeException("Error getting list of realms ", results.resultException); + } + + return (int) results.resultValue; + } + + private static int insertPackageForKit(Kit kit, String trackingNumber) { + logger.info("Inserting new package information for kit " + kit.dsmKitRequestId); + SimpleResult results = inTransaction((conn) -> { + SimpleResult dbVals = new SimpleResult(); + try (PreparedStatement insertStmt = conn.prepareStatement(SQL_INSERT_PACKAGE, Statement.RETURN_GENERATED_KEYS)) { + insertStmt.setString(1, kit.shipmentId); + insertStmt.setString(2, trackingNumber); + insertStmt.executeUpdate(); + try (ResultSet rs = insertStmt.getGeneratedKeys()) { + if (rs.next()) { + dbVals.resultValue = rs.getInt(1); + } + } + catch (Exception e) { + throw new RuntimeException("Error getting the id of inserted package for shipment " + kit.shipmentId, e); + } + } + catch (SQLException ex) { + logger.error("Error inserting package for shipment " + kit.shipmentId); + dbVals.resultException = ex; + } + return dbVals; + }); + + if (results.resultException != null) { + throw new RuntimeException("Error getting list of realms ", results.resultException); + } + + return (int) results.resultValue; + } + + public static void main(String[] args) { + Map> participants = readFile(""); + + } + + private static Kit getDDBKitBasedOnKitLabel(String query, String kitLabel, String ddpInstanceId) { + + SimpleResult results = inTransaction((conn) -> { + SimpleResult dbVals = new SimpleResult(); + try (PreparedStatement stmt = conn.prepareStatement(query)) { + stmt.setString(1, ddpInstanceId); + stmt.setString(2, kitLabel); + try (ResultSet rs = stmt.executeQuery()) { + if (rs.next()) { + Kit kit = new Kit( + DBConstants.KIT_LABEL, + DBConstants.UPLOAD_REASON, + DBConstants.KIT_TEST_RESULT, + DBConstants.CREATED_DATE, + "", + "", + "", + "", + "", + DBConstants.DSM_KIT_REQUEST_ID, + DBConstants.DSM_TRACKING_TO, + DBConstants.TRACKING_RETURN_ID, + DBConstants.UPS_ACTIVITY_DATE_TIME, + DBConstants.UPS_STATUS_DESCRIPTION, + DBConstants.UPS_SHIPMENT_ID, + DBConstants.UPS_PACKAGE_ID, + DBConstants.COLLABORATOR_PARTICIPANT_ID, + DBConstants.PARTICIPANT_ID + ); + dbVals.resultValue = kit; + } + } + catch (Exception ex) { + dbVals.resultException = ex; + } + } + catch (Exception ex) { + dbVals.resultException = ex; + } + return dbVals; + }); + + if (results.resultException != null) { + throw new RuntimeException("Error getting Kit with kitLabel " + kitLabel, results.resultException); + + } + Kit kit = (Kit) results.resultValue; + logger.info("Found Kit with KitLabel " + kitLabel + " with dsm_kit_request_id " + kit.dsmKitRequestId); + return kit; + + } + + public static String getSQLDateTimeString(String dateTime) { + Instant activityInstant = DateTimeFormatter.ofPattern("yyyy-MM-ddTHH:mm:ss.fffV").withZone(ZoneId.of("UTC")).parse(dateTime, Instant::from); + DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.of("America/New_York")); + String activityDateTime = DATE_TIME_FORMATTER.format(activityInstant); + return activityDateTime; + } +} + +class Kit { + private String kitLabelHeader = "kit label"; + private String reasonHeader = ""; + private String resultHeader = ""; + private String requestedAtHeader = ""; + private String shippedAtHeader = ""; + private String deliveredAtHeader = ""; + private String pickedUpAtHeader = ""; + private String receivedAtHeader = ""; + private String resultedAtHeader = ""; + + String kitLabel; + String reason; + String result; + String requestedAt; + String shippedAt; + String deliveredAt; + String pickedUpAt; + String receivedAt; + String resultedAt; + String dsmKitRequestId; + String trackingToId; + String trackingReturnId; + String lastActivityDateTime; + String lastActivityDesc; + String shipmentId; + String packageId; + String shortId; + String guid; + + public Kit() { + } + + public Kit(String kitLabel, + String reason, + String result, + String requestedAt, + String shippedAt, + String deliveredAt, + String pickedUpAt, + String receivedAt, + String resultedAt, + String dsmKitRequestId, + String trackingToId, + String trackingReturnId, + String lastActivityDateTime, + String lastActivityDesc, + String shipmentId, + String packageId, + String shortId, + String guid) { + this.kitLabel = kitLabel; + this.reason = reason; + this.result = result; + this.requestedAt = requestedAt; + this.shippedAt = shippedAt; + this.deliveredAt = deliveredAt; + this.pickedUpAt = pickedUpAt; + this.receivedAt = receivedAt; + this.resultedAt = resultedAt; + this.dsmKitRequestId = dsmKitRequestId; + this.trackingToId = trackingToId; + this.trackingReturnId = trackingReturnId; + this.lastActivityDateTime = lastActivityDateTime; + this.lastActivityDesc = lastActivityDesc; + this.shipmentId = shipmentId; + this.packageId = packageId; + this.shortId = shortId; + this.guid = guid; + } + + public void setValue(String header, String value) { + switch (header) { + case "kit label": + this.kitLabel = value; + break; + case "reason": + this.reason = value; + break; + case "result": + this.result = value; + break; + case "requested at": + this.requestedAt = value; + break; + case "shipped at": + this.shippedAt = value; + break; + case "delivered at": + this.deliveredAt = value; + break; + case "picked up at": + this.pickedUpAt = value; + break; + case "received at": + this.receivedAt = value; + break; + case "resulted at": + this.resultedAt = value; + break; + default: + throw new IllegalStateException("Unexpected header, value: " + header + "," + value); + } + } +} From 8781ebd8f04ffd94db9b2163b12503df9f185a30 Mon Sep 17 00:00:00 2001 From: pegahtah Date: Wed, 19 May 2021 07:57:46 -0400 Subject: [PATCH 2/6] TestUnit for Testing that tool --- .../broadinstitute/dsm/UPSKitToolTest.java | 124 +++++++++ .../broadinstitute/dsm/util/model/Kit.java | 105 +++++++ .../dsm/util/tools/TbosUPSKitTool.java | 261 ++++++------------ .../resources/TbosUPSKitToolMultiPtKits.csv | 3 + src/test/resources/TbosUPSKitToolTestFile.csv | 2 + 5 files changed, 317 insertions(+), 178 deletions(-) create mode 100644 src/test/java/org/broadinstitute/dsm/UPSKitToolTest.java create mode 100644 src/test/java/org/broadinstitute/dsm/util/model/Kit.java create mode 100644 src/test/resources/TbosUPSKitToolMultiPtKits.csv create mode 100644 src/test/resources/TbosUPSKitToolTestFile.csv diff --git a/src/test/java/org/broadinstitute/dsm/UPSKitToolTest.java b/src/test/java/org/broadinstitute/dsm/UPSKitToolTest.java new file mode 100644 index 000000000..1e51ec3e8 --- /dev/null +++ b/src/test/java/org/broadinstitute/dsm/UPSKitToolTest.java @@ -0,0 +1,124 @@ +package org.broadinstitute.dsm; + +import org.broadinstitute.dsm.db.DDPInstance; +import org.broadinstitute.dsm.util.model.Kit; +import org.broadinstitute.dsm.util.tools.TbosUPSKitTool; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Map; + +import static org.broadinstitute.dsm.TestHelper.setupDB; + +public class UPSKitToolTest { + @Test + public void testDateConversion(){ + String dateTimeStringInUTC = "2020-12-16T14:46:51Z"; + String dateTimeStringInEST = TbosUPSKitTool.getSQLDateTimeString(dateTimeStringInUTC); + Assert.assertEquals(dateTimeStringInEST, "2020-12-16 09:46:51"); + } + + @Test + public void testKitSetValue(){ + Kit kit = new Kit(); + kit.setValueByHeader("kit label", "aaa"); + Assert.assertEquals(kit.getKitLabel(), "aaa"); + kit.setValueByHeader("reason", null); + Assert.assertEquals(kit.getReason(), null); + kit.setValueByHeader("result", "result1"); + Assert.assertEquals(kit.getResult(), "result1"); + kit.setValueByHeader("requested at", "2020-09-18T13:54:14.159Z"); + Assert.assertEquals(kit.getRequestedAt(), "2020-09-18T13:54:14.159Z"); + kit.setValueByHeader("shipped at", "2020-09-18T11:54:14.159Z"); + Assert.assertEquals(kit.getShippedAt(), "2020-09-18T11:54:14.159Z"); + kit.setValueByHeader("delivered at", "2020-09-15T11:54:14.159Z"); + Assert.assertEquals(kit.getDeliveredAt(), "2020-09-15T11:54:14.159Z"); + kit.setValueByHeader("picked up at", "2020-08-15T11:54:14.159Z"); + Assert.assertEquals(kit.getPickedUpAt(), "2020-08-15T11:54:14.159Z"); + kit.setValueByHeader("received at", "2020-08-15T12:54:14.159Z"); + Assert.assertEquals(kit.getReceivedAt(), "2020-08-15T12:54:14.159Z"); + kit.setValueByHeader("resulted at", "2019-08-15T12:54:14.159Z"); + Assert.assertEquals(kit.getResultedAt(), "2019-08-15T12:54:14.159Z"); + } + @Test + public void testReadFile(){ +// String fileContent = TestUtil.readFile("NdiTestFile.txt"); + Map> participants = TbosUPSKitTool.readFile("src/test/resources/TbosUPSKitToolTestFile.csv"); + Assert.assertNotNull(participants); + Assert.assertEquals(participants.size(), 1); + Assert.assertTrue(participants.keySet().contains("TestBoston_PMVYGB")); + Assert.assertEquals(participants.get("TestBoston_PMVYGB").size(), 1); + ArrayList ptKits = participants.get("TestBoston_PMVYGB"); + Assert.assertEquals(ptKits.size(), 1); + Kit kit = ptKits.get(0); + Assert.assertEquals(kit.getKitLabel(), "TBOS-test"); + Assert.assertNull(kit.getReason()); + Assert.assertNull(kit.getResult()); + } + + @Test + public void testReadFileMultiPt(){ + Map> participants = TbosUPSKitTool.readFile("src/test/resources/TbosUPSKitToolMultiPtKits.csv"); + Assert.assertNotNull(participants); + Assert.assertEquals(participants.size(), 2); + Assert.assertTrue(participants.keySet().contains("TestBoston_PMVYGB")); + Assert.assertTrue(participants.keySet().contains("TestBoston_PBPD68")); + Assert.assertEquals(participants.get("TestBoston_PMVYGB").size(), 1); + Assert.assertEquals(participants.get("TestBoston_PBPD68").size(), 2); + ArrayList ptKits = participants.get("TestBoston_PMVYGB"); + Assert.assertEquals(ptKits.size(), 1); + Kit kit = ptKits.get(0); + Assert.assertEquals(kit.getKitLabel(), "TBOS-test"); + Assert.assertNull(kit.getReason()); + Assert.assertNull(kit.getResult()); + } + + @Test + public void testGetDDPKitBasedOnKitLabel(){ + DDPInstance ddpInstance = DDPInstance.getDDPInstance("testboston"); + Kit outboundKit = TbosUPSKitTool.getDDBKitBasedOnKitLabel(TbosUPSKitTool.SQL_SELECT_KIT_BY_KIT_LABEL +TbosUPSKitTool.SQL_SELECT_OUTBOUND, "TBOS-test", ddpInstance.getDdpInstanceId()); + Assert.assertNotNull(outboundKit); + Map> participants = TbosUPSKitTool.readFile("src/test/resources/TbosUPSKitToolTestFile.csv"); + Assert.assertNotNull(participants); + Assert.assertEquals(participants.size(), 1); + Assert.assertTrue(participants.keySet().contains("TestBoston_PMVYGB")); + Assert.assertEquals(participants.get("TestBoston_PMVYGB").size(), 1); + ArrayList ptKits = participants.get("TestBoston_PMVYGB"); + Assert.assertEquals(ptKits.get(0).getGuid(), outboundKit.getGuid()); + Assert.assertEquals(ptKits.get(0).getShortId(), outboundKit.getShortId()); + Assert.assertEquals(ptKits.get(0).getKitLabel(), outboundKit.getKitLabel()); + Assert.assertEquals("1Z9YA775YW21328147", outboundKit.getTrackingToId()); + Assert.assertEquals("2309", outboundKit.getDsmKitRequestId()); + + Kit inboundKit = TbosUPSKitTool.getDDBKitBasedOnKitLabel(TbosUPSKitTool.SQL_SELECT_KIT_BY_KIT_LABEL +TbosUPSKitTool.SQL_SELECT_INBOUND, "TBOS-test", ddpInstance.getDdpInstanceId()); + Assert.assertNotNull(inboundKit); + Assert.assertTrue(participants.keySet().contains("TestBoston_PMVYGB")); + Assert.assertEquals(participants.get("TestBoston_PMVYGB").size(), 1); + Assert.assertEquals(ptKits.get(0).getGuid(), inboundKit.getGuid()); + Assert.assertEquals(ptKits.get(0).getShortId(), inboundKit.getShortId()); + Assert.assertEquals(ptKits.get(0).getKitLabel(), inboundKit.getKitLabel()); + Assert.assertEquals("92748902118533553033028108", inboundKit.getTrackingReturnId()); + Assert.assertEquals("2309", outboundKit.getDsmKitRequestId()); + } + +// @Test +// public void + + + + + + @BeforeClass + public static void first() { + setupDB(); + } +// +// @AfterClass +// public static void stopServer() { +// cleanupDB(); +// } + + +} diff --git a/src/test/java/org/broadinstitute/dsm/util/model/Kit.java b/src/test/java/org/broadinstitute/dsm/util/model/Kit.java new file mode 100644 index 000000000..8395a005f --- /dev/null +++ b/src/test/java/org/broadinstitute/dsm/util/model/Kit.java @@ -0,0 +1,105 @@ +package org.broadinstitute.dsm.util.model; + +import lombok.Data; + +@Data +public class Kit { + + String kitLabel; + String reason; + String result; + String requestedAt; + String shippedAt; + String deliveredAt; + String pickedUpAt; + String receivedAt; + String resultedAt; + String dsmKitRequestId; + String trackingToId; + String trackingReturnId; + String lastActivityDateTime; + String lastActivityDesc; + String shipmentId; + String packageId; + String shortId; + String guid; + + public Kit() { + } + + public Kit(String kitLabel, + String reason, + String result, + String requestedAt, + String shippedAt, + String deliveredAt, + String pickedUpAt, + String receivedAt, + String resultedAt, + String dsmKitRequestId, + String trackingToId, + String trackingReturnId, + String lastActivityDateTime, + String lastActivityDesc, + String shipmentId, + String packageId, + String shortId, + String guid) { + this.kitLabel = kitLabel; + this.reason = reason; + this.result = result; + this.requestedAt = requestedAt; + this.shippedAt = shippedAt; + this.deliveredAt = deliveredAt; + this.pickedUpAt = pickedUpAt; + this.receivedAt = receivedAt; + this.resultedAt = resultedAt; + this.dsmKitRequestId = dsmKitRequestId; + this.trackingToId = trackingToId; + this.trackingReturnId = trackingReturnId; + this.lastActivityDateTime = lastActivityDateTime; + this.lastActivityDesc = lastActivityDesc; + this.shipmentId = shipmentId; + this.packageId = packageId; + this.shortId = shortId; + this.guid = guid; + } + + public void setValueByHeader(String header, String value) { + switch (header) { + case "kit label": + this.kitLabel = value; + break; + case "reason": + this.reason = value; + break; + case "result": + this.result = value; + break; + case "requested at": + this.requestedAt = value; + break; + case "shipped at": + this.shippedAt = value; + break; + case "delivered at": + this.deliveredAt = value; + break; + case "picked up at": + this.pickedUpAt = value; + break; + case "received at": + this.receivedAt = value; + break; + case "resulted at": + this.resultedAt = value; + break; + default: + throw new IllegalStateException("Unexpected header, value: " + header + "," + value); + } + } + + public boolean isEmpty() { + return false; + } +} diff --git a/src/test/java/org/broadinstitute/dsm/util/tools/TbosUPSKitTool.java b/src/test/java/org/broadinstitute/dsm/util/tools/TbosUPSKitTool.java index f0bd5f2e9..317ed3d6e 100644 --- a/src/test/java/org/broadinstitute/dsm/util/tools/TbosUPSKitTool.java +++ b/src/test/java/org/broadinstitute/dsm/util/tools/TbosUPSKitTool.java @@ -4,6 +4,7 @@ import org.broadinstitute.ddp.db.SimpleResult; import org.broadinstitute.dsm.db.DDPInstance; import org.broadinstitute.dsm.statics.DBConstants; +import org.broadinstitute.dsm.util.model.Kit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -24,8 +25,8 @@ import static org.broadinstitute.ddp.db.TransactionWrapper.inTransaction; public class TbosUPSKitTool { - private static final Logger logger = LoggerFactory.getLogger(TbosUPSKitTool.class); - private static final String SQL_SELECT_KIT_BY_KIT_LABEL = "Select kit.dsm_kit_request_id, req.*, activity.*, pack.tracking_number " + + public static final Logger logger = LoggerFactory.getLogger(TbosUPSKitTool.class); + public static final String SQL_SELECT_KIT_BY_KIT_LABEL = "Select kit.dsm_kit_request_id, kit.kit_label, kit.test_result, req.upload_reason, req.ddp_participant_id, req.bsp_collaborator_participant_id, req.created_date, kit.tracking_to_id, kit.tracking_return_id, activity.*,pack.ups_shipment_id, pack.tracking_number " + "FROM ddp_kit kit " + " LEFT JOIN ddp_kit_request req ON (kit.dsm_kit_request_id = req.dsm_kit_request_id) " + " left join ups_shipment shipment on (shipment.dsm_kit_request_id = kit.dsm_kit_request_id) " + @@ -42,13 +43,13 @@ public class TbosUPSKitTool { " AND lastActivity.maxId = ac.ups_activity_id " + " )) " + " and kit_label=? "; - private static final String SQL_SELECT_OUTBOUND = "and pack.tracking_number = kit.tracking_to_id "; - private static final String SQL_SELECT_INBOUND = "and pack.tracking_number = kit.tracking_return_id "; + public static final String SQL_SELECT_OUTBOUND = "and (pack.tracking_number is null or pack.tracking_number = kit.tracking_to_id) "; + public static final String SQL_SELECT_INBOUND = "and (pack.tracking_number is null or pack.tracking_number = kit.tracking_return_id) "; private static final String SQL_INSERT_SHIPMENT = "INSERT INTO ups_shipment ( dsm_kit_request_id ) VALUES (?) "; private static final String SQL_INSERT_PACKAGE = "INSERT INTO ups_package ( ups_shipment_id , tracking_number ) VALUES (?, ?) "; private static final String SQL_INSERT_ACTIVITY = "INSERT INTO ups_activity ( ups_package_id, ups_status_description, ups_activity_date_time) VALUES (?, ?, ?)"; - private static Map readFile(String fileName) { + public static Map readFile(String fileName) { Map> participants = new HashMap(); String[] headers = new String[0]; //first row File csv = new File(fileName); @@ -59,7 +60,7 @@ private static Map readFile(String fileName) { Kit kit = null; String shortId = null; while (scanner.hasNextLine()) { - if (kit != null && StringUtils.isNotBlank(shortId)) {// last kit of the participant in the last line + if (kit != null &&!kit.isEmpty() && StringUtils.isNotBlank(shortId)) {// last kit of the participant in the line before if (!participants.containsKey(shortId)) { participants.put(shortId, new ArrayList()); } @@ -69,18 +70,19 @@ private static Map readFile(String fileName) { kit = null; } String participantLine = scanner.nextLine(); - String[] participantInfo = participantLine.split(","); + String[] participantInfo = participantLine.split(",", -1); String guid = participantInfo[0]; //read first cell shortId = participantInfo[1]; //read second cell + participants.put(shortId, new ArrayList()); int i = 2; - for (String header : headers) { + for (; i < headers.length; ) { + String header = headers[i]; String value = participantInfo[i]; if (StringUtils.isBlank(value) || "-".equals(value)) { - i++; - continue; + value = null; } if ("kit label".equals(header)) { - if (kit != null) { + if (kit != null && StringUtils.isNotBlank(kit.getKitLabel())) { if (!participants.containsKey(shortId)) { participants.put(shortId, new ArrayList()); } @@ -89,16 +91,28 @@ private static Map readFile(String fileName) { participants.put(shortId, list); kit = null; } + else if (kit!= null && StringUtils.isBlank(kit.getKitLabel())){ + kit = null; + } } if (kit == null) { kit = new Kit(); - kit.shortId = shortId; - kit.guid = guid; + kit.setShortId(shortId); + kit.setGuid(guid); } - kit.setValue(header, value); + kit.setValueByHeader(header, value); i++; } } + if (kit != null && StringUtils.isNotBlank(shortId)) {// last kit of the participant in the last line + if (!participants.containsKey(shortId)) { + participants.put(shortId, new ArrayList()); + } + ArrayList list = participants.get(shortId); + list.add(kit); + participants.put(shortId, list); + kit = null; + } } catch (FileNotFoundException e) { @@ -113,51 +127,49 @@ private static void insertFileInfo(Map> participants) { for (String participantShortId : shortIds) { ArrayList kits = participants.get(participantShortId); for (Kit kit : kits) { - Kit outboundKit = getDDBKitBasedOnKitLabel(SQL_SELECT_KIT_BY_KIT_LABEL + SQL_SELECT_OUTBOUND, kit.kitLabel, ddpInstance.getDdpInstanceId()); - //todo check if matches the kit in details - if (kit.guid != outboundKit.guid || kit.shortId != outboundKit.shortId) { - throw new RuntimeException("2 kits don't match for outbound for kitLabel " + kit.kitLabel + " file kit is for participant (" + kit.shortId + "," + kit.guid + ") and DB kit is for participant (" + outboundKit.shortId + "," + outboundKit.guid + ")"); + Kit outboundKit = getDDBKitBasedOnKitLabel(SQL_SELECT_KIT_BY_KIT_LABEL + SQL_SELECT_OUTBOUND, kit.getKitLabel(), ddpInstance.getDdpInstanceId()); + if (kit.getGuid() != outboundKit.getGuid() || kit.getShortId() != outboundKit.getShortId()) { + throw new RuntimeException("2 kits don't match for outbound for kitLabel " + kit.getKitLabel() + " file kit is for participant (" + kit.getShortId() + "," + kit.getGuid() + ") and DB kit is for participant (" + outboundKit.getShortId() + "," + outboundKit.getGuid() + ")"); } - kit.dsmKitRequestId = outboundKit.dsmKitRequestId; - kit.trackingToId = outboundKit.trackingToId; - kit.shipmentId = outboundKit.shipmentId; - kit.packageId = outboundKit.packageId; - if (StringUtils.isBlank(outboundKit.lastActivityDesc)) { - insertValuesForKit(kit, false); + kit.setDsmKitRequestId(outboundKit.getDsmKitRequestId()); + kit.setTrackingToId(outboundKit.getTrackingToId()); + kit.setShipmentId(outboundKit.getShipmentId()); + kit.setPackageId(outboundKit.getPackageId()); + if (StringUtils.isBlank(outboundKit.getLastActivityDesc())) { + insertKitInDB(kit, false); } - kit.packageId = null; - Kit inboundKit = getDDBKitBasedOnKitLabel(SQL_SELECT_KIT_BY_KIT_LABEL + SQL_SELECT_INBOUND, kit.kitLabel, ddpInstance.getDdpInstanceId()); - //todo check if matches the kit in details - if (kit.guid != inboundKit.guid || kit.shortId != inboundKit.shortId) { - throw new RuntimeException("2 kits don't match for inbound for kitLabel " + kit.kitLabel + " file kit is for participant (" + kit.shortId + "," + kit.guid + ") and DB kit is for participant (" + inboundKit.shortId + "," + inboundKit.guid + ")"); + kit.setPackageId(null); + Kit inboundKit = getDDBKitBasedOnKitLabel(SQL_SELECT_KIT_BY_KIT_LABEL + SQL_SELECT_INBOUND, kit.getKitLabel(), ddpInstance.getDdpInstanceId()); + if (kit.getGuid() != inboundKit.getGuid() || kit.getShortId() != inboundKit.getShortId()) { + throw new RuntimeException("2 kits don't match for inbound for kitLabel " + kit.getKitLabel() + " file kit is for participant (" + kit.getShortId() + "," + kit.getGuid() + ") and DB kit is for participant (" + inboundKit.getShortId() + "," + inboundKit.getGuid() + ")"); } - kit.dsmKitRequestId = inboundKit.dsmKitRequestId; - kit.trackingReturnId = inboundKit.trackingReturnId; - kit.shipmentId = inboundKit.shipmentId; - kit.packageId = inboundKit.packageId; - if (StringUtils.isBlank(inboundKit.lastActivityDesc)) { - insertValuesForKit(kit, true); + kit.setDsmKitRequestId(inboundKit.getDsmKitRequestId()); + kit.setTrackingToId(inboundKit.getTrackingToId()); + kit.setShipmentId(inboundKit.getShipmentId()); + kit.setPackageId(inboundKit.getPackageId()); + if (StringUtils.isBlank(inboundKit.getLastActivityDesc())) { + insertKitInDB(kit, true); } } } } - private static void insertValuesForKit(Kit kit, boolean isReturn) { - logger.info("Inserting new kit information for kit " + kit.dsmKitRequestId); - if (!isReturn && StringUtils.isBlank(kit.shipmentId)) { - kit.shipmentId = insertShipmentForKit(kit.dsmKitRequestId) + ""; + private static void insertKitInDB(Kit kit, boolean isReturn) { + logger.info("Inserting new kit information for kit " + kit.getDsmKitRequestId()); + if (!isReturn && StringUtils.isBlank(kit.getShipmentId())) { + kit.setShipmentId(insertShipmentForKit(kit.getDsmKitRequestId()) + ""); } - if (StringUtils.isBlank(kit.packageId)) { - String trackingNumber = isReturn ? kit.trackingReturnId : kit.trackingToId; - kit.packageId = insertPackageForKit(kit, trackingNumber) + ""; + if (StringUtils.isBlank(kit.getPackageId())) { + String trackingNumber = isReturn ? kit.getTrackingReturnId() : kit.getTrackingToId(); + kit.setPackageId(insertPackageForKit(kit, trackingNumber) + ""); } if (!isReturn) { - insertActivityForPackage(kit.packageId, "shipped", kit.shippedAt); - insertActivityForPackage(kit.packageId, "Delivered AT", kit.deliveredAt); + insertActivityForPackage(kit.getPackageId(), "shipped", kit.getShippedAt()); + insertActivityForPackage(kit.getPackageId(), "Delivered AT", kit.getDeliveredAt()); } else { - insertActivityForPackage(kit.packageId, "Picked up", kit.pickedUpAt); - insertActivityForPackage(kit.packageId, "Delivered AT", kit.receivedAt); + insertActivityForPackage(kit.getPackageId(), "Picked up", kit.getPickedUpAt()); + insertActivityForPackage(kit.getPackageId(), "Delivered AT", kit.getReceivedAt()); } } @@ -214,11 +226,11 @@ private static int insertShipmentForKit(String dsmKitRequestId) { } private static int insertPackageForKit(Kit kit, String trackingNumber) { - logger.info("Inserting new package information for kit " + kit.dsmKitRequestId); + logger.info("Inserting new package information for kit " + kit.getDsmKitRequestId()); SimpleResult results = inTransaction((conn) -> { SimpleResult dbVals = new SimpleResult(); try (PreparedStatement insertStmt = conn.prepareStatement(SQL_INSERT_PACKAGE, Statement.RETURN_GENERATED_KEYS)) { - insertStmt.setString(1, kit.shipmentId); + insertStmt.setString(1, kit.getShipmentId()); insertStmt.setString(2, trackingNumber); insertStmt.executeUpdate(); try (ResultSet rs = insertStmt.getGeneratedKeys()) { @@ -227,11 +239,11 @@ private static int insertPackageForKit(Kit kit, String trackingNumber) { } } catch (Exception e) { - throw new RuntimeException("Error getting the id of inserted package for shipment " + kit.shipmentId, e); + throw new RuntimeException("Error getting the id of inserted package for shipment " + kit.getShipmentId(), e); } } catch (SQLException ex) { - logger.error("Error inserting package for shipment " + kit.shipmentId); + logger.error("Error inserting package for shipment " + kit.getShipmentId()); dbVals.resultException = ex; } return dbVals; @@ -244,13 +256,12 @@ private static int insertPackageForKit(Kit kit, String trackingNumber) { return (int) results.resultValue; } - public static void main(String[] args) { - Map> participants = readFile(""); - - } - - private static Kit getDDBKitBasedOnKitLabel(String query, String kitLabel, String ddpInstanceId) { + // public static void main(String[] args) { + // Map> participants = readFile(""); + // + // } + public static Kit getDDBKitBasedOnKitLabel(String query, String kitLabel, String ddpInstanceId) { SimpleResult results = inTransaction((conn) -> { SimpleResult dbVals = new SimpleResult(); try (PreparedStatement stmt = conn.prepareStatement(query)) { @@ -259,24 +270,24 @@ private static Kit getDDBKitBasedOnKitLabel(String query, String kitLabel, Strin try (ResultSet rs = stmt.executeQuery()) { if (rs.next()) { Kit kit = new Kit( - DBConstants.KIT_LABEL, - DBConstants.UPLOAD_REASON, - DBConstants.KIT_TEST_RESULT, - DBConstants.CREATED_DATE, + rs.getString("kit."+DBConstants.KIT_LABEL), + rs.getString(DBConstants.UPLOAD_REASON), + rs.getString(DBConstants.KIT_TEST_RESULT), + rs.getString(DBConstants.CREATED_DATE), "", "", "", "", "", - DBConstants.DSM_KIT_REQUEST_ID, - DBConstants.DSM_TRACKING_TO, - DBConstants.TRACKING_RETURN_ID, - DBConstants.UPS_ACTIVITY_DATE_TIME, - DBConstants.UPS_STATUS_DESCRIPTION, - DBConstants.UPS_SHIPMENT_ID, - DBConstants.UPS_PACKAGE_ID, - DBConstants.COLLABORATOR_PARTICIPANT_ID, - DBConstants.PARTICIPANT_ID + rs.getString(DBConstants.DSM_KIT_REQUEST_ID), + rs.getString(DBConstants.DSM_TRACKING_TO), + rs.getString(DBConstants.TRACKING_RETURN_ID), + rs.getString(DBConstants.UPS_ACTIVITY_DATE_TIME), + rs.getString(DBConstants.UPS_STATUS_DESCRIPTION), + rs.getString(DBConstants.UPS_SHIPMENT_ID), + rs.getString(DBConstants.UPS_PACKAGE_ID), + rs.getString(DBConstants.COLLABORATOR_PARTICIPANT_ID), + rs.getString(DBConstants.DDP_PARTICIPANT_ID) ); dbVals.resultValue = kit; } @@ -296,121 +307,15 @@ private static Kit getDDBKitBasedOnKitLabel(String query, String kitLabel, Strin } Kit kit = (Kit) results.resultValue; - logger.info("Found Kit with KitLabel " + kitLabel + " with dsm_kit_request_id " + kit.dsmKitRequestId); + logger.info("Found Kit with KitLabel " + kitLabel + " with dsm_kit_request_id " + kit.getDsmKitRequestId()); return kit; - } public static String getSQLDateTimeString(String dateTime) { - Instant activityInstant = DateTimeFormatter.ofPattern("yyyy-MM-ddTHH:mm:ss.fffV").withZone(ZoneId.of("UTC")).parse(dateTime, Instant::from); + dateTime = dateTime.replace("T", " ").replace("Z", ""); + Instant activityInstant = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.of("UTC")).parse(dateTime, Instant::from); DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.of("America/New_York")); String activityDateTime = DATE_TIME_FORMATTER.format(activityInstant); return activityDateTime; } } - -class Kit { - private String kitLabelHeader = "kit label"; - private String reasonHeader = ""; - private String resultHeader = ""; - private String requestedAtHeader = ""; - private String shippedAtHeader = ""; - private String deliveredAtHeader = ""; - private String pickedUpAtHeader = ""; - private String receivedAtHeader = ""; - private String resultedAtHeader = ""; - - String kitLabel; - String reason; - String result; - String requestedAt; - String shippedAt; - String deliveredAt; - String pickedUpAt; - String receivedAt; - String resultedAt; - String dsmKitRequestId; - String trackingToId; - String trackingReturnId; - String lastActivityDateTime; - String lastActivityDesc; - String shipmentId; - String packageId; - String shortId; - String guid; - - public Kit() { - } - - public Kit(String kitLabel, - String reason, - String result, - String requestedAt, - String shippedAt, - String deliveredAt, - String pickedUpAt, - String receivedAt, - String resultedAt, - String dsmKitRequestId, - String trackingToId, - String trackingReturnId, - String lastActivityDateTime, - String lastActivityDesc, - String shipmentId, - String packageId, - String shortId, - String guid) { - this.kitLabel = kitLabel; - this.reason = reason; - this.result = result; - this.requestedAt = requestedAt; - this.shippedAt = shippedAt; - this.deliveredAt = deliveredAt; - this.pickedUpAt = pickedUpAt; - this.receivedAt = receivedAt; - this.resultedAt = resultedAt; - this.dsmKitRequestId = dsmKitRequestId; - this.trackingToId = trackingToId; - this.trackingReturnId = trackingReturnId; - this.lastActivityDateTime = lastActivityDateTime; - this.lastActivityDesc = lastActivityDesc; - this.shipmentId = shipmentId; - this.packageId = packageId; - this.shortId = shortId; - this.guid = guid; - } - - public void setValue(String header, String value) { - switch (header) { - case "kit label": - this.kitLabel = value; - break; - case "reason": - this.reason = value; - break; - case "result": - this.result = value; - break; - case "requested at": - this.requestedAt = value; - break; - case "shipped at": - this.shippedAt = value; - break; - case "delivered at": - this.deliveredAt = value; - break; - case "picked up at": - this.pickedUpAt = value; - break; - case "received at": - this.receivedAt = value; - break; - case "resulted at": - this.resultedAt = value; - break; - default: - throw new IllegalStateException("Unexpected header, value: " + header + "," + value); - } - } -} diff --git a/src/test/resources/TbosUPSKitToolMultiPtKits.csv b/src/test/resources/TbosUPSKitToolMultiPtKits.csv new file mode 100644 index 000000000..18ce71b12 --- /dev/null +++ b/src/test/resources/TbosUPSKitToolMultiPtKits.csv @@ -0,0 +1,3 @@ +user guid,hruid,kit label,reason,result,requested at,shipped at,delivered at,picked up at,received at,resulted at,kit label,reason,result,requested at,shipped at,delivered at,picked up at,received at,resulted at +ZCPJX6JFDOVUD3PN7HQ4,TestBoston_PMVYGB,TBOS-test,,,2020-09-22T00:57:49Z,2021-04-19T20:38:31Z,2021-04-22T19:27:31Z,2021-04-15T22:28:00Z,2021-04-22T19:22:00Z,,,,,,,,,, +1JN9QT4H6WO6FMV429ED,TestBoston_PBPD68,TBOS-test4,,,2020-09-19T01:57:49Z,2021-04-22T21:38:31Z,2021-04-23T20:27:31Z,2021-04-24T23:28:00Z,2021-04-25T18:22:00Z,,TBOS-test6,,,2020-09-22T10:57:49Z,2021-04-19T21:38:31Z,2021-04-22T21:27:31Z,2021-04-23T22:28:00Z,2021-04-24T19:22:00Z, diff --git a/src/test/resources/TbosUPSKitToolTestFile.csv b/src/test/resources/TbosUPSKitToolTestFile.csv new file mode 100644 index 000000000..8031131d8 --- /dev/null +++ b/src/test/resources/TbosUPSKitToolTestFile.csv @@ -0,0 +1,2 @@ +user guid,hruid,kit label,reason,result,requested at,shipped at,delivered at,picked up at,received at,resulted at +ZCPJX6JFDOVUD3PN7HQ4,TestBoston_PMVYGB,TBOS-test,,,2020-09-22T00:57:49Z,2021-04-19T20:38:31Z,2021-04-22T19:27:31Z,2021-04-15T22:28:00Z,2021-04-22T19:22:00Z, From a1de833017d10e6850cb6e08dcc92b72c805d4f2 Mon Sep 17 00:00:00 2001 From: pegahtah Date: Wed, 19 May 2021 15:21:10 -0400 Subject: [PATCH 3/6] Added fix for when one line has less kits that the other one --- .../java/org/broadinstitute/dsm/UPSKitToolTest.java | 13 +++++++++++++ .../java/org/broadinstitute/dsm/util/model/Kit.java | 12 ++++++++++++ .../dsm/util/tools/TbosUPSKitTool.java | 10 +++++----- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/test/java/org/broadinstitute/dsm/UPSKitToolTest.java b/src/test/java/org/broadinstitute/dsm/UPSKitToolTest.java index 1e51ec3e8..0a4172a14 100644 --- a/src/test/java/org/broadinstitute/dsm/UPSKitToolTest.java +++ b/src/test/java/org/broadinstitute/dsm/UPSKitToolTest.java @@ -73,8 +73,21 @@ public void testReadFileMultiPt(){ Assert.assertEquals(kit.getKitLabel(), "TBOS-test"); Assert.assertNull(kit.getReason()); Assert.assertNull(kit.getResult()); + ptKits = participants.get("TestBoston_PBPD68"); + Assert.assertEquals(ptKits.size(), 2); + kit = ptKits.get(0); + Assert.assertEquals(kit.getKitLabel(), "TBOS-test4"); + Assert.assertEquals(kit.getRequestedAt(), "2020-09-19T01:57:49Z"); + Assert.assertNull(kit.getReason()); + Assert.assertNull(kit.getResult()); + kit = ptKits.get(1); + Assert.assertEquals(kit.getKitLabel(), "TBOS-test6"); + Assert.assertEquals(kit.getRequestedAt(), "2020-09-22T10:57:49Z"); + Assert.assertNull(kit.getReason()); + Assert.assertNull(kit.getResult()); } + @Test public void testGetDDPKitBasedOnKitLabel(){ DDPInstance ddpInstance = DDPInstance.getDDPInstance("testboston"); diff --git a/src/test/java/org/broadinstitute/dsm/util/model/Kit.java b/src/test/java/org/broadinstitute/dsm/util/model/Kit.java index 8395a005f..6afda1f7c 100644 --- a/src/test/java/org/broadinstitute/dsm/util/model/Kit.java +++ b/src/test/java/org/broadinstitute/dsm/util/model/Kit.java @@ -1,6 +1,7 @@ package org.broadinstitute.dsm.util.model; import lombok.Data; +import org.apache.commons.lang3.StringUtils; @Data public class Kit { @@ -100,6 +101,17 @@ public void setValueByHeader(String header, String value) { } public boolean isEmpty() { + if (StringUtils.isBlank(kitLabel) && + StringUtils.isBlank(reason) && + StringUtils.isBlank(result) && + StringUtils.isBlank(requestedAt) && + StringUtils.isBlank(shippedAt) && + StringUtils.isBlank(deliveredAt) && + StringUtils.isBlank(pickedUpAt) && + StringUtils.isBlank(receivedAt) && + StringUtils.isBlank(resultedAt)){ + return true; + } return false; } } diff --git a/src/test/java/org/broadinstitute/dsm/util/tools/TbosUPSKitTool.java b/src/test/java/org/broadinstitute/dsm/util/tools/TbosUPSKitTool.java index 317ed3d6e..20311b60a 100644 --- a/src/test/java/org/broadinstitute/dsm/util/tools/TbosUPSKitTool.java +++ b/src/test/java/org/broadinstitute/dsm/util/tools/TbosUPSKitTool.java @@ -60,7 +60,7 @@ public static Map readFile(String fileName) { Kit kit = null; String shortId = null; while (scanner.hasNextLine()) { - if (kit != null &&!kit.isEmpty() && StringUtils.isNotBlank(shortId)) {// last kit of the participant in the line before + if (kit != null && !kit.isEmpty() && StringUtils.isNotBlank(shortId)) {// last kit of the participant in the line before if (!participants.containsKey(shortId)) { participants.put(shortId, new ArrayList()); } @@ -82,7 +82,7 @@ public static Map readFile(String fileName) { value = null; } if ("kit label".equals(header)) { - if (kit != null && StringUtils.isNotBlank(kit.getKitLabel())) { + if (kit != null && !kit.isEmpty() && StringUtils.isNotBlank(kit.getKitLabel())) { if (!participants.containsKey(shortId)) { participants.put(shortId, new ArrayList()); } @@ -91,7 +91,7 @@ public static Map readFile(String fileName) { participants.put(shortId, list); kit = null; } - else if (kit!= null && StringUtils.isBlank(kit.getKitLabel())){ + else if (kit != null && StringUtils.isBlank(kit.getKitLabel())) { kit = null; } } @@ -104,7 +104,7 @@ else if (kit!= null && StringUtils.isBlank(kit.getKitLabel())){ i++; } } - if (kit != null && StringUtils.isNotBlank(shortId)) {// last kit of the participant in the last line + if (kit != null && !kit.isEmpty() && StringUtils.isNotBlank(shortId)) {// last kit of the participant in the last line if (!participants.containsKey(shortId)) { participants.put(shortId, new ArrayList()); } @@ -270,7 +270,7 @@ public static Kit getDDBKitBasedOnKitLabel(String query, String kitLabel, String try (ResultSet rs = stmt.executeQuery()) { if (rs.next()) { Kit kit = new Kit( - rs.getString("kit."+DBConstants.KIT_LABEL), + rs.getString("kit." + DBConstants.KIT_LABEL), rs.getString(DBConstants.UPLOAD_REASON), rs.getString(DBConstants.KIT_TEST_RESULT), rs.getString(DBConstants.CREATED_DATE), From 47b33b762e6ccd4dffdad7ebcf5381d05c833a54 Mon Sep 17 00:00:00 2001 From: pegahtah Date: Thu, 20 May 2021 11:55:46 -0400 Subject: [PATCH 4/6] Added more tests Added fix for when there is activity in DB --- .../broadinstitute/dsm/UPSKitToolTest.java | 32 ++++- .../dsm/util/tools/TbosUPSKitTool.java | 130 +++++++++++++----- 2 files changed, 124 insertions(+), 38 deletions(-) diff --git a/src/test/java/org/broadinstitute/dsm/UPSKitToolTest.java b/src/test/java/org/broadinstitute/dsm/UPSKitToolTest.java index 0a4172a14..b50c42b5c 100644 --- a/src/test/java/org/broadinstitute/dsm/UPSKitToolTest.java +++ b/src/test/java/org/broadinstitute/dsm/UPSKitToolTest.java @@ -1,6 +1,7 @@ package org.broadinstitute.dsm; import org.broadinstitute.dsm.db.DDPInstance; +import org.broadinstitute.dsm.util.DBTestUtil; import org.broadinstitute.dsm.util.model.Kit; import org.broadinstitute.dsm.util.tools.TbosUPSKitTool; import org.junit.Assert; @@ -116,8 +117,35 @@ public void testGetDDPKitBasedOnKitLabel(){ Assert.assertEquals("2309", outboundKit.getDsmKitRequestId()); } -// @Test -// public void + @Test + public void testInsertShipmentAndPackage(){ + Map> participants = TbosUPSKitTool.readFile("src/test/resources/TbosUPSKitToolMultiPtKits.csv"); + Assert.assertNotNull(participants); + Assert.assertEquals(participants.size(), 2); + Assert.assertTrue(participants.keySet().contains("TestBoston_PMVYGB")); + Assert.assertTrue(participants.keySet().contains("TestBoston_PBPD68")); + Assert.assertEquals(participants.get("TestBoston_PMVYGB").size(), 1); + Assert.assertEquals(participants.get("TestBoston_PBPD68").size(), 2); + ArrayList ptKits = participants.get("TestBoston_PMVYGB"); + Assert.assertEquals(ptKits.size(), 1); + Kit kit = ptKits.get(0); + DDPInstance ddpInstance = DDPInstance.getDDPInstance("testboston"); + Kit outboundKit = TbosUPSKitTool.getDDBKitBasedOnKitLabel(TbosUPSKitTool.SQL_SELECT_KIT_BY_KIT_LABEL +TbosUPSKitTool.SQL_SELECT_OUTBOUND, "TBOS-test", ddpInstance.getDdpInstanceId()); + Assert.assertNotNull(outboundKit); + kit.setDsmKitRequestId(outboundKit.getDsmKitRequestId()); + kit.setTrackingToId(outboundKit.getTrackingToId()); + kit.setShipmentId(outboundKit.getShipmentId()); + kit.setPackageId(outboundKit.getPackageId()); + String shipmentId = TbosUPSKitTool.insertShipmentForKit(kit.getDsmKitRequestId()); + kit.setShipmentId(shipmentId); + Assert.assertNotNull(shipmentId); + String packageId = TbosUPSKitTool.insertPackageForKit(kit, outboundKit.getTrackingToId()); + Assert.assertNotNull(packageId); + DBTestUtil.deleteFromQuery(packageId, "delete from ups_package where ups_package_id = ?"); + DBTestUtil.deleteFromQuery(shipmentId, "delete from ups_shipment where ups_shipment_id = ?"); + } + + diff --git a/src/test/java/org/broadinstitute/dsm/util/tools/TbosUPSKitTool.java b/src/test/java/org/broadinstitute/dsm/util/tools/TbosUPSKitTool.java index 20311b60a..28ec5af02 100644 --- a/src/test/java/org/broadinstitute/dsm/util/tools/TbosUPSKitTool.java +++ b/src/test/java/org/broadinstitute/dsm/util/tools/TbosUPSKitTool.java @@ -1,10 +1,12 @@ package org.broadinstitute.dsm.util.tools; +import lombok.NonNull; import org.apache.commons.lang3.StringUtils; import org.broadinstitute.ddp.db.SimpleResult; import org.broadinstitute.dsm.db.DDPInstance; import org.broadinstitute.dsm.statics.DBConstants; import org.broadinstitute.dsm.util.model.Kit; +import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -128,53 +130,104 @@ private static void insertFileInfo(Map> participants) { ArrayList kits = participants.get(participantShortId); for (Kit kit : kits) { Kit outboundKit = getDDBKitBasedOnKitLabel(SQL_SELECT_KIT_BY_KIT_LABEL + SQL_SELECT_OUTBOUND, kit.getKitLabel(), ddpInstance.getDdpInstanceId()); - if (kit.getGuid() != outboundKit.getGuid() || kit.getShortId() != outboundKit.getShortId()) { - throw new RuntimeException("2 kits don't match for outbound for kitLabel " + kit.getKitLabel() + " file kit is for participant (" + kit.getShortId() + "," + kit.getGuid() + ") and DB kit is for participant (" + outboundKit.getShortId() + "," + outboundKit.getGuid() + ")"); + if (outboundKit == null) { + logger.error("Outbound Kit found for " + kit.getKitLabel() + " is null!"); } - kit.setDsmKitRequestId(outboundKit.getDsmKitRequestId()); - kit.setTrackingToId(outboundKit.getTrackingToId()); - kit.setShipmentId(outboundKit.getShipmentId()); - kit.setPackageId(outboundKit.getPackageId()); - if (StringUtils.isBlank(outboundKit.getLastActivityDesc())) { - insertKitInDB(kit, false); + else { + if (kit.getGuid() != outboundKit.getGuid() || kit.getShortId() != outboundKit.getShortId()) { + throw new RuntimeException("2 kits don't match for outbound for kitLabel " + kit.getKitLabel() + " file kit is for participant (" + kit.getShortId() + "," + kit.getGuid() + ") and DB kit is for participant (" + outboundKit.getShortId() + "," + outboundKit.getGuid() + ")"); + } + decideWhatToInsertForKit(kit, outboundKit, false); } kit.setPackageId(null); Kit inboundKit = getDDBKitBasedOnKitLabel(SQL_SELECT_KIT_BY_KIT_LABEL + SQL_SELECT_INBOUND, kit.getKitLabel(), ddpInstance.getDdpInstanceId()); - if (kit.getGuid() != inboundKit.getGuid() || kit.getShortId() != inboundKit.getShortId()) { - throw new RuntimeException("2 kits don't match for inbound for kitLabel " + kit.getKitLabel() + " file kit is for participant (" + kit.getShortId() + "," + kit.getGuid() + ") and DB kit is for participant (" + inboundKit.getShortId() + "," + inboundKit.getGuid() + ")"); + if (inboundKit == null) { + logger.error("Inbound Kit found for " + kit.getKitLabel() + " is null!"); } - kit.setDsmKitRequestId(inboundKit.getDsmKitRequestId()); - kit.setTrackingToId(inboundKit.getTrackingToId()); - kit.setShipmentId(inboundKit.getShipmentId()); - kit.setPackageId(inboundKit.getPackageId()); - if (StringUtils.isBlank(inboundKit.getLastActivityDesc())) { - insertKitInDB(kit, true); + else { + if (kit.getGuid() != inboundKit.getGuid() || kit.getShortId() != inboundKit.getShortId()) { + throw new RuntimeException("2 kits don't match for inbound for kitLabel " + kit.getKitLabel() + " file kit is for participant (" + kit.getShortId() + "," + kit.getGuid() + ") and DB kit is for participant (" + inboundKit.getShortId() + "," + inboundKit.getGuid() + ")"); + } + decideWhatToInsertForKit(kit, inboundKit, true); } } } } - private static void insertKitInDB(Kit kit, boolean isReturn) { - logger.info("Inserting new kit information for kit " + kit.getDsmKitRequestId()); + public static void decideWhatToInsertForKit(Kit fileKit, Kit dbKit, boolean isRetrun) { + fileKit.setDsmKitRequestId(dbKit.getDsmKitRequestId()); + fileKit.setTrackingToId(dbKit.getTrackingToId()); + fileKit.setTrackingReturnId(dbKit.getTrackingReturnId()); + fileKit.setShipmentId(dbKit.getShipmentId()); + fileKit.setPackageId(dbKit.getPackageId()); + if (StringUtils.isBlank(dbKit.getLastActivityDesc())) { + logger.info("Inserting Shipment, Package and all activities for kit " + fileKit.getKitLabel()); + insertKitInDB(fileKit, true); + } + else { + if (StringUtils.isBlank(fileKit.getPackageId()) || StringUtils.isBlank(fileKit.getShipmentId())) { + throw new RuntimeException("No package Id or Shipment Id was found for a kit with activity in DB! Kit label is " + fileKit.getKitLabel()); + } + if (StringUtils.isNotBlank(dbKit.getLastActivityDateTime())) { + String firstActivityTime = isRetrun ? fileKit.getPickedUpAt() : fileKit.getShippedAt(); + if (StringUtils.isNotBlank(firstActivityTime)) { + if (shouldInsertBasedOnTimeForKit(dbKit, firstActivityTime)) {//last activity in DB is before the shipped at + insertActivityForPackage(fileKit.getPackageId(), "Picked up", firstActivityTime); + } + else { + String lastActivityTime = isRetrun ? fileKit.getDeliveredAt() : fileKit.getReceivedAt(); + if (StringUtils.isNotBlank(lastActivityTime)) { + if (shouldInsertBasedOnTimeForKit(dbKit, lastActivityTime)) {//last activity in DB is before the shipped at + insertActivityForPackage(fileKit.getPackageId(), "Delivered", lastActivityTime); + } + } + } + } + } + else { + throw new RuntimeException("No package Id or Shipment Id was set for a kit with activity in DB! Kit label is " + fileKit.getKitLabel()); + } + } + + } + + private static boolean shouldInsertBasedOnTimeForKit(@NonNull Kit dbKit, String utcDateTimeString) { + Instant activityInDBInstant = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.of("UTC")).parse(dbKit.getLastActivityDateTime(), Instant::from); + String fileDateTime = utcDateTimeString.replace("T", " ").replace("Z", ""); + Instant fileInstant = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.of("UTC")).parse(fileDateTime, Instant::from); + boolean isBefore = activityInDBInstant.isBefore(fileInstant); + return isBefore; + } + + public static void insertKitInDB(Kit kit, boolean isReturn) { + logger.info("Inserting new " + (isReturn ? "inbound" : "outbound") + " kit information for kit " + kit.getDsmKitRequestId()); if (!isReturn && StringUtils.isBlank(kit.getShipmentId())) { - kit.setShipmentId(insertShipmentForKit(kit.getDsmKitRequestId()) + ""); + kit.setShipmentId(insertShipmentForKit(kit.getDsmKitRequestId())); } if (StringUtils.isBlank(kit.getPackageId())) { String trackingNumber = isReturn ? kit.getTrackingReturnId() : kit.getTrackingToId(); - kit.setPackageId(insertPackageForKit(kit, trackingNumber) + ""); + kit.setPackageId(insertPackageForKit(kit, trackingNumber)); } if (!isReturn) { - insertActivityForPackage(kit.getPackageId(), "shipped", kit.getShippedAt()); - insertActivityForPackage(kit.getPackageId(), "Delivered AT", kit.getDeliveredAt()); + if (StringUtils.isNotBlank(kit.getShippedAt())) { + insertActivityForPackage(kit.getPackageId(), "Picked up", kit.getShippedAt()); + } + if (StringUtils.isNotBlank(kit.getDeliveredAt())) { + insertActivityForPackage(kit.getPackageId(), "Delivered", kit.getDeliveredAt()); + } } else { - insertActivityForPackage(kit.getPackageId(), "Picked up", kit.getPickedUpAt()); - insertActivityForPackage(kit.getPackageId(), "Delivered AT", kit.getReceivedAt()); + if (StringUtils.isNotBlank(kit.getPickedUpAt())) { + insertActivityForPackage(kit.getPackageId(), "Picked up", kit.getPickedUpAt()); + } + if (StringUtils.isNotBlank(kit.getReceivedAt())) { + insertActivityForPackage(kit.getPackageId(), "Delivered", kit.getReceivedAt()); + } } } - private static void insertActivityForPackage(String packageId, String status, String timeStamp) { + public static void insertActivityForPackage(String packageId, String status, String timeStamp) { String sqlDateTime = getSQLDateTimeString(timeStamp);// we need EST time in DB SimpleResult results = inTransaction((conn) -> { SimpleResult dbVals = new SimpleResult(); @@ -196,7 +249,7 @@ private static void insertActivityForPackage(String packageId, String status, St } } - private static int insertShipmentForKit(String dsmKitRequestId) { + public static String insertShipmentForKit(String dsmKitRequestId) { SimpleResult results = inTransaction((conn) -> { SimpleResult dbVals = new SimpleResult(); try (PreparedStatement insertStmt = conn.prepareStatement(SQL_INSERT_SHIPMENT, Statement.RETURN_GENERATED_KEYS)) { @@ -204,7 +257,7 @@ private static int insertShipmentForKit(String dsmKitRequestId) { insertStmt.executeUpdate(); try (ResultSet rs = insertStmt.getGeneratedKeys()) { if (rs.next()) { - dbVals.resultValue = rs.getInt(1); + dbVals.resultValue = rs.getString(1); } } catch (Exception e) { @@ -222,10 +275,10 @@ private static int insertShipmentForKit(String dsmKitRequestId) { throw new RuntimeException("Error getting list of realms ", results.resultException); } - return (int) results.resultValue; + return (String) results.resultValue; } - private static int insertPackageForKit(Kit kit, String trackingNumber) { + public static String insertPackageForKit(Kit kit, String trackingNumber) { logger.info("Inserting new package information for kit " + kit.getDsmKitRequestId()); SimpleResult results = inTransaction((conn) -> { SimpleResult dbVals = new SimpleResult(); @@ -235,7 +288,7 @@ private static int insertPackageForKit(Kit kit, String trackingNumber) { insertStmt.executeUpdate(); try (ResultSet rs = insertStmt.getGeneratedKeys()) { if (rs.next()) { - dbVals.resultValue = rs.getInt(1); + dbVals.resultValue = rs.getString(1); } } catch (Exception e) { @@ -253,14 +306,9 @@ private static int insertPackageForKit(Kit kit, String trackingNumber) { throw new RuntimeException("Error getting list of realms ", results.resultException); } - return (int) results.resultValue; + return (String) results.resultValue; } - // public static void main(String[] args) { - // Map> participants = readFile(""); - // - // } - public static Kit getDDBKitBasedOnKitLabel(String query, String kitLabel, String ddpInstanceId) { SimpleResult results = inTransaction((conn) -> { SimpleResult dbVals = new SimpleResult(); @@ -307,6 +355,9 @@ public static Kit getDDBKitBasedOnKitLabel(String query, String kitLabel, String } Kit kit = (Kit) results.resultValue; + if (kit == null) { + logger.error("Kit found for " + kitLabel + " is null!"); + } logger.info("Found Kit with KitLabel " + kitLabel + " with dsm_kit_request_id " + kit.getDsmKitRequestId()); return kit; } @@ -318,4 +369,11 @@ public static String getSQLDateTimeString(String dateTime) { String activityDateTime = DATE_TIME_FORMATTER.format(activityInstant); return activityDateTime; } + + @Test + public static void InsertFile() { + Map> participants = readFile(""); + insertFileInfo(participants); + } + } From 1cf3d00a585314a9b77b4502f7564f7f172f090e Mon Sep 17 00:00:00 2001 From: pegahtah Date: Thu, 20 May 2021 15:57:51 -0400 Subject: [PATCH 5/6] Added more logging --- .../broadinstitute/dsm/UPSKitToolTest.java | 75 +++--- .../dsm/util/tools/TbosUPSKitTool.java | 221 ++++++++++++++---- 2 files changed, 225 insertions(+), 71 deletions(-) diff --git a/src/test/java/org/broadinstitute/dsm/UPSKitToolTest.java b/src/test/java/org/broadinstitute/dsm/UPSKitToolTest.java index b50c42b5c..5d4084dc3 100644 --- a/src/test/java/org/broadinstitute/dsm/UPSKitToolTest.java +++ b/src/test/java/org/broadinstitute/dsm/UPSKitToolTest.java @@ -6,23 +6,25 @@ import org.broadinstitute.dsm.util.tools.TbosUPSKitTool; import org.junit.Assert; import org.junit.BeforeClass; +import org.junit.Ignore; import org.junit.Test; import java.util.ArrayList; import java.util.Map; import static org.broadinstitute.dsm.TestHelper.setupDB; +import static org.broadinstitute.dsm.util.tools.TbosUPSKitTool.readFile; public class UPSKitToolTest { @Test - public void testDateConversion(){ + public void testDateConversion() { String dateTimeStringInUTC = "2020-12-16T14:46:51Z"; String dateTimeStringInEST = TbosUPSKitTool.getSQLDateTimeString(dateTimeStringInUTC); Assert.assertEquals(dateTimeStringInEST, "2020-12-16 09:46:51"); } @Test - public void testKitSetValue(){ + public void testKitSetValue() { Kit kit = new Kit(); kit.setValueByHeader("kit label", "aaa"); Assert.assertEquals(kit.getKitLabel(), "aaa"); @@ -43,10 +45,11 @@ public void testKitSetValue(){ kit.setValueByHeader("resulted at", "2019-08-15T12:54:14.159Z"); Assert.assertEquals(kit.getResultedAt(), "2019-08-15T12:54:14.159Z"); } + @Test - public void testReadFile(){ -// String fileContent = TestUtil.readFile("NdiTestFile.txt"); - Map> participants = TbosUPSKitTool.readFile("src/test/resources/TbosUPSKitToolTestFile.csv"); + public void testReadFile() { + // String fileContent = TestUtil.readFile("NdiTestFile.txt"); + Map> participants = readFile("src/test/resources/TbosUPSKitToolTestFile.csv"); Assert.assertNotNull(participants); Assert.assertEquals(participants.size(), 1); Assert.assertTrue(participants.keySet().contains("TestBoston_PMVYGB")); @@ -60,8 +63,8 @@ public void testReadFile(){ } @Test - public void testReadFileMultiPt(){ - Map> participants = TbosUPSKitTool.readFile("src/test/resources/TbosUPSKitToolMultiPtKits.csv"); + public void testReadFileMultiPt() { + Map> participants = readFile("src/test/resources/TbosUPSKitToolMultiPtKits.csv"); Assert.assertNotNull(participants); Assert.assertEquals(participants.size(), 2); Assert.assertTrue(participants.keySet().contains("TestBoston_PMVYGB")); @@ -90,11 +93,11 @@ public void testReadFileMultiPt(){ @Test - public void testGetDDPKitBasedOnKitLabel(){ + public void testGetDDPKitBasedOnKitLabel() { DDPInstance ddpInstance = DDPInstance.getDDPInstance("testboston"); - Kit outboundKit = TbosUPSKitTool.getDDBKitBasedOnKitLabel(TbosUPSKitTool.SQL_SELECT_KIT_BY_KIT_LABEL +TbosUPSKitTool.SQL_SELECT_OUTBOUND, "TBOS-test", ddpInstance.getDdpInstanceId()); + Kit outboundKit = TbosUPSKitTool.getDDBKitBasedOnKitLabel(TbosUPSKitTool.SQL_SELECT_KIT_BY_KIT_LABEL + TbosUPSKitTool.SQL_SELECT_OUTBOUND, "TBOS-test", ddpInstance.getDdpInstanceId()); Assert.assertNotNull(outboundKit); - Map> participants = TbosUPSKitTool.readFile("src/test/resources/TbosUPSKitToolTestFile.csv"); + Map> participants = readFile("src/test/resources/TbosUPSKitToolTestFile.csv"); Assert.assertNotNull(participants); Assert.assertEquals(participants.size(), 1); Assert.assertTrue(participants.keySet().contains("TestBoston_PMVYGB")); @@ -106,7 +109,7 @@ public void testGetDDPKitBasedOnKitLabel(){ Assert.assertEquals("1Z9YA775YW21328147", outboundKit.getTrackingToId()); Assert.assertEquals("2309", outboundKit.getDsmKitRequestId()); - Kit inboundKit = TbosUPSKitTool.getDDBKitBasedOnKitLabel(TbosUPSKitTool.SQL_SELECT_KIT_BY_KIT_LABEL +TbosUPSKitTool.SQL_SELECT_INBOUND, "TBOS-test", ddpInstance.getDdpInstanceId()); + Kit inboundKit = TbosUPSKitTool.getDDBKitBasedOnKitLabel(TbosUPSKitTool.SQL_SELECT_KIT_BY_KIT_LABEL + TbosUPSKitTool.SQL_SELECT_INBOUND, "TBOS-test", ddpInstance.getDdpInstanceId()); Assert.assertNotNull(inboundKit); Assert.assertTrue(participants.keySet().contains("TestBoston_PMVYGB")); Assert.assertEquals(participants.get("TestBoston_PMVYGB").size(), 1); @@ -118,8 +121,8 @@ public void testGetDDPKitBasedOnKitLabel(){ } @Test - public void testInsertShipmentAndPackage(){ - Map> participants = TbosUPSKitTool.readFile("src/test/resources/TbosUPSKitToolMultiPtKits.csv"); + public void testInsertShipment() { + Map> participants = readFile("src/test/resources/TbosUPSKitToolMultiPtKits.csv"); Assert.assertNotNull(participants); Assert.assertEquals(participants.size(), 2); Assert.assertTrue(participants.keySet().contains("TestBoston_PMVYGB")); @@ -130,36 +133,56 @@ public void testInsertShipmentAndPackage(){ Assert.assertEquals(ptKits.size(), 1); Kit kit = ptKits.get(0); DDPInstance ddpInstance = DDPInstance.getDDPInstance("testboston"); - Kit outboundKit = TbosUPSKitTool.getDDBKitBasedOnKitLabel(TbosUPSKitTool.SQL_SELECT_KIT_BY_KIT_LABEL +TbosUPSKitTool.SQL_SELECT_OUTBOUND, "TBOS-test", ddpInstance.getDdpInstanceId()); + Kit outboundKit = TbosUPSKitTool.getDDBKitBasedOnKitLabel(TbosUPSKitTool.SQL_SELECT_KIT_BY_KIT_LABEL + TbosUPSKitTool.SQL_SELECT_OUTBOUND, "TBOS-test", ddpInstance.getDdpInstanceId()); Assert.assertNotNull(outboundKit); kit.setDsmKitRequestId(outboundKit.getDsmKitRequestId()); kit.setTrackingToId(outboundKit.getTrackingToId()); + kit.setTrackingReturnId(outboundKit.getTrackingReturnId()); kit.setShipmentId(outboundKit.getShipmentId()); kit.setPackageId(outboundKit.getPackageId()); String shipmentId = TbosUPSKitTool.insertShipmentForKit(kit.getDsmKitRequestId()); kit.setShipmentId(shipmentId); Assert.assertNotNull(shipmentId); - String packageId = TbosUPSKitTool.insertPackageForKit(kit, outboundKit.getTrackingToId()); - Assert.assertNotNull(packageId); - DBTestUtil.deleteFromQuery(packageId, "delete from ups_package where ups_package_id = ?"); + TbosUPSKitTool.insertPackagesForKit(kit); + String outboundPackage = TbosUPSKitTool.getPackageIdForKit(kit, false); + String inboundPackage = TbosUPSKitTool.getPackageIdForKit(kit, true); + Assert.assertNotNull(outboundPackage); + Assert.assertNotNull(inboundPackage); + Assert.assertNotEquals(inboundPackage, outboundPackage); + DBTestUtil.deleteFromQuery(shipmentId, "delete from ups_package where ups_shipment_id = ?"); DBTestUtil.deleteFromQuery(shipmentId, "delete from ups_shipment where ups_shipment_id = ?"); } - - - - + @Test + public void testTheBeforeFunction() { + Map> participants = readFile("src/test/resources/TbosUPSKitToolMultiPtKits.csv"); + Assert.assertNotNull(participants); + Assert.assertEquals(participants.size(), 2); + Assert.assertTrue(participants.keySet().contains("TestBoston_PBPD68")); + Assert.assertEquals(participants.get("TestBoston_PBPD68").size(), 2); + ArrayList ptKits = participants.get("TestBoston_PBPD68"); + Assert.assertEquals(ptKits.size(), 2); + Kit kit = ptKits.get(1); + DDPInstance ddpInstance = DDPInstance.getDDPInstance("testboston"); + Kit dbKit = TbosUPSKitTool.getDDBKitBasedOnKitLabel(TbosUPSKitTool.SQL_SELECT_KIT_BY_KIT_LABEL + TbosUPSKitTool.SQL_SELECT_OUTBOUND, kit.getKitLabel(), ddpInstance.getDdpInstanceId()); + Assert.assertEquals( "2021-04-22 14:22:00", dbKit.getLastActivityDateTime()); + Assert.assertEquals( "2021-04-19T21:38:31Z", kit.getShippedAt()); + boolean b = TbosUPSKitTool.shouldInsertBasedOnTimeForKit(dbKit, kit.getShippedAt()); + Assert.assertFalse(b); + } @BeforeClass public static void first() { setupDB(); } -// -// @AfterClass -// public static void stopServer() { -// cleanupDB(); -// } + + @Ignore + @Test + public void InsertFile() { + Map> participants = TbosUPSKitTool.readFile("src/test/resources/TbosUPSKitToolTestFile.csv"); + TbosUPSKitTool.insertFileInfo(participants); + } } diff --git a/src/test/java/org/broadinstitute/dsm/util/tools/TbosUPSKitTool.java b/src/test/java/org/broadinstitute/dsm/util/tools/TbosUPSKitTool.java index 28ec5af02..8ed53113b 100644 --- a/src/test/java/org/broadinstitute/dsm/util/tools/TbosUPSKitTool.java +++ b/src/test/java/org/broadinstitute/dsm/util/tools/TbosUPSKitTool.java @@ -1,12 +1,17 @@ package org.broadinstitute.dsm.util.tools; +import com.typesafe.config.Config; +import com.typesafe.config.ConfigFactory; +import com.typesafe.config.ConfigValueFactory; import lombok.NonNull; import org.apache.commons.lang3.StringUtils; import org.broadinstitute.ddp.db.SimpleResult; +import org.broadinstitute.ddp.db.TransactionWrapper; +import org.broadinstitute.ddp.util.Utility; import org.broadinstitute.dsm.db.DDPInstance; import org.broadinstitute.dsm.statics.DBConstants; +import org.broadinstitute.dsm.util.TestUtil; import org.broadinstitute.dsm.util.model.Kit; -import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -27,9 +32,12 @@ import static org.broadinstitute.ddp.db.TransactionWrapper.inTransaction; public class TbosUPSKitTool { + private static Config cfg; public static final Logger logger = LoggerFactory.getLogger(TbosUPSKitTool.class); - public static final String SQL_SELECT_KIT_BY_KIT_LABEL = "Select kit.dsm_kit_request_id, kit.kit_label, kit.test_result, req.upload_reason, req.ddp_participant_id, req.bsp_collaborator_participant_id, req.created_date, kit.tracking_to_id, kit.tracking_return_id, activity.*,pack.ups_shipment_id, pack.tracking_number " + - "FROM ddp_kit kit " + + public static final String SQL_SELECT_KIT_BY_KIT_LABEL = "Select kit.dsm_kit_request_id, kit.kit_label, kit.test_result, req.upload_reason, req.ddp_participant_id, " + + " req.bsp_collaborator_participant_id, req.created_date, kit.tracking_to_id, kit.tracking_return_id, activity.*, " + + " shipment.ups_shipment_id, pack.tracking_number, pack.ups_package_id " + + " FROM ddp_kit kit " + " LEFT JOIN ddp_kit_request req ON (kit.dsm_kit_request_id = req.dsm_kit_request_id) " + " left join ups_shipment shipment on (shipment.dsm_kit_request_id = kit.dsm_kit_request_id) " + " left join ups_package pack on ( pack.ups_shipment_id = shipment.ups_shipment_id) " + @@ -50,6 +58,10 @@ public class TbosUPSKitTool { private static final String SQL_INSERT_SHIPMENT = "INSERT INTO ups_shipment ( dsm_kit_request_id ) VALUES (?) "; private static final String SQL_INSERT_PACKAGE = "INSERT INTO ups_package ( ups_shipment_id , tracking_number ) VALUES (?, ?) "; private static final String SQL_INSERT_ACTIVITY = "INSERT INTO ups_activity ( ups_package_id, ups_status_description, ups_activity_date_time) VALUES (?, ?, ?)"; + private static final String SQL_SELECT_PACKAGE = "SELECT * FROM dev_dsm_db.ddp_kit kit " + + "left join ups_shipment ship on (ship.dsm_kit_request_id = kit.dsm_kit_request_id) " + + "left join ups_package pack on (ship.ups_shipment_id = pack.ups_shipment_id) " + + "where kit.dsm_kit_request_id = ? and pack.tracking_number = ?"; public static Map readFile(String fileName) { Map> participants = new HashMap(); @@ -123,21 +135,31 @@ else if (kit != null && StringUtils.isBlank(kit.getKitLabel())) { return participants; } - private static void insertFileInfo(Map> participants) { + public static void insertFileInfo(Map> participants) { DDPInstance ddpInstance = DDPInstance.getDDPInstance("testboston"); String[] shortIds = participants.keySet().toArray(new String[0]); - for (String participantShortId : shortIds) { + int counter = 0; + for (; counter < shortIds.length; counter++) { + String participantShortId = shortIds[counter]; + logger.info("starting on partcipant " + counter + "/" + shortIds.length); ArrayList kits = participants.get(participantShortId); - for (Kit kit : kits) { + logger.info("Found " + kits.size() + " kits for the particpant in this file "); + String insertedShipmentId = null; + int kitCounter = 0; + for (; kitCounter < kits.size(); kitCounter++) { + Kit kit = kits.get(kitCounter); Kit outboundKit = getDDBKitBasedOnKitLabel(SQL_SELECT_KIT_BY_KIT_LABEL + SQL_SELECT_OUTBOUND, kit.getKitLabel(), ddpInstance.getDdpInstanceId()); if (outboundKit == null) { logger.error("Outbound Kit found for " + kit.getKitLabel() + " is null!"); } else { - if (kit.getGuid() != outboundKit.getGuid() || kit.getShortId() != outboundKit.getShortId()) { + if (!kit.getGuid().equals(outboundKit.getGuid()) || !kit.getShortId().equals(outboundKit.getShortId())) { throw new RuntimeException("2 kits don't match for outbound for kitLabel " + kit.getKitLabel() + " file kit is for participant (" + kit.getShortId() + "," + kit.getGuid() + ") and DB kit is for participant (" + outboundKit.getShortId() + "," + outboundKit.getGuid() + ")"); } - decideWhatToInsertForKit(kit, outboundKit, false); + insertedShipmentId = decideWhatToInsertForKit(kit, outboundKit, false); + if (StringUtils.isNotBlank(insertedShipmentId)) { + kit.setShipmentId(insertedShipmentId); + } } kit.setPackageId(null); Kit inboundKit = getDDBKitBasedOnKitLabel(SQL_SELECT_KIT_BY_KIT_LABEL + SQL_SELECT_INBOUND, kit.getKitLabel(), ddpInstance.getDdpInstanceId()); @@ -145,68 +167,75 @@ private static void insertFileInfo(Map> participants) { logger.error("Inbound Kit found for " + kit.getKitLabel() + " is null!"); } else { - if (kit.getGuid() != inboundKit.getGuid() || kit.getShortId() != inboundKit.getShortId()) { + if (!kit.getGuid().equals(inboundKit.getGuid()) || !kit.getShortId().equals(inboundKit.getShortId())) { throw new RuntimeException("2 kits don't match for inbound for kitLabel " + kit.getKitLabel() + " file kit is for participant (" + kit.getShortId() + "," + kit.getGuid() + ") and DB kit is for participant (" + inboundKit.getShortId() + "," + inboundKit.getGuid() + ")"); } decideWhatToInsertForKit(kit, inboundKit, true); } + logger.info("Finished kit " + kitCounter + " / " + kits.size() + " for participant " + participantShortId); } } } - public static void decideWhatToInsertForKit(Kit fileKit, Kit dbKit, boolean isRetrun) { + public static String decideWhatToInsertForKit(Kit fileKit, Kit dbKit, boolean isRetrun) { fileKit.setDsmKitRequestId(dbKit.getDsmKitRequestId()); fileKit.setTrackingToId(dbKit.getTrackingToId()); fileKit.setTrackingReturnId(dbKit.getTrackingReturnId()); - fileKit.setShipmentId(dbKit.getShipmentId()); + if (StringUtils.isBlank(fileKit.getShipmentId())) { + fileKit.setShipmentId(dbKit.getShipmentId()); + } + else { + if (!fileKit.getShipmentId().equals(dbKit.getShipmentId())) { + throw new RuntimeException("Multiple shipments found for " + fileKit.getKitLabel() + " shipment ids are " + fileKit.getShipmentId() + " , " + dbKit.getShipmentId()); + } + } fileKit.setPackageId(dbKit.getPackageId()); - if (StringUtils.isBlank(dbKit.getLastActivityDesc())) { + String insertedShipmentId = null; + if (StringUtils.isBlank(dbKit.getLastActivityDesc())) {//insert everything if the kit doesn't have any shipments in bd logger.info("Inserting Shipment, Package and all activities for kit " + fileKit.getKitLabel()); - insertKitInDB(fileKit, true); + insertedShipmentId = insertKitInDB(fileKit, isRetrun);//most of the kits should end up here } else { if (StringUtils.isBlank(fileKit.getPackageId()) || StringUtils.isBlank(fileKit.getShipmentId())) { throw new RuntimeException("No package Id or Shipment Id was found for a kit with activity in DB! Kit label is " + fileKit.getKitLabel()); } - if (StringUtils.isNotBlank(dbKit.getLastActivityDateTime())) { - String firstActivityTime = isRetrun ? fileKit.getPickedUpAt() : fileKit.getShippedAt(); - if (StringUtils.isNotBlank(firstActivityTime)) { - if (shouldInsertBasedOnTimeForKit(dbKit, firstActivityTime)) {//last activity in DB is before the shipped at - insertActivityForPackage(fileKit.getPackageId(), "Picked up", firstActivityTime); - } - else { - String lastActivityTime = isRetrun ? fileKit.getDeliveredAt() : fileKit.getReceivedAt(); - if (StringUtils.isNotBlank(lastActivityTime)) { - if (shouldInsertBasedOnTimeForKit(dbKit, lastActivityTime)) {//last activity in DB is before the shipped at - insertActivityForPackage(fileKit.getPackageId(), "Delivered", lastActivityTime); - } - } - } + String firstActivityTime = isRetrun ? fileKit.getPickedUpAt() : fileKit.getShippedAt(); + String lastActivityTime = isRetrun ? fileKit.getReceivedAt() : fileKit.getDeliveredAt(); + if (StringUtils.isNotBlank(firstActivityTime)) { + if (shouldInsertBasedOnTimeForKit(dbKit, firstActivityTime)) {//last activity in DB is before the shipped at + insertActivityForPackage(fileKit.getPackageId(), "Picked up", firstActivityTime); } } - else { - throw new RuntimeException("No package Id or Shipment Id was set for a kit with activity in DB! Kit label is " + fileKit.getKitLabel()); + if (StringUtils.isNotBlank(lastActivityTime)) { + if (shouldInsertBasedOnTimeForKit(dbKit, lastActivityTime)) {//last activity in DB is before the last activity in file ( we have until the transit time in db) + insertActivityForPackage(fileKit.getPackageId(), "Delivered", lastActivityTime); + } } } - + return insertedShipmentId; } - private static boolean shouldInsertBasedOnTimeForKit(@NonNull Kit dbKit, String utcDateTimeString) { - Instant activityInDBInstant = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.of("UTC")).parse(dbKit.getLastActivityDateTime(), Instant::from); + public static boolean shouldInsertBasedOnTimeForKit(@NonNull Kit dbKit, String utcDateTimeString) { + Instant activityInDBInstant = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.of("America/New_York")).parse(dbKit.getLastActivityDateTime(), Instant::from); String fileDateTime = utcDateTimeString.replace("T", " ").replace("Z", ""); Instant fileInstant = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.of("UTC")).parse(fileDateTime, Instant::from); boolean isBefore = activityInDBInstant.isBefore(fileInstant); return isBefore; } - public static void insertKitInDB(Kit kit, boolean isReturn) { + public static String insertKitInDB(Kit kit, boolean isReturn) { + String insertedShipmentId = null; logger.info("Inserting new " + (isReturn ? "inbound" : "outbound") + " kit information for kit " + kit.getDsmKitRequestId()); - if (!isReturn && StringUtils.isBlank(kit.getShipmentId())) { - kit.setShipmentId(insertShipmentForKit(kit.getDsmKitRequestId())); + if (StringUtils.isBlank(kit.getShipmentId())) { + if (isReturn) { + logger.error("Check the UPS tables! The outbound didn't set a shipmentId for " + kit.getKitLabel()); + } + insertedShipmentId = insertShipmentForKit(kit.getDsmKitRequestId()); + kit.setShipmentId(insertedShipmentId); + insertPackagesForKit(kit); } if (StringUtils.isBlank(kit.getPackageId())) { - String trackingNumber = isReturn ? kit.getTrackingReturnId() : kit.getTrackingToId(); - kit.setPackageId(insertPackageForKit(kit, trackingNumber)); + kit.setPackageId(getPackageIdForKit(kit, isReturn)); } if (!isReturn) { if (StringUtils.isNotBlank(kit.getShippedAt())) { @@ -224,7 +253,36 @@ public static void insertKitInDB(Kit kit, boolean isReturn) { insertActivityForPackage(kit.getPackageId(), "Delivered", kit.getReceivedAt()); } } + return insertedShipmentId; + } + + public static String getPackageIdForKit(Kit kit, boolean isReturn) { + String trackingNumber = isReturn ? kit.getTrackingReturnId() : kit.getTrackingToId(); + SimpleResult results = inTransaction((conn) -> { + SimpleResult dbVals = new SimpleResult(); + try (PreparedStatement stmt = conn.prepareStatement(SQL_SELECT_PACKAGE)) { + stmt.setString(1, kit.getDsmKitRequestId()); + stmt.setString(2, trackingNumber); + try (ResultSet rs = stmt.executeQuery()) { + if (rs.next()) { + dbVals.resultValue = rs.getString(DBConstants.UPS_PACKAGE_TABLE_ABBR + DBConstants.UPS_PACKAGE_ID); + } + } + catch (Exception ex) { + dbVals.resultException = ex; + } + } + catch (Exception ex) { + dbVals.resultException = ex; + } + return dbVals; + }); + + if (results.resultException != null) { + throw new RuntimeException("Error getting package for kit with kitLabel " + kit.getKitLabel(), results.resultException); + } + return (String) results.resultValue; } public static void insertActivityForPackage(String packageId, String status, String timeStamp) { @@ -236,6 +294,7 @@ public static void insertActivityForPackage(String packageId, String status, Str insertStmt.setString(2, status); insertStmt.setString(3, sqlDateTime); insertStmt.executeUpdate(); + logger.info("Inserted new activity for package " + packageId + " status " + status); } catch (SQLException ex) { logger.error("Error inserting new activity for package " + packageId); @@ -250,6 +309,7 @@ public static void insertActivityForPackage(String packageId, String status, Str } public static String insertShipmentForKit(String dsmKitRequestId) { + logger.info("Inserting new shipment information for kit " + dsmKitRequestId); SimpleResult results = inTransaction((conn) -> { SimpleResult dbVals = new SimpleResult(); try (PreparedStatement insertStmt = conn.prepareStatement(SQL_INSERT_SHIPMENT, Statement.RETURN_GENERATED_KEYS)) { @@ -258,6 +318,7 @@ public static String insertShipmentForKit(String dsmKitRequestId) { try (ResultSet rs = insertStmt.getGeneratedKeys()) { if (rs.next()) { dbVals.resultValue = rs.getString(1); + logger.info("Inserted a shipment for " + dsmKitRequestId + " with ups_shipment_id " + dbVals.resultValue); } } catch (Exception e) { @@ -278,17 +339,36 @@ public static String insertShipmentForKit(String dsmKitRequestId) { return (String) results.resultValue; } - public static String insertPackageForKit(Kit kit, String trackingNumber) { + public static void insertPackagesForKit(Kit kit) { logger.info("Inserting new package information for kit " + kit.getDsmKitRequestId()); SimpleResult results = inTransaction((conn) -> { SimpleResult dbVals = new SimpleResult(); try (PreparedStatement insertStmt = conn.prepareStatement(SQL_INSERT_PACKAGE, Statement.RETURN_GENERATED_KEYS)) { insertStmt.setString(1, kit.getShipmentId()); - insertStmt.setString(2, trackingNumber); + insertStmt.setString(2, kit.getTrackingToId()); insertStmt.executeUpdate(); try (ResultSet rs = insertStmt.getGeneratedKeys()) { if (rs.next()) { dbVals.resultValue = rs.getString(1); + logger.info("Inserted a package for kit " + kit.getKitLabel() + " with ups_package_id " + dbVals.resultValue); + } + } + catch (Exception e) { + throw new RuntimeException("Error getting the id of inserted package for shipment " + kit.getShipmentId(), e); + } + } + catch (SQLException ex) { + logger.error("Error inserting package for shipment " + kit.getShipmentId()); + dbVals.resultException = ex; + } + try (PreparedStatement insertStmt = conn.prepareStatement(SQL_INSERT_PACKAGE, Statement.RETURN_GENERATED_KEYS)) { + insertStmt.setString(1, kit.getShipmentId()); + insertStmt.setString(2, kit.getTrackingReturnId()); + insertStmt.executeUpdate(); + try (ResultSet rs = insertStmt.getGeneratedKeys()) { + if (rs.next()) { + dbVals.resultValue = rs.getString(1); + logger.info("Inserted a package for kit " + kit.getKitLabel() + " with ups_package_id " + dbVals.resultValue); } } catch (Exception e) { @@ -306,7 +386,6 @@ public static String insertPackageForKit(Kit kit, String trackingNumber) { throw new RuntimeException("Error getting list of realms ", results.resultException); } - return (String) results.resultValue; } public static Kit getDDBKitBasedOnKitLabel(String query, String kitLabel, String ddpInstanceId) { @@ -333,7 +412,7 @@ public static Kit getDDBKitBasedOnKitLabel(String query, String kitLabel, String rs.getString(DBConstants.UPS_ACTIVITY_DATE_TIME), rs.getString(DBConstants.UPS_STATUS_DESCRIPTION), rs.getString(DBConstants.UPS_SHIPMENT_ID), - rs.getString(DBConstants.UPS_PACKAGE_ID), + rs.getString(DBConstants.UPS_PACKAGE_TABLE_ABBR + DBConstants.UPS_PACKAGE_ID), rs.getString(DBConstants.COLLABORATOR_PARTICIPANT_ID), rs.getString(DBConstants.DDP_PARTICIPANT_ID) ); @@ -370,10 +449,62 @@ public static String getSQLDateTimeString(String dateTime) { return activityDateTime; } - @Test - public static void InsertFile() { - Map> participants = readFile(""); - insertFileInfo(participants); + public TbosUPSKitTool(String fileName) { + String confFile = ""; + setup(confFile); + TbosUPSKitTool.littleMain(fileName); + } + + private static void littleMain(String fileName) { + Map> participants = TbosUPSKitTool.readFile(fileName); + logger.info(participants.size() + " particpants found in the file"); + TbosUPSKitTool.insertFileInfo(participants); } + private static void setup(String config) { + cfg = ConfigFactory.load(); + cfg = cfg.withFallback(ConfigFactory.parseFile(new File(config))); + cfg = cfg.withValue("quartz.enableJobs", ConfigValueFactory.fromAnyRef("false")); + cfg = cfg.withValue("portal.port", ConfigValueFactory.fromAnyRef("9999")); + cfg = cfg.withValue("errorAlert.recipientAddress", ConfigValueFactory.fromAnyRef("")); + + if (cfg == null) { + throw new NullPointerException("config"); + } + else { + logger.info("Setup the DB..."); + boolean skipSsl = false; + if (cfg.hasPath("portal.dbSkipSsl") && cfg.getBoolean("portal.dbSkipSsl")) { + logger.warn("DB connection will not use SSL."); + skipSsl = true; + } + + int maxConnections = cfg.getInt("portal.maxConnections"); + String dbUrl = cfg.getString("portal.dbUrl"); + if (dbUrl == null) { + throw new NullPointerException("dbUrl"); + } + else { + logger.info("Skipping DB update..."); + } + + if (!skipSsl) { + TransactionWrapper.configureSslProperties(cfg.getString("portal.dbSslKeyStore"), + cfg.getString("portal.dbSslKeyStorePwd"), + cfg.getString("portal.dbSslTrustStore"), + cfg.getString("portal.dbSslTrustStorePwd")); + } + + TransactionWrapper.reset(TestUtil.UNIT_TEST); + TransactionWrapper.init(maxConnections, dbUrl, cfg, skipSsl); + if (!Utility.dbCheck()) { + throw new RuntimeException("DB connection error."); + } + else { + logger.info("DB setup complete."); + } + } + } + + } From d1ab551d92e180ec1e1c86772960bc5e35be7aa9 Mon Sep 17 00:00:00 2001 From: pegahtah Date: Thu, 20 May 2021 16:17:49 -0400 Subject: [PATCH 6/6] Added more logging --- .../org/broadinstitute/dsm/util/tools/TbosUPSKitTool.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/broadinstitute/dsm/util/tools/TbosUPSKitTool.java b/src/test/java/org/broadinstitute/dsm/util/tools/TbosUPSKitTool.java index 8ed53113b..b7caafc36 100644 --- a/src/test/java/org/broadinstitute/dsm/util/tools/TbosUPSKitTool.java +++ b/src/test/java/org/broadinstitute/dsm/util/tools/TbosUPSKitTool.java @@ -141,7 +141,7 @@ public static void insertFileInfo(Map> participants) { int counter = 0; for (; counter < shortIds.length; counter++) { String participantShortId = shortIds[counter]; - logger.info("starting on partcipant " + counter + "/" + shortIds.length); + logger.info("starting on partcipant " + (counter+1) + "/" + shortIds.length); ArrayList kits = participants.get(participantShortId); logger.info("Found " + kits.size() + " kits for the particpant in this file "); String insertedShipmentId = null; @@ -172,7 +172,7 @@ public static void insertFileInfo(Map> participants) { } decideWhatToInsertForKit(kit, inboundKit, true); } - logger.info("Finished kit " + kitCounter + " / " + kits.size() + " for participant " + participantShortId); + logger.info("Finished kit " + (kitCounter+1) + " / " + kits.size() + " for participant " + participantShortId); } } }