From a43222049d02c8ce2b38a9b55969b6ff302b62b7 Mon Sep 17 00:00:00 2001 From: MarkBryanMilligan Date: Sat, 6 Mar 2021 15:45:09 -0600 Subject: [PATCH] Fix some timezone bugs. --- .../currentmonitor/CurrentMonitorDao.java | 1 + .../MongoCurrentMonitorDao.java | 18 ++++++++- .../currentmonitor/SignupResponse.java | 12 +++++- .../datamodel/currentmonitor/bom/BOM.java | 38 ++++++++++++++----- .../dao/SignupResponseSerializer.java | 2 + .../currentmonitor/servlet/AuthServlet.java | 2 +- .../currentmonitor/servlet/SignupServlet.java | 2 +- 7 files changed, 60 insertions(+), 15 deletions(-) diff --git a/currentmonitor/lantern-dataaccess-currentmonitor/src/main/java/com/lanternsoftware/dataaccess/currentmonitor/CurrentMonitorDao.java b/currentmonitor/lantern-dataaccess-currentmonitor/src/main/java/com/lanternsoftware/dataaccess/currentmonitor/CurrentMonitorDao.java index 76adc9a..3966a3a 100644 --- a/currentmonitor/lantern-dataaccess-currentmonitor/src/main/java/com/lanternsoftware/dataaccess/currentmonitor/CurrentMonitorDao.java +++ b/currentmonitor/lantern-dataaccess-currentmonitor/src/main/java/com/lanternsoftware/dataaccess/currentmonitor/CurrentMonitorDao.java @@ -41,6 +41,7 @@ public interface CurrentMonitorDao { Account getAccount(int _accountId); Account getAccountByUsername(String _username); TimeZone getTimeZoneForAccount(int _accountId); + String getTimeZoneForAccount(String _authCode); MongoProxy getProxy(); } diff --git a/currentmonitor/lantern-dataaccess-currentmonitor/src/main/java/com/lanternsoftware/dataaccess/currentmonitor/MongoCurrentMonitorDao.java b/currentmonitor/lantern-dataaccess-currentmonitor/src/main/java/com/lanternsoftware/dataaccess/currentmonitor/MongoCurrentMonitorDao.java index 582178b..fb17899 100644 --- a/currentmonitor/lantern-dataaccess-currentmonitor/src/main/java/com/lanternsoftware/dataaccess/currentmonitor/MongoCurrentMonitorDao.java +++ b/currentmonitor/lantern-dataaccess-currentmonitor/src/main/java/com/lanternsoftware/dataaccess/currentmonitor/MongoCurrentMonitorDao.java @@ -200,7 +200,7 @@ public class MongoCurrentMonitorDao implements CurrentMonitorDao { Account acct = proxy.queryOne(Account.class, new DaoQuery("username", _username)); if ((acct == null) || !BCrypt.checkpw(_password, acct.getPassword())) return null; - return aes.encryptToBase64(DaoSerializer.toZipBson(new AuthCode(acct.getId(), acct.getAuxiliaryAccountIds()))); + return toAuthCode(acct.getId(), acct.getAuxiliaryAccountIds()); } @Override @@ -226,7 +226,13 @@ public class MongoCurrentMonitorDao implements CurrentMonitorDao { account.setTimezone(_tz.getID()); putAccount(account); } - return aes.encryptToBase64(DaoSerializer.toZipBson(new AuthCode(account.getId(), account.getAuxiliaryAccountIds()))); + return toAuthCode(account.getId(), account.getAuxiliaryAccountIds()); + } + + public String toAuthCode(int _acctId, List _auxAcctIds) { + if (_acctId < 1) + return null; + return aes.encryptToBase64(DaoSerializer.toZipBson(new AuthCode(_acctId, _auxAcctIds))); } @Override @@ -275,6 +281,14 @@ public class MongoCurrentMonitorDao implements CurrentMonitorDao { return tz == null ? TimeZone.getTimeZone("America/Chicago") : tz; } + @Override + public String getTimeZoneForAccount(String _authCode) { + AuthCode code = decryptAuthCode(_authCode); + if (code == null) + return null; + return getTimeZoneForAccount(code.getAccountId()).getID(); + } + private Account clearPassword(Account _account) { if (_account == null) return null; diff --git a/currentmonitor/lantern-datamodel-currentmonitor/src/main/java/com/lanternsoftware/datamodel/currentmonitor/SignupResponse.java b/currentmonitor/lantern-datamodel-currentmonitor/src/main/java/com/lanternsoftware/datamodel/currentmonitor/SignupResponse.java index 2e0a0f5..662848e 100644 --- a/currentmonitor/lantern-datamodel-currentmonitor/src/main/java/com/lanternsoftware/datamodel/currentmonitor/SignupResponse.java +++ b/currentmonitor/lantern-datamodel-currentmonitor/src/main/java/com/lanternsoftware/datamodel/currentmonitor/SignupResponse.java @@ -7,6 +7,7 @@ import com.lanternsoftware.util.dao.annotations.DBSerializable; public class SignupResponse { private String error; private String authCode; + private String timezone; public SignupResponse() { } @@ -17,9 +18,10 @@ public class SignupResponse { return response; } - public static SignupResponse success(String _authCode) { + public static SignupResponse success(String _authCode, String _timezone) { SignupResponse response = new SignupResponse(); response.setAuthCode(_authCode); + response.setTimezone(_timezone); return response; } @@ -39,6 +41,14 @@ public class SignupResponse { authCode = _authCode; } + public String getTimezone() { + return timezone; + } + + public void setTimezone(String _timezone) { + timezone = _timezone; + } + public boolean isSuccess() { return NullUtils.isEmpty(error) && NullUtils.isNotEmpty(authCode); } diff --git a/currentmonitor/lantern-datamodel-currentmonitor/src/main/java/com/lanternsoftware/datamodel/currentmonitor/bom/BOM.java b/currentmonitor/lantern-datamodel-currentmonitor/src/main/java/com/lanternsoftware/datamodel/currentmonitor/bom/BOM.java index 077fc6c..1ce3613 100644 --- a/currentmonitor/lantern-datamodel-currentmonitor/src/main/java/com/lanternsoftware/datamodel/currentmonitor/bom/BOM.java +++ b/currentmonitor/lantern-datamodel-currentmonitor/src/main/java/com/lanternsoftware/datamodel/currentmonitor/bom/BOM.java @@ -2,6 +2,7 @@ package com.lanternsoftware.datamodel.currentmonitor.bom; import com.lanternsoftware.datamodel.currentmonitor.Breaker; import com.lanternsoftware.datamodel.currentmonitor.BreakerConfig; +import com.lanternsoftware.datamodel.currentmonitor.BreakerType; import com.lanternsoftware.util.CollectionUtils; import com.lanternsoftware.util.csv.CSV; import com.lanternsoftware.util.dao.DaoSerializer; @@ -18,7 +19,33 @@ public class BOM { public static BOM fromConfig(BreakerConfig _config) { BOM bom = new BOM(); bom.setLineItems(new ArrayList<>()); - int hubCnt = (int)Math.ceil(CollectionUtils.size(_config.getAllBreakers())/15.0); + Map ctCnts = new TreeMap<>(); + Map ctDuplicates = new TreeMap<>(); + for (Breaker breaker : CollectionUtils.makeNotNull(_config.getAllBreakers())) { + if (breaker.getSizeAmps() <= 20) { + ctCnts.computeIfAbsent(20, (_k) -> new AtomicInteger(0)).getAndIncrement(); + if (breaker.getType() == BreakerType.DOUBLE_POLE_TOP_ONE_CT) + ctDuplicates.computeIfAbsent(20, (_k) -> new AtomicInteger(0)).getAndIncrement(); + } + else if (breaker.getSizeAmps() <= 30) { + ctCnts.computeIfAbsent(30, (_k) -> new AtomicInteger(0)).getAndIncrement(); + if (breaker.getType() == BreakerType.DOUBLE_POLE_TOP_ONE_CT) + ctDuplicates.computeIfAbsent(30, (_k) -> new AtomicInteger(0)).getAndIncrement(); + } + else { + ctCnts.computeIfAbsent(50, (_k) -> new AtomicInteger(0)).getAndIncrement(); + if (breaker.getType() == BreakerType.DOUBLE_POLE_TOP_ONE_CT) + ctDuplicates.computeIfAbsent(50, (_k) -> new AtomicInteger(0)).getAndIncrement(); + } + } + for (Map.Entry ctCnt : ctDuplicates.entrySet()) { + AtomicInteger cnt = ctCnts.get(ctCnt.getKey()); + if (cnt != null) + cnt.getAndAdd(-ctCnt.getValue().get()); + } + int breakerCnt = CollectionUtils.sumIntegers(CollectionUtils.transform(ctCnts.values(), AtomicInteger::get)); + int hubCnt = (int)Math.ceil(breakerCnt/15.0); + bom.getLineItems().add(new LineItem("Lantern Power Monitor Case", "LPMC1", "https://github.com/MarkBryanMilligan/LanternPowerMonitor/tree/main/case", 0.10, 3.00, hubCnt)); bom.getLineItems().add(new LineItem("Lantern Power Monitor Case Lid", "LPMCL1", "https://github.com/MarkBryanMilligan/LanternPowerMonitor/tree/main/case", 0.10, 2.00, hubCnt)); bom.getLineItems().add(new LineItem("Lantern Power Monitor Soldering Jig", "LPMSJ1", "https://github.com/MarkBryanMilligan/LanternPowerMonitor/tree/main/case", 0.10, 4.00, 1)); @@ -39,15 +66,6 @@ public class BOM { bom.getLineItems().add(new LineItem("M2.5x10mm Cap Screw", "A15120300ux0225", "https://www.amazon.com/gp/product/B01B1OD7IK", 0.10, 0.20, hubCnt*8)); bom.getLineItems().add(new LineItem("M2.5x11mm Female x Female Standoff", "", "https://www.ebay.com/itm/50pcs-M2-5-Female-Hex-Screw-Brass-PCB-Standoffs-Hexagonal-Spacers/172746413434", 0.15, 0.25, hubCnt*4)); bom.getLineItems().add(new LineItem("M2.5x12mm Female x Male Standoff", "", "https://www.ebay.com/itm/M2-5-2-5mm-Thread-6mm-Brass-Standoff-Spacer-Male-x-Female-20-50pcs-New/283432513974", 0.15, 0.25, hubCnt*4)); - Map ctCnts = new TreeMap<>(); - for (Breaker breaker : CollectionUtils.makeNotNull(_config.getAllBreakers())) { - if (breaker.getSizeAmps() <= 20) - ctCnts.computeIfAbsent(20, (_k)->new AtomicInteger(0)).getAndIncrement(); - else if (breaker.getSizeAmps() <= 30) - ctCnts.computeIfAbsent(30, (_k)->new AtomicInteger(0)).getAndIncrement(); - else - ctCnts.computeIfAbsent(50, (_k)->new AtomicInteger(0)).getAndIncrement(); - } for (Map.Entry ctCnt : ctCnts.entrySet()) { bom.getLineItems().add(new LineItem(String.format("%d Amp Current Transformer", ctCnt.getKey()), String.format("SCT-013-0%d", ctCnt.getKey()), "N/A", 5.00, 7.00, ctCnt.getValue().get())); } diff --git a/currentmonitor/lantern-datamodel-currentmonitor/src/main/java/com/lanternsoftware/datamodel/currentmonitor/dao/SignupResponseSerializer.java b/currentmonitor/lantern-datamodel-currentmonitor/src/main/java/com/lanternsoftware/datamodel/currentmonitor/dao/SignupResponseSerializer.java index 099cbf2..e4283ea 100644 --- a/currentmonitor/lantern-datamodel-currentmonitor/src/main/java/com/lanternsoftware/datamodel/currentmonitor/dao/SignupResponseSerializer.java +++ b/currentmonitor/lantern-datamodel-currentmonitor/src/main/java/com/lanternsoftware/datamodel/currentmonitor/dao/SignupResponseSerializer.java @@ -27,6 +27,7 @@ public class SignupResponseSerializer extends AbstractDaoSerializer