Newspaper 1 jaar geleden
bovenliggende
commit
419f47ab90

+ 12 - 0
huimv-farm-datacenter-egg/huimv-farm-environ/pom.xml

@@ -56,6 +56,18 @@
             <artifactId>huimv-common</artifactId>
             <version>0.0.1</version>
         </dependency>
+
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>5.2.3</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>5.2.3</version>
+        </dependency>
     </dependencies>
 
     <build>

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

@@ -36,4 +36,9 @@ public class FeedEggDetailController {
         return feedEggDetailService.selectPage(map);
     }
 
+    @PostMapping("/print")
+    public Result print(@RequestBody Map<String,String> map){
+        return feedEggDetailService.print(map);
+    }
+
 }

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

@@ -5,6 +5,8 @@ import com.huimv.environ.eco.entity.FeedEggDetail;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.huimv.environ.eco.entity.eggvo.FeedEggVo;
 
+import java.util.List;
+
 /**
  * <p>
  * 饲料产蛋报表 Mapper 接口
@@ -16,4 +18,6 @@ import com.huimv.environ.eco.entity.eggvo.FeedEggVo;
 public interface FeedEggDetailMapper extends BaseMapper<FeedEggDetail> {
 
     Page<FeedEggVo> page(Page<FeedEggVo> page);
+
+    List<FeedEggVo> listPrint(String startDate, String endDate);
 }

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

@@ -17,4 +17,6 @@ import java.util.Map;
 public interface IFeedEggDetailService extends IService<FeedEggDetail> {
 
     Result selectPage(Map<String, String> map);
+
+    Result print(Map<String, String> map);
 }

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

@@ -10,9 +10,11 @@ import com.huimv.environ.eco.entity.eggvo.LayEggVo;
 import com.huimv.environ.eco.mapper.FeedEggDetailMapper;
 import com.huimv.environ.eco.service.IFeedEggDetailService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huimv.environ.eco.util.Print;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -43,4 +45,21 @@ public class FeedEggDetailServiceImpl extends ServiceImpl<FeedEggDetailMapper, F
         }
         return new Result(ResultCode.SUCCESS,layEggVoPage);
     }
+
+    @Override
+    public Result print(Map<String, String> map) {
+        String startDate = map.get("startDate");
+        String endDate = map.get("endDate");
+        List<FeedEggVo> feedEggVos = feedEggDetailMapper.listPrint(startDate,endDate);
+        for (FeedEggVo feedEggVo : feedEggVos) {
+            List<FeedEggDetail> feedEggDetails = feedEggDetailMapper.selectList(new QueryWrapper<FeedEggDetail>().lambda().eq(FeedEggDetail::getDate, feedEggVo.getDate()).orderByAsc(FeedEggDetail::getUnitName));
+            feedEggVo.setList(feedEggDetails);
+        }
+
+        return Result.SUCCESS();
+    }
+
+
+
+
 }

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

@@ -1,146 +1,146 @@
-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 * * * ? ")
-//    @Scheduled(cron = "0 * * * * ? ")
-    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();
-            try {
-                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);
-                }
-
-            }catch (Exception e){
-                System.out.println("数据未取到");
-            }
-        }
-    }
-
-    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 * * * ? ")
+////    @Scheduled(cron = "0 * * * * ? ")
+//    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();
+//            try {
+//                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);
+//                }
+//
+//            }catch (Exception e){
+//                System.out.println("数据未取到");
+//            }
+//        }
+//    }
+//
+//    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);
+//        }
+//    }
+//
+//
+//}

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

@@ -1,131 +1,131 @@
-package com.huimv.environ.eco.timer;
-
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.json.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.huimv.environ.eco.entity.FeedUsage;
-import com.huimv.environ.eco.entity.eggvo.*;
-import com.huimv.environ.eco.service.IFeedUsageService;
-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.math.BigDecimal;
-import java.math.RoundingMode;
-import java.text.SimpleDateFormat;
-import java.time.LocalDate;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-
-@Component
-public class FeedConsumeTimer {
-    private static final String BASE_URL= "https://iot1.bigherdsman.com/api/v2/";
-    private static final String TOKEN= "72438b180e9168fe90db126e3310cd0b20a7196d";
-    private static final String CURRENT_LIST= "current/list/?code=";
-    private static final String HISTORY_LIST= "history/list/?code=";
-    private static final String FARM_CODE = "2022011710";
-
-    @Autowired
-    private IFeedUsageService feedUsageService;
-
-
-//    @Scheduled(cron = "0 0 23 * * ?")
-    @Scheduled(cron = "0 0 */1 * * *")
-    public void saveFeedConsumeData(){
-        HttpHeaders headers = new HttpHeaders();
-        headers.set("Authorization","Token "+TOKEN);
-        HttpEntity<JSONObject> httpEntity = new HttpEntity<>(headers);
-        RestTemplate restTemplate = new RestTemplate();
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
-        Long start = DateUtil.beginOfDay(new Date()).getTime();
-        Long end = System.currentTimeMillis();
-
-        ResponseEntity<BaseResultEntity> forEntity = restTemplate.exchange(BASE_URL + CURRENT_LIST+FARM_CODE+"&position=all", HttpMethod.GET, httpEntity,BaseResultEntity.class );
-        List<HousVo> data = forEntity.getBody().getData();
-        for (HousVo datum : data) {
-            String stock = "0";
-            FeedUsage feedUsage = new FeedUsage();
-            ResponseEntity<HistoryEntity> todayForEntity = restTemplate.exchange(BASE_URL + HISTORY_LIST+FARM_CODE+"&i="+datum.getI()+"&start="+start+"&end="+end, HttpMethod.GET, httpEntity,HistoryEntity.class );
-            List<HistroyOne> todayData = todayForEntity.getBody().getData();
-            HistroyOne today = todayData.get(todayData.size() - 1);
-
-            Double totalConsume = today.getData().getFt_do_tal_tdy();
-            if (ObjectUtil.isNotEmpty(datum.getData().getQty_re())){
-                stock = datum.getData().getQty_re();
-            }
-            FeedUsage one = feedUsageService.getOne(new QueryWrapper<FeedUsage>().lambda().eq(FeedUsage::getUsedDate, sdf.format(new Date())).eq(FeedUsage::getUnitName, datum.getI() + "舍"));
-            if (ObjectUtil.isNotEmpty(one)){
-                one.setStock(stock);
-                one.setTotalConsume(BigDecimal.valueOf(totalConsume));
-                if ("0".equals(stock)){
-                    one.setSingleConsume(BigDecimal.ZERO);
-                }else {
-                    one.setSingleConsume(BigDecimal.valueOf(totalConsume).multiply(BigDecimal.valueOf(1000)).divide(BigDecimal.valueOf(Double.valueOf(stock)),2,RoundingMode.HALF_UP));
-                }
-                feedUsageService.updateById(one);
-            }else {
-                feedUsage.setUnitName(datum.getI()+"舍");
-                feedUsage.setAge(datum.getData().getAge());
-                feedUsage.setStock(stock);
-                feedUsage.setUsedDate(sdf.format(new Date()));
-                feedUsage.setTotalConsume(BigDecimal.valueOf(totalConsume));
-                if ("0".equals(stock)){
-                    feedUsage.setSingleConsume(BigDecimal.ZERO);
-                }else {
-                    feedUsage.setSingleConsume(BigDecimal.valueOf(totalConsume).multiply(BigDecimal.valueOf(1000)).divide(BigDecimal.valueOf(Double.valueOf(stock)),2,RoundingMode.HALF_UP));
-                }
-                feedUsageService.save(feedUsage);
-            }
-        }
-    }
-
-
-    public static void main(String[] args) {
-        HttpHeaders headers = new HttpHeaders();
-        headers.set("Authorization","Token "+TOKEN);
-        HttpEntity<JSONObject> httpEntity = new HttpEntity<>(headers);
-        RestTemplate restTemplate = new RestTemplate();
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
-        Long start = DateUtil.beginOfDay(new Date()).getTime();
-        Long end = System.currentTimeMillis();
-        Double totalConsume = 0.0;
-
-        ResponseEntity<BaseResultEntity> forEntity = restTemplate.exchange(BASE_URL + CURRENT_LIST+FARM_CODE+"&position=all", HttpMethod.GET, httpEntity,BaseResultEntity.class );
-        List<HousVo> data = forEntity.getBody().getData();
-        for (HousVo datum : data) {
-            String stock = "0";
-            FeedUsage feedUsage = new FeedUsage();
-            ResponseEntity<HistoryEntity> todayForEntity = restTemplate.exchange(BASE_URL + HISTORY_LIST+FARM_CODE+"&i="+datum.getI()+"&start="+start+"&end="+end, HttpMethod.GET, httpEntity,HistoryEntity.class );
-            List<HistroyOne> todayData = todayForEntity.getBody().getData();
-            HistroyOne today = todayData.get(todayData.size() - 1);
-
-            if (ObjectUtil.isNotEmpty(today.getData().getFt_do_tal_tdy())){
-                totalConsume = today.getData().getFt_do_tal_tdy();
-
-            }
-            if (ObjectUtil.isNotEmpty(datum.getData().getQty_re())){
-                stock = datum.getData().getQty_re();
-            }
-            feedUsage.setUnitName(datum.getI()+"舍");
-            feedUsage.setAge(datum.getData().getAge());
-            feedUsage.setStock(stock);
-
-            feedUsage.setUsedDate(sdf.format(new Date()));
-            feedUsage.setTotalConsume(BigDecimal.valueOf(totalConsume));
-            if ("0".equals(stock)){
-                feedUsage.setSingleConsume(BigDecimal.ZERO);
-            }else {
-                feedUsage.setSingleConsume(BigDecimal.valueOf(totalConsume).divide(BigDecimal.valueOf(Double.valueOf(stock)), 2, RoundingMode.HALF_UP));
-            }
-            System.out.println(feedUsage);
-        }
-    }
-}
+//package com.huimv.environ.eco.timer;
+//
+//import cn.hutool.core.date.DateUtil;
+//import cn.hutool.core.util.ObjectUtil;
+//import cn.hutool.json.JSONObject;
+//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+//import com.huimv.environ.eco.entity.FeedUsage;
+//import com.huimv.environ.eco.entity.eggvo.*;
+//import com.huimv.environ.eco.service.IFeedUsageService;
+//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.math.BigDecimal;
+//import java.math.RoundingMode;
+//import java.text.SimpleDateFormat;
+//import java.time.LocalDate;
+//import java.util.ArrayList;
+//import java.util.Calendar;
+//import java.util.Date;
+//import java.util.List;
+//
+//@Component
+//public class FeedConsumeTimer {
+//    private static final String BASE_URL= "https://iot1.bigherdsman.com/api/v2/";
+//    private static final String TOKEN= "72438b180e9168fe90db126e3310cd0b20a7196d";
+//    private static final String CURRENT_LIST= "current/list/?code=";
+//    private static final String HISTORY_LIST= "history/list/?code=";
+//    private static final String FARM_CODE = "2022011710";
+//
+//    @Autowired
+//    private IFeedUsageService feedUsageService;
+//
+//
+////    @Scheduled(cron = "0 0 23 * * ?")
+//    @Scheduled(cron = "0 0 */1 * * *")
+//    public void saveFeedConsumeData(){
+//        HttpHeaders headers = new HttpHeaders();
+//        headers.set("Authorization","Token "+TOKEN);
+//        HttpEntity<JSONObject> httpEntity = new HttpEntity<>(headers);
+//        RestTemplate restTemplate = new RestTemplate();
+//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
+//        Long start = DateUtil.beginOfDay(new Date()).getTime();
+//        Long end = System.currentTimeMillis();
+//
+//        ResponseEntity<BaseResultEntity> forEntity = restTemplate.exchange(BASE_URL + CURRENT_LIST+FARM_CODE+"&position=all", HttpMethod.GET, httpEntity,BaseResultEntity.class );
+//        List<HousVo> data = forEntity.getBody().getData();
+//        for (HousVo datum : data) {
+//            String stock = "0";
+//            FeedUsage feedUsage = new FeedUsage();
+//            ResponseEntity<HistoryEntity> todayForEntity = restTemplate.exchange(BASE_URL + HISTORY_LIST+FARM_CODE+"&i="+datum.getI()+"&start="+start+"&end="+end, HttpMethod.GET, httpEntity,HistoryEntity.class );
+//            List<HistroyOne> todayData = todayForEntity.getBody().getData();
+//            HistroyOne today = todayData.get(todayData.size() - 1);
+//
+//            Double totalConsume = today.getData().getFt_do_tal_tdy();
+//            if (ObjectUtil.isNotEmpty(datum.getData().getQty_re())){
+//                stock = datum.getData().getQty_re();
+//            }
+//            FeedUsage one = feedUsageService.getOne(new QueryWrapper<FeedUsage>().lambda().eq(FeedUsage::getUsedDate, sdf.format(new Date())).eq(FeedUsage::getUnitName, datum.getI() + "舍"));
+//            if (ObjectUtil.isNotEmpty(one)){
+//                one.setStock(stock);
+//                one.setTotalConsume(BigDecimal.valueOf(totalConsume));
+//                if ("0".equals(stock)){
+//                    one.setSingleConsume(BigDecimal.ZERO);
+//                }else {
+//                    one.setSingleConsume(BigDecimal.valueOf(totalConsume).multiply(BigDecimal.valueOf(1000)).divide(BigDecimal.valueOf(Double.valueOf(stock)),2,RoundingMode.HALF_UP));
+//                }
+//                feedUsageService.updateById(one);
+//            }else {
+//                feedUsage.setUnitName(datum.getI()+"舍");
+//                feedUsage.setAge(datum.getData().getAge());
+//                feedUsage.setStock(stock);
+//                feedUsage.setUsedDate(sdf.format(new Date()));
+//                feedUsage.setTotalConsume(BigDecimal.valueOf(totalConsume));
+//                if ("0".equals(stock)){
+//                    feedUsage.setSingleConsume(BigDecimal.ZERO);
+//                }else {
+//                    feedUsage.setSingleConsume(BigDecimal.valueOf(totalConsume).multiply(BigDecimal.valueOf(1000)).divide(BigDecimal.valueOf(Double.valueOf(stock)),2,RoundingMode.HALF_UP));
+//                }
+//                feedUsageService.save(feedUsage);
+//            }
+//        }
+//    }
+//
+//
+//    public static void main(String[] args) {
+//        HttpHeaders headers = new HttpHeaders();
+//        headers.set("Authorization","Token "+TOKEN);
+//        HttpEntity<JSONObject> httpEntity = new HttpEntity<>(headers);
+//        RestTemplate restTemplate = new RestTemplate();
+//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
+//        Long start = DateUtil.beginOfDay(new Date()).getTime();
+//        Long end = System.currentTimeMillis();
+//        Double totalConsume = 0.0;
+//
+//        ResponseEntity<BaseResultEntity> forEntity = restTemplate.exchange(BASE_URL + CURRENT_LIST+FARM_CODE+"&position=all", HttpMethod.GET, httpEntity,BaseResultEntity.class );
+//        List<HousVo> data = forEntity.getBody().getData();
+//        for (HousVo datum : data) {
+//            String stock = "0";
+//            FeedUsage feedUsage = new FeedUsage();
+//            ResponseEntity<HistoryEntity> todayForEntity = restTemplate.exchange(BASE_URL + HISTORY_LIST+FARM_CODE+"&i="+datum.getI()+"&start="+start+"&end="+end, HttpMethod.GET, httpEntity,HistoryEntity.class );
+//            List<HistroyOne> todayData = todayForEntity.getBody().getData();
+//            HistroyOne today = todayData.get(todayData.size() - 1);
+//
+//            if (ObjectUtil.isNotEmpty(today.getData().getFt_do_tal_tdy())){
+//                totalConsume = today.getData().getFt_do_tal_tdy();
+//
+//            }
+//            if (ObjectUtil.isNotEmpty(datum.getData().getQty_re())){
+//                stock = datum.getData().getQty_re();
+//            }
+//            feedUsage.setUnitName(datum.getI()+"舍");
+//            feedUsage.setAge(datum.getData().getAge());
+//            feedUsage.setStock(stock);
+//
+//            feedUsage.setUsedDate(sdf.format(new Date()));
+//            feedUsage.setTotalConsume(BigDecimal.valueOf(totalConsume));
+//            if ("0".equals(stock)){
+//                feedUsage.setSingleConsume(BigDecimal.ZERO);
+//            }else {
+//                feedUsage.setSingleConsume(BigDecimal.valueOf(totalConsume).divide(BigDecimal.valueOf(Double.valueOf(stock)), 2, RoundingMode.HALF_UP));
+//            }
+//            System.out.println(feedUsage);
+//        }
+//    }
+//}

+ 102 - 102
huimv-farm-datacenter-egg/huimv-farm-environ/src/main/java/com/huimv/environ/eco/timer/LayEggTimer.java

@@ -1,102 +1,102 @@
-package com.huimv.environ.eco.timer;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.huimv.environ.eco.entity.FeedEggDetail;
-import com.huimv.environ.eco.entity.FeedUsage;
-import com.huimv.environ.eco.entity.LayEgg;
-import com.huimv.environ.eco.mapper.FeedEggDetailMapper;
-import com.huimv.environ.eco.mapper.FeedUsageMapper;
-import com.huimv.environ.eco.mapper.LayEggMapper;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.time.LocalDate;
-import java.time.format.DateTimeFormatter;
-import java.util.List;
-
-@Component
-public class LayEggTimer {
-
-    @Autowired
-    private LayEggMapper layEggMapper;
-    @Autowired
-    private FeedEggDetailMapper feedEggDetailMapper;
-    @Autowired
-    private FeedUsageMapper feedUsageMapper;
-
-    @Scheduled(cron = "0 5 0 * * ?")
-//@Scheduled(cron = "0/10 * * * * ?")
-    @Transactional
-    public void saveLayEgg(){
-        LocalDate localDate = LocalDate.now();
-        LocalDate yesterday = localDate.minusDays(1);
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
-        String date = yesterday.format(formatter);
-        Integer count = layEggMapper.selectCount(new QueryWrapper<LayEgg>().lambda().eq(LayEgg::getDate, date));
-        if (count == 0){
-            for (int i = 1; i <= 7; i++){
-                LayEgg layEgg = new LayEgg();
-                layEgg.setDate(date);
-                layEgg.setUnitName(i+"舍");
-                layEgg.setAvgWeight(BigDecimal.ZERO);
-                layEgg.setEggProduction(0);
-                layEgg.setTotalWeight(BigDecimal.ZERO);
-                layEggMapper.insert(layEgg);
-            }
-        }
-    }
-
-    @Scheduled(cron = "0 10 0 * * ?")
-//    @Scheduled(cron = "0/10 * * * * ?")
-    @Transactional
-    public void saveDetail(){
-        LocalDate localDate = LocalDate.now();
-        LocalDate yesterday = localDate.minusDays(1);
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
-        String date = yesterday.format(formatter);
-        List<LayEgg> layEggs = layEggMapper.selectList(new QueryWrapper<LayEgg>().lambda().eq(LayEgg::getDate, date).orderByAsc(LayEgg::getUnitName));
-        for (LayEgg layEgg : layEggs) {
-            FeedEggDetail feedEggDetail = new FeedEggDetail();
-            feedEggDetail.setDate(date);
-            feedEggDetail.setUnitName(layEgg.getUnitName());
-            String[] split = layEgg.getUnitName().split("舍");
-            String updatedNumber = String.valueOf(Integer.parseInt(split[0]) + 2);
-            String newUnitName = updatedNumber + "舍";
-            FeedUsage feedUsage = feedUsageMapper.selectOne(new QueryWrapper<FeedUsage>().lambda().eq(FeedUsage::getUsedDate, date).eq(FeedUsage::getUnitName, newUnitName));
-
-            feedEggDetail.setStock(feedUsage.getStock());
-            feedEggDetail.setEggProduction(layEgg.getEggProduction().toString());
-            BigDecimal rate = BigDecimal.ZERO;
-            BigDecimal stock = new BigDecimal(feedUsage.getStock());
-            BigDecimal eggProduction = new BigDecimal(layEgg.getEggProduction());
-            if (!feedUsage.getStock().equals("0")){
-                rate =  eggProduction.divide(stock,4,RoundingMode.HALF_UP).multiply(new BigDecimal(100)).setScale(2);
-            }
-            feedEggDetail.setLayEggRate(rate);
-            feedEggDetail.setEggWeight(layEgg.getTotalWeight());
-            feedEggDetail.setAvgWeight(layEgg.getAvgWeight());
-            feedEggDetail.setFeedConsume(feedUsage.getTotalConsume());
-
-            BigDecimal ratio = BigDecimal.ZERO;
-            BigDecimal feedConsume = feedUsage.getTotalConsume();
-            if (eggProduction.compareTo(BigDecimal.ZERO) != 0){
-                ratio =  feedConsume.divide(eggProduction).setScale(2,RoundingMode.HALF_UP);
-            }
-            feedEggDetail.setFeedEggRatio(ratio);
-            feedEggDetailMapper.insert(feedEggDetail);
-        }
-
-    }
-
-    public static void main(String[] args) {
-        LocalDate localDate = LocalDate.now();
-        LocalDate yesterday = localDate.minusDays(1);
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
-        String date = yesterday.format(formatter);
-        System.out.println(date);
-    }
-}
+//package com.huimv.environ.eco.timer;
+//
+//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+//import com.huimv.environ.eco.entity.FeedEggDetail;
+//import com.huimv.environ.eco.entity.FeedUsage;
+//import com.huimv.environ.eco.entity.LayEgg;
+//import com.huimv.environ.eco.mapper.FeedEggDetailMapper;
+//import com.huimv.environ.eco.mapper.FeedUsageMapper;
+//import com.huimv.environ.eco.mapper.LayEggMapper;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.scheduling.annotation.Scheduled;
+//import org.springframework.stereotype.Component;
+//import org.springframework.transaction.annotation.Transactional;
+//
+//import java.math.BigDecimal;
+//import java.math.RoundingMode;
+//import java.time.LocalDate;
+//import java.time.format.DateTimeFormatter;
+//import java.util.List;
+//
+//@Component
+//public class LayEggTimer {
+//
+//    @Autowired
+//    private LayEggMapper layEggMapper;
+//    @Autowired
+//    private FeedEggDetailMapper feedEggDetailMapper;
+//    @Autowired
+//    private FeedUsageMapper feedUsageMapper;
+//
+//    @Scheduled(cron = "0 5 0 * * ?")
+////@Scheduled(cron = "0/10 * * * * ?")
+//    @Transactional
+//    public void saveLayEgg(){
+//        LocalDate localDate = LocalDate.now();
+//        LocalDate yesterday = localDate.minusDays(1);
+//        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
+//        String date = yesterday.format(formatter);
+//        Integer count = layEggMapper.selectCount(new QueryWrapper<LayEgg>().lambda().eq(LayEgg::getDate, date));
+//        if (count == 0){
+//            for (int i = 1; i <= 7; i++){
+//                LayEgg layEgg = new LayEgg();
+//                layEgg.setDate(date);
+//                layEgg.setUnitName(i+"舍");
+//                layEgg.setAvgWeight(BigDecimal.ZERO);
+//                layEgg.setEggProduction(0);
+//                layEgg.setTotalWeight(BigDecimal.ZERO);
+//                layEggMapper.insert(layEgg);
+//            }
+//        }
+//    }
+//
+//    @Scheduled(cron = "0 10 0 * * ?")
+////    @Scheduled(cron = "0/10 * * * * ?")
+//    @Transactional
+//    public void saveDetail(){
+//        LocalDate localDate = LocalDate.now();
+//        LocalDate yesterday = localDate.minusDays(1);
+//        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
+//        String date = yesterday.format(formatter);
+//        List<LayEgg> layEggs = layEggMapper.selectList(new QueryWrapper<LayEgg>().lambda().eq(LayEgg::getDate, date).orderByAsc(LayEgg::getUnitName));
+//        for (LayEgg layEgg : layEggs) {
+//            FeedEggDetail feedEggDetail = new FeedEggDetail();
+//            feedEggDetail.setDate(date);
+//            feedEggDetail.setUnitName(layEgg.getUnitName());
+//            String[] split = layEgg.getUnitName().split("舍");
+//            String updatedNumber = String.valueOf(Integer.parseInt(split[0]) + 2);
+//            String newUnitName = updatedNumber + "舍";
+//            FeedUsage feedUsage = feedUsageMapper.selectOne(new QueryWrapper<FeedUsage>().lambda().eq(FeedUsage::getUsedDate, date).eq(FeedUsage::getUnitName, newUnitName));
+//
+//            feedEggDetail.setStock(feedUsage.getStock());
+//            feedEggDetail.setEggProduction(layEgg.getEggProduction().toString());
+//            BigDecimal rate = BigDecimal.ZERO;
+//            BigDecimal stock = new BigDecimal(feedUsage.getStock());
+//            BigDecimal eggProduction = new BigDecimal(layEgg.getEggProduction());
+//            if (!feedUsage.getStock().equals("0")){
+//                rate =  eggProduction.divide(stock,4,RoundingMode.HALF_UP).multiply(new BigDecimal(100)).setScale(2);
+//            }
+//            feedEggDetail.setLayEggRate(rate);
+//            feedEggDetail.setEggWeight(layEgg.getTotalWeight());
+//            feedEggDetail.setAvgWeight(layEgg.getAvgWeight());
+//            feedEggDetail.setFeedConsume(feedUsage.getTotalConsume());
+//
+//            BigDecimal ratio = BigDecimal.ZERO;
+//            BigDecimal feedConsume = feedUsage.getTotalConsume();
+//            if (eggProduction.compareTo(BigDecimal.ZERO) != 0){
+//                ratio =  feedConsume.divide(eggProduction).setScale(2,RoundingMode.HALF_UP);
+//            }
+//            feedEggDetail.setFeedEggRatio(ratio);
+//            feedEggDetailMapper.insert(feedEggDetail);
+//        }
+//
+//    }
+//
+//    public static void main(String[] args) {
+//        LocalDate localDate = LocalDate.now();
+//        LocalDate yesterday = localDate.minusDays(1);
+//        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
+//        String date = yesterday.format(formatter);
+//        System.out.println(date);
+//    }
+//}

+ 58 - 0
huimv-farm-datacenter-egg/huimv-farm-environ/src/main/java/com/huimv/environ/eco/util/Print.java

@@ -0,0 +1,58 @@
+package com.huimv.environ.eco.util;
+
+import com.huimv.environ.eco.entity.eggvo.FeedEggVo;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.List;
+
+public class Print {
+    public static void printFeedEgg(List<String> barnNames,List<FeedEggVo> feedEggVos, String filePath){
+        Workbook workbook = new XSSFWorkbook(); //
+        Sheet sheet = workbook.createSheet("FeedEggReport");
+
+        // 创建第一行标题
+        Row headerRow = sheet.createRow(0);
+        Cell headerCell = headerRow.createCell(0);
+        headerCell.setCellValue("日期");
+        headerCell = headerRow.createCell(1);
+        headerCell.setCellValue("总重量");
+        headerCell = headerRow.createCell(2);
+        headerCell.setCellValue("饲料消耗比");
+        headerCell = headerRow.createCell(3);
+        headerCell.setCellValue("总料蛋比");
+
+        int columnStartForBarns = 4;
+        // 添加产蛋舍标题(二级标题)
+        for (int i = 0; i < barnNames.size(); i++) {
+            String barnName = barnNames.get(i);
+            Cell headerCellForBarn = headerRow.createCell(columnStartForBarns + i * 6);
+            headerCellForBarn.setCellValue(barnName);
+
+            // 添加二级标题
+            Row subHeaderRow = sheet.createRow(1 + i); // 每个产蛋舍下面创建新的二级标题行
+            for (int j = 0; j < 7; j++) {
+                Cell subHeaderCell = subHeaderRow.createCell(columnStartForBarns + i * 7 + j);
+                String[] subHeaders = {"存栏", "产蛋数量", "产蛋率", "总产蛋重量", "鸡蛋平均重量", "饲料消耗", "料蛋比"};
+                subHeaderCell.setCellValue(subHeaders[j]);
+            }
+        }
+
+        try (FileOutputStream outputStream = new FileOutputStream(filePath)) {
+            workbook.write(outputStream);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                workbook.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}

+ 32 - 2
huimv-farm-datacenter-egg/huimv-farm-environ/src/main/resources/mapper/FeedEggDetailMapper.xml

@@ -11,7 +11,7 @@
             e.date,
             e.total_egg_weight AS 'totalEggWeight',
             COALESCE(ROUND(u.total_feed_consume / 1000, 2), 0) AS 'totalFeedConsume',
-            ROUND(CASE WHEN e.egg_production = 0 THEN NULL ELSE u.total_feed_consume / e.egg_production END, 2) AS 'totalFeedEggRate'
+            ROUND(CASE WHEN e.egg_production = 0 THEN 0 ELSE u.total_feed_consume / e.egg_production END, 2) AS 'totalFeedEggRate'
         FROM
             (SELECT
                 DATE AS DATE,
@@ -32,8 +32,38 @@
         ON
             e.date = u.date
         ORDER BY
-            e.date DESC;
+            e.date DESC
 
     </select>
+    <select id="listPrint" resultType="com.huimv.environ.eco.entity.eggvo.FeedEggVo">
+        SELECT
+            e.date,
+            e.total_egg_weight AS 'totalEggWeight',
+            COALESCE(ROUND(u.total_feed_consume / 1000, 2), 0) AS 'totalFeedConsume',
+            ROUND(CASE WHEN e.egg_production = 0 THEN NULL ELSE u.total_feed_consume / e.egg_production END, 2) AS 'totalFeedEggRate'
+        FROM
+            (SELECT
+                DATE AS DATE,
+                SUM(total_weight) AS total_egg_weight,
+                SUM(egg_production) AS egg_production
+             FROM
+                `lay_egg`
+            GROUP BY
+                 DATE) e
+        LEFT JOIN
+            (SELECT
+                 used_date AS DATE,
+                SUM(total_consume) AS total_feed_consume
+            FROM
+                 `feed_usage`
+             GROUP BY
+                 used_date) u
+        ON
+            e.date = u.date
+        WHERE
+            e.date BETWEEN '${startDate}' AND '${endDate}'
+        ORDER BY
+            e.date ASC
+    </select>
 
 </mapper>