Переглянути джерело

Merge branch 'V0.0.6-iot' of http://10.87.21.221:8000/jzyd_yyds/soc into V0.0.6-iot

jiawuxian 1 рік тому
батько
коміт
430a7d33be

+ 8 - 5
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteFileService.java

@@ -11,10 +11,7 @@ import com.xunmei.system.api.factory.RemoteFileFallbackFactory;
 import feign.Response;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestPart;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.Map;
@@ -47,10 +44,13 @@ public interface RemoteFileService {
 
     @PostMapping(value = "/file/generateResumptionPdf")
     R<String> generateResumptionPdf(@RequestBody Map<String, Object> data);
+
     @PostMapping(value = "/file/generateSafeCheckPdf")
     R<String> generateSafeCheckPdf(@RequestBody SafeCheckTaskRegisterBookVo data);
+
     @PostMapping(value = "/file/generateAccessPdf")
     R<String> generateAccessPdf(@RequestBody AccessPdf data);
+
     /**
      * 生成预案演练登记簿
      *
@@ -87,7 +87,7 @@ public interface RemoteFileService {
     @GetMapping(value = "/file/getStaticPathPrefix")
     R<String> getStaticPathPrefix();
 
-    @PostMapping(value = "/file/registerBookCompressPdf",consumes = MediaType.APPLICATION_JSON_VALUE)
+    @PostMapping(value = "/file/registerBookCompressPdf", consumes = MediaType.APPLICATION_JSON_VALUE)
     Response registerBookCompressPdf(@RequestBody ExportPdfDto exportDto);
 
     @PostMapping(value = "/file/cutFileCompress")
@@ -95,4 +95,7 @@ public interface RemoteFileService {
 
     @GetMapping(value = "/file/deletedZipFile")
     void deletedZipFile();
+
+    @PostMapping(value = "/file/readFile")
+    Response readFile(@RequestBody Map<String, String> data);
 }

+ 5 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteFileFallbackFactory.java

@@ -91,6 +91,11 @@ public class RemoteFileFallbackFactory implements FallbackFactory<RemoteFileServ
             public R<String> generateOutInPdf(Map<String, Object> data) {
                 return null;
             }
+
+            @Override
+            public Response readFile(Map<String, String> data) {
+                throw new RuntimeException("读取文件超时,请稍后重试!");
+            }
         };
     }
 }

+ 15 - 6
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/controller/SysFileController.java

@@ -59,8 +59,8 @@ public class SysFileController {
     @PostMapping("/upload")
     public R<SysFile> upload(MultipartFile file) {
         try {
-            if(Objects.requireNonNull(file.getOriginalFilename()).length() > 54){
-               return R.fail("上传文件名长度不能大于50!");
+            if (Objects.requireNonNull(file.getOriginalFilename()).length() > 54) {
+                return R.fail("上传文件名长度不能大于50!");
             }
 
             // 上传并返回访问地址
@@ -82,7 +82,7 @@ public class SysFileController {
     @PostMapping("/uploadFile")
     public R<SysFile> uploadFile(MultipartFile file, String busType) {
         try {
-            if(Objects.requireNonNull(file.getOriginalFilename()).length() > 54){
+            if (Objects.requireNonNull(file.getOriginalFilename()).length() > 54) {
                 return R.fail("上传文件名长度不能大于50!");
             }
             // 上传并返回访问地址
@@ -150,24 +150,28 @@ public class SysFileController {
         return R.ok(sysFileService.generateEduTrainingPdf(data));
 
     }
+
     @ApiOperation(value = "生成履职pdf")
     @PostMapping(value = "/generateResumptionPdf")
     R<String> generateResumptionPdf(@RequestBody Map<String, Object> data) throws Exception {
         return R.ok(sysFileService.generateResumptionPdf(data));
 
     }
+
     @ApiOperation(value = "生成安全检查pdf")
     @PostMapping(value = "/generateSafeCheckPdf")
     R<String> generateSafeCheckPdf(@RequestBody SafeCheckTaskRegisterBookVo data) throws Exception {
         return R.ok(sysFileService.generateSafeCheckPdf(data));
 
     }
+
     @ApiOperation(value = "生成监控调阅pdf")
     @PostMapping(value = "/generateAccessPdf")
     R<String> generateAccessPdf(@RequestBody AccessPdf data) throws Exception {
         return R.ok(sysFileService.generateAccessPdf(data));
 
     }
+
     @ApiOperation(value = "预案演练pdf")
     @PostMapping(value = "/generateDrillPdf")
     R<String> generateDrillPdf(@RequestBody Map<String, Object> data) throws Exception {
@@ -202,16 +206,21 @@ public class SysFileController {
 
     @PostMapping(value = "/registerBookCompressPdf")
     void registerBookCompressPdf(@RequestBody ExportPdfDto exportDto, HttpServletResponse response) throws IOException {
-        sysFileService.registerBookCompressPdf(exportDto,response);
+        sysFileService.registerBookCompressPdf(exportDto, response);
     }
 
     @PostMapping(value = "/cutFileCompress")
-    void cutFileCompress(@RequestBody CoreRegisterBookPdfExportDto exportDto){
+    void cutFileCompress(@RequestBody CoreRegisterBookPdfExportDto exportDto) {
         sysFileService.cutFileCompress(exportDto);
     }
 
     @GetMapping(value = "/deletedZipFile")
-    void deletedZipFile(){
+    void deletedZipFile() {
         sysFileService.deletedZipFile();
     }
+
+    @PostMapping(value = "/readFile")
+    void readFile(@RequestBody Map<String, String> data, HttpServletResponse response) throws IOException {
+        sysFileService.readFile(data.get("path"), response);
+    }
 }

+ 2 - 0
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/service/ISysFileService.java

@@ -77,4 +77,6 @@ public interface ISysFileService
     void deletedZipFile();
 
     String generateOutInPdf(Map<String, Object> data)throws Exception;
+
+    void readFile(String path,HttpServletResponse response) throws IOException;
 }

+ 32 - 4
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/service/LocalSysFileServiceImpl.java

@@ -1,14 +1,16 @@
 package com.xunmei.file.service;
 
 import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.lowagie.text.*;
-import com.lowagie.text.pdf.*;
+import com.lowagie.text.pdf.BaseFont;
+import com.lowagie.text.pdf.PdfPCell;
+import com.lowagie.text.pdf.PdfPTable;
+import com.lowagie.text.pdf.PdfWriter;
 import com.xunmei.common.core.constant.CacheConstants;
 import com.xunmei.common.core.domain.IdName;
 import com.xunmei.common.core.domain.registerbook.dto.CoreRegisterBookPdfExportDto;
@@ -22,7 +24,6 @@ import com.xunmei.common.core.utils.uuid.UUID;
 import com.xunmei.common.redis.utils.RedisUtils;
 import com.xunmei.file.utils.FileDownUtils;
 import com.xunmei.file.utils.FileUploadUtils;
-import com.xunmei.file.utils.PdfPageHelperEvent;
 import com.xunmei.file.utils.PdfUtil;
 import com.xunmei.file.vo.FileBase64Vo;
 import com.xunmei.file.vo.ItextPdfTableVo;
@@ -34,7 +35,6 @@ import io.netty.util.internal.StringUtil;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.text.StringEscapeUtils;
-import org.apache.poi.ss.usermodel.Footer;
 import org.apache.tools.zip.ZipEntry;
 import org.apache.tools.zip.ZipOutputStream;
 import org.slf4j.Logger;
@@ -52,6 +52,8 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.*;
 import java.math.BigDecimal;
+import java.net.HttpURLConnection;
+import java.net.URL;
 import java.net.URLDecoder;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
@@ -937,4 +939,30 @@ public class LocalSysFileServiceImpl implements ISysFileService {
                 .filter(file -> file.getName().endsWith(".zip"))
                 .forEach(FileUtil::del);
     }
+
+    @Override
+    public void readFile(String path, HttpServletResponse response) throws IOException {
+        if (ObjectUtil.isEmpty(path)) {
+            throw new RuntimeException("文件地址无效");
+        }
+        // 对网络地址进行解码
+        path = URLDecoder.decode(path, "UTF-8");
+        // 读取图片文件
+        URL url = new URL(path);
+        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+        conn.setRequestMethod("GET");
+        conn.setConnectTimeout(5 * 1000);
+        InputStream stream = conn.getInputStream();
+        try (BufferedInputStream bis = new BufferedInputStream(stream)) {
+            // 设置响应类型
+            response.setContentType("image/*");
+            response.setHeader("Content-Length", String.valueOf(stream.available()));
+            // 将文件流发送给前端
+            byte[] buffer = new byte[1024];
+            int bytesRead;
+            while ((bytesRead = bis.read(buffer)) != -1) {
+                response.getOutputStream().write(buffer, 0, bytesRead);
+            }
+        }
+    }
 }

+ 38 - 7
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/controller/DataController.java

@@ -2,9 +2,12 @@ package com.xunmei.mediator.api.controller;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
-import com.xunmei.common.core.web.domain.AjaxResult;
-import com.xunmei.mediator.api.service.*;
+import com.xunmei.mediator.api.service.IIotDeviceService;
+import com.xunmei.mediator.api.service.IIotDvrChannelService;
+import com.xunmei.mediator.api.service.IotDeviceDetectionService;
+import com.xunmei.mediator.api.service.IotSensorService;
 import com.xunmei.system.api.RemoteDeviceService;
+import com.xunmei.system.api.RemoteFileService;
 import com.xunmei.system.api.dto.DataPageDto;
 import com.xunmei.system.api.dto.SensorDto;
 import com.xunmei.system.api.dto.SensorStatusDto;
@@ -12,14 +15,19 @@ import com.xunmei.system.api.dto.device.DeviceDto;
 import com.xunmei.system.api.dto.protection.NetworkDeviceDetectionEditDto;
 import com.xunmei.system.api.dto.protection.ReceiveErrorDto;
 import com.xunmei.system.api.util.LogUtils;
+import feign.Response;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author jingyuanchao
@@ -109,7 +117,6 @@ public class DataController {
     }
 
 
-
     @ApiOperation(value = "传感器通用设备信息同步", notes = "直连主机传感器,每个完整的包为一个机构机构数据,非所有机构数据")
     @PostMapping({"/api/data/sensorCommonList"})
     public ReceiveErrorDto sensor(String msgId, @RequestBody DataPageDto<SensorDto> sensors) {
@@ -168,4 +175,28 @@ public class DataController {
 
     }
 
+    @Resource
+    private RemoteFileService fileService;
+
+    @ApiOperation("传感器通用设备信息同步")
+    @GetMapping({"/api/test"})
+    public void test(@RequestBody Map<String, String> data, HttpServletResponse response) throws IOException {
+        Response result = fileService.readFile(data);
+        Response.Body body = result.body();
+        InputStream inputStream = body.asInputStream();
+        System.out.println(inputStream.available());
+        BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
+        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(response.getOutputStream());
+        int length = 0;
+        byte[] temp = new byte[1024 * 10];
+        while ((length = bufferedInputStream.read(temp)) != -1) {
+            bufferedOutputStream.write(temp, 0, length);
+        }
+        bufferedOutputStream.flush();
+        bufferedOutputStream.close();
+        bufferedInputStream.close();
+        inputStream.close();
+
+
+    }
 }

+ 25 - 63
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/EquipmentSyncService.java

@@ -1,6 +1,7 @@
 package com.xunmei.mediator.api.service;
 
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.iot.domain.IotDevice;
 import com.xunmei.common.core.domain.mediator.domain.*;
@@ -12,6 +13,7 @@ import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.domain.north.NorthError;
 import com.xunmei.system.api.dto.device.DeviceDto;
 import com.xunmei.system.api.enums.DataType;
+import com.xunmei.system.api.enums.DeviceOnlineStatus;
 import com.xunmei.system.api.enums.DeviceType;
 import com.xunmei.system.api.enums.ProductTypeEnum;
 import lombok.extern.slf4j.Slf4j;
@@ -73,31 +75,17 @@ public class EquipmentSyncService {
         this.stringRedisTemplate.opsForValue().set(key, key);
         this.stringRedisTemplate.expire(key, 10, TimeUnit.MINUTES);
 
-        /**
-         * 获取所有传递过来的数据
-         */
-        /**
-         * 缓存机构数据,减少重复查询机构数据
-         */
-        Map<String, Map<String, Object>> orgs = new HashMap<>();
 
-        Map<String, List<IotDevice>> rel = analysisDeviceList(pages, orgs, msgId);
-        final List<IotDevice> olds = rel.get("olds");
-        final List<IotDevice> list = rel.get("list");
-        final List<Long> orgIdList = rel.values().stream().flatMap(Collection::stream).map(IotDevice::getOrgId).distinct().collect(Collectors.toList());
+        Map<String, Map<String, Object>> orgMap = new HashMap<>();
+        List<IotDevice> rel = analysisDeviceList(pages, orgMap, msgId);
+        final List<IotDevice> list = rel.stream().filter(device -> ObjectUtil.isNull(device.getId())).collect(Collectors.toList());
+        final List<IotDevice> olds = rel.stream().filter(device -> ObjectUtil.isNotNull(device.getId())).collect(Collectors.toList());
+        final List<Long> orgIdList = rel.stream().map(IotDevice::getOrgId).distinct().collect(Collectors.toList());
         //第一步逻辑删除数据,逻辑删除
         this.iIotDeviceService.updateDeviceDeleted(orgIdList);
-
-
         //第二步查询数据,如果存在则更新,如果不存在,则新增
-        //批量更新
-        if (olds.size() > 0) {
-            this.iIotDeviceService.batchUpdateDevice(olds);
-        }
-        //批量插入
-        if (list.size() > 0) {
-            this.iIotDeviceService.batchInsertDevice(list);
-        }
+        this.iIotDeviceService.batchUpdateDevice(olds);
+        this.iIotDeviceService.batchInsertDevice(list);
         this.northStatisticsSyncService.saveOrUpdateBaseCountByDataType(DataType.deviceCount.getIndex(), list.size() + olds.size(), true);
     }
 
@@ -107,16 +95,13 @@ public class EquipmentSyncService {
      * @param
      * @return
      */
-    private Map<String, List<IotDevice>> analysisDeviceList(List<DeviceDto> dtos, Map<String, Map<String, Object>> orgs, String msgId) {
-        Map<String, List<IotDevice>> rel = new HashMap<>();
-
+    private List<IotDevice> analysisDeviceList(List<DeviceDto> dtoList, Map<String, Map<String, Object>> orgMap, String msgId) {
         /**
          * 验证数据正确性,有错误的数据,存储到错误数据中
          */
-        Iterator var2 = dtos.iterator();
+        Iterator var2 = dtoList.iterator();
         List<NorthError> errors = new ArrayList<>();
         List<IotDevice> list = new ArrayList<>();
-        List<IotDevice> olds = new ArrayList<>();
         DeviceDto datum = null;
         NorthError error = null;
 
@@ -157,15 +142,14 @@ public class EquipmentSyncService {
                 errors.add(error);
                 continue;
             }
-            Map<String, Object> obj = orgs.get(datum.getOrganizationGuid());
+            Map<String, Object> obj = orgMap.get(datum.getOrganizationGuid());
             if (obj == null) {
                 SysOrg theOrg = orgService.findByCode(datum.getOrganizationGuid(), SecurityConstants.INNER);
                 Map<String, Object> org = new HashMap<>();
                 if (theOrg == null) {
                     org.put("isOk", "N");
                     org.put("msg", "organizationGuid:" + datum.getOrganizationGuid() + "不正确");
-                    error = new NorthError(msgId, "/data/equipmentList"
-                            , datum, "orgGUID:" + datum.getOrganizationGuid() + "不正确");
+                    error = new NorthError(msgId, "/data/equipmentList", datum, "orgGUID:" + datum.getOrganizationGuid() + "不正确");
                     errors.add(error);
                     continue;
                 } else {
@@ -173,13 +157,12 @@ public class EquipmentSyncService {
                     org.put("org", theOrg);
                     datum.setOrg(theOrg);
                 }
-                orgs.put(datum.getOrganizationGuid(), org);
+                orgMap.put(datum.getOrganizationGuid(), org);
             } else {
                 String isOk = obj.get("isOk").toString();
                 if (isOk.equals("N")) {
                     String msg = obj.get("msg").toString();
-                    error = new NorthError(msgId, "/data/equipmentList"
-                            , datum, msg);
+                    error = new NorthError(msgId, "/data/equipmentList", datum, msg);
                     errors.add(error);
                     continue;
                 }
@@ -188,39 +171,20 @@ public class EquipmentSyncService {
                     datum.setOrg(theOrg);
                 }
             }
-            Map<String, Object> map = resolveDevice(datum);
-
-
-            IotDevice device = (IotDevice) map.get("device");
-            Integer isOld = (Integer) map.get("isOld");
-            if (isOld == 1) {
-                olds.add(device);
-            } else {
-                list.add(device);
-            }
+            IotDevice device = resolveDevice(datum);
+            list.add(device);
         }
         northErrorService.saveErrorData(errors);
-        rel.put("olds", olds);
-        rel.put("list", list);
-
-        return rel;
+        return list;
     }
 
 
-    /**
-     * 解析生成设备数据
-     *
-     * @param datum
-     * @return
-     */
-    private Map<String, Object> resolveDevice(DeviceDto datum) {
-        Map<String, Object> map = new HashMap<>();
-        IotDevice device = new IotDevice();
-        map.put("isOld", 0);
-        IotDevice device1 = iIotDeviceService.findByHostCode(datum.getEquipmentCode(), datum.getOrg().getId());
-        if (device1 != null) {
-            map.put("isOld", 1);
-            device = device1;
+    private IotDevice resolveDevice(DeviceDto datum) {
+        IotDevice device = iIotDeviceService.findByHostCode(datum.getEquipmentCode(), datum.getOrg().getId());
+        if (device == null) {
+            device = new IotDevice();
+            device.setCreateTime(LocalDateTime.now());
+            device.setNetStatus(DeviceOnlineStatus.UNKNOW.ordinal());
         }
         device.setEquipmentCode(datum.getEquipmentCode());
         device.setEquipmentName(datum.getEquipmentName());
@@ -259,10 +223,8 @@ public class EquipmentSyncService {
             default:
                 break;
         }
-        device.setCreateTime(LocalDateTime.now());
         device.setUpdateTime(LocalDateTime.now());
-        map.put("device", device);
-        return map;
+        return device;
     }
 
 

+ 7 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotDeviceServiceImpl.java

@@ -78,11 +78,18 @@ public class IotDeviceServiceImpl extends ServiceImpl<IotDeviceMapper, IotDevice
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void batchUpdateDevice(List<IotDevice> olds) {
+        if (ObjectUtil.isEmpty(olds)) {
+            return;
+        }
         updateBatchById(olds);
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void batchInsertDevice(List<IotDevice> list) {
+        if (ObjectUtil.isEmpty(list)) {
+            return;
+        }
         saveBatch(list);
     }