浏览代码

修复订单统计 bug

tianyunperfect 3 年之前
父节点
当前提交
b1623bdf09
共有 1 个文件被更改,包括 56 次插入41 次删除
  1. 56 41
      book-server/src/main/java/com/book/server/service/impl/SunDataServiceImpl.java

+ 56 - 41
book-server/src/main/java/com/book/server/service/impl/SunDataServiceImpl.java

@@ -297,12 +297,12 @@ public class SunDataServiceImpl implements SunDataService {
         return Float.parseFloat(String.valueOf(obj));
     }
 
-    private SunStaticOrderDay getSunOrderByDate(String startDate,String endDate) {
+    private SunStaticOrderDay getSunOrderByDate(String startDate, String endDate) {
         int i = sunUserActive2Mapper.selectActiveCountByDate(startDate);
         if (i <= 0) {
             return null;
         }
-        HashMap<String, String> map = sunUserActive2Mapper.selectRechargeByDate(startDate,endDate);
+        HashMap<String, String> map = sunUserActive2Mapper.selectRechargeByDate(startDate, endDate);
         int recharge_count = getIntFromDb(map.get("recharge_count"));
         float recharge_sum = getFloatFromDb(map.get("recharge_sum"));
         float avg = 0;
@@ -321,40 +321,55 @@ public class SunDataServiceImpl implements SunDataService {
         return staticOrderDay;
     }
 
-    private List<SunStaticOrderDayChannel> getSunOrderByDateChannels(String startDate,String endDate) {
-        HashMap<String, Integer> activeMap = new HashMap<>();
+    private List<SunStaticOrderDayChannel> getSunOrderByDateChannels(String startDate, String endDate) {
         List<HashMap<String, String>> activeList = sunUserActive2Mapper.selectActiveCountByDateGroupByChannel(startDate);
-        for (HashMap<String, String> hashMap : activeList) {
-            activeMap.put(hashMap.get("channel_id"), getIntFromDb(hashMap.get("active_user_count")));
-        }
-
-        List<HashMap<String, String>> recharges = sunUserActive2Mapper.selectRechargeByDateGroupByChannel(startDate,endDate);
+        List<HashMap<String, String>> recharges = sunUserActive2Mapper.selectRechargeByDateGroupByChannel(startDate, endDate);
         ArrayList<SunStaticOrderDayChannel> sunStaticOrderDayChannels = new ArrayList<>();
-        for (HashMap<String, String> recharge : recharges) {
-            int recharge_count1 = getIntFromDb(recharge.get("recharge_count"));
-            float recharge_sum1 = getFloatFromDb(recharge.get("recharge_sum"));
-            float avg1 = 0;
-            if (recharge_count1 > 0) {
-                avg1 = recharge_sum1 / recharge_count1;
+        for (HashMap<String, String> hashMap : activeList) {
+            String channel_id = hashMap.get("channel_id");
+            int active_user_count = getIntFromDb(hashMap.get("active_user_count"));
+            Optional<HashMap<String, String>> optionalHashMap = recharges.stream().filter(x -> channel_id.equals(x.get("channel_id"))).findFirst();
+            if (optionalHashMap.isPresent()) {
+                HashMap<String, String> recharge = optionalHashMap.get();
+                int recharge_count1 = getIntFromDb(recharge.get("recharge_count"));
+                float recharge_sum1 = getFloatFromDb(recharge.get("recharge_sum"));
+                float avg1 = 0;
+                if (recharge_count1 > 0) {
+                    avg1 = recharge_sum1 / recharge_count1;
+                }
+                SunStaticOrderDayChannel dayChannel = SunStaticOrderDayChannel.builder()
+                        .staticDate(startDate)
+                        .channelId(recharge.get("channel_id"))
+                        .channelName(recharge.get("channel_name"))
+                        .activeCount(active_user_count)
+                        .rechargeUserCount(getIntFromDb(recharge.get("recharge_user_count")))
+                        .rechargeSum(String.valueOf(recharge_sum1))
+                        .rechargeCount(recharge_count1)
+                        .rechargeAvg(String.format("%.2f", avg1))
+                        .createTime(TimeUtil.getCurrentTimestamp())
+                        .build();
+                sunStaticOrderDayChannels.add(dayChannel);
+            } else {
+                SunStaticOrderDayChannel dayChannel = SunStaticOrderDayChannel.builder()
+                        .staticDate(startDate)
+                        .channelId(channel_id)
+                        .channelName(cacheService.getChannelName(channel_id))
+                        .activeCount(active_user_count)
+                        .rechargeUserCount(0)
+                        .rechargeSum("0")
+                        .rechargeCount(0)
+                        .rechargeAvg("0")
+                        .createTime(TimeUtil.getCurrentTimestamp())
+                        .build();
+                sunStaticOrderDayChannels.add(dayChannel);
             }
-            SunStaticOrderDayChannel dayChannel = SunStaticOrderDayChannel.builder()
-                    .staticDate(startDate)
-                    .channelId(recharge.get("channel_id"))
-                    .channelName(recharge.get("channel_name"))
-                    .activeCount(activeMap.getOrDefault(recharge.get("channel_id"), 0))
-                    .rechargeUserCount(getIntFromDb(recharge.get("recharge_user_count")))
-                    .rechargeSum(String.valueOf(recharge_sum1))
-                    .rechargeCount(recharge_count1)
-                    .rechargeAvg(String.format("%.2f", avg1))
-                    .createTime(TimeUtil.getCurrentTimestamp())
-                    .build();
-            sunStaticOrderDayChannels.add(dayChannel);
         }
+
         return sunStaticOrderDayChannels;
     }
 
     @Override
-    public void orderStaticDate(String startDate,String endDate) {
+    public void orderStaticDate(String startDate, String endDate) {
         /*
          * 清除指定日期的统计,因为可能重新计算
          */
@@ -365,7 +380,7 @@ public class SunDataServiceImpl implements SunDataService {
         开始统计
          */
         // 先不分渠道
-        SunStaticOrderDay staticOrderDay = getSunOrderByDate(startDate,endDate);
+        SunStaticOrderDay staticOrderDay = getSunOrderByDate(startDate, endDate);
         if (staticOrderDay == null) {
             return;
         } else {
@@ -374,12 +389,12 @@ public class SunDataServiceImpl implements SunDataService {
         /*
         分渠道统计
          */
-        sunStaticOrderDayChannelMapper.batchInsert(getSunOrderByDateChannels(startDate,endDate));
+        sunStaticOrderDayChannelMapper.batchInsert(getSunOrderByDateChannels(startDate, endDate));
     }
 
     @Override
     public SunStaticOrderDay getTodayOrderStatic() {
-        return getSunOrderByDate(TimeUtil.getTodayStr(),TimeUtil.getTomorrowStr());
+        return getSunOrderByDate(TimeUtil.getTodayStr(), TimeUtil.getTomorrowStr());
     }
 
     @Override
@@ -395,7 +410,7 @@ public class SunDataServiceImpl implements SunDataService {
 
     @Override
     public List<SunStaticOrderDayChannel> getTodayOrderStaticByChannel() {
-        return getSunOrderByDateChannels(TimeUtil.getTodayStr(),TimeUtil.getTomorrowStr());
+        return getSunOrderByDateChannels(TimeUtil.getTodayStr(), TimeUtil.getTomorrowStr());
     }
 
     @Override
@@ -456,12 +471,12 @@ public class SunDataServiceImpl implements SunDataService {
 
     @Override
     public SunStaticUserDay getTodayUserStatic() {
-        return getSunUserByDate(TimeUtil.getTodayStr(),TimeUtil.getTomorrowStr());
+        return getSunUserByDate(TimeUtil.getTodayStr(), TimeUtil.getTomorrowStr());
     }
 
     @Override
     public List<SunStaticUserDayChannel> getTodayUserStaticByChannel() {
-        return getSunUserByDateChannels(TimeUtil.getTodayStr(),TimeUtil.getTomorrowStr());
+        return getSunUserByDateChannels(TimeUtil.getTodayStr(), TimeUtil.getTomorrowStr());
     }
 
     @Override
@@ -499,12 +514,12 @@ public class SunDataServiceImpl implements SunDataService {
         return sunStaticUserDayMapper.selectByExample(example);
     }
 
-    private SunStaticUserDay getSunUserByDate(String startDate,String endDate) {
-        int i = sunUser2Mapper.selectCountUserByDay(startDate,endDate);
+    private SunStaticUserDay getSunUserByDate(String startDate, String endDate) {
+        int i = sunUser2Mapper.selectCountUserByDay(startDate, endDate);
         if (i <= 0) {
             return null;
         }
-        HashMap<String, String> recharge = sunUser2Mapper.selectByDay(startDate,endDate);
+        HashMap<String, String> recharge = sunUser2Mapper.selectByDay(startDate, endDate);
         int new_recharge_user = getIntFromDb(recharge.get("new_recharge_user"));
         float new_recharge_sum = getFloatFromDb(recharge.get("new_recharge_sum"));
         float avg = 0;
@@ -512,7 +527,7 @@ public class SunDataServiceImpl implements SunDataService {
         float rate = 0;
         if (new_recharge_sum > 0) {
             avg = new_recharge_sum / new_recharge_user;
-            rate = (float)new_recharge_user / i;
+            rate = (float) new_recharge_user / i;
         }
         SunStaticUserDay day = SunStaticUserDay.builder()
                 .staticDate(startDate)
@@ -528,8 +543,8 @@ public class SunDataServiceImpl implements SunDataService {
         return day;
     }
 
-    private List<SunStaticUserDayChannel> getSunUserByDateChannels(String startDate,String endDate) {
-        List<HashMap<String, String>> list = sunUser2Mapper.selectCountByDayChannel(startDate,endDate);
+    private List<SunStaticUserDayChannel> getSunUserByDateChannels(String startDate, String endDate) {
+        List<HashMap<String, String>> list = sunUser2Mapper.selectCountByDayChannel(startDate, endDate);
         List<HashMap<String, String>> recharges = sunUser2Mapper.selectByDayChannel(startDate, endDate);
         ArrayList<SunStaticUserDayChannel> sunStaticDayChannels = new ArrayList<>();
 
@@ -539,7 +554,7 @@ public class SunDataServiceImpl implements SunDataService {
             Optional<HashMap<String, String>> optionalHashMap = recharges.stream().filter(x -> x.get("channel_id").equals(channel_id)).findFirst();
 
             if (optionalHashMap.isPresent()) {
-                HashMap<String, String> recharge = recharges.stream().filter(x -> x.get("channel_id").equals(channel_id)).findFirst().get();
+                HashMap<String, String> recharge = optionalHashMap.get();
 
                 int new_recharge_user = getIntFromDb(recharge.get("new_recharge_user"));
                 float new_recharge_sum = getFloatFromDb(recharge.get("new_recharge_sum"));