Pārlūkot izejas kodu

新牧场添加3

wwh 1 gadu atpakaļ
vecāks
revīzija
9e50dd7c5f
16 mainītis faili ar 711 papildinājumiem un 13 dzēšanām
  1. 12 1
      huimv-env-admin/src/main/java/com/huimv/env/admin/controller/EnergyEnvDeviceController.java
  2. 40 0
      huimv-env-admin/src/main/java/com/huimv/env/admin/controller/EnvWarningInfoController.java
  3. 49 0
      huimv-env-admin/src/main/java/com/huimv/env/admin/timer/WaterAndElectricity.java
  4. 1 1
      huimv-env-common/src/main/java/com/huimv/env/common/config/InterceptorConfig.java
  5. 10 0
      huimv-env-common/src/main/java/com/huimv/env/common/entity/vo/EnergyUpdateVo.java
  6. 14 0
      huimv-env-common/src/main/java/com/huimv/env/common/entity/vo/GetWaterAndElectricityVo.java
  7. 12 0
      huimv-env-common/src/main/java/com/huimv/env/common/entity/vo/WaterAndElectricityCount.java
  8. 5 0
      huimv-env-common/src/main/java/com/huimv/env/common/mapper/EnergyElectricityMapper.java
  9. 4 0
      huimv-env-common/src/main/java/com/huimv/env/common/service/IEnergyEnvDeviceService.java
  10. 75 7
      huimv-env-common/src/main/java/com/huimv/env/common/service/impl/EnergyEnvDeviceServiceImpl.java
  11. 344 0
      huimv-env-common/src/main/java/com/huimv/env/common/utils/PdfUtil.java
  12. 51 0
      huimv-env-common/src/main/java/com/huimv/env/common/utils/Print.java
  13. 16 0
      huimv-env-common/src/main/java/resources/com/huimv/env/common/mapper/EnergyElectricityMapper.xml
  14. 11 0
      huimv-env-device/src/main/java/com/huimv/env/device/listener/DeviceListener.java
  15. 4 0
      huimv-env-device/src/main/java/com/huimv/env/device/service/DataService.java
  16. 63 4
      huimv-env-device/src/main/java/com/huimv/env/device/service/impl/DataServiceImpl.java

+ 12 - 1
huimv-env-admin/src/main/java/com/huimv/env/admin/controller/EnergyEnvDeviceController.java

@@ -4,12 +4,14 @@ package com.huimv.env.admin.controller;
 
 
 import com.huimv.env.common.entity.EnergyEnvDevice;
 import com.huimv.env.common.entity.EnergyEnvDevice;
 import com.huimv.env.common.service.IEnergyEnvDeviceService;
 import com.huimv.env.common.service.IEnergyEnvDeviceService;
+import com.huimv.env.common.utils.PdfUtil;
 import com.huimv.env.common.utils.Result;
 import com.huimv.env.common.utils.Result;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
 
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Map;
 
 
@@ -63,7 +65,10 @@ public class EnergyEnvDeviceController {
         map.put("farmName", farmName);
         map.put("farmName", farmName);
         return energyEnvDeviceService.importData(httpServletRequest, map, file);
         return energyEnvDeviceService.importData(httpServletRequest, map, file);
     }
     }
-
+    @PostMapping("/updateName")
+    public Result updateName(HttpServletRequest httpServletRequest, @RequestParam(name = "file") MultipartFile file) throws Exception {
+        return energyEnvDeviceService.updateName(httpServletRequest, file);
+    }
     @RequestMapping("/bandingUnitId")
     @RequestMapping("/bandingUnitId")
     public Result bandingUnitId(HttpServletRequest httpServletRequest, @RequestBody EnergyEnvDevice envDevice) {
     public Result bandingUnitId(HttpServletRequest httpServletRequest, @RequestBody EnergyEnvDevice envDevice) {
         return energyEnvDeviceService.bandingUnitId(httpServletRequest,envDevice);
         return energyEnvDeviceService.bandingUnitId(httpServletRequest,envDevice);
@@ -76,4 +81,10 @@ public class EnergyEnvDeviceController {
         return new Result(10000,"解绑成功",true);
         return new Result(10000,"解绑成功",true);
     }
     }
 
 
+    @GetMapping("/printData")
+    public void printChi(HttpServletResponse response) throws Exception {
+        energyEnvDeviceService.getData();
+        String path = "G://getData.xls";
+        PdfUtil.returnPdfStream3(response, path, "电表列表");
+    }
 }
 }

+ 40 - 0
huimv-env-admin/src/main/java/com/huimv/env/admin/controller/EnvWarningInfoController.java

@@ -0,0 +1,40 @@
+package com.huimv.env.admin.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huimv.env.common.entity.EnvWarningInfo;
+import com.huimv.env.common.service.IEnvWarningInfoService;
+import com.huimv.env.common.utils.Result;
+import com.huimv.env.common.utils.ResultCode;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+@CrossOrigin
+@RestController
+@RequestMapping("/admin/envWarningInfo")
+public class EnvWarningInfoController {
+    @Autowired
+    private IEnvWarningInfoService infoService;
+
+    @RequestMapping("/list")
+    public Result list(@RequestBody Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        String pageNum = paramsMap.get("pageNum");
+        String pageSize = paramsMap.get("pageSize");
+        if ("".equals(pageNum) || null == pageNum) {
+            pageNum = "1";
+        }
+        if ("".equals(pageSize) || null == pageSize) {
+            pageSize = "20";
+        }
+        QueryWrapper<EnvWarningInfo> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id", farmId).orderByDesc("date");
+        Page<EnvWarningInfo> page = new Page<>(Integer.parseInt(pageNum), Integer.parseInt(pageSize));
+        return new Result(ResultCode.SUCCESS,infoService.page(page,queryWrapper));
+    }
+}

+ 49 - 0
huimv-env-admin/src/main/java/com/huimv/env/admin/timer/WaterAndElectricity.java

@@ -810,4 +810,53 @@ public class WaterAndElectricity {
                 .headerMap(paramsMap, false).body(jsonObject.toJSONString()).timeout(30 * 1000).execute().body();
                 .headerMap(paramsMap, false).body(jsonObject.toJSONString()).timeout(30 * 1000).execute().body();
         System.out.println(post);
         System.out.println(post);
     }
     }
+
+    //乐清38
+    @Scheduled(cron = "0 59 * * * ? ")
+    private void sendDate16() throws Exception {
+        QueryWrapper<EnergyEnvDevice> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id", 38);
+        List<EnergyEnvDevice> devices = envDeviceMapper.selectList(queryWrapper);
+        Date date = new Date();//获取当前时间
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.add(Calendar.HOUR, -1);// 20分钟前
+        //获取到完整的时间
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        JSONArray jsonArray = new JSONArray();
+
+        for (EnergyEnvDevice device : devices) {
+            JSONObject jsonObject = new JSONObject();
+            if (device.getDeviceType() == 3) {
+                //电
+                QueryWrapper<EnergyElectricity> queryWrapper1 = new QueryWrapper<>();
+                queryWrapper1.eq("farm_id", 38).eq("chip_code", device.getDeviceCode());
+                queryWrapper1.between("upload_date", sdf.format(calendar.getTime()), sdf.format(date));
+                queryWrapper1.select(" IFNULL(SUM(electricity_value),0) electricityValue");
+                EnergyElectricity electricity = electricityMapper.selectOne(queryWrapper1);
+                jsonObject.put("electricity", electricity.getElectricityValue());
+                jsonObject.put("water", 0);
+            } else {
+                //水
+                QueryWrapper<EnergyWater> queryWrapper1 = new QueryWrapper<>();
+                queryWrapper1.eq("farm_id", 38).eq("chip_code", device.getDeviceCode());
+                queryWrapper1.between("upload_date", sdf.format(calendar.getTime()), sdf.format(date));
+                queryWrapper1.select(" IFNULL(SUM(water_value),0) waterValue");
+                EnergyWater water = waterMapper.selectOne(queryWrapper1);
+                jsonObject.put("water", water.getWaterValue());
+                jsonObject.put("electricity", 0);
+            }
+            jsonObject.put("deviceCode", device.getDeviceCode());
+            jsonObject.put("time", sdf.format(date));
+            jsonArray.add(jsonObject);
+        }
+        HashMap<String, String> paramsMap = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("result", jsonArray);
+        System.out.println(jsonObject);
+        paramsMap.put("Content-Type", "application/json;charset=utf-8");
+        String post = HttpRequest.post("https://huatong.ifarmcloud.com/huatongApi/energy-data/getData16")
+                .headerMap(paramsMap, false).body(jsonObject.toJSONString()).timeout(30 * 1000).execute().body();
+        System.out.println(post);
+    }
 }
 }

+ 1 - 1
huimv-env-common/src/main/java/com/huimv/env/common/config/InterceptorConfig.java

@@ -23,6 +23,6 @@ public class InterceptorConfig implements WebMvcConfigurer {
     public void addInterceptors(InterceptorRegistry registry) {
     public void addInterceptors(InterceptorRegistry registry) {
         registry.addInterceptor(jwtInterceptor()).
         registry.addInterceptor(jwtInterceptor()).
                 excludePathPatterns("/huimvAdmin/admin/my/*","/huimvAdmin/arrange-record/test")
                 excludePathPatterns("/huimvAdmin/admin/my/*","/huimvAdmin/arrange-record/test")
-                .excludePathPatterns("/huimvAdmin/receive/feed","/huimvAdmin/energy-electricity/sendData");
+                .excludePathPatterns("/huimvAdmin/receive/feed","/huimvAdmin/energy-electricity/sendData","/huimvAdmin/admin/energyEnvDevice/printData");
     }
     }
 }
 }

+ 10 - 0
huimv-env-common/src/main/java/com/huimv/env/common/entity/vo/EnergyUpdateVo.java

@@ -0,0 +1,10 @@
+package com.huimv.env.common.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class EnergyUpdateVo {
+    private String id;
+    private String name;
+    private String deviceCode;
+}

+ 14 - 0
huimv-env-common/src/main/java/com/huimv/env/common/entity/vo/GetWaterAndElectricityVo.java

@@ -0,0 +1,14 @@
+package com.huimv.env.common.entity.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class GetWaterAndElectricityVo {
+    private String deviceCode;
+    private String farmName;
+    private BigDecimal count1;
+    private BigDecimal count2;
+    private String typeName;
+}

+ 12 - 0
huimv-env-common/src/main/java/com/huimv/env/common/entity/vo/WaterAndElectricityCount.java

@@ -0,0 +1,12 @@
+package com.huimv.env.common.entity.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class WaterAndElectricityCount {
+    private String farmName;
+    private String deviceCode;
+    private BigDecimal value;
+}

+ 5 - 0
huimv-env-common/src/main/java/com/huimv/env/common/mapper/EnergyElectricityMapper.java

@@ -9,6 +9,7 @@ import com.huimv.env.common.entity.EnergyElectricity;
 import com.huimv.env.common.entity.EnergyWater;
 import com.huimv.env.common.entity.EnergyWater;
 import com.huimv.env.common.entity.dto.EnergyDto;
 import com.huimv.env.common.entity.dto.EnergyDto;
 import com.huimv.env.common.entity.dto.PigpenDto;
 import com.huimv.env.common.entity.dto.PigpenDto;
+import com.huimv.env.common.entity.vo.WaterAndElectricityCount;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 import org.springframework.stereotype.Repository;
 
 
@@ -29,4 +30,8 @@ public interface EnergyElectricityMapper extends BaseMapper<EnergyElectricity> {
     EnergyDto listCount(@Param(Constants.WRAPPER) QueryWrapper<EnergyElectricity> queryWrapper);
     EnergyDto listCount(@Param(Constants.WRAPPER) QueryWrapper<EnergyElectricity> queryWrapper);
 
 
     List<PigpenDto> listPigpen(String farmId, String id, String startTime);
     List<PigpenDto> listPigpen(String farmId, String id, String startTime);
+
+    List<WaterAndElectricityCount> getData();
+
+    List<WaterAndElectricityCount> getData2();
 }
 }

+ 4 - 0
huimv-env-common/src/main/java/com/huimv/env/common/service/IEnergyEnvDeviceService.java

@@ -32,4 +32,8 @@ public interface IEnergyEnvDeviceService extends IService<EnergyEnvDevice> {
     Result deviceCount(HttpServletRequest httpServletRequest, Map<String, String> paramsMap);
     Result deviceCount(HttpServletRequest httpServletRequest, Map<String, String> paramsMap);
 
 
     Result importData(HttpServletRequest httpServletRequest, Map<String, String> paramsMap, MultipartFile files) throws Exception;
     Result importData(HttpServletRequest httpServletRequest, Map<String, String> paramsMap, MultipartFile files) throws Exception;
+
+    Result updateName(HttpServletRequest httpServletRequest, MultipartFile files) throws Exception;
+
+    void getData() throws Exception;
 }
 }

+ 75 - 7
huimv-env-common/src/main/java/com/huimv/env/common/service/impl/EnergyEnvDeviceServiceImpl.java

@@ -11,11 +11,14 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.huimv.env.common.entity.BaseFarm;
 import com.huimv.env.common.entity.BaseFarm;
 import com.huimv.env.common.entity.EnergyEnvDevice;
 import com.huimv.env.common.entity.EnergyEnvDevice;
 import com.huimv.env.common.entity.vo.EnergyEnvImport;
 import com.huimv.env.common.entity.vo.EnergyEnvImport;
-import com.huimv.env.common.mapper.BaseFarmMapper;
-import com.huimv.env.common.mapper.BasePigpenMapper;
-import com.huimv.env.common.mapper.EnergyEnvDeviceMapper;
+import com.huimv.env.common.entity.vo.EnergyUpdateVo;
+import com.huimv.env.common.entity.vo.GetWaterAndElectricityVo;
+import com.huimv.env.common.entity.vo.WaterAndElectricityCount;
+import com.huimv.env.common.mapper.*;
+import com.huimv.env.common.service.IEnergyElectricityService;
 import com.huimv.env.common.service.IEnergyEnvDeviceService;
 import com.huimv.env.common.service.IEnergyEnvDeviceService;
 import com.huimv.env.common.utils.ExcelImportSheet;
 import com.huimv.env.common.utils.ExcelImportSheet;
+import com.huimv.env.common.utils.Print;
 import com.huimv.env.common.utils.Result;
 import com.huimv.env.common.utils.Result;
 import com.huimv.env.common.utils.ResultCode;
 import com.huimv.env.common.utils.ResultCode;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Sheet;
@@ -28,10 +31,7 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import java.io.InputStream;
 import java.io.InputStream;
 import java.text.NumberFormat;
 import java.text.NumberFormat;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -49,6 +49,12 @@ public class EnergyEnvDeviceServiceImpl extends ServiceImpl<EnergyEnvDeviceMappe
     private BaseFarmMapper farmMapper;
     private BaseFarmMapper farmMapper;
     @Autowired
     @Autowired
     private BasePigpenMapper basePigpenMapper;
     private BasePigpenMapper basePigpenMapper;
+    @Autowired
+    private IEnergyEnvDeviceService envDeviceService;
+    @Autowired
+    private EnergyWaterMapper waterMapper;
+    @Autowired
+    private EnergyElectricityMapper electricityMapper;
 
 
     @Override
     @Override
     public Result list(HttpServletRequest httpServletRequest, Map<String, String> paramsMap) {
     public Result list(HttpServletRequest httpServletRequest, Map<String, String> paramsMap) {
@@ -234,4 +240,66 @@ public class EnergyEnvDeviceServiceImpl extends ServiceImpl<EnergyEnvDeviceMappe
         return new Result(10000, "保存成功!", true);
         return new Result(10000, "保存成功!", true);
     }
     }
 
 
+    @Override
+    public Result updateName(HttpServletRequest httpServletRequest, MultipartFile files) throws Exception {
+        Map<String, String> map = new HashMap<>();
+        //表头与键值对的映射关系
+        map.put("序号", "id");
+        map.put("确认后区域名称", "name");
+        map.put("现场核对表号", "deviceCode");
+        try (
+                //这里面的对象会自动关闭
+                InputStream in = files.getInputStream();
+                Workbook workbook = ExcelImportSheet.getTypeFromExtends(in, files.getOriginalFilename())
+        ) {
+
+            //根据名称获取单张表对象 也可以使用getSheetAt(int index)获取单张表的对象 获取第一张表
+            Sheet sheet = workbook.getSheetAt(0);
+            List<EnergyUpdateVo> list = ExcelImportSheet.getListFromExcel(sheet, EnergyUpdateVo.class, map);
+            QueryWrapper<EnergyEnvDevice> queryWrapper = new QueryWrapper<>();
+            queryWrapper.in("device_type", 1,2);
+            List<EnergyEnvDevice> envDevices = energyEnvDeviceMapper.selectList(queryWrapper);
+            for (EnergyUpdateVo energyUpdateVo : list) {
+                if (StringUtils.isNotBlank(energyUpdateVo.getDeviceCode())) {
+                    for (EnergyEnvDevice envDevice : envDevices) {
+                        if (envDevice.getDeviceCode().equals(energyUpdateVo.getDeviceCode())) {
+                            envDevice.setDeviceName(energyUpdateVo.getName());
+                            envDevice.setUnitName(energyUpdateVo.getName());
+                            energyEnvDeviceMapper.updateById(envDevice);
+                        }
+                    }
+                }
+            }
+
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new Result(10001, "数据格式异常!", false);
+        } finally {
+            //写着好看的
+        }
+        return new Result(10000, "保存成功!", true);
+    }
+
+    @Override
+    public void getData() throws Exception {
+        List<GetWaterAndElectricityVo> voList = new ArrayList<>();
+        List<WaterAndElectricityCount> data = electricityMapper.getData();//水表
+        List<WaterAndElectricityCount> data2 = electricityMapper.getData2();//2水表
+        for (WaterAndElectricityCount datum : data) {
+            for (WaterAndElectricityCount waterAndElectricityCount : data2) {
+                if (datum.getDeviceCode().equals(waterAndElectricityCount.getDeviceCode())) {
+                    GetWaterAndElectricityVo vo = new GetWaterAndElectricityVo();
+                    vo.setFarmName(datum.getFarmName());
+                    vo.setTypeName("电表");
+                    vo.setDeviceCode(datum.getDeviceCode());
+                    vo.setCount1(datum.getValue());
+                    vo.setCount2(waterAndElectricityCount.getValue());
+                    voList.add(vo);
+                }
+            }
+        }
+        Print.printDuck(voList);
+    }
+
 }
 }

+ 344 - 0
huimv-env-common/src/main/java/com/huimv/env/common/utils/PdfUtil.java

@@ -0,0 +1,344 @@
+package com.huimv.env.common.utils;
+
+//import cn.bt.common.utils.StringUtils;
+//import cn.bt.modules.process.instance.enums.InstanceStatusEnum;
+//import com.itextpdf.text.*;
+//import com.itextpdf.text.pdf.*;
+
+import cn.hutool.core.io.IoUtil;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+
+/**
+ * @Author: xp
+ * @Date: 2021/7/14
+ */
+public class PdfUtil {
+
+    /**
+     * 返回PDF流
+     *
+     * @param response 相应设置
+     * @param pathName 水印文件路径和名称
+     * @throws Exception 异常
+     */
+    /*public static void returnPdfStream(HttpServletResponse response, String pathName) throws Exception {
+        response.setContentType("application/pdf");
+
+        File file = new File(pathName);
+        if (file.exists()) {
+            FileInputStream in = new FileInputStream(file);
+            OutputStream out = response.getOutputStream();
+            byte[] b = new byte[1024 * 4];
+            int n;
+            while ((n = in.read(b)) > -1) {
+                out.write(b, 0, n);
+            }
+            out.flush();
+            in.close();
+            out.close();
+        }
+    }*/
+    public static void returnPdfStream2(HttpServletResponse response, String pathName, String subsidyNane) throws Exception {
+        InputStream in = null;
+        try {
+            File file = new File(pathName);
+             in = new BufferedInputStream(new FileInputStream(file));
+            String filename = new String((subsidyNane+".pdf").getBytes(), "ISO8859_1");
+            response.setContentType("application/binary;charset=ISO8859_1");
+            response.setHeader("Content-disposition", "attachment; filename=" + filename);// 组装附件名称和格式
+            IoUtil.copy(in, response.getOutputStream());
+        } catch (Exception e) {
+            System.out.println("------------ 这里除了问题!!!-----------");
+            System.out.println(e);
+        }finally {
+            if (in != null) {
+                in.close();
+            }
+        }
+    }
+
+    public static void returnPdfStream3(HttpServletResponse response, String pathName, String subsidyNane) throws Exception {
+        InputStream in = null;
+        try {
+            File file = new File(pathName);
+            in = new BufferedInputStream(new FileInputStream(file));
+            String filename = new String((subsidyNane+".xls").getBytes(), "ISO8859_1");
+            response.setContentType("application/binary;charset=ISO8859_1");
+            response.setHeader("Content-disposition", "attachment; filename=" + filename);// 组装附件名称和格式
+            IoUtil.copy(in, response.getOutputStream());
+        } catch (Exception e) {
+            System.out.println("------------ 这里除了问题!!!-----------");
+            System.out.println(e);
+        }finally {
+            if (in != null) {
+                in.close();
+            }
+        }
+    }
+
+    /**
+     * 返回水印图片路径
+     *
+     * @param instanceStatus 流程状态
+     * @return 水印图片路径
+     */
+//    public static String returnWatermarkPath(int instanceStatus) {
+//        String watermarkPath = "ioffice-api/src/main/resources/static/watermark";
+//        if (InstanceStatusEnum.E_0.getCode().equals(instanceStatus)) {
+//            watermarkPath = watermarkPath + "/已作废.png";
+//
+//        } else if (InstanceStatusEnum.E_2.getCode().equals(instanceStatus)) {
+//            watermarkPath = watermarkPath + "/审批通过.png";
+//
+//        } else {
+//            watermarkPath = watermarkPath + "/审批中.png";
+//        }
+//        return watermarkPath;
+//    }
+//
+//    /**
+//     * 建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中。
+//     *
+//     * @param pdfPath     保存路径
+//     * @param document    文档
+//     * @param pdfPathName 文件保存路径和名称
+//     * @return 书写器(Writer)
+//     * @throws Exception
+//     */
+//    public static PdfWriter createPdfWriter(String pdfPath, Document document, String pdfPathName) throws Exception {
+//
+//        //判断文件夹是否存在
+//        File file = new File(pdfPath);
+//        if (!file.exists()) {
+//            file.mkdir();
+//        }
+//        file = new File(pdfPathName);
+//
+//        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
+//        writer.setViewerPreferences(PdfWriter.PageModeUseThumbs);
+//
+//        return writer;
+//    }
+//
+//    /**
+//     * 设置第一标题内容
+//     *
+//     * @param title    第一标题
+//     * @param document 文档
+//     * @throws Exception 异常
+//     */
+//    public static void setPdfFirstTitle(String title, Document document) throws Exception {
+//        Paragraph paragraph = new Paragraph(title, getPdfChineseFont(0));
+//        paragraph.setAlignment(Element.ALIGN_CENTER);
+//        paragraph.setSpacingAfter(2);
+//        document.add(paragraph);
+//    }
+//
+//    /**
+//     * 设置第二标题内容
+//     *
+//     * @param title           第二标题
+//     * @param document        文档
+//     * @param alignment       对齐方式
+//     * @param firstLineIndent 第一行缩进
+//     * @param spacingAfter    之后间隔
+//     * @throws Exception
+//     */
+//    public static void setPdfSecondTitle(String title, Document document, int alignment, int firstLineIndent, int spacingAfter) throws Exception {
+//        Paragraph lsh = new Paragraph(title, getPdfChineseFont(1));
+//        lsh.setAlignment(alignment);
+//        lsh.setFirstLineIndent(firstLineIndent);
+//        lsh.setSpacingAfter(spacingAfter);
+//        document.add(lsh);
+//    }
+//
+//    /**
+//     * 设置表格内容 并将表格加入文档中
+//     *
+//     * @param dates    数据
+//     * @param document 文档
+//     * @param table    表格
+//     * @throws Exception 异常
+//     */
+//    public static void setPdfTableContent(Object[][] dates, Document document, PdfPTable table) throws Exception {
+//        for (int i = 0; i < dates.length; i++) {
+//            for (int j = 0; j < dates[i].length; j++) {
+//                //表格的单元格
+//                PdfPCell pdfCell = new PdfPCell();
+//                //设置表格行高
+//                if (i > 0 && i < 3) {
+//                    pdfCell.setMinimumHeight(50);
+//                } else {
+//                    pdfCell.setMinimumHeight(25);
+//                }
+//                Paragraph paragraph = new Paragraph(dates[i][j] + "", getPdfChineseFont(1));
+//                pdfCell.setPhrase(paragraph);
+//
+//                setCellStyle(pdfCell);
+//                table.addCell(pdfCell);
+//            }
+//        }
+//
+//        document.add(table);
+//    }
+//
+//    /**
+//     * 设置水印
+//     *
+//     * @param inputFile 要这设置水印的文件路径
+//     * @param imageFile 水印图片路径
+//     * @param tag       标记
+//     * @return 生成水印文件的路径
+//     */
+//    public static String imageWaterMark(String inputFile, String imageFile, String tag) throws Exception {
+//        String[] spe = separatePath(inputFile);
+//        String outputFile = spe[0] + tag + "." + spe[1];
+//
+//        PdfReader reader = new PdfReader(inputFile);
+//        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile));
+//
+//        int total = reader.getNumberOfPages() + 1;
+//
+//        Image image = Image.getInstance(imageFile);
+//        //坐标
+//        image.setAbsolutePosition(389, 730);
+//        //自定义大小
+//        image.scaleAbsolute(80, 80);
+//        //旋转 弧度
+//        image.setRotation(-55);
+//
+//        //旋转 角度
+//        image.setRotationDegrees(0);
+//        //依照比例缩放
+//        image.scalePercent(50);
+//
+//        PdfGState gs = new PdfGState();
+//        // 设置透明度为0.2
+//        gs.setFillOpacity(0.2f);
+//
+//
+//        PdfContentByte under;
+//        //给每一页加水印
+//        for (int i = 1; i < total; i++) {
+//            under = stamper.getUnderContent(i);
+//            under.beginText();
+//            // 添加水印图片
+//            under.addImage(image);
+//            under.setGState(gs);
+//        }
+//        stamper.close();
+//        reader.close();
+//        return outputFile;
+//    }
+//
+//    /**
+//     * 拆分原文件路径
+//     *
+//     * @param path 原文件路径
+//     * @return 拆分原路径的数组
+//     */
+//    public static String[] separatePath(String path) {
+//        if (StringUtils.isBlank(path)) {
+//            return null;
+//        }
+//        String[] sep = path.split("\\.");
+//        return new String[]{sep[0], sep[1]};
+//    }
+//
+//    /**
+//     * 设置表格单元格样式
+//     *
+//     * @param pdfCell 单元格对象
+//     */
+//    public static void setCellStyle(PdfPCell pdfCell) {
+//        pdfCell.setHorizontalAlignment(Element.ALIGN_CENTER);
+//        pdfCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+//        pdfCell.setBackgroundColor(new BaseColor(0xdd7e6b));
+//        pdfCell.setBorderWidthTop(0.1f);
+//        pdfCell.setBorderWidthBottom(0.1f);
+//        pdfCell.setBorderWidthLeft(0.1f);
+//        pdfCell.setBorderWidthRight(0.1f);
+//    }
+//
+//    /**
+//     * 设置pdf字体及大小
+//     *
+//     * @param type 标题或者内容 0-内容 1-标题
+//     * @return 字体
+//     * @throws Exception 异常
+//     */
+//    public static Font getPdfChineseFont(int type) throws Exception {
+//        // 使用系统字体
+//        BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
+//        Font font;
+//        if (type == 1) {
+//            font = new Font(bfChinese);
+//        } else {
+//            font = new Font(bfChinese, 18, Font.BOLD);
+//        }
+//
+//        return font;
+//    }
+//
+//    /**
+//     * 删除文件夹
+//     *
+//     * @param folderPath 文件路基
+//     */
+//    public static void delFolder(String folderPath) {
+//        // 删除完里面所有内容
+//        delAllFile(folderPath);
+//        String filePath = folderPath;
+//        filePath = filePath.toString();
+//        java.io.File myFilePath = new java.io.File(filePath);
+//        // 删除空文件夹
+//        myFilePath.delete();
+//    }
+//
+//    /**
+//     * 删除指定文件夹下所有文件
+//     *
+//     * @param path 文件路基
+//     * @return 是否成功
+//     */
+//    public static boolean delAllFile(String path) {
+//        boolean flag = false;
+//        File file = new File(path);
+//        String[] tempList = file.list();
+//        File temp = null;
+//        for (int i = 0; i < tempList.length; i++) {
+//            if (path.endsWith(File.separator)) {
+//                temp = new File(path + tempList[i]);
+//            } else {
+//                temp = new File(path + File.separator + tempList[i]);
+//            }
+//            if (temp.isFile()) {
+//                temp.delete();
+//            }
+//            if (temp.isDirectory()) {
+//                // 先删除文件夹里面的文件
+//                delAllFile(path + "/" + tempList[i]);
+//                // 再删除空文件夹
+//                delFolder(path + "/" + tempList[i]);
+//                flag = true;
+//            }
+//        }
+//        return flag;
+//    }
+//    public static boolean delAllFile(String path) {
+//        boolean flag = false;
+//        File file = new File(path);
+//        File temp = null;
+//
+//            if (temp.isFile()) {
+//                temp.delete();
+//            }
+//        return flag;
+//    }
+}
+

+ 51 - 0
huimv-env-common/src/main/java/com/huimv/env/common/utils/Print.java

@@ -0,0 +1,51 @@
+package com.huimv.env.common.utils;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.huimv.env.common.entity.EnergyWater;
+import com.huimv.env.common.entity.vo.GetWaterAndElectricityVo;
+import org.jxls.common.Context;
+import org.jxls.util.JxlsHelper;
+
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+public class Print {
+    /**
+     * 打印方法  不插入图片
+     *
+     * @return
+     * @throws Exception
+     */
+    public static void printDuck(List<GetWaterAndElectricityVo> list) throws Exception {
+
+        //准备数据
+        String path = "G://getData.xls";
+        //获取模板文件,你自己当前模板的位置  我这里为当前项目下
+        InputStream is = new FileInputStream("G://getData.xlsx");
+        //根据模板生成的文件保存路径  我这里保存在本地D盘
+        OutputStream os = new FileOutputStream(path);
+        //绑定数据
+        Context context = new Context();
+//        List<GetWaterAndElectricityVo> list1 = new ArrayList<>();
+//        for (GetWaterAndElectricityVo vo : list) {
+//            GetWaterAndElectricityVo vo1 = new GetWaterAndElectricityVo();
+//            vo1.setFarmName(vo.getFarmName());
+//            vo1.setTypeName(vo.getTypeName());
+//            vo1.setCount1(vo.getCount1());
+//            vo1.setCount2(vo.getCount2());
+//            vo1.setDeviceCode(vo.getDeviceCode());
+//            list1.add(vo1);
+//        }
+        context.putVar("list", list);
+
+        //生成
+        JxlsHelper.getInstance().processTemplate(is, os, context);
+    }
+
+}

+ 16 - 0
huimv-env-common/src/main/java/resources/com/huimv/env/common/mapper/EnergyElectricityMapper.xml

@@ -34,4 +34,20 @@ right JOIN
 ON a.unitId=b.id) c
 ON a.unitId=b.id) c
 GROUP BY c.id
 GROUP BY c.id
     </select>
     </select>
+
+    <select id="getData" resultType="com.huimv.env.common.entity.vo.WaterAndElectricityCount">
+        select ROUND(SUM(a.electricity_value),1) 'value' ,a.chip_code 'deviceCode',b.remark 'farmName' FROM energy_electricity a INNER JOIN energy_env_device b
+ON a.chip_code=b.device_code
+where a.create_date BETWEEN '2024-04-01' AND '2024-04-07 23:59:59'
+GROUP BY a.chip_code
+ORDER BY b.farm_id
+    </select>
+
+    <select id="getData2" resultType="com.huimv.env.common.entity.vo.WaterAndElectricityCount">
+        select ROUND(SUM(a.electricity_value),1) 'value' ,a.chip_code 'deviceCode' ,b.remark 'farmName' FROM energy_electricity a INNER JOIN energy_env_device b
+ON a.chip_code=b.device_code
+where a.create_date BETWEEN '2024-04-08' AND '2024-04-14 23:59:59'
+GROUP BY a.chip_code
+ORDER BY b.farm_id
+    </select>
 </mapper>
 </mapper>

+ 11 - 0
huimv-env-device/src/main/java/com/huimv/env/device/listener/DeviceListener.java

@@ -42,6 +42,17 @@ public class DeviceListener {
                 dataService.saveData(payload,timestamp,nodeEui);
                 dataService.saveData(payload,timestamp,nodeEui);
             }
             }
 
 
+        if ("NODE_ONLINE".equals(event)){
+            //上线通知
+            String payload = allData.getContent().getNodeUplinkPacket().getNode().getPayload();
+            dataService.saveOnInfo(payload,timestamp,nodeEui);
+        }
+        if ("NODE_OFFLINE".equals(event)){
+            //离线通知
+            String payload = allData.getContent().getNodeUplinkPacket().getNode().getPayload();
+            dataService.saveOffInfo(payload,timestamp,nodeEui);
+        }
+
             System.out.println("数据开始--->"+allData.toString());
             System.out.println("数据开始--->"+allData.toString());
 //        }catch (Exception e){
 //        }catch (Exception e){
 //            System.out.println("数据异常"+e);
 //            System.out.println("数据异常"+e);

+ 4 - 0
huimv-env-device/src/main/java/com/huimv/env/device/service/DataService.java

@@ -4,4 +4,8 @@ import java.text.ParseException;
 
 
 public interface DataService {
 public interface DataService {
     void saveData(String payload, String timestamp, String nodeEui) throws ParseException;
     void saveData(String payload, String timestamp, String nodeEui) throws ParseException;
+
+    void saveOffInfo(String payload, String timestamp, String nodeEui);
+
+    void saveOnInfo(String payload, String timestamp, String nodeEui);
 }
 }

+ 63 - 4
huimv-env-device/src/main/java/com/huimv/env/device/service/impl/DataServiceImpl.java

@@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.huimv.env.common.entity.EnergyElectricity;
 import com.huimv.env.common.entity.EnergyElectricity;
 import com.huimv.env.common.entity.EnergyEnvDevice;
 import com.huimv.env.common.entity.EnergyEnvDevice;
 import com.huimv.env.common.entity.EnergyWater;
 import com.huimv.env.common.entity.EnergyWater;
+import com.huimv.env.common.entity.EnvWarningInfo;
+import com.huimv.env.common.mapper.EnvWarningInfoMapper;
 import com.huimv.env.common.service.IEnergyElectricityService;
 import com.huimv.env.common.service.IEnergyElectricityService;
 import com.huimv.env.common.service.IEnergyEnvDeviceService;
 import com.huimv.env.common.service.IEnergyEnvDeviceService;
 import com.huimv.env.common.service.IEnergyWaterService;
 import com.huimv.env.common.service.IEnergyWaterService;
@@ -33,6 +35,9 @@ public class DataServiceImpl implements DataService {
 
 
     @Autowired
     @Autowired
     private IEnergyEnvDeviceService energyEnvDeviceService ;
     private IEnergyEnvDeviceService energyEnvDeviceService ;
+
+    @Autowired
+    private EnvWarningInfoMapper warningInfoMapper;
     @Override
     @Override
     public void saveData(String payload, String timestamp, String nodeEui) throws ParseException {
     public void saveData(String payload, String timestamp, String nodeEui) throws ParseException {
        // 4823290F01000000 01016B13
        // 4823290F01000000 01016B13
@@ -60,7 +65,59 @@ public class DataServiceImpl implements DataService {
 
 
     }
     }
 
 
+    @Override
+    public void saveOffInfo(String payload, String timestamp, String nodeEui) {
+        //设备编码
+        nodeEui = nodeEui.substring(nodeEui.length() - 8);
+        //01 水表 ,02电表
+        String devType = payload.substring(6, 8);
+        QueryWrapper<EnergyEnvDevice> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("device_code", nodeEui);
+        EnergyEnvDevice envDevice = energyEnvDeviceService.getOne(queryWrapper);
+        EnvWarningInfo warningInfo = new EnvWarningInfo();
+        if (ObjectUtil.isNotEmpty(envDevice)) {
+            if ("01".equals(devType) || "02".equals(devType)) {
+                warningInfo.setWarningType(1);//shui
+                warningInfo.setWarningContent("水表" + nodeEui + "离线");
+            } else {
+                warningInfo.setWarningType(2);
+                warningInfo.setWarningContent("电表" + nodeEui + "离线");
+            }
+            warningInfo.setBuildLocation(envDevice.getDeviceName());
+            warningInfo.setFarmId(envDevice.getFarmId());
+            warningInfo.setUserNames(envDevice.getRemark());
+            warningInfo.setDate(new Date(Long.parseLong(timestamp)));
+            warningInfoMapper.insert(warningInfo);
+        }
 
 
+    }
+
+    @Override
+    public void saveOnInfo(String payload, String timestamp, String nodeEui) {
+        //设备编码
+        nodeEui = nodeEui.substring(nodeEui.length() - 8);
+        //01 水表 ,02电表
+        String devType = payload.substring(6, 8);
+        QueryWrapper<EnergyEnvDevice> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("device_code", nodeEui);
+        EnergyEnvDevice envDevice = energyEnvDeviceService.getOne(queryWrapper);
+        EnvWarningInfo warningInfo = new EnvWarningInfo();
+        if (ObjectUtil.isNotEmpty(envDevice)) {
+            if ("01".equals(devType) || "02".equals(devType)) {
+                warningInfo.setWarningType(1);//shui
+                warningInfo.setWarningContent("水表" + nodeEui + "在线");
+            } else {
+                warningInfo.setWarningType(2);
+                warningInfo.setWarningContent("电表" + nodeEui + "在线");
+            }
+            warningInfo.setBuildLocation(envDevice.getDeviceName());
+            warningInfo.setFarmId(envDevice.getFarmId());
+            warningInfo.setUserNames(envDevice.getRemark());
+            warningInfo.setDate(new Date(Long.parseLong(timestamp)));
+            warningInfoMapper.insert(warningInfo);
+        }
+
+    }
 
 
     private void saveDian(String devType ,String voltage, Integer originalData, String timestamp, String nodeEui,String payload
     private void saveDian(String devType ,String voltage, Integer originalData, String timestamp, String nodeEui,String payload
             ,Integer farmId,Integer unitId,String unitName,String farmName,int transformer,int difference) throws ParseException {
             ,Integer farmId,Integer unitId,String unitName,String farmName,int transformer,int difference) throws ParseException {
@@ -115,14 +172,16 @@ public class DataServiceImpl implements DataService {
             ,String payload,Integer farmId,Integer unitId,String unitName,String farmName,int transformer,int difference) throws ParseException {
             ,String payload,Integer farmId,Integer unitId,String unitName,String farmName,int transformer,int difference) throws ParseException {
         List<EnergyWater> one = energyWaterService.list(new QueryWrapper<EnergyWater>().eq("chip_code", nodeEui).orderByDesc("id").last("limit 1"));
         List<EnergyWater> one = energyWaterService.list(new QueryWrapper<EnergyWater>().eq("chip_code", nodeEui).orderByDesc("id").last("limit 1"));
         String lastData ="0";
         String lastData ="0";
+        Integer str = 0;
         if (ObjectUtil.isNotEmpty(one)){
         if (ObjectUtil.isNotEmpty(one)){
             lastData =  one.get(0).getOriginalValue();
             lastData =  one.get(0).getOriginalValue();
+             str =   (originalData - Integer.parseInt(lastData) -difference);
+            if (str <0){
+                str =   (originalData - Integer.parseInt(lastData));
+            }
         }
         }
         //差值
         //差值
-       Integer str =   (originalData - Integer.parseInt(lastData) -difference);
-        if (str <0){
-             str =   (originalData - Integer.parseInt(lastData));
-        }
+
 
 
         // 将时间戳字符串解析为Date对象
         // 将时间戳字符串解析为Date对象
         EnergyWater envWater = new EnergyWater();
         EnergyWater envWater = new EnergyWater();