瀏覽代碼

企业生产报告

Memory_LG 1 年之前
父節點
當前提交
5e761a8443
共有 12 個文件被更改,包括 230 次插入16 次删除
  1. 2 0
      src/main/java/com/sooka/sponest/data/SookaDataApplication.java
  2. 16 0
      src/main/java/com/sooka/sponest/data/housingconstruction/domain/BO/SteelcylinderBO.java
  3. 22 0
      src/main/java/com/sooka/sponest/data/housingconstruction/handler/SendEvent.java
  4. 137 0
      src/main/java/com/sooka/sponest/data/housingconstruction/handler/TaskHandler.java
  5. 1 0
      src/main/java/com/sooka/sponest/data/housingconstruction/mapper/CenterdataTHousingconstructionEnterpriseproductionreportMapper.java
  6. 3 0
      src/main/java/com/sooka/sponest/data/housingconstruction/mapper/CenterdataTHousingconstructionSteelcylinderMapper.java
  7. 2 0
      src/main/java/com/sooka/sponest/data/housingconstruction/service/ICenterdataTHousingconstructionEnterpriseproductionreportService.java
  8. 3 0
      src/main/java/com/sooka/sponest/data/housingconstruction/service/ICenterdataTHousingconstructionSteelcylinderService.java
  9. 1 0
      src/main/java/com/sooka/sponest/data/housingconstruction/service/impl/CenterdataTHousingconstructionEnterpriseproductionreportServiceImpl.java
  10. 6 0
      src/main/java/com/sooka/sponest/data/housingconstruction/service/impl/CenterdataTHousingconstructionSteelcylinderServiceImpl.java
  11. 11 16
      src/main/java/com/sooka/sponest/data/housingconstruction/service/impl/CenterdataTHousingconstructionStoragetankLogServiceImpl.java
  12. 26 0
      src/main/resources/mapper/housingconstruction/CenterdataTHousingconstructionSteelcylinderMapper.xml

+ 2 - 0
src/main/java/com/sooka/sponest/data/SookaDataApplication.java

@@ -5,11 +5,13 @@ import com.ruoyi.common.security.annotation.EnableRyFeignClients;
 import com.ruoyi.common.swagger.annotation.EnableCustomSwagger2;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
 
 @EnableCustomConfig
 @EnableCustomSwagger2
 @EnableRyFeignClients
 @SpringBootApplication(scanBasePackages = {"com.sooka", "com.ruoyi"})
+@EnableScheduling
 public class SookaDataApplication {
 
     public static void main(String[] args) {

+ 16 - 0
src/main/java/com/sooka/sponest/data/housingconstruction/domain/BO/SteelcylinderBO.java

@@ -0,0 +1,16 @@
+package com.sooka.sponest.data.housingconstruction.domain.BO;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class SteelcylinderBO {
+    private String enterpriseId;
+    private String enterpriseName;
+    private String name;
+    private String threshold;
+    private String gasAddress;
+    private String longitude;
+    private String latitude;
+}

+ 22 - 0
src/main/java/com/sooka/sponest/data/housingconstruction/handler/SendEvent.java

@@ -0,0 +1,22 @@
+package com.sooka.sponest.data.housingconstruction.handler;
+
+import com.sooka.sponest.data.housingconstruction.domain.eventEntity.SensorEventVo;
+import com.sooka.sponest.data.housingconstruction.feignClient.service.RemoteHousingconstructionEventService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class SendEvent {
+
+    @Autowired
+    private RemoteHousingconstructionEventService eventService;
+
+    public void sendEvent(String template, String eventName, String threshold, String current, SensorEventVo eventVo, String eventCode){
+        String format = String.format(template, eventName, threshold, current);
+        System.out.println("format ====> " + format);
+        eventVo.setEventTypeXl(eventCode);
+        eventVo.setEventDescription(format);
+        //发送事件
+        eventService.sendEvent(eventVo);
+    }
+}

+ 137 - 0
src/main/java/com/sooka/sponest/data/housingconstruction/handler/TaskHandler.java

@@ -0,0 +1,137 @@
+package com.sooka.sponest.data.housingconstruction.handler;
+
+import com.ruoyi.common.security.utils.DictUtils;
+import com.ruoyi.system.api.domain.SysDictData;
+import com.sooka.sponest.data.housingconstruction.domain.BO.SteelcylinderBO;
+import com.sooka.sponest.data.housingconstruction.domain.CenterdataTHousingconstructionEnterprise;
+import com.sooka.sponest.data.housingconstruction.domain.CenterdataTHousingconstructionEnterpriseproductionreport;
+import com.sooka.sponest.data.housingconstruction.domain.CenterdataTHousingconstructionSteelcylinder;
+import com.sooka.sponest.data.housingconstruction.domain.eventEntity.SensorEventVo;
+import com.sooka.sponest.data.housingconstruction.domain.eventEntity.StaticEntity;
+import com.sooka.sponest.data.housingconstruction.service.ICenterdataTHousingconstructionEnterpriseService;
+import com.sooka.sponest.data.housingconstruction.service.ICenterdataTHousingconstructionEnterpriseproductionreportService;
+import com.sooka.sponest.data.housingconstruction.service.ICenterdataTHousingconstructionSteelcylinderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.temporal.ChronoUnit;
+import java.util.Date;
+import java.util.List;
+
+@RestController
+@RequestMapping("/taskHandler")
+public class TaskHandler {
+    @Autowired
+    private ICenterdataTHousingconstructionEnterpriseproductionreportService reportService;
+
+    @Autowired
+    private ICenterdataTHousingconstructionEnterpriseService enterpriseService;
+
+    @Autowired
+    private ICenterdataTHousingconstructionSteelcylinderService steelcylinderService;
+
+    @Autowired
+    private SendEvent sendEvent;
+
+    /**
+     * 企业生产报告运行预警
+     */
+    @GetMapping("/enterpriseProductionReportTask")
+    // 每天午夜 12 点执行
+//    @Scheduled(cron = "0 0 0 * * ?")
+    public void enterpriseProductionReportTask() {
+        //字典列表
+        List<SysDictData> reportCacheList = DictUtils.getDictCache("enterprise_production_report");
+
+        //企业列表
+        List<CenterdataTHousingconstructionEnterprise> enterpriseList = enterpriseService.selectCenterdataTHousingconstructionEnterpriseList(new CenterdataTHousingconstructionEnterprise());
+
+        //获取每个企业每种报告的最新记录
+        List<CenterdataTHousingconstructionEnterpriseproductionreport> dataList = reportService.selectCenterdataTHousingconstructionEnterpriseproductionreportList(new CenterdataTHousingconstructionEnterpriseproductionreport());
+
+        //获取报告类型
+        reportCacheList.forEach(sysDictData -> {
+            //获取企业信息
+            enterpriseList.forEach(enterprise -> {
+                //设置事件标识, 当标识为true时, 发送事件
+                boolean flag = true;
+                for (CenterdataTHousingconstructionEnterpriseproductionreport data : dataList) {
+                    if (sysDictData.getDictValue().equals(data.getReportType()) && enterprise.getId().equals(data.getEnterpriseId())) {
+                        //获取数据的上传时间
+                        Date createTime = data.getCreateTime();
+                        // 将 Date 转换为 LocalDateTime
+                        LocalDateTime localDateTime = convertToLocalDateTime(createTime);
+                        // 在 LocalDateTime 上加上 30 天
+                        LocalDateTime increaseBy30Days = localDateTime.plus(30, ChronoUnit.DAYS);
+                        // 获取当前日期和时间
+                        LocalDateTime now = LocalDateTime.now();
+                        // 比较日期
+                        if (increaseBy30Days.isAfter(now)) {
+                            flag = false;
+                        }
+                        break;
+                    }
+                }
+                //发送事件
+                if (flag) {
+                    //创建事件实体类
+                    SensorEventVo sensorEventVo = new SensorEventVo(
+                            enterprise.getLongitude(),
+                            enterprise.getLatitude(),
+                            enterprise.getId(),
+                            enterprise.getEnterpriseName(),
+                            new Date(),
+                            enterprise.getRegisteredAddress()
+                    );
+                    //设置基础模板
+                    StringBuilder template = new StringBuilder();
+                    template.append(enterprise.getEnterpriseName()).append("的").append(sysDictData.getDictLabel()).append("发生%s,").append("超过30天未上传, 请及时处理!%s%s");
+                    //发送事件
+                    sendEvent.sendEvent(template.toString(), StaticEntity.ENTERPRISE_NAME, "", "", sensorEventVo, StaticEntity.ENTERPRISE_CODE);
+                }
+            });
+        });
+    }
+
+    // 将 Date 转换为 LocalDateTime
+    public static LocalDateTime convertToLocalDateTime(Date date) {
+        return date.toInstant()
+                .atZone(ZoneId.systemDefault())
+                .toLocalDateTime();
+    }
+
+    /**
+     * 1207	气瓶存疑预警
+     */
+    // 每天午夜 12 点执行
+//    @Scheduled(cron = "0 0 0 * * ?")
+    @GetMapping("/performDailyTask")
+    public void performDailyTask() {
+        //获取告警数据
+        List<SteelcylinderBO> datalist = steelcylinderService.selectTaskList(new CenterdataTHousingconstructionSteelcylinder());
+        //循环处理发送事件
+        datalist.forEach(data -> {
+            //设置基础模板
+            StringBuilder template = new StringBuilder();
+            template.append(data.getEnterpriseName()).append("的").append(data.getName()).append("钢罐发生%s,").append("超过%s天未流转, 请及时处理!%s");
+            //创建事件实体类
+            SensorEventVo sensorEventVo = new SensorEventVo(
+                    data.getLongitude(),//实名用户经纬度
+                    data.getLatitude(),
+                    data.getEnterpriseId(),
+                    data.getEnterpriseName(),
+                    new Date(),
+                    data.getGasAddress()//实名用户地址
+            );
+            //发送事件
+            sendEvent.sendEvent(template.toString(), StaticEntity.INSPECT_NAME, data.getThreshold(), "", sensorEventVo, StaticEntity.INSPECT_CODE);
+        });
+
+    }
+
+}

+ 1 - 0
src/main/java/com/sooka/sponest/data/housingconstruction/mapper/CenterdataTHousingconstructionEnterpriseproductionreportMapper.java

@@ -3,6 +3,7 @@ package com.sooka.sponest.data.housingconstruction.mapper;
 import com.sooka.sponest.data.housingconstruction.domain.CenterdataTHousingconstructionEnterpriseproductionreport;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 企业生产报告Mapper接口

+ 3 - 0
src/main/java/com/sooka/sponest/data/housingconstruction/mapper/CenterdataTHousingconstructionSteelcylinderMapper.java

@@ -1,5 +1,6 @@
 package com.sooka.sponest.data.housingconstruction.mapper;
 
+import com.sooka.sponest.data.housingconstruction.domain.BO.SteelcylinderBO;
 import com.sooka.sponest.data.housingconstruction.domain.CenterdataTHousingconstructionSteelcylinder;
 
 import java.util.List;
@@ -58,4 +59,6 @@ public interface CenterdataTHousingconstructionSteelcylinderMapper {
      * @return 结果
      */
     public int deleteCenterdataTHousingconstructionSteelcylinderByIds(String[] ids);
+
+    List<SteelcylinderBO> selectTaskList(CenterdataTHousingconstructionSteelcylinder centerdataTHousingconstructionSteelcylinder);
 }

+ 2 - 0
src/main/java/com/sooka/sponest/data/housingconstruction/service/ICenterdataTHousingconstructionEnterpriseproductionreportService.java

@@ -3,6 +3,7 @@ package com.sooka.sponest.data.housingconstruction.service;
 import com.sooka.sponest.data.housingconstruction.domain.CenterdataTHousingconstructionEnterpriseproductionreport;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 企业生产报告Service接口
@@ -58,4 +59,5 @@ public interface ICenterdataTHousingconstructionEnterpriseproductionreportServic
      * @return 结果
      */
     public int deleteCenterdataTHousingconstructionEnterpriseproductionreportById(String id);
+
 }

+ 3 - 0
src/main/java/com/sooka/sponest/data/housingconstruction/service/ICenterdataTHousingconstructionSteelcylinderService.java

@@ -1,5 +1,6 @@
 package com.sooka.sponest.data.housingconstruction.service;
 
+import com.sooka.sponest.data.housingconstruction.domain.BO.SteelcylinderBO;
 import com.sooka.sponest.data.housingconstruction.domain.CenterdataTHousingconstructionSteelcylinder;
 
 import java.util.List;
@@ -58,4 +59,6 @@ public interface ICenterdataTHousingconstructionSteelcylinderService {
      * @return 结果
      */
     public int deleteCenterdataTHousingconstructionSteelcylinderById(String id);
+
+    List<SteelcylinderBO> selectTaskList(CenterdataTHousingconstructionSteelcylinder centerdataTHousingconstructionSteelcylinder);
 }

+ 1 - 0
src/main/java/com/sooka/sponest/data/housingconstruction/service/impl/CenterdataTHousingconstructionEnterpriseproductionreportServiceImpl.java

@@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Map;
 
 import static com.sooka.sponest.data.utils.DataConstants.DOWNLOAD_URL;
 

+ 6 - 0
src/main/java/com/sooka/sponest/data/housingconstruction/service/impl/CenterdataTHousingconstructionSteelcylinderServiceImpl.java

@@ -5,6 +5,7 @@ import com.ruoyi.common.core.utils.uuid.IdUtils;
 import com.ruoyi.common.datascope.annotation.DataScopeMutiDept;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.sooka.sponest.data.base.service.impl.BaseServiceImpl;
+import com.sooka.sponest.data.housingconstruction.domain.BO.SteelcylinderBO;
 import com.sooka.sponest.data.housingconstruction.domain.CenterdataTHousingconstructionSteelcylinder;
 import com.sooka.sponest.data.housingconstruction.domain.CenterdataTHousingconstructionSteelcylinderLog;
 import com.sooka.sponest.data.housingconstruction.mapper.CenterdataTHousingconstructionSteelcylinderLogMapper;
@@ -121,4 +122,9 @@ public class CenterdataTHousingconstructionSteelcylinderServiceImpl extends Base
     public int deleteCenterdataTHousingconstructionSteelcylinderById(String id) {
         return centerdataTHousingconstructionSteelcylinderMapper.deleteCenterdataTHousingconstructionSteelcylinderById(id);
     }
+
+    @Override
+    public List<SteelcylinderBO> selectTaskList(CenterdataTHousingconstructionSteelcylinder centerdataTHousingconstructionSteelcylinder) {
+        return centerdataTHousingconstructionSteelcylinderMapper.selectTaskList(centerdataTHousingconstructionSteelcylinder);
+    }
 }

+ 11 - 16
src/main/java/com/sooka/sponest/data/housingconstruction/service/impl/CenterdataTHousingconstructionStoragetankLogServiceImpl.java

@@ -10,6 +10,7 @@ import com.sooka.sponest.data.housingconstruction.domain.CenterdataTHousingconst
 import com.sooka.sponest.data.housingconstruction.domain.eventEntity.SensorEventVo;
 import com.sooka.sponest.data.housingconstruction.domain.eventEntity.StaticEntity;
 import com.sooka.sponest.data.housingconstruction.feignClient.service.RemoteHousingconstructionEventService;
+import com.sooka.sponest.data.housingconstruction.handler.SendEvent;
 import com.sooka.sponest.data.housingconstruction.mapper.CenterdataTHousingconstructionStoragetankLogMapper;
 import com.sooka.sponest.data.housingconstruction.mapper.CenterdataTHousingconstructionStoragetankMapper;
 import com.sooka.sponest.data.housingconstruction.service.ICenterdataTHousingconstructionStoragetankLogService;
@@ -34,7 +35,9 @@ public class CenterdataTHousingconstructionStoragetankLogServiceImpl extends Bas
     private CenterdataTHousingconstructionStoragetankMapper storagetankMapper;
 
     @Autowired
-    private RemoteHousingconstructionEventService eventService;
+    private SendEvent sendEvent;
+
+
 
     /**
      * 查询储罐存储数据日志
@@ -91,7 +94,8 @@ public class CenterdataTHousingconstructionStoragetankLogServiceImpl extends Bas
 
         //设置基础模板
         StringBuilder template = new StringBuilder();
-        template.append(enterpriseName).append("的").append(storagetankName).append("发生");
+        template.append(enterpriseName).append("的").append(storagetankName).append("发生").append("%s, 设定阈值:%s, 当前值:%s, 请及时处理!");
+
 
         //创建事件实体类
         SensorEventVo sensorEventVo = new SensorEventVo(
@@ -107,35 +111,35 @@ public class CenterdataTHousingconstructionStoragetankLogServiceImpl extends Bas
         if(storagetankLog.getLevel() >= MapUtils.getInteger(storagetank, "levelCeiling")){
             //当前液位高于上限或低于下限, 触发时间告警
             securityState.append("1").append(",");
-            sendEvent(template.toString(), StaticEntity.LEVEL_CEILING_NAME, MapUtils.getString(storagetank, "levelCeiling") + units.get(0), storagetankLog.getLevel() + units.get(0), sensorEventVo, StaticEntity.LEVEL_CEILING_CODE);
+            sendEvent.sendEvent(template.toString(), StaticEntity.LEVEL_CEILING_NAME, MapUtils.getString(storagetank, "levelCeiling") + units.get(0), storagetankLog.getLevel() + units.get(0), sensorEventVo, StaticEntity.LEVEL_CEILING_CODE);
         }
 
         //液位下限
         if(storagetankLog.getLevel() <= MapUtils.getInteger(storagetank, "levelFloor")){
             //当前液位高于上限或低于下限, 触发时间告警
             securityState.append("1").append(",");
-            sendEvent(template.toString(), StaticEntity.LEVEL_FLOOR_NAME, MapUtils.getString(storagetank, "levelFloor") + units.get(0), storagetankLog.getLevel() + units.get(0), sensorEventVo, StaticEntity.LEVEL_FLOOR_CODE);
+            sendEvent.sendEvent(template.toString(), StaticEntity.LEVEL_FLOOR_NAME, MapUtils.getString(storagetank, "levelFloor") + units.get(0), storagetankLog.getLevel() + units.get(0), sensorEventVo, StaticEntity.LEVEL_FLOOR_CODE);
         }
 
         //温度
         if(storagetankLog.getHeat() >= MapUtils.getInteger(storagetank, "heat")){
             //当前温度高于设定温度阈值
             securityState.append("2").append(",");
-            sendEvent(template.toString(), StaticEntity.HEAT_NAME, MapUtils.getString(storagetank, "heat") + units.get(1), storagetankLog.getHeat() + units.get(1), sensorEventVo, StaticEntity.HEAT_CODE);
+            sendEvent.sendEvent(template.toString(), StaticEntity.HEAT_NAME, MapUtils.getString(storagetank, "heat") + units.get(1), storagetankLog.getHeat() + units.get(1), sensorEventVo, StaticEntity.HEAT_CODE);
         }
 
         //内部气压
         if(storagetankLog.getPressure() >= MapUtils.getInteger(storagetank, "pressure")){
             //当前内部气压高于设定阈值
             securityState.append("3").append(",");
-            sendEvent(template.toString(), StaticEntity.PRESSURE_NAME, MapUtils.getString(storagetank, "pressure") + units.get(2), storagetankLog.getPressure() + units.get(2), sensorEventVo, StaticEntity.PRESSURE_CODE);
+            sendEvent.sendEvent(template.toString(), StaticEntity.PRESSURE_NAME, MapUtils.getString(storagetank, "pressure") + units.get(2), storagetankLog.getPressure() + units.get(2), sensorEventVo, StaticEntity.PRESSURE_CODE);
         }
 
         //可燃气体
         if(storagetankLog.getGasLeak() >= MapUtils.getInteger(storagetank, "gasLeak")){
             //可燃性气体泄露值高于设定的阈值
             securityState.append("4").append(",");
-            sendEvent(template.toString(), StaticEntity.GAS_LEAK_NAME, MapUtils.getString(storagetank, "gasLeak") + units.get(3), storagetankLog.getGasLeak() + units.get(3), sensorEventVo, StaticEntity.GAS_LEAK_CODE);
+            sendEvent.sendEvent(template.toString(), StaticEntity.GAS_LEAK_NAME, MapUtils.getString(storagetank, "gasLeak") + units.get(3), storagetankLog.getGasLeak() + units.get(3), sensorEventVo, StaticEntity.GAS_LEAK_CODE);
         }
 
         // 确保 StringBuilder 不为空
@@ -147,15 +151,6 @@ public class CenterdataTHousingconstructionStoragetankLogServiceImpl extends Bas
         storagetankLog.setDeptName(MapUtils.getString(storagetank, "deptName"));
     }
 
-    private void sendEvent(String title, String eventName, String threshold, String current, SensorEventVo eventVo, String eventCode){
-        String template = "%s%s, 设定阈值:%s, 当前值:%s, 请及时处理!";
-        String format = String.format(template, title, eventName, threshold, current);
-        eventVo.setEventTypeXl(eventCode);
-        eventVo.setEventDescription(format);
-        //发送事件
-        eventService.sendEvent(eventVo);
-    }
-
     /**
      * 修改储罐存储数据日志
      *

+ 26 - 0
src/main/resources/mapper/housingconstruction/CenterdataTHousingconstructionSteelcylinderMapper.xml

@@ -177,4 +177,30 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{id}
         </foreach>
     </delete>
+
+    <resultMap id="steelcylinderEventResult" type="SteelcylinderBO">
+        <result property="enterpriseId" column="enterprise_id"/>
+        <result property="enterpriseName" column="enterprise_name"/>
+        <result property="name" column="name"/>
+        <result property="threshold" column="threshold"/>
+        <result property="gasAddress" column="gas_address"/>
+        <result property="longitude" column="longitude"/>
+        <result property="latitude" column="latitude"/>
+
+    </resultMap>
+    <select id="selectTaskList" parameterType="CenterdataTHousingconstructionSteelcylinder" resultMap="steelcylinderEventResult">
+        SELECT a.enterprise_id, a.enterprise_name, a.name, a.threshold, hr.gas_address, hr.longitude, hr.latitude
+        FROM centerdata_t_housingconstruction_steelcylinder AS a
+        JOIN (
+        SELECT steelcylinder_id, MAX(sign_time) AS latest_sign_time, join_house_id
+        FROM centerdata_t_housingconstruction_steelcylinder_log
+        GROUP BY steelcylinder_id
+        ) AS b_latest
+        ON a.id = b_latest.steelcylinder_id
+        JOIN centerdata_t_housingconstruction_steelcylinder_log AS b
+        ON b.steelcylinder_id = a.id AND b.sign_time = b_latest.latest_sign_time
+        LEFT JOIN centerdata_t_housingconstruction_realnameuser hr on b.join_house_id = hr.id
+        WHERE a.state = 'state_4'
+        AND DATE_ADD(b.sign_time, INTERVAL a.threshold DAY) &lt; NOW();
+    </select>
 </mapper>