Kaynağa Gözat

新牧场添加3

wwh 1 yıl önce
ebeveyn
işleme
9e50dd7c5f
16 değiştirilmiş dosya ile 711 ekleme ve 13 silme
  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.service.IEnergyEnvDeviceService;
+import com.huimv.env.common.utils.PdfUtil;
 import com.huimv.env.common.utils.Result;
 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 javax.servlet.http.HttpServletResponse;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -63,7 +65,10 @@ public class EnergyEnvDeviceController {
         map.put("farmName", farmName);
         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")
     public Result bandingUnitId(HttpServletRequest httpServletRequest, @RequestBody EnergyEnvDevice envDevice) {
         return energyEnvDeviceService.bandingUnitId(httpServletRequest,envDevice);
@@ -76,4 +81,10 @@ public class EnergyEnvDeviceController {
         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();
         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) {
         registry.addInterceptor(jwtInterceptor()).
                 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.dto.EnergyDto;
 import com.huimv.env.common.entity.dto.PigpenDto;
+import com.huimv.env.common.entity.vo.WaterAndElectricityCount;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
@@ -29,4 +30,8 @@ public interface EnergyElectricityMapper extends BaseMapper<EnergyElectricity> {
     EnergyDto listCount(@Param(Constants.WRAPPER) QueryWrapper<EnergyElectricity> queryWrapper);
 
     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 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.EnergyEnvDevice;
 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.utils.ExcelImportSheet;
+import com.huimv.env.common.utils.Print;
 import com.huimv.env.common.utils.Result;
 import com.huimv.env.common.utils.ResultCode;
 import org.apache.poi.ss.usermodel.Sheet;
@@ -28,10 +31,7 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.servlet.http.HttpServletRequest;
 import java.io.InputStream;
 import java.text.NumberFormat;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * <p>
@@ -49,6 +49,12 @@ public class EnergyEnvDeviceServiceImpl extends ServiceImpl<EnergyEnvDeviceMappe
     private BaseFarmMapper farmMapper;
     @Autowired
     private BasePigpenMapper basePigpenMapper;
+    @Autowired
+    private IEnergyEnvDeviceService envDeviceService;
+    @Autowired
+    private EnergyWaterMapper waterMapper;
+    @Autowired
+    private EnergyElectricityMapper electricityMapper;
 
     @Override
     public Result list(HttpServletRequest httpServletRequest, Map<String, String> paramsMap) {
@@ -234,4 +240,66 @@ public class EnergyEnvDeviceServiceImpl extends ServiceImpl<EnergyEnvDeviceMappe
         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
 GROUP BY c.id
     </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>

+ 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);
             }
 
+        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());
 //        }catch (Exception 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 {
     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.EnergyEnvDevice;
 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.IEnergyEnvDeviceService;
 import com.huimv.env.common.service.IEnergyWaterService;
@@ -33,6 +35,9 @@ public class DataServiceImpl implements DataService {
 
     @Autowired
     private IEnergyEnvDeviceService energyEnvDeviceService ;
+
+    @Autowired
+    private EnvWarningInfoMapper warningInfoMapper;
     @Override
     public void saveData(String payload, String timestamp, String nodeEui) throws ParseException {
        // 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
             ,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 {
         List<EnergyWater> one = energyWaterService.list(new QueryWrapper<EnergyWater>().eq("chip_code", nodeEui).orderByDesc("id").last("limit 1"));
         String lastData ="0";
+        Integer str = 0;
         if (ObjectUtil.isNotEmpty(one)){
             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对象
         EnergyWater envWater = new EnergyWater();