OSDN Git Service

feat: add PRP calc methods
authorhizumiaoba <56146205+hizumiaoba@users.noreply.github.com>
Thu, 10 Mar 2022 02:55:30 +0000 (11:55 +0900)
committerhizumiaoba <56146205+hizumiaoba@users.noreply.github.com>
Thu, 10 Mar 2022 02:55:30 +0000 (11:55 +0900)
src/com/ranfa/lib/calc/FanCalc.java [moved from src/com/ranfa/lib/FanCalc.java with 99% similarity]
src/com/ranfa/lib/calc/PRPCalc.java [new file with mode: 0644]

similarity index 99%
rename from src/com/ranfa/lib/FanCalc.java
rename to src/com/ranfa/lib/calc/FanCalc.java
index 36885dd..325ebe8 100644 (file)
@@ -1,4 +1,4 @@
-package com.ranfa.lib;
+package com.ranfa.lib.calc;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
diff --git a/src/com/ranfa/lib/calc/PRPCalc.java b/src/com/ranfa/lib/calc/PRPCalc.java
new file mode 100644 (file)
index 0000000..db47b85
--- /dev/null
@@ -0,0 +1,66 @@
+package com.ranfa.lib.calc;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class PRPCalc {
+       
+       private final Logger logger = LoggerFactory.getLogger(PRPCalc.class);
+       
+       private static final String PRP_STORAGE_FILE_PATH = "generated/prp.json";
+       private static final BigDecimal THAUSAND = BigDecimal.valueOf(1000);
+       
+       private List<Integer> TotalPRPList;
+       private int TotalPRP;
+
+       public PRPCalc() {
+               if(Files.notExists(Paths.get(PRP_STORAGE_FILE_PATH)))
+                       generateEmptyPRPFile();
+               TypeReference<List<Integer>> typeref = new TypeReference<List<Integer>>() {};
+               try {
+                       TotalPRPList = new ObjectMapper().readValue(Paths.get(PRP_STORAGE_FILE_PATH).toFile(), typeref);
+               } catch (IOException e) {
+                       logger.error("Couldn't read prp file from disk.", e);
+               }
+               TotalPRP = calcCurrentTotal();
+       }
+       
+       public boolean generateEmptyPRPFile() {
+               if(Files.notExists(Paths.get("generated")))
+                       try {
+                               Files.createDirectory(Paths.get("generated"));
+                               Files.createFile(Paths.get(PRP_STORAGE_FILE_PATH));
+                       } catch (IOException e) {
+                               logger.error("cannot make prp file.", e);
+                               return false;
+                       }
+               return true;
+       }
+       
+       public int calcCurrentTotal() {
+               int res = 0;
+               for(int val : TotalPRPList)
+                       res += val;
+               return res;
+       }
+       
+       public int getTotalPRP() {
+               return TotalPRP;
+       }
+       
+       public static int calcPRPFromScore(int score) {
+               BigDecimal scoreDecimal = BigDecimal.valueOf(score);
+               scoreDecimal.divide(THAUSAND, RoundingMode.DOWN);
+               return scoreDecimal.intValueExact();
+       }
+}