Newspaper 1 سال پیش
والد
کامیت
7545848765

+ 6 - 0
huimv-farm-datacenter-egg/huimv-farm-environ/src/main/java/com/huimv/environ/eco/controller/FeedConsumeController.java

@@ -49,4 +49,10 @@ public class FeedConsumeController {
         return feedConsumeService.listFeed(map);
     }
 
+    @PostMapping("/analysis")
+    public Result analysis(@RequestBody Map<String,String> map){
+        return feedConsumeService.analysis(map);
+    }
+
+
 }

+ 14 - 0
huimv-farm-datacenter-egg/huimv-farm-environ/src/main/java/com/huimv/environ/eco/entity/feedVo/BuildFeedVo.java

@@ -0,0 +1,14 @@
+package com.huimv.environ.eco.entity.feedVo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class BuildFeedVo {
+    private String unitName;
+    private Integer age;
+    private Integer stock;
+    private BigDecimal totalConsume;
+    private BigDecimal singleConsume;
+}

+ 15 - 0
huimv-farm-datacenter-egg/huimv-farm-environ/src/main/java/com/huimv/environ/eco/entity/feedVo/FeedAnalysisVo.java

@@ -0,0 +1,15 @@
+package com.huimv.environ.eco.entity.feedVo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class FeedAnalysisVo {
+    private BigDecimal totalProduce;
+    private BigDecimal totalConsume;
+    private BigDecimal gap;
+    private BigDecimal gapRate;
+    private List<BuildFeedVo> list;
+}

+ 3 - 0
huimv-farm-datacenter-egg/huimv-farm-environ/src/main/java/com/huimv/environ/eco/mapper/FeedUsageMapper.java

@@ -2,6 +2,7 @@ package com.huimv.environ.eco.mapper;
 
 import com.huimv.environ.eco.entity.FeedUsage;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.environ.eco.entity.feedVo.BuildFeedVo;
 import com.huimv.environ.eco.entity.feedVo.FeedUsedChartVo;
 import com.huimv.environ.eco.entity.feedVo.FeedUsedVo;
 import com.huimv.environ.eco.entity.feedVo.FeedVo;
@@ -30,4 +31,6 @@ public interface FeedUsageMapper extends BaseMapper<FeedUsage> {
     List<FeedVo> listFeedGroupByMonth(String startDate, String unitName);
 
     List<FeedVo> listFeedGroupByYear(String startDate, String unitName);
+
+    List<BuildFeedVo> getAnalysis(String startDate, String endDate);
 }

+ 2 - 0
huimv-farm-datacenter-egg/huimv-farm-environ/src/main/java/com/huimv/environ/eco/service/IFeedConsumeService.java

@@ -26,4 +26,6 @@ public interface IFeedConsumeService extends IService<FeedConsume> {
     Result listChartConsume(Map<String, String> map);
 
     Result listBuild(Map<String, String> map);
+
+    Result analysis(Map<String, String> map);
 }

+ 36 - 0
huimv-farm-datacenter-egg/huimv-farm-environ/src/main/java/com/huimv/environ/eco/service/impl/FeedConsumeServiceImpl.java

@@ -13,6 +13,7 @@ import com.huimv.environ.eco.entity.eggvo.HistoryEntity;
 import com.huimv.environ.eco.entity.eggvo.HistroyOne;
 import com.huimv.environ.eco.entity.feedVo.*;
 import com.huimv.environ.eco.mapper.FeedConsumeMapper;
+import com.huimv.environ.eco.mapper.FeedUsageMapper;
 import com.huimv.environ.eco.service.IFeedConsumeService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -42,6 +43,8 @@ public class FeedConsumeServiceImpl extends ServiceImpl<FeedConsumeMapper, FeedC
 
     @Autowired
     private FeedConsumeMapper feedConsumeMapper;
+    @Autowired
+    private FeedUsageMapper feedUsageMapper;
 
     private static  final  String BASE_URL= "https://iot1.bigherdsman.com/api/v2/";
     private static  final  String TOKEN= "72438b180e9168fe90db126e3310cd0b20a7196d";
@@ -127,6 +130,11 @@ public class FeedConsumeServiceImpl extends ServiceImpl<FeedConsumeMapper, FeedC
         if (ObjectUtil.isNotEmpty(feedVos)){
             feedConsumeChartVo.setList(feedVos);
         }
+        if (ObjectUtil.isEmpty(feedConsumeChartVo)){
+            feedConsumeChartVo = new FeedConsumeChartVo();
+            feedConsumeChartVo.setTotalConsume(BigDecimal.ZERO);
+            feedConsumeChartVo.setList(new ArrayList<>());
+        }
         return new Result(ResultCode.SUCCESS,feedConsumeChartVo);
     }
 
@@ -151,4 +159,32 @@ public class FeedConsumeServiceImpl extends ServiceImpl<FeedConsumeMapper, FeedC
         }
         return new Result(ResultCode.SUCCESS,buildName);
     }
+
+    @Override
+    public Result analysis(Map<String, String> map) {
+        String startDate = map.get("startDate");
+        String endDate = map.get("endDate");
+        String unitName = map.get("unitName");
+        FeedAnalysisVo feedAnalysisVo = new FeedAnalysisVo();
+        FeedConsumeChartVo feedConsumeChartVo= feedConsumeMapper.getTotal(startDate, endDate);
+        FeedUsedChartVo feedUsedChartVo = feedUsageMapper.getTotal(startDate, endDate,unitName);
+        BigDecimal gapRate = BigDecimal.ZERO;
+        BigDecimal totalConsume = feedConsumeChartVo.getTotalConsume();
+        BigDecimal totalUsed = feedUsedChartVo.getTotalUsed();
+        BigDecimal gap = totalConsume.subtract(totalUsed);
+        if (totalConsume.compareTo(BigDecimal.ZERO) > 0) {
+            gapRate = gap.divide(totalConsume,4,RoundingMode.UP).multiply(BigDecimal.valueOf(100));
+        }
+        feedAnalysisVo.setTotalProduce(totalConsume);
+        feedAnalysisVo.setTotalConsume(totalUsed);
+        feedAnalysisVo.setGap(gap);
+        feedAnalysisVo.setGapRate(gapRate);
+        List<BuildFeedVo> buildFeedVoList = feedUsageMapper.getAnalysis(startDate, endDate);
+        if (ObjectUtil.isNotEmpty(buildFeedVoList)){
+            feedAnalysisVo.setList(buildFeedVoList);
+        }else {
+            feedAnalysisVo.setList(new ArrayList<>());
+        }
+        return new Result(ResultCode.SUCCESS,feedAnalysisVo);
+    }
 }

+ 7 - 0
huimv-farm-datacenter-egg/huimv-farm-environ/src/main/java/com/huimv/environ/eco/service/impl/FeedUsageServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.huimv.common.utils.Result;
 import com.huimv.common.utils.ResultCode;
 import com.huimv.environ.eco.entity.FeedUsage;
+import com.huimv.environ.eco.entity.feedVo.FeedConsumeChartVo;
 import com.huimv.environ.eco.entity.feedVo.FeedUsedChartVo;
 import com.huimv.environ.eco.entity.feedVo.FeedUsedVo;
 import com.huimv.environ.eco.entity.feedVo.FeedVo;
@@ -14,6 +15,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
@@ -70,6 +72,11 @@ public class FeedUsageServiceImpl extends ServiceImpl<FeedUsageMapper, FeedUsage
         if (ObjectUtil.isNotEmpty(feedVos)){
             feedUsedVo.setList(feedVos);
         }
+        if (ObjectUtil.isEmpty(feedUsedVo)){
+            feedUsedVo = new FeedUsedChartVo();
+            feedUsedVo.setTotalUsed(BigDecimal.ZERO);
+            feedUsedVo.setList(new ArrayList<>());
+        }
         return new Result(ResultCode.SUCCESS,feedUsedVo);
     }
 }

+ 141 - 141
huimv-farm-datacenter-egg/huimv-farm-environ/src/main/java/com/huimv/environ/eco/timer/EggTimer.java

@@ -1,141 +1,141 @@
-package com.huimv.environ.eco.timer;
-
-
-import cn.hutool.core.date.DateTime;
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.json.JSONObject;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.huimv.environ.eco.entity.BaseWarningInfo;
-import com.huimv.environ.eco.entity.EggData;
-import com.huimv.environ.eco.entity.EggHouse;
-import com.huimv.environ.eco.entity.SysThreshold;
-import com.huimv.environ.eco.entity.eggvo.HistoryEntity;
-import com.huimv.environ.eco.entity.eggvo.HistroyOne;
-import com.huimv.environ.eco.entity.eggvo.HistroyTwo;
-import com.huimv.environ.eco.service.IBaseWarningInfoService;
-import com.huimv.environ.eco.service.IEggDataService;
-import com.huimv.environ.eco.service.IEggHouseService;
-import com.huimv.environ.eco.service.ISysThresholdService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.ResponseEntity;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-import org.springframework.web.client.RestTemplate;
-
-import java.util.Date;
-import java.util.List;
-
-@Component
-public class EggTimer {
-    private static  final  String BASE_URL= "https://iot1.bigherdsman.com/api/v2/";
-    private static  final  String TOKEN= "72438b180e9168fe90db126e3310cd0b20a7196d";
-
-    private static  final  String HISTORY_LIST= "history/list/?code=";
-    private static final String FARM_CODE = "2022011710";
-
-    @Autowired
-    private IEggDataService eggDataService;
-    @Autowired
-    private IEggHouseService eggHouseService;
-
-    @Autowired
-    private ISysThresholdService sysThresholdService;
-    @Autowired
-    private IBaseWarningInfoService baseWarningInfoService;
-
-
-    @Scheduled(cron = "0 0/10 * * * ? ")
-    public void saveEggData (){
-        System.out.println("test");
-        RestTemplate restTemplate = new RestTemplate();
-        HttpHeaders headers = new HttpHeaders();
-        headers.set("Authorization","Token "+TOKEN);
-        HttpEntity<JSONObject> httpEntity = new HttpEntity<>(headers);
-
-        List<EggHouse> list = eggHouseService.list();
-        Date date= new Date();
-        long end = date.getTime();
-        DateTime dateTime = DateUtil.offsetMinute(date, -10);
-        long start = dateTime.getTime();
-        SysThreshold byId = sysThresholdService.getById(1);
-        for (EggHouse eggHouse : list) {
-            Integer i = eggHouse.getI();
-            ResponseEntity<HistoryEntity> forEntity = restTemplate.exchange(BASE_URL + HISTORY_LIST+FARM_CODE+"&i="+i+"&start="+start+"&end="+end, HttpMethod.GET, httpEntity,HistoryEntity.class );
-
-            List<HistroyOne> data = forEntity.getBody().getData();
-            for (HistroyOne datum : data) {
-                Long uploadTime = datum.getUpload_time();
-                HistroyTwo data1 = datum.getData();
-
-                EggData eggData = new EggData();
-                eggData.setCo2(data1.getCo2());
-                eggData.setFtDoTalTdy(data1.getFt_do_tal_tdy());
-                eggData.setHR(data1.getH_r());
-                eggData.setI(i);
-                eggData.setTCur(data1.getT_cur());
-                eggData.setWtrTdy(data1.getWtr_tdy());
-                eggData.setUploadTime( new Date(uploadTime));
-
-                eggData.setFN( data1.getF_n());
-                eggData.setFLv( data1.getF_lv());
-                eggData.setFV(data1.getF_v() );
-                eggData.setTS(data1.getT_s());
-                eggData.setTT( data1.getT_t());
-                eggData.setHT( data1.getH_t());
-                eggData.setHtL( data1.getHt_l());
-                eggDataService.save(eggData);
-                saveWarning(eggData,byId);
-            }
-        }
-    }
-
-    private void saveWarning(EggData eggData, SysThreshold byId) {
-        String minTem = byId.getMinTem();
-        String maxTem = byId.getMaxTem();
-        String minHum = byId.getMinHum();
-        String maxHum = byId.getMaxHum();
-        Double tCur = eggData.getTCur();
-        Integer hr = eggData.getHR();
-        Integer i = eggData.getI();
-
-        BaseWarningInfo baseWarningInfo = new BaseWarningInfo();
-        baseWarningInfo.setFarmId(1);
-        baseWarningInfo.setLevel(1);
-        baseWarningInfo.setLevelName("一级报警");
-        baseWarningInfo.setUploadTime(new Date());
-        baseWarningInfo.setWarningTime(eggData.getUploadTime());
-        //高温
-        if (tCur>Double.parseDouble(maxTem)){
-            baseWarningInfo.setMsg(i+"号舍高温预警:温度为"+tCur+"℃,超过高温阈值"+maxTem+"℃");
-            baseWarningInfo.setAlarmType(7);
-            baseWarningInfo.setWarningName("高温报警");
-            baseWarningInfoService.save(baseWarningInfo);
-        }
-        //低温
-        if (tCur<Double.parseDouble(minTem)){
-            baseWarningInfo.setMsg(i+"号舍低温预警:温度为"+tCur+"℃,低于低温阈值"+minTem+"℃");
-            baseWarningInfo.setAlarmType(7);
-            baseWarningInfo.setWarningName("低温报警");
-            baseWarningInfoService.save(baseWarningInfo);
-        }
-        //高湿
-        if (hr>Integer.parseInt(maxHum)){
-            baseWarningInfo.setMsg(i+"号舍高湿度预警:温度为"+hr+",高于阈值"+maxHum);
-            baseWarningInfo.setAlarmType(7);
-            baseWarningInfo.setWarningName("高湿度报警");
-            baseWarningInfoService.save(baseWarningInfo);
-        }
-        //低湿
-        if (hr<Integer.parseInt(minHum)){
-            baseWarningInfo.setMsg(i+"号舍低湿度预警:温度为"+hr+",低于阈值"+minHum);
-            baseWarningInfo.setAlarmType(7);
-            baseWarningInfo.setWarningName("低湿度报警");
-            baseWarningInfoService.save(baseWarningInfo);
-        }
-    }
-
-
-}
+//package com.huimv.environ.eco.timer;
+//
+//
+//import cn.hutool.core.date.DateTime;
+//import cn.hutool.core.date.DateUtil;
+//import cn.hutool.json.JSONObject;
+//import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+//import com.huimv.environ.eco.entity.BaseWarningInfo;
+//import com.huimv.environ.eco.entity.EggData;
+//import com.huimv.environ.eco.entity.EggHouse;
+//import com.huimv.environ.eco.entity.SysThreshold;
+//import com.huimv.environ.eco.entity.eggvo.HistoryEntity;
+//import com.huimv.environ.eco.entity.eggvo.HistroyOne;
+//import com.huimv.environ.eco.entity.eggvo.HistroyTwo;
+//import com.huimv.environ.eco.service.IBaseWarningInfoService;
+//import com.huimv.environ.eco.service.IEggDataService;
+//import com.huimv.environ.eco.service.IEggHouseService;
+//import com.huimv.environ.eco.service.ISysThresholdService;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.http.HttpEntity;
+//import org.springframework.http.HttpHeaders;
+//import org.springframework.http.HttpMethod;
+//import org.springframework.http.ResponseEntity;
+//import org.springframework.scheduling.annotation.Scheduled;
+//import org.springframework.stereotype.Component;
+//import org.springframework.web.client.RestTemplate;
+//
+//import java.util.Date;
+//import java.util.List;
+//
+//@Component
+//public class EggTimer {
+//    private static  final  String BASE_URL= "https://iot1.bigherdsman.com/api/v2/";
+//    private static  final  String TOKEN= "72438b180e9168fe90db126e3310cd0b20a7196d";
+//
+//    private static  final  String HISTORY_LIST= "history/list/?code=";
+//    private static final String FARM_CODE = "2022011710";
+//
+//    @Autowired
+//    private IEggDataService eggDataService;
+//    @Autowired
+//    private IEggHouseService eggHouseService;
+//
+//    @Autowired
+//    private ISysThresholdService sysThresholdService;
+//    @Autowired
+//    private IBaseWarningInfoService baseWarningInfoService;
+//
+//
+//    @Scheduled(cron = "0 0/10 * * * ? ")
+//    public void saveEggData (){
+//        System.out.println("test");
+//        RestTemplate restTemplate = new RestTemplate();
+//        HttpHeaders headers = new HttpHeaders();
+//        headers.set("Authorization","Token "+TOKEN);
+//        HttpEntity<JSONObject> httpEntity = new HttpEntity<>(headers);
+//
+//        List<EggHouse> list = eggHouseService.list();
+//        Date date= new Date();
+//        long end = date.getTime();
+//        DateTime dateTime = DateUtil.offsetMinute(date, -10);
+//        long start = dateTime.getTime();
+//        SysThreshold byId = sysThresholdService.getById(1);
+//        for (EggHouse eggHouse : list) {
+//            Integer i = eggHouse.getI();
+//            ResponseEntity<HistoryEntity> forEntity = restTemplate.exchange(BASE_URL + HISTORY_LIST+FARM_CODE+"&i="+i+"&start="+start+"&end="+end, HttpMethod.GET, httpEntity,HistoryEntity.class );
+//
+//            List<HistroyOne> data = forEntity.getBody().getData();
+//            for (HistroyOne datum : data) {
+//                Long uploadTime = datum.getUpload_time();
+//                HistroyTwo data1 = datum.getData();
+//
+//                EggData eggData = new EggData();
+//                eggData.setCo2(data1.getCo2());
+//                eggData.setFtDoTalTdy(data1.getFt_do_tal_tdy());
+//                eggData.setHR(data1.getH_r());
+//                eggData.setI(i);
+//                eggData.setTCur(data1.getT_cur());
+//                eggData.setWtrTdy(data1.getWtr_tdy());
+//                eggData.setUploadTime( new Date(uploadTime));
+//
+//                eggData.setFN( data1.getF_n());
+//                eggData.setFLv( data1.getF_lv());
+//                eggData.setFV(data1.getF_v() );
+//                eggData.setTS(data1.getT_s());
+//                eggData.setTT( data1.getT_t());
+//                eggData.setHT( data1.getH_t());
+//                eggData.setHtL( data1.getHt_l());
+//                eggDataService.save(eggData);
+//                saveWarning(eggData,byId);
+//            }
+//        }
+//    }
+//
+//    private void saveWarning(EggData eggData, SysThreshold byId) {
+//        String minTem = byId.getMinTem();
+//        String maxTem = byId.getMaxTem();
+//        String minHum = byId.getMinHum();
+//        String maxHum = byId.getMaxHum();
+//        Double tCur = eggData.getTCur();
+//        Integer hr = eggData.getHR();
+//        Integer i = eggData.getI();
+//
+//        BaseWarningInfo baseWarningInfo = new BaseWarningInfo();
+//        baseWarningInfo.setFarmId(1);
+//        baseWarningInfo.setLevel(1);
+//        baseWarningInfo.setLevelName("一级报警");
+//        baseWarningInfo.setUploadTime(new Date());
+//        baseWarningInfo.setWarningTime(eggData.getUploadTime());
+//        //高温
+//        if (tCur>Double.parseDouble(maxTem)){
+//            baseWarningInfo.setMsg(i+"号舍高温预警:温度为"+tCur+"℃,超过高温阈值"+maxTem+"℃");
+//            baseWarningInfo.setAlarmType(7);
+//            baseWarningInfo.setWarningName("高温报警");
+//            baseWarningInfoService.save(baseWarningInfo);
+//        }
+//        //低温
+//        if (tCur<Double.parseDouble(minTem)){
+//            baseWarningInfo.setMsg(i+"号舍低温预警:温度为"+tCur+"℃,低于低温阈值"+minTem+"℃");
+//            baseWarningInfo.setAlarmType(7);
+//            baseWarningInfo.setWarningName("低温报警");
+//            baseWarningInfoService.save(baseWarningInfo);
+//        }
+//        //高湿
+//        if (hr>Integer.parseInt(maxHum)){
+//            baseWarningInfo.setMsg(i+"号舍高湿度预警:温度为"+hr+",高于阈值"+maxHum);
+//            baseWarningInfo.setAlarmType(7);
+//            baseWarningInfo.setWarningName("高湿度报警");
+//            baseWarningInfoService.save(baseWarningInfo);
+//        }
+//        //低湿
+//        if (hr<Integer.parseInt(minHum)){
+//            baseWarningInfo.setMsg(i+"号舍低湿度预警:温度为"+hr+",低于阈值"+minHum);
+//            baseWarningInfo.setAlarmType(7);
+//            baseWarningInfo.setWarningName("低湿度报警");
+//            baseWarningInfoService.save(baseWarningInfo);
+//        }
+//    }
+//
+//
+//}

+ 3 - 3
huimv-farm-datacenter-egg/huimv-farm-environ/src/main/java/com/huimv/environ/eco/timer/FeedConsumeTimer.java

@@ -38,7 +38,7 @@ public class FeedConsumeTimer {
 
 
 //    @Scheduled(cron = "0 0 23 * * ?")
-    @Scheduled(cron = "0 0 * * * *")
+    @Scheduled(cron = "*/10 * * * * *")
     public void saveFeedConsumeData(){
         HttpHeaders headers = new HttpHeaders();
         headers.set("Authorization","Token "+TOKEN);
@@ -66,9 +66,9 @@ public class FeedConsumeTimer {
                 one.setStock(stock);
                 one.setTotalConsume(BigDecimal.valueOf(totalConsume));
                 if ("0".equals(stock)){
-                    feedUsage.setSingleConsume(BigDecimal.ZERO);
+                    one.setSingleConsume(BigDecimal.ZERO);
                 }else {
-                    feedUsage.setSingleConsume(BigDecimal.valueOf(totalConsume).multiply(BigDecimal.valueOf(1000)).divide(BigDecimal.valueOf(Double.valueOf(stock)),2,RoundingMode.HALF_UP));
+                    one.setSingleConsume(BigDecimal.valueOf(totalConsume).multiply(BigDecimal.valueOf(1000)).divide(BigDecimal.valueOf(Double.valueOf(stock)),2,RoundingMode.HALF_UP));
                 }
                 feedUsageService.updateById(one);
             }else {

+ 10 - 5
huimv-farm-datacenter-egg/huimv-farm-environ/src/main/resources/com/huimv/environ/eco/mapper/FeedUsageMapper.xml

@@ -7,24 +7,24 @@
         id, used_date, unit_name, stock, age, single_consume
     </sql>
     <select id="listTotalGroupByDay" resultType="com.huimv.environ.eco.entity.feedVo.FeedUsedVo">
-        SELECT used_date AS 'date',ROUND(SUM(total_consume),2) AS 'totalUsed' FROM `feed_usage` WHERE used_date BETWEEN '${startDate}' AND '${endDate}'
+        SELECT used_date AS 'date',COALESCE(ROUND(SUM(total_consume),2),0) AS 'totalUsed' FROM `feed_usage` WHERE used_date BETWEEN '${startDate}' AND '${endDate}'
         GROUP BY DATE(used_date)
         ORDER BY used_date ASC
     </select>
     <select id="getTotal" resultType="com.huimv.environ.eco.entity.feedVo.FeedUsedChartVo">
-        SELECT ROUND(SUM(total_consume),2) AS 'totalUsed' FROM `feed_usage` WHERE used_date BETWEEN '${startDate}' AND '${endDate}'
+        SELECT COALESCE(ROUND(SUM(total_consume),2),0) AS 'totalUsed' FROM `feed_usage` WHERE used_date BETWEEN '${startDate}' AND '${endDate}'
         <if test="unitName != null and unitName != ''">
             AND unit_name = #{unitName}
         </if>
     </select>
     <select id="getYearOrMonthTotal" resultType="com.huimv.environ.eco.entity.feedVo.FeedUsedChartVo">
-        SELECT ROUND(SUM(total_consume),2) AS 'totalUsed' FROM `feed_usage` WHERE used_date LIKE CONCAT(#{startDate}, '%')
+        SELECT COALESCE(ROUND(SUM(total_consume),2),0) AS 'totalUsed' FROM `feed_usage` WHERE used_date LIKE CONCAT(#{startDate}, '%')
         <if test="unitName != null and unitName != ''">
             AND unit_name = #{unitName}
         </if>
     </select>
     <select id="listFeedGroupByWeek" resultType="com.huimv.environ.eco.entity.feedVo.FeedVo">
-        SELECT used_date AS 'time',ROUND(SUM(total_consume),2) AS 'value' FROM `feed_usage` WHERE used_date BETWEEN '${startDate}' AND '${endDate}'
+        SELECT used_date AS 'time',COALESCE(ROUND(SUM(total_consume),2),0) AS 'value' FROM `feed_usage` WHERE used_date BETWEEN '${startDate}' AND '${endDate}'
         <if test="unitName != null and unitName != ''">
             AND unit_name = #{unitName}
         </if>
@@ -33,7 +33,7 @@
     </select>
 
     <select id="listFeedGroupByMonth" resultType="com.huimv.environ.eco.entity.feedVo.FeedVo">
-        SELECT used_date AS 'time',ROUND(SUM(total_consume),2) AS 'value' FROM `feed_usage` WHERE used_date LIKE CONCAT(#{startDate}, '%')
+        SELECT used_date AS 'time',COALESCE(ROUND(SUM(total_consume),2),0) AS 'value' FROM `feed_usage` WHERE used_date LIKE CONCAT(#{startDate}, '%')
         <if test="unitName != null and unitName != ''">
             AND unit_name = #{unitName}
         </if>
@@ -64,5 +64,10 @@
         ORDER BY
             m.month;
     </select>
+    <select id="getAnalysis" resultType="com.huimv.environ.eco.entity.feedVo.BuildFeedVo">
+        SELECT unit_name as 'unitName',MAX(stock) as 'stock',MAX(age) as 'age',SUM(total_consume) as 'totalConsume',SUM(single_consume) as 'singleConsume' FROM `feed_usage`
+        WHERE used_date BETWEEN '${startDate}' AND '${endDate}'
+        GROUP BY unit_name
+    </select>
 
 </mapper>