From 48959b0b908dd57bf9dd991b75756ac2698f2b4d Mon Sep 17 00:00:00 2001 From: zmc <zmc_li@foxmail.com> Date: 星期四, 12 十月 2023 10:48:11 +0800 Subject: [PATCH] 修改了数据排名清单的sql语句 --- src/main/java/com/job/zsc/mapper/dustexception/OnlineAnalysisMapper.java | 15 + src/main/java/com/job/zsc/dustexceptionanalysis/database/DustRepository.java | 21 ++ src/main/java/com/job/zsc/dustexceptionanalysis/dataprocess/DataProcess.java | 14 + src/main/java/com/job/zsc/scheduledtasks/ScheduledTaskController.java | 13 + src/main/java/com/job/zsc/pojo/DustExceptionSetting.java | 49 ++++++ src/main/java/com/job/zsc/service/dustexception/impl/onlineAnalysisServiceImpl.java | 7 src/main/java/com/job/zsc/scheduledtasks/BaseTimingTask.kt | 27 +++ /dev/null | 8 - src/main/java/com/job/zsc/scheduledtasks/TaskController.kt | 105 +++++++++++++ src/main/java/com/job/zsc/dustexceptionanalysis/ExceptionAnalysis.java | 36 ++++ src/main/java/com/job/zsc/pojo/DustSiteData.java | 13 + src/main/resources/com/job/zsc/mapper/FugitiveDustMapper.xml | 32 ++- src/main/java/com/job/zsc/dustexceptionanalysis/analysis/Exceeding.java | 38 ++++ src/main/java/com/job/zsc/QianduanApplication.java | 12 + src/main/resources/application.yml | 12 src/test/java/com/job/zsc/QianduanApplicationTests.java | 37 ++++ 16 files changed, 406 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/job/zsc/QianduanApplication.java b/src/main/java/com/job/zsc/QianduanApplication.java index 415cb2d..6a42320 100644 --- a/src/main/java/com/job/zsc/QianduanApplication.java +++ b/src/main/java/com/job/zsc/QianduanApplication.java @@ -1,13 +1,25 @@ package com.job.zsc; +import com.job.zsc.scheduledtasks.TaskController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; @SpringBootApplication public class QianduanApplication { + @Autowired + private TaskController taskController; + @Bean + public ApplicationRunner runner() { + return args -> taskController.run(); + } public static void main(String[] args) { SpringApplication.run(QianduanApplication.class, args); + } } diff --git a/src/main/java/com/job/zsc/dustexceptionanalysis/ExceptionAnalysis.java b/src/main/java/com/job/zsc/dustexceptionanalysis/ExceptionAnalysis.java new file mode 100644 index 0000000..c1696bd --- /dev/null +++ b/src/main/java/com/job/zsc/dustexceptionanalysis/ExceptionAnalysis.java @@ -0,0 +1,36 @@ +package com.job.zsc.dustexceptionanalysis; + +import com.job.zsc.pojo.DustExceptionSetting; +import com.job.zsc.pojo.DustSiteData; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; + +import java.util.ArrayList; +import java.util.List; + +@Controller +public class ExceptionAnalysis { + + + public static List<DustSiteData> isDustValueExceeding(List<DustSiteData> siteDataList) { + List<DustSiteData> result = new ArrayList<>(); + DustExceptionSetting dustExceptionSetting = new DustExceptionSetting(); + /*鎵皹瓒呮爣鍒ゆ柇*/ +// for (DustSiteData item : siteDataList) { +// if (item.getDustValue() >= dustExceptionSetting.getExceedingStandard() ) { +// result.add(item); +// } +// } + return result; + } + + public static int main(List<DustSiteData> siteDataList) { + List<DustSiteData> r1 = isDustValueExceeding(siteDataList); + +// if (!r1.isEmpty()) { +// Repository repository = new Repository(); +// repository.valueExceedingWriteExceptionTable(r1); +// } + return r1.size(); + } +} diff --git a/src/main/java/com/job/zsc/dustexceptionanalysis/analysis/Exceeding.java b/src/main/java/com/job/zsc/dustexceptionanalysis/analysis/Exceeding.java new file mode 100644 index 0000000..846d22f --- /dev/null +++ b/src/main/java/com/job/zsc/dustexceptionanalysis/analysis/Exceeding.java @@ -0,0 +1,38 @@ +package com.job.zsc.dustexceptionanalysis.analysis; + +import com.job.zsc.pojo.DustExceptionSetting; +import com.job.zsc.pojo.DustSiteData; + +import java.util.ArrayList; +import java.util.List; + +public class Exceeding { + public static List<DustSiteData> isDustValueExceeding(List<DustSiteData> siteDataList) { + List<DustSiteData> result = new ArrayList<>(); + + DustExceptionSetting dustExceptionSetting = new DustExceptionSetting(); + + + /*鎵皹瓒呮爣鍒ゆ柇*/ +// for (DustSiteData item : siteDataList) { +// if (item.getDustValue() >= dustExceptionSetting.getExceedingStandard() ) { +// result.add(item); +// } +// } + return result; + } + + + public static int main(List<DustSiteData> siteDataList) { + List<DustSiteData> exceedingData = isDustValueExceeding(siteDataList); + +// if (!r1.isEmpty()) { +// Repository repository = new Repository(); +// repository.valueExceedingWriteExceptionTable(r1); +// } + + return exceedingData.size(); + } + + +} diff --git a/src/main/java/com/job/zsc/dustexceptionanalysis/database/DustRepository.java b/src/main/java/com/job/zsc/dustexceptionanalysis/database/DustRepository.java new file mode 100644 index 0000000..0ffd703 --- /dev/null +++ b/src/main/java/com/job/zsc/dustexceptionanalysis/database/DustRepository.java @@ -0,0 +1,21 @@ +package com.job.zsc.dustexceptionanalysis.database; + +import com.job.zsc.pojo.DustExceptionSetting; +import com.job.zsc.pojo.DustSiteData; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +@Mapper +public interface DustRepository { + + + + /*璇诲彇鎸囧畾鏃堕棿娈电殑鎵皹鏁版嵁*/ + @Select("select * from ja_t_dust_site_data_info where lst between #{beginTime} and #{endTime}") + public List<DustSiteData> getDustData(String beginTime, String endTime); + + @Select("select * from dust_exception_setting order by update_time desc limit 1") + public List<DustExceptionSetting> readExceptionSetting(); +} diff --git a/src/main/java/com/job/zsc/dustexceptionanalysis/dataprocess/DataProcess.java b/src/main/java/com/job/zsc/dustexceptionanalysis/dataprocess/DataProcess.java new file mode 100644 index 0000000..a50783c --- /dev/null +++ b/src/main/java/com/job/zsc/dustexceptionanalysis/dataprocess/DataProcess.java @@ -0,0 +1,14 @@ +package com.job.zsc.dustexceptionanalysis.dataprocess; + +import com.job.zsc.pojo.DustExceptionSetting; + +import java.util.List; + +public class DataProcess { + public void giveValues(List<DustExceptionSetting> data){ + DustExceptionSetting dustExceptionSetting = new DustExceptionSetting(); + + + + } +} diff --git a/src/main/java/com/job/zsc/mapper/dustexception/OnlineAnalysisMapper.java b/src/main/java/com/job/zsc/mapper/dustexception/OnlineAnalysisMapper.java new file mode 100644 index 0000000..8b2541a --- /dev/null +++ b/src/main/java/com/job/zsc/mapper/dustexception/OnlineAnalysisMapper.java @@ -0,0 +1,15 @@ +package com.job.zsc.mapper.dustexception; + + +import com.job.zsc.pojo.DustSiteData; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +@Mapper +public interface OnlineAnalysisMapper { + /*璇诲彇鎸囧畾鏃堕棿娈电殑鏁版嵁*/ + @Select("select * from ja_t_dust_site_data_info where lst between #{beginTime} and #{endTime}") + public List<DustSiteData> getDustData(String beginTime,String endTime); +} diff --git a/src/main/java/com/job/zsc/mapper/dustexception/onlineAnalysisMapper.java b/src/main/java/com/job/zsc/mapper/dustexception/onlineAnalysisMapper.java deleted file mode 100644 index bf06eeb..0000000 --- a/src/main/java/com/job/zsc/mapper/dustexception/onlineAnalysisMapper.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.job.zsc.mapper.dustexception; - - -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public class onlineAnalysisMapper { -} diff --git a/src/main/java/com/job/zsc/pojo/DustExceptionSetting.java b/src/main/java/com/job/zsc/pojo/DustExceptionSetting.java new file mode 100644 index 0000000..c1a8b1c --- /dev/null +++ b/src/main/java/com/job/zsc/pojo/DustExceptionSetting.java @@ -0,0 +1,49 @@ +package com.job.zsc.pojo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Data +@AllArgsConstructor +//@NoArgsConstructor +public class DustExceptionSetting { + private static int id; + private static String user; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private static LocalDateTime updateTime; //寮�濮嬫椂闂� + + private static String version; + + private static int missDataMinutes; + private static float dataLow; + private static int longTimeNoChange; + private static int mutationNum; + private static float mutationRate; + private static float nearExceedLowValue; + private static float nearExceedHighValue; + private static int nearExceedNum; + private static int dayExceedBorderlineLowNum; + private static int dayExceedBorderlineHighNum; + private static int changeTrendGroup; + private static int changeTrendInterval; + private static int changeTrendRate; + private static int exceedingStandard; + + private static DustExceptionSetting instance; + + + public static DustExceptionSetting getInstance() { + + if (instance == null) { + instance = new DustExceptionSetting(); + } + return instance; + } + + +} diff --git a/src/main/java/com/job/zsc/pojo/DustSiteData.java b/src/main/java/com/job/zsc/pojo/DustSiteData.java index f75ede3..7b338e0 100644 --- a/src/main/java/com/job/zsc/pojo/DustSiteData.java +++ b/src/main/java/com/job/zsc/pojo/DustSiteData.java @@ -1,8 +1,11 @@ package com.job.zsc.pojo; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; // 鐩戞祴鐐� @Data @@ -17,9 +20,13 @@ private String mnCode; private String typeName; - private String dustValue; - private String noiseValue; - private String lst; + private double dustValue; + private double noiseValue; + +// private String lst; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime lst; + private String quality; private String groupName; } diff --git a/src/main/java/com/job/zsc/scheduledtasks/BaseTimingTask.kt b/src/main/java/com/job/zsc/scheduledtasks/BaseTimingTask.kt new file mode 100644 index 0000000..85a343b --- /dev/null +++ b/src/main/java/com/job/zsc/scheduledtasks/BaseTimingTask.kt @@ -0,0 +1,27 @@ +package cn.flightfeather.supervision.timingtask + +import java.time.LocalDateTime +import java.util.concurrent.ExecutorService +import java.util.concurrent.Executors + +/** + * 瀹氭椂浠诲姟鍩虹被 + */ +abstract class BaseTimingTask { + + // 璁板綍涓婃浠诲姟鎵ц鐨勬椂闂寸偣锛屽崟浣嶏細姣 + private var lastTime: LocalDateTime = LocalDateTime.MIN + + // 浠诲姟鎵ц鍛ㄦ湡锛屽崟浣嶏細鍒嗛挓 + abstract val period: Long + + open fun execute(localtime:LocalDateTime) { + val now = LocalDateTime.now() + if (now.minusSeconds(period * 60 - 5) >= lastTime) { + lastTime = now + doTask(localtime) + } + } + + abstract fun doTask(localtime:LocalDateTime) +} \ No newline at end of file diff --git a/src/main/java/com/job/zsc/scheduledtasks/ScheduledTaskController.java b/src/main/java/com/job/zsc/scheduledtasks/ScheduledTaskController.java new file mode 100644 index 0000000..5af0520 --- /dev/null +++ b/src/main/java/com/job/zsc/scheduledtasks/ScheduledTaskController.java @@ -0,0 +1,13 @@ +package com.job.zsc.scheduledtasks; + +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; + +public class ScheduledTaskController { + + /*绾跨▼姹�*/ + private ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); + public void run(){ + + } +} diff --git a/src/main/java/com/job/zsc/scheduledtasks/TaskController.kt b/src/main/java/com/job/zsc/scheduledtasks/TaskController.kt new file mode 100644 index 0000000..dfed9a4 --- /dev/null +++ b/src/main/java/com/job/zsc/scheduledtasks/TaskController.kt @@ -0,0 +1,105 @@ +package com.job.zsc.scheduledtasks + +import cn.flightfeather.supervision.timingtask.BaseTimingTask +import org.slf4j.LoggerFactory +import org.springframework.stereotype.Component +import java.time.LocalDateTime +import java.time.LocalTime +import java.util.* +import java.util.concurrent.Executors +import java.util.concurrent.ScheduledExecutorService +import java.util.concurrent.TimeUnit + +/** + * 鏁版嵁鑾峰彇鎺у埗鍣� + */ +@Component +class TaskController( + /*瀹炰緥鍚� 绫诲悕*/ +// fetchVOC: TaskFetchVOC, +// pushFume: TaskPushFume, +// ledgerCopy: TaskLedgerCopy, +// ledgerRemind: TaskLedgerRemind, +// taskJinAnLampEnterBaseInfo: TaskJinAnLampEnterBaseInfo, +// taskJinAnLampDeviceData: TaskJinAnLampDeviceData, +// taskJinAnConstructionSiteInfo: TaskJinAnConstructionSiteInfo, +// taskJinAnHourlyDustData: TaskJinAnHourlyDustData +) { + + companion object { + private const val FETCH_PERIOD_MIN = 1L * 60 + private const val MAINTAIN_PERIOD_MIN = 5L * 60 + val LOGGER = LoggerFactory.getLogger(TaskController::class.java) + } + + private val timeTask = mutableListOf<BaseTimingTask>() + private var schedule = Executors.newScheduledThreadPool(1) + private var maintainSchedule = Executors.newScheduledThreadPool(1) + private var taskTime: Date = Date() + private var maintainTime: Date = Date() + + init { + LOGGER.info("娣诲姞瀹氭椂浠诲姟") + timeTask.clear() + + /*鍋氱殑瀹氭椂浠诲姟鍔犺繘鏉�*/ + + + LOGGER.info("娣诲姞瀹氭椂浠诲姟瀹屾垚锛屼换鍔℃�昏${timeTask.size}涓�") + } + + fun run() { + fetchTask(true) + maintainTask(true) + } + + private fun fetchTask(isFirst: Boolean = false) { + val cal = Calendar.getInstance() + val time = LocalTime.now() + val sec = time.second + val delay = 60L - sec +// var localtime = LocalDateTime.of(2021, 4, 16, 9, 0) + if (!isFirst) { + schedule = closeThread(schedule) + } + schedule.scheduleAtFixedRate({ + taskTime = Date() + if (Date().time - maintainTime.time > (MAINTAIN_PERIOD_MIN + 1) * 60 * 1000) { + maintainTask() + } + + val localtime = LocalDateTime.now() +// LOGGER.info("瀹氭椂浠诲姟鎵ц锛屽畾鏃朵换鍔℃暟锛�${timeTask.size}") + timeTask.forEach { +// LOGGER.info("瀹氭椂浠诲姟锛�${it.javaClass.name}") + it.execute(localtime) + } +// localtime = localtime.plusMinutes(1) + }, delay, FETCH_PERIOD_MIN, TimeUnit.SECONDS) + } + + private fun maintainTask(isFirst: Boolean = false) { + if (!isFirst) { + maintainSchedule = closeThread(maintainSchedule) + } + maintainSchedule.scheduleAtFixedRate({ + maintainTime = Date() + if (Date().time - taskTime.time > (FETCH_PERIOD_MIN + 1) * 60 * 1000) { + fetchTask() + } + }, 0, MAINTAIN_PERIOD_MIN, TimeUnit.SECONDS) + } + + private fun closeThread(s: ScheduledExecutorService): ScheduledExecutorService { + try { + s.shutdown() + if (s.awaitTermination(10, TimeUnit.SECONDS)) { + s.shutdownNow() + } + } catch (e: InterruptedException) { + e.printStackTrace() + s.shutdownNow() + } + return Executors.newScheduledThreadPool(1) + } +} \ No newline at end of file diff --git a/src/main/java/com/job/zsc/service/dustexception/impl/onlineAnalysisServiceImpl.java b/src/main/java/com/job/zsc/service/dustexception/impl/onlineAnalysisServiceImpl.java new file mode 100644 index 0000000..b85dabd --- /dev/null +++ b/src/main/java/com/job/zsc/service/dustexception/impl/onlineAnalysisServiceImpl.java @@ -0,0 +1,7 @@ +package com.job.zsc.service.dustexception.impl; + +import com.job.zsc.service.dustexception.onlineAnalysisService; + +public class onlineAnalysisServiceImpl implements onlineAnalysisService { + /*閫昏緫澶勭悊*/ +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 2dd5e0b..b9c85fe 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,13 +1,13 @@ spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://localhost:3306/fume - username: fume - password: fume_feiyu2023 +# url: jdbc:mysql://localhost:3306/fume +# username: fume +# password: fume_feiyu2023 -# url: jdbc:mysql://localhost:3306/qianduan_sql -# username: root -# password: 1234 + url: jdbc:mysql://localhost:3306/qianduan_sql + username: root + password: 1234 mybatis: configuration: diff --git a/src/main/resources/com/job/zsc/mapper/FugitiveDustMapper.xml b/src/main/resources/com/job/zsc/mapper/FugitiveDustMapper.xml index 0938dff..34bb6f7 100644 --- a/src/main/resources/com/job/zsc/mapper/FugitiveDustMapper.xml +++ b/src/main/resources/com/job/zsc/mapper/FugitiveDustMapper.xml @@ -73,29 +73,33 @@ <select id="analysisByTime" resultType="com.job.zsc.pojo.AnalysisDustData"> select c.name,d.* from ja_t_dust_site_info as c join - (select - a.mn_code as mn_code, - DATE(a.lst) as lst, - ROUND(AVG(a.dust_value),3) as day_avg, - min(a.dust_value) as min, - max(a.dust_value) as max, + ( + select + mn_code as mn_code, + DATE(lst) as lst, + ROUND(AVG(dust_value),3) as day_avg, + min(dust_value) as min, + max(dust_value) as max, CONCAT(ROUND(COUNT(*)/96*100, 2), '%') as day_online, - CONCAT(ROUND(SUM(CASE WHEN a.dust_value >0 THEN 1 ELSE 0 END)/96 *100, 2), '%') as day_valid, - CONCAT(ROUND(SUM(CASE WHEN a.dust_value >= 1 THEN 1 ELSE 0 END)/96*100,2),'%') as day_exceeding - from ja_t_dust_site_data_info as a join ja_t_dust_site_info as b on a.mn_code = b.mn_code + CONCAT(ROUND(SUM(CASE WHEN dust_value >0 THEN 1 ELSE 0 END)/96 *100, 2), '%') as day_valid, + CONCAT(ROUND(SUM(CASE WHEN dust_value >= 1 THEN 1 ELSE 0 END)/96*100,2),'%') as day_exceeding + from ja_t_dust_site_data_info <where> - <if test="siteName !=null and siteName != ''"> - b.name = #{siteName} - </if> +<!-- <if test="siteName !=null and siteName != ''">--> +<!-- b.name = #{siteName}--> +<!-- </if>--> <if test="beginTime != null and endTime != null"> - and a.lst between #{beginTime} and #{endTime} + lst between #{beginTime} and #{endTime} </if> + </where> - GROUP BY a.mn_code,DATE(a.lst) + GROUP BY mn_code,DATE(lst) order by lst asc ) as d on c.mn_code = d.mn_code </select> + + <!--鏉′欢鏌ヨ寮傚父鏁版嵁 鍔犱笂浜嗗璁′俊鎭�--> <select id="getExceptionData" resultType="com.job.zsc.pojo.DustExceptionData"> select * diff --git a/src/test/java/com/job/zsc/QianduanApplicationTests.java b/src/test/java/com/job/zsc/QianduanApplicationTests.java index 44ed527..ea4cea2 100644 --- a/src/test/java/com/job/zsc/QianduanApplicationTests.java +++ b/src/test/java/com/job/zsc/QianduanApplicationTests.java @@ -1,12 +1,19 @@ package com.job.zsc; +import com.job.zsc.dustexceptionanalysis.analysis.Exceeding; +import com.job.zsc.dustexceptionanalysis.database.DustRepository; +import com.job.zsc.mapper.dustexception.OnlineAnalysisMapper; +import com.job.zsc.pojo.DustExceptionSetting; +import com.job.zsc.pojo.DustSiteData; import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import java.sql.SQLOutput; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Locale; +import java.util.*; + @SpringBootTest class QianduanApplicationTests { @@ -28,5 +35,31 @@ //return df2.format(date1); } + @Autowired + private DustRepository dustRepository; + @Test + void readSiteData(){ +// DustExceptionSetting dustExceptionSetting = DustExceptionSetting.getInstance(); +// 璇诲彇寮傚父鍒嗘瀽鍒ゅ畾鐨勯厤缃� + List<DustExceptionSetting> list= dustRepository.readExceptionSetting(); + System.out.println("11111"); + + System.out.println(list.size()); + System.out.println(list.get(0)); + + +// List<DustSiteData> dustData = dustRepository.getDustData("2023-10-01 00:00:00","2023-10-01 01:00:00"); +//// System.out.println(dustData.get(0).getMnCode()); +// int a = Exceeding.main(dustData); +// System.out.println(a); + + + } + + +// @Test +// void exceeding(){ +// +// } } -- Gitblit v1.9.3