소스 검색

查询集合补全缺少数据的日期

zhaoxian 4 년 전
부모
커밋
34c78f5819

+ 33 - 0
jeecg-boot-base-common/src/main/java/org/jeecg/common/util/DateUtils.java

@@ -1566,6 +1566,39 @@ public class DateUtils extends PropertyEditorSupport {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         return sdf.format(calendar.getTime());
     }
+
+    /**
+     * 获取两个日期之间的所有日期集合
+     * @author ZHAOXA
+     * @param
+     * @return java.util.List<java.lang.String>
+     * @throws
+     */
+    public static List<String> getDays(String startTime, String endTime) {
+        // 返回的日期集合
+        List<String> days = new ArrayList<String>();
+        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        try {
+            Date start = dateFormat.parse(startTime);
+            Date end = dateFormat.parse(endTime);
+
+            Calendar tempStart = Calendar.getInstance();
+            tempStart.setTime(start);
+
+            Calendar tempEnd = Calendar.getInstance();
+            tempEnd.setTime(end);
+            tempEnd.add(Calendar.DATE, +1);// 日期加1(包含结束)
+            while (tempStart.before(tempEnd)) {
+                days.add(dateFormat.format(tempStart.getTime()));
+                tempStart.add(Calendar.DAY_OF_YEAR, 1);
+            }
+
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+
+        return days;
+    }
 }
 
 

+ 2 - 2
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/xml/EtlKuaishouReportAccountDailyMapper.xml

@@ -257,11 +257,11 @@
         SELECT t1.account_id as 'accountId',
         t1.auth_name as 'accountName'
         FROM ctop_user_allocation t1
-                 LEFT JOIN ctop_kuaishou_report_hourly_account t2 ON t1.account_id = t2.account_id
+                 LEFT JOIN ctop_etl_kuaishou_report_account_hourly t2 ON t1.account_id = t2.account_id
         where t2.stat_date = DATE_FORMAT(now(), '%Y-%m-%d')
           <if test="userId!=null">
           AND t1.user_id = #{userId}
           </if>
-        order by sum(charge) desc limit 1
+        order by charge desc limit 1
     </select>
 </mapper>

+ 34 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/impl/EtlKuaishouReportAccountHourlyServiceImpl.java

@@ -24,6 +24,7 @@ import org.springframework.stereotype.Service;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.ParseException;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -128,12 +129,45 @@ public class EtlKuaishouReportAccountHourlyServiceImpl extends ServiceImpl<EtlKu
             String endTime2 = DateUtils.getLastDay(startTime, 1);
             String startTime2 = DateUtils.getLastDay(endTime2, days);
             yesterdayList = etlDailyAccountMapper.getOnedayEtlReportList(startTime2, endTime2, accountId, value, type);
+            int todayNum = Check.isNull(todayList) ? 0 : todayList.size();
+            int yesterdayNum = Check.isNull(yesterdayList) ? 0 : yesterdayList.size();
+            days += 1;
+            List<String> dayList = null;
+            if (days > todayNum) {
+                dayList = DateUtils.getDays(startTime, endTime);
+                completionTime(todayList, dayList);
+            }
+            if (days > yesterdayNum) {
+                dayList = DateUtils.getDays(startTime2, endTime2);
+                completionTime(yesterdayList, dayList);
+
+            }
         }
         obj.put("today", todayList);
         obj.put("yesterday", yesterdayList);
         return Result.ok(obj);
     }
 
+    /**
+     * 补全日期
+     */
+    private void completionTime(List<JSONObject> dataList, List<String> dayList) {
+        List<String> newDayList = new ArrayList<>();
+        for (JSONObject data : dataList) {
+            newDayList.add(data.getString("statDate"));
+        }
+
+        for (String day : dayList) {
+            if (!newDayList.contains(day)) {
+                JSONObject obj = new JSONObject();
+                obj.put("statDate", day);
+                obj.put("value", 0);
+                dataList.add(obj);
+            }
+        }
+    }
+
+
     @Override
     public Result<Object> getMaxChargeAccountIdByUser(String userId) {
         JSONObject obj = etlDailyAccountMapper.getMaxChargeAccountId(userId);