Просмотр исходного кода

公出月分工时统计开发

anderx месяцев назад: 9
Родитель
Сommit
9660f61f54

+ 19 - 0
src/main/java/com/goafanti/admin/bo/AdminPublicDuration.java

@@ -10,6 +10,24 @@ public class AdminPublicDuration {
     private String name;
     private Double duration;
     private Date date;
+    private Integer countNumber;
+    private double days;
+
+    public Integer getCountNumber() {
+        return countNumber;
+    }
+
+    public void setCountNumber(Integer countNumber) {
+        this.countNumber = countNumber;
+    }
+
+    public double getDays() {
+        return days;
+    }
+
+    public void setDays(double days) {
+        this.days = days;
+    }
 
     public String getId() {
         return id;
@@ -31,6 +49,7 @@ public class AdminPublicDuration {
         this.id = id;
         this.name = name;
         this.duration = duration;
+        this.setCountNumber(0);
     }
 
     public AdminPublicDuration() {

+ 33 - 6
src/main/java/com/goafanti/admin/service/impl/AdminStatisticsServiceImpl.java

@@ -17,6 +17,7 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
@@ -575,19 +576,19 @@ public class AdminStatisticsServiceImpl implements AdminStatisticsService {
         for (AdminPublicDuration e : list) {
             String id = e.getId(); // 假设 AdminStatisticsBo 有一个 getId() 方法
             BigDecimal duration = BigDecimal.valueOf(e.getDuration()); // 假设 AdminStatisticsBo 有一个 getCallDurationSum() 方法
+            if(!nameMap.containsKey(id)){
+                String name = e.getName();
+                nameMap.put(id, name);
+            }
             if (durationMap.containsKey(id)) {
                 BigDecimal currentDuration = durationMap.get(id);
                 durationMap.put(id, currentDuration.add(duration));
-                String name = e.getName();
-                nameMap.put(id, name);
             } else {
                 durationMap.put(id, duration);
             }
         }
-        List<AdminPublicDuration> list2=new ArrayList<>();
-        for (Map.Entry<String, BigDecimal> entry : durationMap.entrySet()) {
-            list2.add(new AdminPublicDuration(entry.getKey(),nameMap.get(entry.getKey()),entry.getValue().doubleValue()));
-        }
+        List<AdminPublicDuration> list2=sumDurationsById(list);
+
         Map<String,Object> map=new HashMap<>();
         map.put("date",list);
         map.put("count",list2);
@@ -595,6 +596,32 @@ public class AdminStatisticsServiceImpl implements AdminStatisticsService {
     }
 
 
+    public List<AdminPublicDuration>  sumDurationsById(List<AdminPublicDuration> adminPublicDurations) {
+        Map<String, AdminPublicDuration> durationMap = new HashMap<>();
+
+        for (AdminPublicDuration adminPublicDuration : adminPublicDurations) {
+            String id = adminPublicDuration.getId();
+            String name = adminPublicDuration.getName();
+            double duration = adminPublicDuration.getDuration();
+
+            if (durationMap.containsKey(id)) {
+                AdminPublicDuration summary = durationMap.get(id);
+                BigDecimal countDuration = BigDecimal.valueOf(summary.getDuration()).add(BigDecimal.valueOf(duration));
+                summary.setDuration(countDuration.doubleValue());
+                summary.setName(name);
+                summary.setCountNumber(summary.getCountNumber()+1);
+                BigDecimal divide = BigDecimal.valueOf(summary.getDuration()).divide(BigDecimal.valueOf(summary.getCountNumber()), 2, RoundingMode.HALF_UP);
+                summary.setDays(divide.doubleValue());
+            } else {
+                durationMap.put(id, new AdminPublicDuration(id, name, duration));
+            }
+        }
+
+
+        return new ArrayList<>(durationMap.values());
+    }
+
+