Browse Source

完善数据

yq 2 years ago
parent
commit
7d9659dde7

+ 17 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/config/DateStringConvert.java

@@ -0,0 +1,17 @@
+package com.usky.iot.service.config;
+
+
+import com.usky.common.core.util.DateUtils;
+import org.springframework.core.convert.converter.Converter;
+
+import java.util.Date;
+
+/**
+ * @author yq
+ */
+public class DateStringConvert implements Converter<Date, String> {
+    @Override
+    public String convert(Date source) {
+        return DateUtils.format(source);
+    }
+}

+ 29 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/config/FormatterConfiguration.java

@@ -0,0 +1,29 @@
+package com.usky.iot.service.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.format.FormatterRegistry;
+import org.springframework.format.support.FormattingConversionService;
+import org.springframework.http.converter.ObjectToStringHttpMessageConverter;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+/**
+ * @author yq
+ */
+@Configuration
+public class FormatterConfiguration implements WebMvcConfigurer {
+
+    @Override
+    public void addFormatters(FormatterRegistry registry) {
+        registry.addConverter(new StringDateConverter());
+    }
+
+    @Bean
+    public ObjectToStringHttpMessageConverter objectToStringHttpMessageConverter() {
+        FormattingConversionService conversionService = new FormattingConversionService();
+        conversionService.addConverter(new StringDateConverter());
+        conversionService.addConverter(new DateStringConvert());
+        ObjectToStringHttpMessageConverter httpMessageconverter = new ObjectToStringHttpMessageConverter(conversionService);
+        return httpMessageconverter;
+    }
+}

+ 17 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/config/StringDateConverter.java

@@ -0,0 +1,17 @@
+package com.usky.iot.service.config;
+
+
+import com.usky.common.core.util.DateUtils;
+import org.springframework.core.convert.converter.Converter;
+
+import java.util.Date;
+
+/**
+ * @author yq
+ */
+public class StringDateConverter implements Converter<String, Date> {
+    @Override
+    public Date convert(String source) {
+        return DateUtils.parseDate(source);
+    }
+}

+ 57 - 5
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDataOverviewServiceImpl.java

@@ -1,15 +1,22 @@
 package com.usky.iot.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.usky.common.core.util.DateUtils;
+import com.usky.common.mybatis.core.AbstractCrudService;
 import com.usky.iot.domain.DmpDataOverview;
 import com.usky.iot.mapper.DmpDataOverviewMapper;
 import com.usky.iot.service.DmpDataOverviewService;
-import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.iot.service.vo.DmpDataOverviewVO;
 import org.springframework.stereotype.Service;
 
+import java.util.Comparator;
 import java.util.Date;
 import java.util.List;
+import java.util.Optional;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 /**
  * 数据概览
@@ -24,9 +31,54 @@ public class DmpDataOverviewServiceImpl extends AbstractCrudService<DmpDataOverv
     @Override
     public List<DmpDataOverview> list(Date startTime, Date endTime, Integer productId, Integer type) {
         LambdaQueryWrapper<DmpDataOverview> queryWrapper = Wrappers.lambdaQuery();
-        queryWrapper.between(null != startTime && null != endTime,DmpDataOverview::getCreatedTime,startTime,endTime)
-                .eq(null != productId,DmpDataOverview::getProductId,productId)
-                .eq(null != type,DmpDataOverview::getCycleType,type);
-        return this.list(queryWrapper);
+        queryWrapper.between(null != startTime && null != endTime, DmpDataOverview::getCreatedTime, startTime, endTime)
+                .eq(null != productId, DmpDataOverview::getProductId, productId)
+                .eq(null != type, DmpDataOverview::getCycleType, type);
+        List<DmpDataOverview> list = this.list(queryWrapper);
+        Optional.ofNullable(type)
+                .ifPresent(t ->{
+                    if (1 == type && null != endTime){
+                        prefectMonth(list, startTime, endTime, "yyyy-MM-dd", date -> DateUtils.addDays(date, 1));
+                    }else if (2 == type && null != endTime){
+                        prefectMonth(list, startTime, endTime, "yyyy-MM", date -> DateUtils.addMonths(date, 1));
+                    }
+                });
+        return list.stream().
+                sorted(Comparator.comparing(DmpDataOverview::getCreatedTime)).
+                collect(Collectors.toList());
+    }
+
+
+    /**
+     * 完善数据
+     * @param list
+     * @param startTime
+     * @param endTime
+     * @param format
+     * @param function
+     */
+    public void prefectMonth(List<DmpDataOverview> list, Date startTime, Date endTime, String format, Function<Date, Date> function) {
+        do {
+            String dates = DateUtils.format(startTime, format);
+            Date finalStartTime = startTime;
+            list.add(list.stream().filter(dv -> DateUtils.format(dv.getCreatedTime(), format).equals(dates))
+                    .findAny()
+                    .orElseGet(() -> {
+                        DmpDataOverview dmpDataOverview = new DmpDataOverview();
+                        dmpDataOverview.setCreatedTime(finalStartTime);
+                        DmpDataOverviewVO dmpDataOverviewVO = new DmpDataOverviewVO();
+                        dmpDataOverviewVO.setDeviceCount(0);
+                        dmpDataOverviewVO.setHyCount(0);
+                        dmpDataOverviewVO.setJhCount(0);
+                        dmpDataOverviewVO.setZcCount(0);
+                        dmpDataOverviewVO.setDzcCount(0);
+                        dmpDataOverviewVO.setDlxCount(0);
+                        dmpDataOverviewVO.setJhRadioCount(0.0D);
+                        dmpDataOverviewVO.setHyRadioCount(0.0D);
+                        dmpDataOverview.setDeviceNumber(JSON.toJSONString(dmpDataOverviewVO));
+                        return dmpDataOverview;
+                    }));
+            startTime = function.apply(startTime);
+        } while ((startTime.getTime() - endTime.getTime()) <= 0);
     }
 }