Bladeren bron

无修改2

wwh 1 jaar geleden
bovenliggende
commit
bb31a4f0bf

+ 192 - 0
huimv-admin/src/main/java/com/huimv/admin/common/utils/ExcelImportSheet.java

@@ -0,0 +1,192 @@
+package com.huimv.admin.common.utils;
+
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+
+import java.io.InputStream;
+import java.lang.reflect.Field;
+import java.math.BigDecimal;
+import java.util.*;
+
+/**
+ * @author 三文鱼先生
+ * @title
+ * @description 导入工具类
+ * @date 2022/8/17
+ **/
+public class ExcelImportSheet {
+
+    /**
+     * @description 根据文件后缀获取相应的Workbook对象
+     * @author 三文鱼先生
+     * @date 9:46 2022/8/17
+     * @param in 用于构建Workbook对象的输入流
+     * @param fileName 文件名称
+     * @return org.apache.poi.ss.usermodel.Workbook
+     **/
+    public static Workbook getTypeFromExtends(InputStream in , String fileName) throws Exception {
+        String[] str = fileName.split("\\.");
+        //获取文件后缀
+        String extend = str[1];
+        if(extend.equals("xls")) {
+            //2003版的excel
+            return new HSSFWorkbook(in);
+        } else if(extend.equals("xlsx")){
+            //2007版的excel
+            return new XSSFWorkbook(in);
+        }else {
+            throw new Exception("请检查文件类型是否正确。");
+        }
+    }
+
+    /**
+     * @description 将单个sheet里的数据获取到List<T>的泛型列表里面
+     * @author 三文鱼先生
+     * @date 9:47 2022/8/17
+     * @param sheet 单个的工作表
+     * @param cs 生成的对象类名
+     * @param map 表头与对象属性映射
+     * @return java.util.List<T>
+     **/
+    public static <T> List<T> getListFromExcel(Sheet sheet , Class cs , Map<String , String> map) throws Exception {
+        T e;
+        List<T> list = new ArrayList<>();
+        //根据第一行获取表头对应的属性顺序
+        List<String> paramsList = getMethodFromFirstRow(sheet , map);
+        //根据类和属性顺序的List 获取属性对应的类型属性
+        List<Class> typeClass = getParamsType(cs , paramsList);
+        //遍历所有行 从第二行开始 首行是表头字段
+        for (int i = sheet.getFirstRowNum() + 1; i <= sheet.getLastRowNum(); i++) {
+            //单元行
+            Row row = sheet.getRow(i);
+            //一行对应一个T,将对象强转为泛型
+            e = (T) cs.newInstance();
+            //遍历单元行的每一列 设置值给泛型e
+
+            for (int j = 0; j < row.getLastCellNum(); j++) {
+                //获取一个单元格
+                Cell cell = row.getCell(j);
+
+                //调用泛型对象的set方法设置单元格里的值 这也就是为什么我们要获取属性顺序以及其对应的类型
+                cs.getMethod(getSetterMethodName(paramsList.get(j)) , typeClass.get(j))
+                        .invoke(e , getValueFromType(cell , typeClass.get(j)));
+            }
+            list.add(e);
+        }
+        return list;
+    }
+
+    /**
+     * @description 获取属性的setter方法
+     * @author 三文鱼先生
+     * @date 9:54 2022/8/17
+     * @param param 属性
+     * @return java.lang.String 返回一个setXxx
+     **/
+    public static String getSetterMethodName(String param) {
+        char[] chars = param.toCharArray();
+        //首字母大写
+        if(Character.isLowerCase(chars[0])) {
+            chars[0] -= 32;
+        }
+        //拼接set方法
+        return "set" + new String(chars);
+    }
+
+    /**
+     * @description 从第一行(表头)获取字段对应的属性的顺序
+     * @author 三文鱼先生
+     * @date 9:51 2022/8/17
+     * @param sheet 工作表
+     * @param map 表头字段与对象属性的映射
+     * @return java.util.List<java.lang.String> 属性的集合
+     **/
+    public static List<String> getMethodFromFirstRow(Sheet sheet , Map<String,String> map) throws Exception {
+        //获取表头
+        Row row = sheet.getRow(sheet.getFirstRowNum());
+        //获取到的属性列表
+        List<String> paramsList = new ArrayList<>();
+        //遍历表头
+        for(int i = row.getFirstCellNum(); i  < row.getLastCellNum(); i++) {
+            Cell cell = row.getCell(i);
+            //获取行字符串的值
+            String str = cell.getStringCellValue();
+            //键值对映射获取对应方法名称
+            if(map.containsKey(str)) {
+                //获取对应属性的set方法
+                paramsList.add(map.get(str));
+            } else {
+                throw new Exception("请检查首行数据是否正确。");
+            }
+        }
+        return  paramsList;
+    }
+
+    /**
+     * @description  根据对象和属性顺序列表,返回对应顺序的参数类型List
+     * @author 三文鱼先生
+     * @date 9:55 2022/8/17
+     * @param cs 对象类
+     * @param paramsList 表头对应的属性顺序List
+     * @return java.util.List<java.lang.Class>
+     **/
+    public static List<Class> getParamsType(Class cs , List<String> paramsList) {
+        List<Class> typeClass = new ArrayList<>();
+        //对象的所有属性
+        Field[] fields = cs.getDeclaredFields();
+        //临时的属性 - 类型映射
+        Map<String , Class> map = new HashMap();
+        //获取属性名称及类型
+        for (Field field : fields) {
+            map.put(field.getName(), field.getType());
+        }
+        //遍历属性List获取对应的类型List
+        for (String s : paramsList) {
+            typeClass.add(map.get(s));
+        }
+        return typeClass;
+    }
+
+
+    /**
+     * @description 根据对应的Class获取将对应的值类型
+     * @author 三文鱼先生
+     * @date 9:59 2022/8/17
+     * @param cell
+     * @param cs
+     * @return java.lang.Object
+     **/
+    public static Object getValueFromType(Cell cell , Class cs) {
+        if(boolean.class.equals(cs)){
+            //boolean类型
+            cell.setCellType(CellType.BOOLEAN);
+            return cell.getBooleanCellValue();
+        }else if (Date.class.equals(cs)) {
+            //日期类型 此种数据并未测试
+            return cell.getDateCellValue();
+        } else if (int.class.equals(cs) || Integer.class.equals(cs)){
+            //int类型
+            cell.setCellType(CellType.NUMERIC);
+            return (int)cell.getNumericCellValue();
+        } else if(double.class.equals(cs) || Double.class.equals(cs)) {
+            //double类型
+            cell.setCellType(CellType.NUMERIC);
+            return cell.getNumericCellValue();
+        }else if(BigDecimal.class.equals(cs) || BigDecimal.class.equals(cs)) {
+            //bigdecimal类型
+            cell.setCellType(CellType.NUMERIC);
+            return cell.getNumericCellValue();
+        }  //字符串类型
+        if (cs.equals(String.class)) {
+            //设置对应的类型
+            cell.setCellType(CellType.STRING);
+            return cell.getStringCellValue();
+        }
+        //这里还可以填充其他类型
+        else {
+            //未知类型 默认为错误类型
+            return cell.getErrorCellValue();
+        }
+    }
+}

+ 4 - 2
huimv-admin/src/main/java/com/huimv/admin/config/InterceptorConfig.java

@@ -22,7 +22,7 @@ public class InterceptorConfig implements WebMvcConfigurer {
     public void addInterceptors(InterceptorRegistry registry) {
         registry.addInterceptor(jwtInterceptor()).
                 excludePathPatterns("/huatongApi/admin/my/*","/huatongApi/env-nh3-n/send")
-                .excludePathPatterns("/huatongApi/receive/feed","/huatongApi/energy-data/getData"
+                .excludePathPatterns("/huatongApi/receive/feed","/huatongApi/energy-data/importData","/huatongApi/energy-data/getData"
                         ,"/huatongApi/energy-data/getData2" ,"/huatongApi/energy-data/getData3","/huatongApi/energy-data/getData4"
                         ,"/huatongApi/energy-data/getData5"
                         ,"/huatongApi/energy-data/getData6"
@@ -32,6 +32,8 @@ public class InterceptorConfig implements WebMvcConfigurer {
                         ,"/huatongApi/energy-data/getData10"
                         ,"/huatongApi/energy-data/getData11"
                         ,"/huatongApi/energy-data/getData12"
-                        ,"/huatongApi/energy-data/getData13");
+                        ,"/huatongApi/energy-data/getData13"
+                        ,"/huatongApi/energy-data/getData14"
+                        ,"/huatongApi/energy-data/getData15");
     }
 }

+ 54 - 0
huimv-admin/src/main/java/com/huimv/admin/controller/EnergyDataController.java

@@ -19,6 +19,7 @@ import com.huimv.admin.service.IEnergyDataService;
 import com.huimv.admin.service.IEnergyEnvDeviceService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import java.text.ParseException;
@@ -76,6 +77,17 @@ public class EnergyDataController {
         return iEnergyDataService.listDataAll(httpServletRequest, paramsMap);
     }
 
+    @PostMapping("/importData")
+    public Result importData(HttpServletRequest httpServletRequest, @RequestParam(name = "file") MultipartFile file,
+                             @RequestParam(name = "farmId") String farmId,
+                             @RequestParam(name = "unitId") String unitId,
+                             @RequestParam(name = "farmName") String farmName) throws Exception {
+        Map<String, String> map = new HashMap<>();
+        map.put("farmId", farmId);
+        map.put("unitId", unitId);
+        map.put("farmName", farmName);
+        return iEnergyDataService.importData(httpServletRequest, map, file);
+    }
     //为了展示给别人好看一点
     @RequestMapping("/listDataWaterAndElc")
     public Result listDataAll2(HttpServletRequest httpServletRequest, @RequestBody Map<String, String> paramsMap) throws ParseException {
@@ -361,6 +373,48 @@ public class EnergyDataController {
             iEnergyDataService.save(energyData);
         }
     }
+    @RequestMapping("/getData14")
+    public void getData14(@RequestBody Map<String, List<WaterAndElectricity>> paramsMap) {
+        List<WaterAndElectricity> result = (List) paramsMap.get("result");
+        System.out.println("接受到的数据格式:" + result);
+        for (WaterAndElectricity jsonObject : result) {
+            EnergyData energyData = new EnergyData();
+            energyData.setFeedValue("0.00");
+            energyData.setWaterValue(jsonObject.getWater());
+            energyData.setElectricityValue(jsonObject.getElectricity());
+            energyData.setGasValue("0.00");
+            energyData.setFarmId(40);
+            energyData.setCreateDate(new Date());
+            QueryWrapper<EnergyEnvDevice> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("farm_id", 40).eq("device_code", jsonObject.getDeviceCode());
+            EnergyEnvDevice device = deviceService.getOne(queryWrapper);
+            if (ObjectUtil.isNotEmpty(device)) {
+                energyData.setUnitId(device.getUnitId());
+            }
+            iEnergyDataService.save(energyData);
+        }
+    }
+    @RequestMapping("/getData15")
+    public void getData15(@RequestBody Map<String, List<WaterAndElectricity>> paramsMap) {
+        List<WaterAndElectricity> result = (List) paramsMap.get("result");
+        System.out.println("接受到的数据格式:" + result);
+        for (WaterAndElectricity jsonObject : result) {
+            EnergyData energyData = new EnergyData();
+            energyData.setFeedValue("0.00");
+            energyData.setWaterValue(jsonObject.getWater());
+            energyData.setElectricityValue(jsonObject.getElectricity());
+            energyData.setGasValue("0.00");
+            energyData.setFarmId(41);
+            energyData.setCreateDate(new Date());
+            QueryWrapper<EnergyEnvDevice> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("farm_id", 41).eq("device_code", jsonObject.getDeviceCode());
+            EnergyEnvDevice device = deviceService.getOne(queryWrapper);
+            if (ObjectUtil.isNotEmpty(device)) {
+                energyData.setUnitId(device.getUnitId());
+            }
+            iEnergyDataService.save(energyData);
+        }
+    }
     @PostMapping("/add")
     public Result add(@RequestBody EnergyData energyData) {
         iEnergyDataService.save(energyData);

+ 12 - 0
huimv-admin/src/main/java/com/huimv/admin/entity/vo/EnergyEnvImport.java

@@ -0,0 +1,12 @@
+package com.huimv.admin.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class EnergyEnvImport {
+    private String deviceName;
+    private String deviceCode;
+    private String type;
+    private Integer trans;
+    private String id;
+}

+ 3 - 0
huimv-admin/src/main/java/com/huimv/admin/service/IEnergyDataService.java

@@ -3,6 +3,7 @@ package com.huimv.admin.service;
 import com.huimv.admin.common.utils.Result;
 import com.huimv.admin.entity.EnergyData;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import java.text.ParseException;
@@ -37,4 +38,6 @@ public interface IEnergyDataService extends IService<EnergyData> {
     Result listDataTail(HttpServletRequest httpServletRequest,Map<String,String> paramsMap) throws ParseException;
 
     Result listAll(Map<String, String> paramsMap);
+
+    Result importData(HttpServletRequest httpServletRequest, Map<String, String> paramsMap, MultipartFile files) throws Exception;
 }

+ 2 - 2
huimv-admin/src/main/java/com/huimv/admin/service/impl/BasePigpenServiceImpl.java

@@ -49,7 +49,7 @@ public class BasePigpenServiceImpl extends ServiceImpl<BasePigpenMapper, BasePig
     @Transactional
     public Result addPigpen(BasePigpenDto basePigpenDto) {
         Integer num = basePigpenMapper.selectCount(new QueryWrapper<BasePigpen>().eq("build_name", basePigpenDto.getBuildName())
-                .eq("farm_id", basePigpenDto.getFarmId()));
+                .eq("farm_id", basePigpenDto.getFarmId()).ne("other3",1));
         if (num > 0) {
             return new Result(10001, "栋舍名称已存在!", false);
         }
@@ -80,7 +80,7 @@ public class BasePigpenServiceImpl extends ServiceImpl<BasePigpenMapper, BasePig
     @Transactional
     public Result updatePigpen(BasePigpen basePigpen) {
         Integer num = basePigpenMapper.selectCount(new QueryWrapper<BasePigpen>().eq("build_name", basePigpen.getBuildName())
-                .eq("farm_id", basePigpen.getFarmId()).ne("id", basePigpen.getId()));
+                .eq("farm_id", basePigpen.getFarmId()).ne("id", basePigpen.getId()).ne("ohter3",1));
         if (num > 0) {
             return new Result(10001, "栋舍名称已存在!", false);
         }

+ 57 - 1
huimv-admin/src/main/java/com/huimv/admin/service/impl/EnergyDataServiceImpl.java

@@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.huimv.admin.common.token.TokenSign;
 import com.huimv.admin.common.utils.DataUill;
+import com.huimv.admin.common.utils.ExcelImportSheet;
 import com.huimv.admin.common.utils.Result;
 import com.huimv.admin.common.utils.ResultCode;
 import com.huimv.admin.entity.*;
@@ -21,10 +22,14 @@ import com.huimv.admin.entity.vo.*;
 import com.huimv.admin.mapper.*;
 import com.huimv.admin.service.IEnergyDataService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
+import java.io.InputStream;
 import java.text.DecimalFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -598,7 +603,7 @@ public class EnergyDataServiceImpl extends ServiceImpl<EnergyDataMapper, EnergyD
         List<String> list = new ArrayList<>();
         if ("".equals(deviceCode) || null == deviceCode) {
             QueryWrapper<EnergyEnvDevice> queryWrapper1 = new QueryWrapper<>();
-            queryWrapper1.in("farm_id", 26, 29, 22, 28, 21, 33, 34, 35,23,36,37,38,27).ne("device_code","0102D472");
+            queryWrapper1.in("farm_id", 26, 29, 22, 28, 21, 33, 34, 35,23,36,37,38,27,40,41).ne("device_code","0102D472");
             if ("1".equals(type)) {
                 queryWrapper1.eq("remark", 1);
             } else {
@@ -687,7 +692,58 @@ public class EnergyDataServiceImpl extends ServiceImpl<EnergyDataMapper, EnergyD
         return new Result(ResultCode.SUCCESS, energyData);
     }
 
+    @Override
+    public Result importData(HttpServletRequest httpServletRequest, Map<String, String> paramsMap, MultipartFile files) throws Exception {
+        String farmId = paramsMap.get("farmId");
+        String unitId = paramsMap.get("unitId");
+        String farmName = paramsMap.get("farmName");
+        int anInt = Integer.parseInt(unitId);
+        Map<String, String> map = new HashMap<>();
+        //表头与键值对的映射关系
+        map.put("序号", "id");
+        map.put("网关类型", "type");
+        map.put("设备编号", "deviceCode");
+        map.put("互感器参数", "trans");
+        map.put("位置", "deviceName");
+        try (
+                //这里面的对象会自动关闭
+                InputStream in = files.getInputStream();
+                Workbook workbook = ExcelImportSheet.getTypeFromExtends(in, files.getOriginalFilename())
+        ) {
+
+            //根据名称获取单张表对象 也可以使用getSheetAt(int index)获取单张表的对象 获取第一张表
+            Sheet sheet = workbook.getSheetAt(0);
+            List<EnergyEnvImport> list = ExcelImportSheet.getListFromExcel(sheet, EnergyEnvImport.class, map);
+            for (EnergyEnvImport energyEnvImport : list) {
+                if (StringUtils.isNotBlank(energyEnvImport.getDeviceName())) {
+                    EnergyEnvDevice envDevice = new EnergyEnvDevice();
+                    envDevice.setUnitName(energyEnvImport.getDeviceName());
+                    envDevice.setUnitId(anInt);
+                    envDevice.setDeviceName(energyEnvImport.getDeviceName());
+                    envDevice.setFarmId(Integer.parseInt(farmId));
+                    envDevice.setRemark(farmName);
+                    if ("电表".equals(energyEnvImport.getType())) {
+                        envDevice.setRemark("0");
+                    } else if ("水表(大口径)".equals(energyEnvImport.getType())) {
+                        envDevice.setRemark("1");
+                    } else if ("水表(小口径)".equals(energyEnvImport.getType())) {
+                        envDevice.setRemark("1");
+                    }
+                    String deviceCode = energyEnvImport.getDeviceCode();
+                    envDevice.setDeviceCode(deviceCode.substring(deviceCode.length() - 8));
+                    envDeviceMapper.insert(envDevice);
+                    anInt++;
+                }
+            }
 
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new Result(10001, "数据格式异常!", false);
+        } finally {
+            //写着好看的
+        }
+        return new Result(10000, "保存成功!", true);
+    }
     /*数组排序*/
     public static JSONArray jsonArraySort(JSONArray jsonArr, String sortKey, boolean is_desc) {
         //存放排序结果json数组

+ 2 - 1
huimv-admin/src/main/java/com/huimv/admin/timer/EnergyTimer.java

@@ -40,7 +40,8 @@ public class EnergyTimer {
         List<EnergyEnvDevice> energyEnvDevices = deviceMapper.selectList(new QueryWrapper<EnergyEnvDevice>().ne("farm_id",26)
                 .ne("farm_id",29).ne("farm_id",21).ne("farm_id",28).ne("farm_id",27).
                         ne("farm_id",35).ne("farm_id",33).ne("farm_id",22).ne("farm_id",23)
-                .ne("farm_id",34) .ne("farm_id",36) .ne("farm_id",37).ne("farm_id",38));
+                .ne("farm_id",34) .ne("farm_id",36) .ne("farm_id",37).ne("farm_id",38)
+                .ne("farm_id",40).ne("farm_id",41));
 
         for (EnergyEnvDevice energyEnvDevice : energyEnvDevices) {
             QueryWrapper<BasePigpen> basePigpenQueryWrapper = new QueryWrapper<>();

+ 290 - 0
huimv-admin/src/main/java/com/huimv/admin/timer/WaterAndElcTimer.java

@@ -1921,6 +1921,296 @@ public class WaterAndElcTimer {
 
         }
     }
+
+    //里塘40
+    @Scheduled(cron = "0 59 * * * ? ")
+    private void getShenChan14() throws Exception {
+        QueryWrapper<EnergyEnvDevice> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id", 40);
+        List<EnergyEnvDevice> envDevices = envDeviceMapper.selectList(queryWrapper);
+
+        Date timesmorning = DataUill.getTimesmorning();
+        DateTime dateTime = DateUtil.beginOfWeek(new Date());//本周
+        Date timesMonthmorning = DataUill.getTimesMonthmorning();//本月
+        Date dayStart = (Date) getYesterdayRange().get("startTime");
+        Date dayEnd = (Date) getYesterdayRange().get("stopTime");
+        Date weekStart = (Date) getLastWeekRange().get("startTime");
+        Date weekEnd = (Date) getLastWeekRange().get("stopTime");
+        Date monthStart = (Date) getLastMonthRange().get("startTime");
+        Date monthEnd = (Date) getLastMonthRange().get("stopTime");
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+
+        for (EnergyEnvDevice envDevice : envDevices) {
+            EnergyDataScreenVo dataScreenVo = dataMapper.listDataAll(sdf.format(timesmorning), sdf.format(dateTime), sdf.format(timesMonthmorning),
+                    sdf.format(dayStart), sdf.format(dayEnd)
+                    , sdf.format(weekStart), sdf.format(weekEnd)
+                    , sdf.format(monthStart), sdf.format(monthEnd)
+                    , envDevice.getUnitId(), "40");
+
+            QueryWrapper<EnergyScreen> queryWrapper1 = new QueryWrapper<>();
+            queryWrapper1.eq("farm_id", 40).ge("create_date", timesMonthmorning).eq("device_code", envDevice.getDeviceCode());
+            EnergyScreen energyScreen = screenMapper.selectOne(queryWrapper1);
+
+            if (ObjectUtil.isNotEmpty(energyScreen)) {
+                //说明今天的数据已经存在 后续只需要更新即可
+                if ("1".equals(envDevice.getRemark())) {
+                    //用水
+                    energyScreen.setCreateDate(new Date());
+                    energyScreen.setTodayRead(dataScreenVo.getWaterValueToday());
+                    energyScreen.setTodayConsume(dataScreenVo.getWaterValueTodayUsage());
+                    energyScreen.setYesterdayConsume(dataScreenVo.getWaterValueYesterdayUsage());
+                    energyScreen.setWeekConsume(dataScreenVo.getWaterValueThisWeekUsage());
+                    energyScreen.setLastWeekConsume(dataScreenVo.getWaterValueLastWeekUsage());
+                    energyScreen.setMonthConsume(dataScreenVo.getWaterValueThisMonthUsage());
+                    energyScreen.setLastMonthConsume(dataScreenVo.getWaterValueLastMonthUsage());
+                    double day2 = Double.parseDouble(dataScreenVo.getWaterValueTodayUsage());
+                    double day3 = Double.parseDouble(dataScreenVo.getWaterValueYesterdayUsage());
+                    double week1 = Double.parseDouble(dataScreenVo.getWaterValueThisWeekUsage());
+                    double week2 = Double.parseDouble(dataScreenVo.getWaterValueLastWeekUsage());
+                    double month1 = Double.parseDouble(dataScreenVo.getWaterValueThisMonthUsage());
+                    double month2 = Double.parseDouble(dataScreenVo.getWaterValueLastMonthUsage());
+                    DecimalFormat def = new DecimalFormat("0.00");
+                    String day4 = def.format(day2 - day3);
+                    String week3 = def.format(week1 - week2);
+                    String month3 = def.format(month1 - month2);
+                    energyScreen.setDayDifference(day4);
+                    energyScreen.setWeekDifference(week3);
+                    energyScreen.setMonthDifference(month3);
+                } else {
+                    //用电
+                    energyScreen.setCreateDate(new Date());
+                    energyScreen.setTodayRead(dataScreenVo.getElectricityValueToday());
+                    energyScreen.setTodayConsume(dataScreenVo.getElectricityValueTodayUsage());
+                    energyScreen.setYesterdayConsume(dataScreenVo.getElectricityValueYesterdayUsage());
+                    energyScreen.setWeekConsume(dataScreenVo.getElectricityValueThisWeekUsage());
+                    energyScreen.setLastWeekConsume(dataScreenVo.getElectricityValueLastWeekUsage());
+                    energyScreen.setMonthConsume(dataScreenVo.getElectricityValueThisMonthUsage());
+                    energyScreen.setLastMonthConsume(dataScreenVo.getElectricityValueLastMonthUsage());
+                    double day2 = Double.parseDouble(dataScreenVo.getElectricityValueTodayUsage());
+                    double day3 = Double.parseDouble(dataScreenVo.getElectricityValueYesterdayUsage());
+                    double week1 = Double.parseDouble(dataScreenVo.getElectricityValueThisWeekUsage());
+                    double week2 = Double.parseDouble(dataScreenVo.getElectricityValueLastWeekUsage());
+                    double month1 = Double.parseDouble(dataScreenVo.getElectricityValueThisMonthUsage());
+                    double month2 = Double.parseDouble(dataScreenVo.getElectricityValueLastMonthUsage());
+                    DecimalFormat def = new DecimalFormat("0.00");
+                    String day4 = def.format(day2 - day3);
+                    String week3 = def.format(week1 - week2);
+                    String month3 = def.format(month1 - month2);
+                    energyScreen.setDayDifference(day4);
+                    energyScreen.setWeekDifference(week3);
+                    energyScreen.setMonthDifference(month3);
+                }
+                screenMapper.updateById(energyScreen);
+            }else {
+                //添加一天的第一条数据
+                EnergyScreen screen = new EnergyScreen();
+                if ("1".equals(envDevice.getRemark())) {
+                    //添加用水
+                    screen.setCreateDate(new Date());
+                    screen.setTodayRead(dataScreenVo.getWaterValueToday());
+                    screen.setTodayConsume(dataScreenVo.getWaterValueTodayUsage());
+                    screen.setYesterdayConsume(dataScreenVo.getWaterValueYesterdayUsage());
+                    screen.setWeekConsume(dataScreenVo.getWaterValueThisWeekUsage());
+                    screen.setLastWeekConsume(dataScreenVo.getWaterValueLastWeekUsage());
+                    screen.setMonthConsume(dataScreenVo.getWaterValueThisMonthUsage());
+                    screen.setLastMonthConsume(dataScreenVo.getWaterValueLastMonthUsage());
+                    double day2 = Double.parseDouble(dataScreenVo.getWaterValueTodayUsage());
+                    double day3 = Double.parseDouble(dataScreenVo.getWaterValueYesterdayUsage());
+                    double week1 = Double.parseDouble(dataScreenVo.getWaterValueThisWeekUsage());
+                    double week2 = Double.parseDouble(dataScreenVo.getWaterValueLastWeekUsage());
+                    double month1 = Double.parseDouble(dataScreenVo.getWaterValueThisMonthUsage());
+                    double month2 = Double.parseDouble(dataScreenVo.getWaterValueLastMonthUsage());
+                    DecimalFormat def = new DecimalFormat("0.00");
+                    String day4 = def.format(day2 - day3);
+                    String week3 = def.format(week1 - week2);
+                    String month3 = def.format(month1 - month2);
+                    screen.setDayDifference(day4);
+                    screen.setWeekDifference(week3);
+                    screen.setMonthDifference(month3);
+                    screen.setFarmId(40);
+                    screen.setBuildName(envDevice.getUnitName());
+                    screen.setDeviceCode(envDevice.getDeviceCode());
+                    screen.setType(1);
+                    screen.setFarmName("华统股份里塘智慧牧场");
+                } else {
+                    screen.setCreateDate(new Date());
+                    screen.setTodayRead(dataScreenVo.getElectricityValueToday());
+                    screen.setTodayConsume(dataScreenVo.getElectricityValueTodayUsage());
+                    screen.setYesterdayConsume(dataScreenVo.getElectricityValueYesterdayUsage());
+                    screen.setWeekConsume(dataScreenVo.getElectricityValueThisWeekUsage());
+                    screen.setLastWeekConsume(dataScreenVo.getElectricityValueLastWeekUsage());
+                    screen.setMonthConsume(dataScreenVo.getElectricityValueThisMonthUsage());
+                    screen.setLastMonthConsume(dataScreenVo.getElectricityValueLastMonthUsage());
+                    double day2 = Double.parseDouble(dataScreenVo.getElectricityValueTodayUsage());
+                    double day3 = Double.parseDouble(dataScreenVo.getElectricityValueYesterdayUsage());
+                    double week1 = Double.parseDouble(dataScreenVo.getElectricityValueThisWeekUsage());
+                    double week2 = Double.parseDouble(dataScreenVo.getElectricityValueLastWeekUsage());
+                    double month1 = Double.parseDouble(dataScreenVo.getElectricityValueThisMonthUsage());
+                    double month2 = Double.parseDouble(dataScreenVo.getElectricityValueLastMonthUsage());
+                    DecimalFormat def = new DecimalFormat("0.00");
+                    String day4 = def.format(day2 - day3);
+                    String week3 = def.format(week1 - week2);
+                    String month3 = def.format(month1 - month2);
+                    screen.setDayDifference(day4);
+                    screen.setWeekDifference(week3);
+                    screen.setMonthDifference(month3);
+                    screen.setFarmId(40);
+                    screen.setBuildName(envDevice.getUnitName());
+                    screen.setDeviceCode(envDevice.getDeviceCode());
+                    screen.setType(2);
+                    screen.setFarmName("华统股份里塘智慧牧场");
+                }
+                screenMapper.insert(screen);
+            }
+
+        }
+    }
+
+    //苍杭41
+    @Scheduled(cron = "0 59 * * * ? ")
+    private void getShenChan15() throws Exception {
+        QueryWrapper<EnergyEnvDevice> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id", 41);
+        List<EnergyEnvDevice> envDevices = envDeviceMapper.selectList(queryWrapper);
+
+        Date timesmorning = DataUill.getTimesmorning();
+        DateTime dateTime = DateUtil.beginOfWeek(new Date());//本周
+        Date timesMonthmorning = DataUill.getTimesMonthmorning();//本月
+        Date dayStart = (Date) getYesterdayRange().get("startTime");
+        Date dayEnd = (Date) getYesterdayRange().get("stopTime");
+        Date weekStart = (Date) getLastWeekRange().get("startTime");
+        Date weekEnd = (Date) getLastWeekRange().get("stopTime");
+        Date monthStart = (Date) getLastMonthRange().get("startTime");
+        Date monthEnd = (Date) getLastMonthRange().get("stopTime");
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+
+        for (EnergyEnvDevice envDevice : envDevices) {
+            EnergyDataScreenVo dataScreenVo = dataMapper.listDataAll(sdf.format(timesmorning), sdf.format(dateTime), sdf.format(timesMonthmorning),
+                    sdf.format(dayStart), sdf.format(dayEnd)
+                    , sdf.format(weekStart), sdf.format(weekEnd)
+                    , sdf.format(monthStart), sdf.format(monthEnd)
+                    , envDevice.getUnitId(), "41");
+
+            QueryWrapper<EnergyScreen> queryWrapper1 = new QueryWrapper<>();
+            queryWrapper1.eq("farm_id", 41).ge("create_date", timesMonthmorning).eq("device_code", envDevice.getDeviceCode());
+            EnergyScreen energyScreen = screenMapper.selectOne(queryWrapper1);
+
+            if (ObjectUtil.isNotEmpty(energyScreen)) {
+                //说明今天的数据已经存在 后续只需要更新即可
+                if ("1".equals(envDevice.getRemark())) {
+                    //用水
+                    energyScreen.setCreateDate(new Date());
+                    energyScreen.setTodayRead(dataScreenVo.getWaterValueToday());
+                    energyScreen.setTodayConsume(dataScreenVo.getWaterValueTodayUsage());
+                    energyScreen.setYesterdayConsume(dataScreenVo.getWaterValueYesterdayUsage());
+                    energyScreen.setWeekConsume(dataScreenVo.getWaterValueThisWeekUsage());
+                    energyScreen.setLastWeekConsume(dataScreenVo.getWaterValueLastWeekUsage());
+                    energyScreen.setMonthConsume(dataScreenVo.getWaterValueThisMonthUsage());
+                    energyScreen.setLastMonthConsume(dataScreenVo.getWaterValueLastMonthUsage());
+                    double day2 = Double.parseDouble(dataScreenVo.getWaterValueTodayUsage());
+                    double day3 = Double.parseDouble(dataScreenVo.getWaterValueYesterdayUsage());
+                    double week1 = Double.parseDouble(dataScreenVo.getWaterValueThisWeekUsage());
+                    double week2 = Double.parseDouble(dataScreenVo.getWaterValueLastWeekUsage());
+                    double month1 = Double.parseDouble(dataScreenVo.getWaterValueThisMonthUsage());
+                    double month2 = Double.parseDouble(dataScreenVo.getWaterValueLastMonthUsage());
+                    DecimalFormat def = new DecimalFormat("0.00");
+                    String day4 = def.format(day2 - day3);
+                    String week3 = def.format(week1 - week2);
+                    String month3 = def.format(month1 - month2);
+                    energyScreen.setDayDifference(day4);
+                    energyScreen.setWeekDifference(week3);
+                    energyScreen.setMonthDifference(month3);
+                } else {
+                    //用电
+                    energyScreen.setCreateDate(new Date());
+                    energyScreen.setTodayRead(dataScreenVo.getElectricityValueToday());
+                    energyScreen.setTodayConsume(dataScreenVo.getElectricityValueTodayUsage());
+                    energyScreen.setYesterdayConsume(dataScreenVo.getElectricityValueYesterdayUsage());
+                    energyScreen.setWeekConsume(dataScreenVo.getElectricityValueThisWeekUsage());
+                    energyScreen.setLastWeekConsume(dataScreenVo.getElectricityValueLastWeekUsage());
+                    energyScreen.setMonthConsume(dataScreenVo.getElectricityValueThisMonthUsage());
+                    energyScreen.setLastMonthConsume(dataScreenVo.getElectricityValueLastMonthUsage());
+                    double day2 = Double.parseDouble(dataScreenVo.getElectricityValueTodayUsage());
+                    double day3 = Double.parseDouble(dataScreenVo.getElectricityValueYesterdayUsage());
+                    double week1 = Double.parseDouble(dataScreenVo.getElectricityValueThisWeekUsage());
+                    double week2 = Double.parseDouble(dataScreenVo.getElectricityValueLastWeekUsage());
+                    double month1 = Double.parseDouble(dataScreenVo.getElectricityValueThisMonthUsage());
+                    double month2 = Double.parseDouble(dataScreenVo.getElectricityValueLastMonthUsage());
+                    DecimalFormat def = new DecimalFormat("0.00");
+                    String day4 = def.format(day2 - day3);
+                    String week3 = def.format(week1 - week2);
+                    String month3 = def.format(month1 - month2);
+                    energyScreen.setDayDifference(day4);
+                    energyScreen.setWeekDifference(week3);
+                    energyScreen.setMonthDifference(month3);
+                }
+                screenMapper.updateById(energyScreen);
+            }else {
+                //添加一天的第一条数据
+                EnergyScreen screen = new EnergyScreen();
+                if ("1".equals(envDevice.getRemark())) {
+                    //添加用水
+                    screen.setCreateDate(new Date());
+                    screen.setTodayRead(dataScreenVo.getWaterValueToday());
+                    screen.setTodayConsume(dataScreenVo.getWaterValueTodayUsage());
+                    screen.setYesterdayConsume(dataScreenVo.getWaterValueYesterdayUsage());
+                    screen.setWeekConsume(dataScreenVo.getWaterValueThisWeekUsage());
+                    screen.setLastWeekConsume(dataScreenVo.getWaterValueLastWeekUsage());
+                    screen.setMonthConsume(dataScreenVo.getWaterValueThisMonthUsage());
+                    screen.setLastMonthConsume(dataScreenVo.getWaterValueLastMonthUsage());
+                    double day2 = Double.parseDouble(dataScreenVo.getWaterValueTodayUsage());
+                    double day3 = Double.parseDouble(dataScreenVo.getWaterValueYesterdayUsage());
+                    double week1 = Double.parseDouble(dataScreenVo.getWaterValueThisWeekUsage());
+                    double week2 = Double.parseDouble(dataScreenVo.getWaterValueLastWeekUsage());
+                    double month1 = Double.parseDouble(dataScreenVo.getWaterValueThisMonthUsage());
+                    double month2 = Double.parseDouble(dataScreenVo.getWaterValueLastMonthUsage());
+                    DecimalFormat def = new DecimalFormat("0.00");
+                    String day4 = def.format(day2 - day3);
+                    String week3 = def.format(week1 - week2);
+                    String month3 = def.format(month1 - month2);
+                    screen.setDayDifference(day4);
+                    screen.setWeekDifference(week3);
+                    screen.setMonthDifference(month3);
+                    screen.setFarmId(41);
+                    screen.setBuildName(envDevice.getUnitName());
+                    screen.setDeviceCode(envDevice.getDeviceCode());
+                    screen.setType(1);
+                    screen.setFarmName("华统股份苍杭智慧牧场");
+                } else {
+                    screen.setCreateDate(new Date());
+                    screen.setTodayRead(dataScreenVo.getElectricityValueToday());
+                    screen.setTodayConsume(dataScreenVo.getElectricityValueTodayUsage());
+                    screen.setYesterdayConsume(dataScreenVo.getElectricityValueYesterdayUsage());
+                    screen.setWeekConsume(dataScreenVo.getElectricityValueThisWeekUsage());
+                    screen.setLastWeekConsume(dataScreenVo.getElectricityValueLastWeekUsage());
+                    screen.setMonthConsume(dataScreenVo.getElectricityValueThisMonthUsage());
+                    screen.setLastMonthConsume(dataScreenVo.getElectricityValueLastMonthUsage());
+                    double day2 = Double.parseDouble(dataScreenVo.getElectricityValueTodayUsage());
+                    double day3 = Double.parseDouble(dataScreenVo.getElectricityValueYesterdayUsage());
+                    double week1 = Double.parseDouble(dataScreenVo.getElectricityValueThisWeekUsage());
+                    double week2 = Double.parseDouble(dataScreenVo.getElectricityValueLastWeekUsage());
+                    double month1 = Double.parseDouble(dataScreenVo.getElectricityValueThisMonthUsage());
+                    double month2 = Double.parseDouble(dataScreenVo.getElectricityValueLastMonthUsage());
+                    DecimalFormat def = new DecimalFormat("0.00");
+                    String day4 = def.format(day2 - day3);
+                    String week3 = def.format(week1 - week2);
+                    String month3 = def.format(month1 - month2);
+                    screen.setDayDifference(day4);
+                    screen.setWeekDifference(week3);
+                    screen.setMonthDifference(month3);
+                    screen.setFarmId(41);
+                    screen.setBuildName(envDevice.getUnitName());
+                    screen.setDeviceCode(envDevice.getDeviceCode());
+                    screen.setType(2);
+                    screen.setFarmName("华统股份苍杭智慧牧场");
+                }
+                screenMapper.insert(screen);
+            }
+
+        }
+    }
     /**
      * 获取上周开始时间和结束时间
      */