From 5a4ce1d3f7d37d01c5a55cbf0006af6344bbe889 Mon Sep 17 00:00:00 2001
From: zhuo <2089219845@qq.com>
Date: 星期四, 06 三月 2025 17:16:03 +0800
Subject: [PATCH] 添加温度数采

---
 cnas-require/src/main/java/com/ruoyi/require/pojo/CollectTemperatureHumidity.java         |   66 +++++++++
 cnas-require/src/main/java/com/ruoyi/require/pojo/CollectLaboratory.java                  |   41 +++++
 ruoyi-admin/src/main/resources/application-prod.yml                                       |    5 
 ruoyi-admin/src/main/resources/application-druid.yml                                      |    5 
 cnas-require/src/main/java/com/ruoyi/require/mapper/CollectTemperatureHumidityMapper.java |   15 ++
 cnas-require/src/main/java/com/ruoyi/require/mapper/CollectLaboratoryMapper.java          |   15 ++
 cnas-require/src/main/java/com/ruoyi/require/task/FeTempHumDateSchedule.java              |  219 +++++++++++++++++++++++++++++++
 7 files changed, 366 insertions(+), 0 deletions(-)

diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/CollectLaboratoryMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/CollectLaboratoryMapper.java
new file mode 100644
index 0000000..9452260
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/CollectLaboratoryMapper.java
@@ -0,0 +1,15 @@
+package com.ruoyi.require.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.require.pojo.CollectLaboratory;
+
+/**
+ * 娓╂箍搴﹂噰闆嗗疄楠屽缁戝畾
+ *
+ * @author zhuo
+ * @since 2024-12-18
+ */
+public interface CollectLaboratoryMapper extends BaseMapper<CollectLaboratory> {
+
+}
+
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/CollectTemperatureHumidityMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/CollectTemperatureHumidityMapper.java
new file mode 100644
index 0000000..957f967
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/CollectTemperatureHumidityMapper.java
@@ -0,0 +1,15 @@
+package com.ruoyi.require.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.require.pojo.CollectTemperatureHumidity;
+
+/**
+ * 娓╂箍搴﹂噰闆嗕俊鎭�
+ *
+ * @author zhuo
+ * @since 2024-12-18
+ */
+public interface CollectTemperatureHumidityMapper extends BaseMapper<CollectTemperatureHumidity> {
+
+}
+
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/CollectLaboratory.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/CollectLaboratory.java
new file mode 100644
index 0000000..bb3e525
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/CollectLaboratory.java
@@ -0,0 +1,41 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 娓╂箍搴﹂噰闆嗗疄楠屽缁戝畾
+ *
+ * @author zhuo
+ * @since 2024-12-18
+ */
+@Data
+@TableName("collect_laboratory")
+public class CollectLaboratory {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("瀹為獙瀹�")
+    private String laboratory;
+
+    @ApiModelProperty("娓╂箍搴﹁澶囩紪鍙�")
+    private String deviceCode;
+
+    @ApiModelProperty("鏈�楂樻俯搴�")
+    private Double temperatureHighest;
+
+    @ApiModelProperty("鏈�浣庢俯搴�")
+    private Double temperatureLowest;
+
+    @ApiModelProperty("鏈�楂樻箍搴�")
+    private Double humidityHighest;
+
+    @ApiModelProperty("鏈�浣庢箍搴�")
+    private Double humidityLowest;
+
+}
+
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/CollectTemperatureHumidity.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/CollectTemperatureHumidity.java
new file mode 100644
index 0000000..95b2f27
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/CollectTemperatureHumidity.java
@@ -0,0 +1,66 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 娓╂箍搴﹂噰闆嗕俊鎭�
+ *
+ * @author zhuo
+ * @since 2024-12-18
+ */
+@Data
+@TableName("collect_temperature_humidity")
+public class CollectTemperatureHumidity {
+
+    @TableId(type = IdType.AUTO)
+    private Integer superviseId;
+    //7801娓╁害
+    private Double code7801Temperature;
+    //7801婀垮害
+    private Double code7801Humidity;
+    //7802娓╁害
+    private Double code7802Temperature;
+    //7802婀垮害
+    private Double code7802Humidity;
+    //7803娓╁害
+    private Double code7803Temperature;
+    //7803婀垮害
+    private Double code7803Humidity;
+    //7804娓╁害
+    private Double code7804Temperature;
+    //7804婀垮害
+    private Double code7804Humidity;
+    //7805娓╁害
+    private Double code7805Temperature;
+    //7805婀垮害
+    private Double code7805Humidity;
+    //7806娓╁害
+    private Double code7806Temperature;
+    //7806婀垮害
+    private Double code7806Humidity;
+    //7807娓╁害
+    private Double code7807Temperature;
+    //7807婀垮害
+    private Double code7807Humidity;
+    //7808娓╁害
+    private Double code7808Temperature;
+    //7808婀垮害
+    private Double code7808Humidity;
+    //7809娓╁害
+    private Double code7809Temperature;
+    //7809婀垮害
+    private Double code7809Humidity;
+    //7810娓╁害
+    private Double code7810Temperature;
+    //7810婀垮害
+    private Double code7810Humidity;
+    //閲囬泦鏃堕棿
+    private Date collectTime;
+
+}
+
diff --git a/cnas-require/src/main/java/com/ruoyi/require/task/FeTempHumDateSchedule.java b/cnas-require/src/main/java/com/ruoyi/require/task/FeTempHumDateSchedule.java
new file mode 100644
index 0000000..5f32fd2
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/task/FeTempHumDateSchedule.java
@@ -0,0 +1,219 @@
+package com.ruoyi.require.task;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.require.mapper.CollectLaboratoryMapper;
+import com.ruoyi.require.mapper.CollectTemperatureHumidityMapper;
+import com.ruoyi.require.mapper.FeTempHumDateMapper;
+import com.ruoyi.require.mapper.FeTempHumRecordMapper;
+import com.ruoyi.require.pojo.CollectLaboratory;
+import com.ruoyi.require.pojo.CollectTemperatureHumidity;
+import com.ruoyi.require.pojo.FeTempHumDate;
+import com.ruoyi.require.pojo.FeTempHumRecord;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Field;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Calendar;
+import java.util.List;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-19 鏄熸湡鍥� 8:33:56
+ * Description:
+ */
+@Component
+public class FeTempHumDateSchedule {
+
+    @Autowired
+    private CollectLaboratoryMapper collectLaboratoryMapper;
+    @Autowired
+    private FeTempHumDateMapper feTempHumDateMapper;
+    @Autowired
+    private CollectTemperatureHumidityMapper collectTemperatureHumidityMapper;
+    @Autowired
+    private FeTempHumRecordMapper feTempHumRecordMapper;
+
+    // 鑾峰彇褰撳墠骞翠唤鍜屾湀浠� 濡傦細2024-11
+    private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+    private String formattedDate = sdf.format(Calendar.getInstance().getTime());
+
+    /**
+     * 妫�鏌ュ疄楠屽鏄惁鏈変换鍔�
+     */
+    public synchronized void checkLaboratoriesSchedule() {
+        // 鑾峰彇褰撳墠骞翠唤鍜屾湀浠� 濡傦細2024-11
+        formattedDate = sdf.format(Calendar.getInstance().getTime());
+        // 鏌ヨ鎵�鏈夌殑瀹為獙瀹�
+        List<CollectLaboratory> collectLaboratories = collectLaboratoryMapper.selectList(null);
+        // 閬嶅巻瀹為獙瀹わ紝鍒ゆ柇浠诲姟鍒楄〃涓槸鍚﹀瓨璇ュ疄楠屽鐨勪换鍔�
+        for (CollectLaboratory collectLaboratory : collectLaboratories) {
+            // 鏌ヨ鏁版嵁搴撲腑鏄惁瀛樺湪璇ュ疄楠屽鐨勪换鍔�
+            int count = feTempHumDateMapper.selectFeTempHumDateIncludeFormattedDate(collectLaboratory.getLaboratory(), formattedDate);
+            // 鏌ヨ缁撴灉涓�0锛岃鏄庢暟鎹簱涓笉瀛樺湪璇ュ疄楠屽鐨勪换鍔★紝闇�瑕佹柊澧�
+            if (count == 0) {
+                FeTempHumDate feTempHumDate = new FeTempHumDate();
+                feTempHumDate.setMonthDate(formattedDate);
+                feTempHumDate.setTestAreaName(collectLaboratory.getLaboratory());
+                feTempHumDateMapper.insert(feTempHumDate);
+            }
+        }
+    }
+
+    /**
+     * 姣忓ぉ9鐐规墽琛屼竴娆� 闄や簡鏄熸湡澶�
+     * 鑾峰彇娓╁害婀垮害
+     */
+//    @Scheduled(cron = "0/5 * * * * *")
+    @Scheduled(cron = "0 0 9 * * 1-6") // 姣忓ぉ9鐐规墽琛屼竴娆� 闄や簡鏄熸湡澶�
+    public void task1() {
+        checkLaboratoriesSchedule();
+        // 鏍规嵁鏃堕棿闄嶅簭锛岃幏鍙栧埌鏈�鏂扮殑涓�鏉℃暟鎹�
+        CollectTemperatureHumidity collectTemperatureHumidity = collectTemperatureHumidityMapper.selectOne(Wrappers.<CollectTemperatureHumidity>lambdaQuery()
+                .orderByDesc(CollectTemperatureHumidity::getCollectTime)
+                .last("limit 1"));
+
+        // 鑾峰彇鎵�鏈夌殑瀹為獙瀹�
+        List<CollectLaboratory> collectLaboratories = collectLaboratoryMapper.selectList(null);
+        // 閬嶅巻鑾峰彇瀹為獙瀹ょ紪鍙� 鑾峰彇娓╂箍搴� 淇濆瓨鍦ㄥ搴旂殑
+        for (CollectLaboratory collectLaboratory : collectLaboratories) {
+            // 瀹為獙瀹ょ紪鍙�
+            int labNumber = Integer.parseInt(collectLaboratory.getDeviceCode());
+            // 鏍规嵁瀹為獙瀹ょ紪鍙锋嫾鎺ュ搴旂殑婀垮害鍜屾俯搴﹀瓧娈�
+            String temperatureField = "code" + labNumber + "Temperature";
+            String humidityField = "code" + labNumber + "Humidity";
+            // 鑾峰彇娓╁害
+            Double temperature = getFieldValue(collectTemperatureHumidity, temperatureField) != null ? (Double) getFieldValue(collectTemperatureHumidity, temperatureField) : Double.valueOf(00.0);
+            // 鑾峰彇婀垮害
+            Double humidity = getFieldValue(collectTemperatureHumidity, humidityField) != null ? (Double) getFieldValue(collectTemperatureHumidity, humidityField) : Double.valueOf(00.0);
+            // 鏌ヨ璇曢獙鍖哄煙
+            FeTempHumDate feTempHumDate = feTempHumDateMapper.selectOne(Wrappers.<FeTempHumDate>lambdaQuery()
+                    .eq(FeTempHumDate::getMonthDate, formattedDate)
+                    .eq(FeTempHumDate::getTestAreaName, collectLaboratory.getLaboratory()));
+            Integer dateId = feTempHumDate.getDateId();
+            // 鍒ゆ柇浠婂ぉ鏄惁鏈夋俯婀垮害璁板綍
+            FeTempHumRecord feTempHumRecord = record(dateId);
+            // 鏌ヨ鍑烘潵灏变唬琛ㄤ粖澶╄褰曡繃浜嗗氨涓嶈褰�
+            if (feTempHumRecord != null) {
+                // 鏈夋俯搴︽箍搴﹁褰曞氨涓嶈褰�
+                continue;
+            }
+
+            // 鍒涘缓浠婂ぉ娓╂箍搴﹁褰曞璞� 璁板綍涓婂崍娓╁害婀垮害
+            FeTempHumRecord newFeTempHumRecord = new FeTempHumRecord();
+            newFeTempHumRecord.setRecordDate(LocalDate.now());
+            newFeTempHumRecord.setMorningTestTime(LocalTime.now());
+            newFeTempHumRecord.setMorningTemp(temperature.toString());
+            newFeTempHumRecord.setMorningHum(humidity.toString());
+            newFeTempHumRecord.setDateId(dateId);
+            feTempHumRecordMapper.insert(newFeTempHumRecord);
+        }
+    }
+
+    /**
+     * 鍒ゆ柇浠婂ぉ鏄惁鏈夋俯婀垮害璁板綍
+     */
+    private FeTempHumRecord record(Integer dateId) {
+        // 鑾峰彇浠婂ぉ鐨勬棩鏈�
+        LocalDate today = LocalDate.now();
+        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
+        // 鑾峰彇浠婂ぉ鐨� 00:00:00 鍜� 23:59:59
+        String start = today.atStartOfDay().format(dateTimeFormatter);  // 00:00:00
+        String end = today.atTime(LocalTime.MAX).format(dateTimeFormatter); // 23:59:59
+        // 鏌ヨ浠婂ぉ鏄惁鏈夋俯婀垮害璁板綍
+        return feTempHumRecordMapper.selectOne(Wrappers.<FeTempHumRecord>lambdaQuery()
+                // 鍝釜瀹為獙瀹�
+                .eq(FeTempHumRecord::getDateId, dateId)
+                // 璁板綍鏃堕棿鍦ㄤ粖澶╀箣鍐�
+                .eq(FeTempHumRecord::getRecordDate, today)
+                .between(FeTempHumRecord::getMorningTestTime, start, end));
+    }
+
+    /**
+     * 姣忓ぉ14鐐规墽琛屼竴娆� 闄や簡鏄熸湡鍏拰鏄熸湡澶�
+     * 鑾峰彇娓╁害婀垮害
+     */
+//    @Scheduled(cron = "0/5 * * * * *")
+    @Scheduled(cron = "0 0 14 * * 1-5") // 姣忓ぉ14鐐规墽琛屼竴娆� 闄や簡鏄熸湡鍏拰鏄熸湡澶�
+    public void task2() {
+
+        // 妫�鏌ュ疄楠屽鏄惁鏈変换鍔� 濡傛灉娌℃湁鏂板浠诲姟
+        checkLaboratoriesSchedule();
+        // 鏍规嵁鏃堕棿闄嶅簭锛岃幏鍙栧埌鏈�鏂扮殑涓�鏉℃暟鎹�
+        CollectTemperatureHumidity collectTemperatureHumidity = collectTemperatureHumidityMapper.selectOne(Wrappers.<CollectTemperatureHumidity>lambdaQuery()
+                .orderByDesc(CollectTemperatureHumidity::getCollectTime)
+                .last("limit 1"));
+        // 鑾峰彇鎵�鏈夌殑瀹為獙瀹�
+        List<CollectLaboratory> collectLaboratories = collectLaboratoryMapper.selectList(null);
+        // 閬嶅巻鑾峰彇瀹為獙瀹ょ紪鍙� 鑾峰彇娓╂箍搴� 淇濆瓨鍦ㄥ搴旂殑
+        for (CollectLaboratory collectLaboratory : collectLaboratories) {
+            // 瀹為獙瀹ょ紪鍙�
+            int labNumber = Integer.parseInt(collectLaboratory.getDeviceCode());
+            // 鏍规嵁瀹為獙瀹ょ紪鍙锋嫾鎺ュ搴旂殑婀垮害鍜屾俯搴﹀瓧娈�
+            String temperatureField = "code" + labNumber + "Temperature";
+            String humidityField = "code" + labNumber + "Humidity";
+            // 鑾峰彇娓╁害
+            Double temperature = getFieldValue(collectTemperatureHumidity, temperatureField) != null ? (Double) getFieldValue(collectTemperatureHumidity, temperatureField) : Double.valueOf(00.0);
+            // 鑾峰彇婀垮害
+            Double humidity = getFieldValue(collectTemperatureHumidity, humidityField) != null ? (Double) getFieldValue(collectTemperatureHumidity, humidityField) : Double.valueOf(00.0);
+            // 鏌ヨ璇曢獙鍖哄煙
+            FeTempHumDate feTempHumDate = feTempHumDateMapper.selectOne(Wrappers.<FeTempHumDate>lambdaQuery()
+                    .eq(FeTempHumDate::getMonthDate, formattedDate)
+                    .eq(FeTempHumDate::getTestAreaName, collectLaboratory.getLaboratory()));
+            Integer dateId = feTempHumDate.getDateId();
+            // 鏌ヨ浠婂ぉ鏄惁鏈夋俯婀垮害璁板綍
+            FeTempHumRecord feTempHumRecord = record(dateId);
+            // 濡傛灉娌℃湁鏌ヨ缁撴灉灏辫鏄庝笂鍗堟病鏈夎褰�
+            if (feTempHumRecord == null) {
+                // 鍒涘缓浠婂ぉ娓╂箍搴﹁褰曞璞� 璁板綍涓嬪崍娓╁害婀垮害
+                FeTempHumRecord newFeTempHumRecord = new FeTempHumRecord();
+                newFeTempHumRecord.setAfternoonTime(LocalTime.now());
+                newFeTempHumRecord.setAfternoonTemp(temperature.toString());
+                newFeTempHumRecord.setAfternoonHum(humidity.toString());
+                newFeTempHumRecord.setDateId(dateId);
+                feTempHumRecordMapper.insert(newFeTempHumRecord);
+                continue;
+            }
+
+            // 鏌ヨ鍑烘潵灏变唬琛ㄤ粖澶╄褰曡繃 鍐嶅垽鏂笅鍗堟湁璁板綍杩囨病鏈�
+            // 娓╁害鏄惁璁板綍杩�
+            if (feTempHumRecord.getAfternoonTemp() == null) {
+                // 娌℃湁灏辫嚜鍔ㄨ褰�
+                feTempHumRecord.setAfternoonTemp(temperature.toString());
+                // 淇敼璁板綍鏃堕棿
+                feTempHumRecord.setAfternoonTime(LocalTime.now());
+            }
+            // 婀垮害鏄惁璁板綍杩�
+            if (feTempHumRecord.getAfternoonHum() == null) {
+                // 娌℃湁灏辫嚜鍔ㄨ褰�
+                feTempHumRecord.setAfternoonHum(humidity.toString());
+                // 淇敼璁板綍鏃堕棿
+                feTempHumRecord.setAfternoonTime(LocalTime.now());
+            }
+            feTempHumRecordMapper.updateById(feTempHumRecord);
+
+        }
+    }
+
+    /**
+     * 鏍规嵁瀹為獙瀹ょ紪鍙疯幏鍙栨俯搴︽箍搴�
+     *
+     * @param collectTemperatureHumidity 娓╁害婀垮害鏁版嵁
+     * @param fieldName                  瀛楁鍚�
+     * @return 瀛楁鍊�
+     */
+    public static Object getFieldValue(CollectTemperatureHumidity collectTemperatureHumidity, String fieldName) {
+        try {
+            Field field = collectTemperatureHumidity.getClass().getDeclaredField(fieldName);
+            field.setAccessible(true); // 璁剧疆鍙互璁块棶绉佹湁瀛楁
+            return field.get(collectTemperatureHumidity); // 鑾峰彇瀛楁鐨勫��
+        } catch (NoSuchFieldException | IllegalAccessException e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+}
diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml
index 722d41f..dfad74e 100644
--- a/ruoyi-admin/src/main/resources/application-druid.yml
+++ b/ruoyi-admin/src/main/resources/application-druid.yml
@@ -98,6 +98,11 @@
     cache-enabled: false
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
 
+# Swagger閰嶇疆
+swagger:
+  # 鏄惁寮�鍚痵wagger
+  enabled: true
+
 minio:
   endpoint: http://114.132.189.42/
   port: 7019
diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml
index 8b41a4d..6f68d66 100644
--- a/ruoyi-admin/src/main/resources/application-prod.yml
+++ b/ruoyi-admin/src/main/resources/application-prod.yml
@@ -98,6 +98,11 @@
     cache-enabled: false
     log-impl: # org.apache.ibatis.logging.stdout.StdOutImpl
 
+# Swagger閰嶇疆
+swagger:
+  # 鏄惁寮�鍚痵wagger
+  enabled: true
+
 minio:
   endpoint: http://114.132.189.42/
   port: 7019

--
Gitblit v1.9.3