diff --git a/pom.xml b/pom.xml
index 2a6518d..1fa2d25 100644
--- a/pom.xml
+++ b/pom.xml
@@ -123,7 +123,12 @@
org.projectlombok
lombok
-
+
+
+ org.seleniumhq.selenium
+ selenium-java
+ 3.141.59
+
diff --git a/src/main/java/com/bonus/emergencyrap/config/DataConfig.java b/src/main/java/com/bonus/emergencyrap/config/DataConfig.java
new file mode 100644
index 0000000..2865f81
--- /dev/null
+++ b/src/main/java/com/bonus/emergencyrap/config/DataConfig.java
@@ -0,0 +1,111 @@
+package com.bonus.emergencyrap.config;
+
+
+public class DataConfig {
+ /**
+ * url 网站地址
+ */
+ public static final String URL = "http://xydyjzh.ah.sgcc.com.cn";
+ /**
+ * 驱动名称
+ */
+ public static final String DRIVE_NAME = "webdriver.chrome.driver";
+
+ /**
+ * 用户名1 蒋涛
+ */
+ public static final String USER_NAME1 = "guoj123X";
+
+ /**
+ * 密码1
+ */
+ public static final String PASS1 = "aqjzcm333..";
+
+ /**
+ * 用户名2 武警
+ */
+ public static final String USER_NAME2 = "wangzy0078";
+
+ /**
+ * 密码2
+ */
+ public static final String PASS2 = "sfzhsw@0078";
+
+ /**
+ * 浏览器驱动地址
+ */
+ public static final String drivePath = "D:\\bns\\chromedriver_win32\\chromedriver.exe";
+ /**
+ * 文件地址
+ */
+ public static final String filePath = "D:\\bns\\config";
+
+ /**
+ * 日期替换 年月日
+ */
+ public static final String date="--date";
+
+ /**
+ * 日期替换 年月日-时分秒
+ */
+ public static final String dateTime="--dateTime";
+
+ /**
+ * 日期替换 年月日-时分秒
+ */
+ public static final String tr="--tr";
+
+ public static final String td="--td";
+
+ /**
+ * 日期替换 年月日-时分秒
+ */
+ public static final String attributeId="--attributeId";
+
+
+ /**
+ * 日期替换 明天 年月日-时分秒
+ */
+ public static final String tomorrow="--tomorrow";
+
+
+ /**
+ * 日期替换 今天 年月日-时分秒
+ */
+ public static final String today="--today";
+
+ /**
+ * 天气
+ */
+ public static final String weather = "--weather";
+
+ /**
+ * 上个月的按钮
+ */
+ public static final String lastMonth = "//*[@id=\"app\"]/div/section/main/div/div[1]/div[1]/div[3]/div[1]/div[2]/div/button[1]";
+
+ /**
+ * 预警按钮
+ */
+ public static final String yuJing ="//*[@id=\"tab-3\"]/div/span";
+
+ /**
+ * 早报
+ */
+ public static final String morningDaily ="morning_daily";
+
+ /**
+ * 晚报
+ */
+ public static final String eveningDaily ="evening_daily";
+
+ /**
+ * 早日志
+ */
+ public static final String morningLog ="morning_log";
+
+ /**
+ * 晚日志
+ */
+ public static final String eveningLog ="evening_log";
+}
diff --git a/src/main/java/com/bonus/emergencyrap/mapper/CollectDataMapper.java b/src/main/java/com/bonus/emergencyrap/mapper/CollectDataMapper.java
new file mode 100644
index 0000000..62e08e6
--- /dev/null
+++ b/src/main/java/com/bonus/emergencyrap/mapper/CollectDataMapper.java
@@ -0,0 +1,11 @@
+package com.bonus.emergencyrap.mapper;
+
+import com.bonus.emergencyrap.vo.CollectDataVo;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface CollectDataMapper {
+ CollectDataVo getCollectData(CollectDataVo collectDataVo);
+
+ void updateCollectData(CollectDataVo collectDataVo);
+}
diff --git a/src/main/java/com/bonus/emergencyrap/service/LogsUtils.java b/src/main/java/com/bonus/emergencyrap/service/LogsUtils.java
index 3135589..099d341 100644
--- a/src/main/java/com/bonus/emergencyrap/service/LogsUtils.java
+++ b/src/main/java/com/bonus/emergencyrap/service/LogsUtils.java
@@ -1,11 +1,7 @@
package com.bonus.emergencyrap.service;
-import com.alibaba.fastjson2.JSON;
-import com.bonus.emergencyrap.constant.TextConstants;
import com.bonus.emergencyrap.mapper.LogsMapper;
import com.bonus.emergencyrap.utils.DateTimeHelper;
-import com.bonus.emergencyrap.utils.TextFileUtils;
-import com.bonus.emergencyrap.utils.UploadFile;
import com.bonus.emergencyrap.vo.TaskMessageVo;
import com.bonus.emergencyrap.vo.TaskProcessVo;
import com.bonus.emergencyrap.vo.TaskVo;
diff --git a/src/main/java/com/bonus/emergencyrap/service/StepService.java b/src/main/java/com/bonus/emergencyrap/service/StepService.java
new file mode 100644
index 0000000..430ea67
--- /dev/null
+++ b/src/main/java/com/bonus/emergencyrap/service/StepService.java
@@ -0,0 +1,31 @@
+package com.bonus.emergencyrap.service;
+
+import com.bonus.emergencyrap.vo.TaskProcessVo;
+import com.bonus.emergencyrap.vo.TaskVo;
+
+import java.text.ParseException;
+
+/**
+ * @author 马三炮
+ * @date 2025/9/28
+ */
+public interface StepService {
+
+ void initDrive(TaskVo taskVo);
+
+ void openWeb(TaskVo taskVo) throws InterruptedException;
+
+ void input(TaskProcessVo taskProcessVo, String res) throws Exception;
+
+ void onClick(TaskProcessVo taskProcessVo) throws Exception ;
+
+ String getObject(TaskProcessVo taskProcessVo) throws InterruptedException;
+
+ void isAlert();
+
+ void hover(TaskProcessVo taskProcessVo) throws InterruptedException;
+
+ String collectData(TaskProcessVo taskProcessVo,TaskVo taskVo);
+
+ void getYuJing(TaskProcessVo taskProcessVo) throws InterruptedException, ParseException;
+}
diff --git a/src/main/java/com/bonus/emergencyrap/service/StepServiceImpl.java b/src/main/java/com/bonus/emergencyrap/service/StepServiceImpl.java
new file mode 100644
index 0000000..f41e652
--- /dev/null
+++ b/src/main/java/com/bonus/emergencyrap/service/StepServiceImpl.java
@@ -0,0 +1,371 @@
+package com.bonus.emergencyrap.service;
+
+import com.alibaba.fastjson2.JSON;
+import com.bonus.emergencyrap.config.DataConfig;
+import com.bonus.emergencyrap.mapper.CollectDataMapper;
+import com.bonus.emergencyrap.utils.DateTimeUtils;
+import com.bonus.emergencyrap.utils.StringUtils;
+import com.bonus.emergencyrap.vo.*;
+import lombok.extern.slf4j.Slf4j;
+import org.openqa.selenium.By;
+import org.openqa.selenium.JavascriptExecutor;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.chrome.ChromeDriver;
+import org.openqa.selenium.chrome.ChromeOptions;
+import org.openqa.selenium.interactions.Actions;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * @author 马三炮
+ * @date 2025/9/28
+ */
+@Slf4j
+@Service
+public class StepServiceImpl implements StepService{
+
+ private static WebDriver webDriver;
+
+ @Resource
+ private CollectDataMapper collectDataMapper;
+
+
+ /**
+ * 初始化浏览器
+ * @param taskVo
+ */
+ public void initDrive(TaskVo taskVo) {
+ // chromedriver服务地址
+ System.setProperty(taskVo.getDriverName(), taskVo.getDriverUrl());
+ ChromeOptions option = new ChromeOptions();
+ //添加浏览器地址
+ option.setBinary(taskVo.getBrowserUrl());
+
+ option.addArguments("--start-maximized");
+ option.addArguments(taskVo.getResolution());
+ option.addArguments("disable-infobars");
+
+ webDriver = new ChromeDriver(option);
+ }
+
+ /**
+ * 打开网页
+ * @param taskVo
+ * @throws InterruptedException
+ */
+ public void openWeb(TaskVo taskVo) throws InterruptedException {
+ //第一步打开指定网站
+ webDriver.get(taskVo.getUrl());
+ log.info("打开网站------------");
+ Thread.sleep(2000);
+ }
+
+ /**
+ * 输入
+ */
+ public void input(TaskProcessVo taskProcessVo, String res) throws Exception {
+ //******************************************************************
+ /**
+ * 第二步 用户登录
+ */
+ log.info("输入值:" + taskProcessVo + ",---------");
+ if (StringUtils.isNotNull(taskProcessVo.getXpath())){
+ //填写内容
+ String traof = taskProcessVo.getElementName();
+ WebElement traofEle = webDriver.findElement(By.xpath(taskProcessVo.getXpath()));
+ traofEle.clear();
+ traofEle.sendKeys(traof);
+ log.info(taskProcessVo.getElementName()+"填写新增-----------");
+ Thread.sleep(Long.valueOf(String.valueOf(taskProcessVo.getSleepTime()*1000)));
+ }else {
+ //输入用户名
+ webDriver.findElement(By.id(taskProcessVo.getElement())).sendKeys(taskProcessVo.getElementName());
+ log.info(taskProcessVo.getElementName()+"输入值完成------------");
+ Thread.sleep(Long.valueOf(String.valueOf(taskProcessVo.getSleepTime()*1000)));
+ }
+
+ }
+
+ /**
+ * 点击事件
+ * @param taskProcessVo
+ * @throws Exception
+ */
+ public void onClick(TaskProcessVo taskProcessVo) throws Exception {
+
+ if (StringUtils.isNotNull(taskProcessVo.getXpath())){
+ Thread.sleep(2000);
+ webDriver.findElement(By.xpath(taskProcessVo.getXpath())).click();
+ log.info(taskProcessVo.getElementName()+"----------");
+ }else {
+ webDriver.findElement(By.id(taskProcessVo.getElementName())).click();
+ log.info("系统登录------------");
+ Thread.sleep(Long.valueOf(String.valueOf(taskProcessVo.getSleepTime()*1000)));
+ }
+ }
+
+ /**
+ * 悬停
+ * @param taskProcessVo
+ * @return
+ * @throws InterruptedException
+ */
+ public String getObject(TaskProcessVo taskProcessVo) throws InterruptedException {
+ //执行鼠标悬停动作-管理
+ Actions action = new Actions(webDriver);
+ WebElement wegl = webDriver.findElement(By.xpath(taskProcessVo.getXpath()));
+ action.moveToElement(wegl).build().perform();
+ Thread.sleep(Long.valueOf(String.valueOf(taskProcessVo.getSleepTime()*1000)));
+
+ //获取管理标签中的aria-describedby属性
+ String attributeId = wegl.getAttribute("aria-describedby");
+ log.info(taskProcessVo.getElementName()+"管理标签的ID值为:" + attributeId);
+ Thread.sleep(Long.valueOf(String.valueOf(taskProcessVo.getSleepTime()*1000)));
+ return attributeId;
+ }
+
+
+ /**
+ * 判断是否有弹框,隐藏弹框
+ */
+ public void isAlert() {
+ try {
+ WebElement alert = webDriver.findElement(By.xpath("/html/body/div[5]"));
+ JavascriptExecutor js = (JavascriptExecutor) webDriver;
+ js.executeScript("arguments[0].setAttribute(arguments[1],arguments[2])", alert, "style", "display:none");
+ Thread.sleep(3000);
+
+ WebElement alert1 = webDriver.findElement(By.xpath("/html/body/div[2]"));
+ JavascriptExecutor js1 = (JavascriptExecutor) webDriver;
+ js1.executeScript("arguments[0].setAttribute(arguments[1],arguments[2])", alert1, "style", "display:none");
+ Thread.sleep(3000);
+ }catch (Exception e){
+ log.error("隐藏出错或者没有弹窗");
+ }
+ }
+
+ /**
+ * 悬停
+ * @param taskProcessVo
+ */
+ public void hover(TaskProcessVo taskProcessVo) throws InterruptedException {
+
+ if (StringUtils.isNotNull(taskProcessVo.getXpath())){
+ Actions action = new Actions(webDriver);
+ //执行鼠标悬停动作-常态值班
+ String ctzbXpath =taskProcessVo.getXpath();
+ WebElement wectzb = webDriver.findElement(By.xpath(ctzbXpath));
+ action.moveToElement(wectzb).build().perform();
+ Thread.sleep(Long.valueOf(String.valueOf(taskProcessVo.getSleepTime()*1000)));
+ }else {
+ //定位值班管理iframe的标签
+ WebElement dutyIframe = webDriver.findElement(By.id(taskProcessVo.getElement()));
+ webDriver.switchTo().frame(dutyIframe);
+ log.info("定位到值班管理iframe-----------");
+ Thread.sleep(Long.valueOf(String.valueOf(taskProcessVo.getSleepTime()*1000)));
+ }
+
+
+ }
+
+ /**
+ *
+ * @param taskProcessVo
+ * @param taskVo
+ * @return
+ */
+ public String collectData(TaskProcessVo taskProcessVo,TaskVo taskVo) {
+ if (DataConfig.morningDaily.equals(taskProcessVo.getElementName()) || DataConfig.eveningDaily.equals(taskProcessVo.getElementName())){
+ CollectDataVo collectDataVo = new CollectDataVo();
+ collectDataVo.setType(taskProcessVo.getElementName());
+ collectDataVo = collectDataMapper.getCollectData(collectDataVo);
+ String data = collectDataVo.getData();
+ DailyBean dailyBean = JSON.parseObject(data, DailyBean.class);
+ String month = DateTimeUtils.getCurrentDay().substring(5, 7);
+ if ("11".equals(month) || "12".equals(month) || "01".equals(month) || "02".equals(month) || "03".equals(month)) {
+ dailyBean.getTenBean().setUhv("0");
+ dailyBean.getTenBean().setFiveHundredKv("0");
+ dailyBean.getTenBean().setTwoHundredTwentyKv("0");
+ dailyBean.getTenBean().setOneHundredTenKv("0");
+ dailyBean.getTenBean().setThirtyFiveKv("0");
+ dailyBean.getTenBean().setTenKv("0");
+ dailyBean.getTenBean().setAverageWaterLevel("0");
+ dailyBean.getTenBean().setDesignValues("0");
+ dailyBean.getTenBean().setMeasuredValue("0");
+ dailyBean.getTenBean().setActionHasBeenTaken("0");
+
+ dailyBean.getElevenBean().setUhv("0");
+ dailyBean.getElevenBean().setFiveHundredKv("0");
+ dailyBean.getElevenBean().setTwoHundredTwentyKv("0");
+ dailyBean.getElevenBean().setOneHundredTenKv("0");
+ dailyBean.getElevenBean().setThirtyFiveKv("0");
+ dailyBean.getElevenBean().setTenKv("0");
+ dailyBean.getElevenBean().setAverageWaterLevel("0");
+ dailyBean.getElevenBean().setMeasuredValue("0");
+ dailyBean.getElevenBean().setActionHasBeenTaken("0");
+ } else {
+ dailyBean.getTenBean().setUhv("");
+ dailyBean.getTenBean().setFiveHundredKv("");
+ dailyBean.getTenBean().setTwoHundredTwentyKv("");
+ dailyBean.getTenBean().setOneHundredTenKv("");
+ dailyBean.getTenBean().setThirtyFiveKv("");
+ dailyBean.getTenBean().setTenKv("");
+ dailyBean.getTenBean().setAverageWaterLevel("");
+ dailyBean.getTenBean().setDesignValues("");
+ dailyBean.getTenBean().setMeasuredValue("");
+ dailyBean.getTenBean().setActionHasBeenTaken("");
+
+ dailyBean.getElevenBean().setUhv("");
+ dailyBean.getElevenBean().setFiveHundredKv("");
+ dailyBean.getElevenBean().setTwoHundredTwentyKv("");
+ dailyBean.getElevenBean().setOneHundredTenKv("");
+ dailyBean.getElevenBean().setThirtyFiveKv("");
+ dailyBean.getElevenBean().setTenKv("");
+ dailyBean.getElevenBean().setAverageWaterLevel("");
+ dailyBean.getElevenBean().setMeasuredValue("");
+ dailyBean.getElevenBean().setActionHasBeenTaken("");
+ }
+ if ("06".equals(month) || "07".equals(month) || "08".equals(month) || "09".equals(month)) {
+ dailyBean.getTwelveBean().setUhv("0");
+ dailyBean.getTwelveBean().setFiveHundredKv("0");
+ dailyBean.getTwelveBean().setTwoHundredTwentyKv("0");
+ dailyBean.getTwelveBean().setOneHundredTenKv("0");
+ dailyBean.getTwelveBean().setThirtyFiveKv("0");
+ dailyBean.getTwelveBean().setTenKv("0");
+ dailyBean.getTwelveBean().setAverageWaterLevel("0");
+ dailyBean.getTwelveBean().setDesignValues("0");
+ dailyBean.getTwelveBean().setMeasuredValue("0");
+ dailyBean.getTwelveBean().setActionHasBeenTaken("0");
+
+ dailyBean.getThirteenBean().setUhv("0");
+ dailyBean.getThirteenBean().setFiveHundredKv("0");
+ dailyBean.getThirteenBean().setTwoHundredTwentyKv("0");
+ dailyBean.getThirteenBean().setOneHundredTenKv("0");
+ dailyBean.getThirteenBean().setThirtyFiveKv("0");
+ dailyBean.getThirteenBean().setTenKv("0");
+ dailyBean.getThirteenBean().setAverageWaterLevel("0");
+ dailyBean.getThirteenBean().setDesignValues("0");
+ dailyBean.getThirteenBean().setMeasuredValue("0");
+ dailyBean.getThirteenBean().setActionHasBeenTaken("0");
+
+ } else {
+ dailyBean.getTwelveBean().setUhv("");
+ dailyBean.getTwelveBean().setFiveHundredKv("");
+ dailyBean.getTwelveBean().setTwoHundredTwentyKv("");
+ dailyBean.getTwelveBean().setOneHundredTenKv("");
+ dailyBean.getTwelveBean().setThirtyFiveKv("");
+ dailyBean.getTwelveBean().setTenKv("");
+ dailyBean.getTwelveBean().setAverageWaterLevel("");
+ dailyBean.getTwelveBean().setDesignValues("");
+ dailyBean.getTwelveBean().setMeasuredValue("");
+ dailyBean.getTwelveBean().setActionHasBeenTaken("");
+
+ dailyBean.getThirteenBean().setUhv("");
+ dailyBean.getThirteenBean().setFiveHundredKv("");
+ dailyBean.getThirteenBean().setTwoHundredTwentyKv("");
+ dailyBean.getThirteenBean().setOneHundredTenKv("");
+ dailyBean.getThirteenBean().setThirtyFiveKv("");
+ dailyBean.getThirteenBean().setTenKv("");
+ dailyBean.getThirteenBean().setAverageWaterLevel("");
+ dailyBean.getThirteenBean().setDesignValues("");
+ dailyBean.getThirteenBean().setMeasuredValue("");
+ dailyBean.getThirteenBean().setActionHasBeenTaken("");
+ }
+ collectDataVo.setData(dailyBean.toString());
+ collectDataMapper.updateCollectData(collectDataVo);
+ }
+ return null;
+ }
+
+ @Override
+ public void getYuJing(TaskProcessVo taskProcessVo) throws InterruptedException, ParseException {
+ Thread.sleep(5000);
+ String code = "";
+ CollectDataVo collectDataVo = new CollectDataVo();
+ collectDataVo.setType(taskProcessVo.getElementName());
+ collectDataVo = collectDataMapper.getCollectData(collectDataVo);
+ String data = collectDataVo.getData();
+ DailyBean dailyBean = JSON.parseObject(data, DailyBean.class);
+ String code_child = "宿州灵璧公司安排抢修以伍12支(主网10支,配网2支)、车辆12台、发电机1台、照明灯40套、配变10台、箱变4台、电缆1千米、电杆50根、金具50套、绝缘子100串。";
+ String code_chlid2 = "针对此次预警,今日宿州灵璧供电公司开展预警响应,对重要保电线路、变电站进行特巡,安排抢修队伍、绑定应急车辆、装备,抢修队长,通过i" +
+ "国网反馈巡视照片、视频,在新一代系统里均形成巡视记录、车辆队伍轨迹,未发现问题。";
+ //判断是否有发布数据
+ WebElement numClasses = webDriver.findElement(By.xpath("//*[@id=\"tab-3\"]/div/span"));
+ if ("0".equals(numClasses.getText())) {
+ code = "宿州灵璧未发布预警,";
+ } else {
+ //险情类别与等级 例:高温蓝色,暴雨蓝色
+ WebElement weatherEle = webDriver.findElement(By.xpath("/html/body/div[1]/div/section/main/div[1]/div[2]/div[1]/section/main/div/div[3]/table/tbody/tr[1]/td[6]/div/div"));
+ Thread.sleep(300);
+ log.info("天气:" + weatherEle.getText());
+ WebElement time1Ele = webDriver.findElement(By.xpath("/html/body/div[1]/div/section/main/div[1]/div[2]/div[1]/section/main/div/div[3]/table/tbody/tr[1]/td[8]/div/div/div[1]"));
+ Thread.sleep(300);
+ log.info("时间1:" + time1Ele.getText());
+ WebElement time2Ele = webDriver.findElement(By.xpath("/html/body/div[1]/div/section/main/div[1]/div[2]/div[1]/section/main/div/div[3]/table/tbody/tr[1]/td[8]/div/div/div[2]"));
+ Thread.sleep(300);
+ log.info("时间2:" + time2Ele.getText());
+ //判断当前日期是否在此之间
+ String startTime = time1Ele.getText().substring(0, 10);
+ String endTime = time2Ele.getText().substring(0, 10);
+// boolean tf = DateTimeUtils.compareDate(startTime, endTime);
+ SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd");
+ Date date = inputFormat.parse(startTime);
+ Date date1 = inputFormat.parse(endTime);
+
+ SimpleDateFormat outputFormat = new SimpleDateFormat("MM月dd日");
+ code = "宿州灵璧供电公司发布" + weatherEle.getText() + "预警1项,(" + outputFormat.format(date) + "-" + outputFormat.format(date1) + "发布"+weatherEle.getText()+"),";
+ }
+ if ("宿州灵璧未发布预警,".equals(code)){
+ code_child = "";
+ code_chlid2 = "";
+ }
+ //一、总体情况
+ //今天的日期
+ String data2 = DateTimeUtils.getCurrentDay2();
+ //明天的日期
+ String data3 = DateTimeUtils.getTomorrowDate();
+ if (DataConfig.morningDaily.equals(taskProcessVo.getElementName())) {
+ data = data2 + "17:30至" + data3 + "08:30,";
+ } else {
+ data = data2 + "08:30至" + data2 + "17:30,";
+ }
+ if (DataConfig.morningLog.equals(taskProcessVo.getElementName())){
+ LogBean logBean = JSON.parseObject(data, LogBean.class);
+ String logDate = data3 +"08:30,";
+ if (DataConfig.eveningLog.equals(taskProcessVo.getElementName())){
+ logDate=data2 + "17:30,";
+ }
+ logBean.setEvent_detection_content(data + "灵璧供电公司电网运行正常,安全生产、电力建设、供电服务、网络与信息系统安全运行,安全生产形势平稳。截止" + logDate + "发生主网设备故障跳闸0起,配网线路故障跳闸0起,停运公变0台,停运专变0台,低压故障停电0户。施工作业计划执行正常,安全生产态势平稳有序。用于应急救援、抢修作业等物资齐全;相关队伍在新一代应急系统中位置正常,没有不在所属地域情况。\n" + code +
+ "对系统检测图层中气象实况风速、温度、降雨进行查看、对专题灾害图层地震、台风防汛进行查看均正常,未对宿州灵璧" +
+ "辖区造成影响。通过首页公共气象图层检查宿州灵璧境内公共预警正常;降雨预报、预警正常;雷达预报正常。");
+ logBean.setWarning_disposal_title(code.substring(0,code.length() - 1));
+ logBean.setWarning_disposal_content(data+code+code_child+"各单位重点做好以下工作:1、密切关注气象变化,做好防范应对准备。 2、做好电网运行方式和施工现场安排,合理安排电网运行方式。3、加强设备巡视和运行监控。各单位要加强输变配电设备巡视检查和运行监控,排查变配电站(房)的防渗、防淹隐患,备齐防汛物资和抽水设备,提前清理输配电通道周边可能影响线路安全的树竹、广告标牌、易飘浮物,防范树竹倒伏造成倒杆断线,消除各类隐患。\n"+code_chlid2);
+ logBean.setGeneral_chronicles_content(logBean.getGeneral_chronicles_content());
+ }
+
+ if ("0".equals(numClasses.getText())) {
+ dailyBean.setWarning_company(data+code + code_child);
+ dailyBean.setWarning_company_impatient(data+code + code_child);
+ dailyBean.setImportant_matters(data + "1"+code +"2"+"今日灵璧公司对本部进行通信测试值班电话均及时接通,值班人员响应速度,用词规范,电话声音清晰;值班视频均音质清晰,画面清楚,无回声、杂音。电话及网络均通畅。砀山公司对本部日常操练、值班视频均音质清晰,画面清楚,无回声、杂音,操练人员精神面貌良好,对应急工作职责清楚明晰,结果合格。队员着装、装备齐全,队伍迅速集结,在20分钟内集结完毕,队员职责明确,任务明确,队员抢修能力,应急处置能力良好,未发现其他问题。\n");
+ }else {
+ dailyBean.setWarning_company(data+code +"对系统检测图层中气象实况风速、温度、降雨进行查看、对专题灾害图层地震、台风防汛进行查看均正常,未对宿州灵璧" +
+ "辖区造成影响。通过首页公共气象图层检查宿州灵璧境内公共预警正常;降雨预报、预警正常;雷达预报正常。"+ code_child);
+ dailyBean.setWarning_company_impatient(data+code +"对系统检测图层中气象实况风速、温度、降雨进行查看、对专题灾害图层地震、台风防汛进行查看均正常,未对宿州灵璧" +
+ "辖区造成影响。通过首页公共气象图层检查宿州灵璧境内公共预警正常;降雨预报、预警正常;雷达预报正常。"+ code_child);
+
+ dailyBean.setImportant_matters(data + "1"+code +"对系统检测图层中气象实况风速、温度、降雨进行查看、对专题灾害图层地震、台风防汛进行查看均正常,未对宿州灵璧" +
+ "辖区造成影响。通过首页公共气象图层检查宿州灵璧境内公共预警正常;降雨预报、预警正常;雷达预报正常。"+"2"+"今日灵璧公司对本部进行通信测试值班电话均及时接通,值班人员响应速度,用词规范,电话声音清晰;值班视频均音质清晰,画面清楚,无回声、杂音。电话及网络均通畅。砀山公司对本部日常操练、值班视频均音质清晰,画面清楚,无回声、杂音,操练人员精神面貌良好,对应急工作职责清楚明晰,结果合格。队员着装、装备齐全,队伍迅速集结,在20分钟内集结完毕,队员职责明确,任务明确,队员抢修能力,应急处置能力良好,未发现其他问题。\n");
+
+ }
+ dailyBean.setOverall(data + "宿州灵璧公司电网运行平稳,电力建设、供电服务、网络与信息系统运行正常,安全生产形势总体平稳。\n");
+ dailyBean.setPersonnel_daily_work(dailyBean.getPersonnel_daily_work());
+ collectDataVo.setData(dailyBean.toString());
+ collectDataMapper.updateCollectData(collectDataVo);
+ log.info("天气预警日报更新完成");
+ }
+}
diff --git a/src/main/java/com/bonus/emergencyrap/service/TaskService.java b/src/main/java/com/bonus/emergencyrap/service/TaskService.java
index 6ea8788..937031c 100644
--- a/src/main/java/com/bonus/emergencyrap/service/TaskService.java
+++ b/src/main/java/com/bonus/emergencyrap/service/TaskService.java
@@ -76,4 +76,6 @@ public interface TaskService {
* @param taskVo
*/
void updateTaskStatus(TaskVo taskVo);
+
+ void runJob(TaskVo taskVo);
}
diff --git a/src/main/java/com/bonus/emergencyrap/service/TaskServiceImpl.java b/src/main/java/com/bonus/emergencyrap/service/TaskServiceImpl.java
index 11b24d2..5750b89 100644
--- a/src/main/java/com/bonus/emergencyrap/service/TaskServiceImpl.java
+++ b/src/main/java/com/bonus/emergencyrap/service/TaskServiceImpl.java
@@ -1,18 +1,21 @@
package com.bonus.emergencyrap.service;
-import com.alibaba.fastjson2.JSON;
-import com.bonus.emergencyrap.constant.TextConstants;
+
+import com.bonus.emergencyrap.config.DataConfig;
import com.bonus.emergencyrap.mapper.TaskMapper;
import com.bonus.emergencyrap.utils.DateTimeHelper;
import com.bonus.emergencyrap.utils.StringUtils;
-import com.bonus.emergencyrap.utils.TextFileUtils;
-import com.bonus.emergencyrap.utils.UploadFile;
+import com.bonus.emergencyrap.utils.*;
import com.bonus.emergencyrap.vo.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import java.text.ParseException;
import java.util.*;
+import java.text.SimpleDateFormat;
@Service
@Slf4j
@@ -21,6 +24,9 @@ public class TaskServiceImpl implements TaskService{
@Autowired
private TaskMapper mapper;
+ @Resource
+ private StepService stepService;
+
@Override
public List getTaskList(TaskVo vo) {
try{
@@ -193,4 +199,133 @@ public class TaskServiceImpl implements TaskService{
}
+ /**
+ * 执行任务
+ */
+
+ @Async
+ public void runJob(TaskVo taskVo){
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ List taskProcessList = taskVo.getList();
+ taskVo.setExeTime(sdf.format(new Date()));
+ String res =null;
+ //执行每一步操作
+ for (int i = 0; i < taskProcessList.size(); i++) {
+ try {
+ switch (taskProcessList.get(i).getInteractive()) {
+ case "文本输入":
+ if("是".equals(taskProcessList.get(i).getIsStep())){
+ replaceXpath(taskProcessList.get(i),res);
+ }
+ stepService.input(taskProcessList.get(i),res);
+ break;
+ case "单击":
+ if (taskProcessList.get(i).getXpath().contains(DataConfig.lastMonth)){
+ //判断是否是第一天,是的话,点击上月按钮,切换至上月,不是直接跳过
+ if (!DateTimeUtils.isOneDay()) {
+ replaceTr(taskProcessList.get(i+1).getXpath());
+ break;
+ }else {
+ String mothDay = DateTimeUtils.getBeforeLastMonthdate();
+ //判断上个月最后一天的位置
+ int tr = DateTimeUtils.getWeekNum(mothDay);
+ int td = DateTimeUtils.getWeekOfDate(mothDay);
+ taskProcessList.get(i+1).getXpath().replaceAll(DataConfig.tr,String.valueOf(tr));
+ taskProcessList.get(i+1).getXpath().replaceAll(DataConfig.td,String.valueOf(td));
+ }
+ }
+
+ if("是".equals(taskProcessList.get(i).getIsStep())){
+ replaceXpath(taskProcessList.get(i),res);
+ }
+ stepService.onClick(taskProcessList.get(i));
+ break;
+ case "获取对象":
+ res = stepService.getObject(taskProcessList.get(i));
+ // 在这里添加"获取对象"对应的处理逻辑
+ break;
+ case "悬停":
+ stepService.hover(taskProcessList.get(i));
+ // 在这里添加"获取对象"对应的处理逻辑
+ break;
+ case "双击":
+ // 在这里添加"获取对象"对应的处理逻辑
+ break;
+ case "采集数据":
+ if(StringUtils.isNotEmpty(taskProcessList.get(i).getRealTaskId())){
+ TaskVo param=new TaskVo(taskProcessList.get(i).getRealTaskId());
+ TaskVo vo =getTaskDetails(param);
+ res = stepService.collectData(taskProcessList.get(i),vo);
+ }else if (taskProcessList.get(i).getXpath().contains(DataConfig.yuJing)){
+ stepService.getYuJing(taskProcessList.get(i));
+ }
+
+ break;
+ case "判断时间":
+ break;
+ // 可以根据需要添加其他case
+ default:
+ // 可选:添加默认处理逻辑
+ break;
+ }
+ }catch (Exception e){
+ log.error(taskProcessList.get(i).getElementName(), e);
+
+ }
+ }
+ }
+
+ private void replaceTr(String xpath) throws ParseException {
+ //不是本月第一天
+ int tr = 1;
+ int td = 1;
+ String currentDay = DateTimeUtils.getCurrentDay();
+ int weekNum = DateTimeUtils.getWeekNum(currentDay);
+ int dayNum = DateTimeUtils.getWeekOfDate(currentDay);
+ if (dayNum == 1) {
+ if (DateTimeUtils.getMonthOneDayIs0()) {//第一天是0
+ tr = weekNum;
+ } else {
+ tr = weekNum - 1;
+ if (weekNum == 1) {
+ tr = 5;
+ }
+ }
+ td = 7;
+ } else {
+ if (DateTimeUtils.getMonthOneDayIs0()) {//第一天是0
+ tr = weekNum + 1;
+ } else {
+ tr = weekNum;
+ }
+ td = dayNum - 1;
+ }
+ xpath.replaceAll(DataConfig.tr,String.valueOf(tr));
+ xpath.replaceAll(DataConfig.td,String.valueOf(td));
+ }
+
+ /**
+ * 进行替换
+ * @param taskProcessVo
+ * @param res
+ */
+ public void replaceXpath(TaskProcessVo taskProcessVo,String res){
+ if (StringUtils.isNotEmpty(taskProcessVo.getXpath())){
+ //今天的日期
+ String data2 = DateTimeUtils.getCurrentDay2();
+ //明天的日期
+ String data3 = DateTimeUtils.getTomorrowDate();
+
+ if (taskProcessVo.getXpath().contains(DataConfig.attributeId)){
+ taskProcessVo.getXpath().replaceAll(DataConfig.attributeId,res);
+ }
+ if (taskProcessVo.getElementName().contains(DataConfig.today)){
+ taskProcessVo.getElementName().replaceAll(DataConfig.today,data2);
+ }
+ if (taskProcessVo.getElementName().contains(DataConfig.tomorrow)){
+ taskProcessVo.getElementName().replaceAll(DataConfig.tomorrow,data3);
+ }
+
+ }
+ }
}
diff --git a/src/main/java/com/bonus/emergencyrap/task/job/ActuatorJob.java b/src/main/java/com/bonus/emergencyrap/task/job/ActuatorJob.java
index 9badab3..b6ee0ac 100644
--- a/src/main/java/com/bonus/emergencyrap/task/job/ActuatorJob.java
+++ b/src/main/java/com/bonus/emergencyrap/task/job/ActuatorJob.java
@@ -16,6 +16,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
+import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Map;
@@ -28,9 +29,10 @@ import java.util.Map;
public class ActuatorJob implements Job {
private static final Logger logger = LoggerFactory.getLogger(ActuatorJob.class);
- @Autowired
+ @Resource
private TaskService taskService;
+
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
try{
@@ -39,6 +41,14 @@ public class ActuatorJob implements Job {
String taskId = context.getTrigger().getJobDataMap().get("taskId").toString();
TaskVo param=new TaskVo(taskId);
TaskVo vo =taskService.getTaskDetails(param);
+ //执行任务
+ if (vo.getFailNum()==0){
+ logger.warn("任务ID: {} 错误次数已达{}次,超过最大限制10次,本次不执行任务",
+ vo.getTaskId(), vo.getFailNum());
+ return;
+ }
+ vo.setFailNum(vo.getFailNum()-1);
+ taskService.runJob(vo);
logger.info("SampleJob 执行时间: {}", currentTime);
logger.info("任务执行器开始执行,执行任务id=="+vo.getTaskId()+"任务名称是=="+vo.getTaskName()+"执行时间=="+vo.getCron());
}catch (Exception e){
diff --git a/src/main/java/com/bonus/emergencyrap/utils/DateTimeUtils.java b/src/main/java/com/bonus/emergencyrap/utils/DateTimeUtils.java
new file mode 100644
index 0000000..279eb79
--- /dev/null
+++ b/src/main/java/com/bonus/emergencyrap/utils/DateTimeUtils.java
@@ -0,0 +1,288 @@
+package com.bonus.emergencyrap.utils;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.util.*;
+
+/**
+ * 日期操作工具类
+ */
+public class DateTimeUtils {
+
+
+
+ /**
+ * 获取当前时间是本周第几天,从周一开始计算
+ * @return
+ */
+ public static int getWeekOfDate(String dateString ) throws ParseException {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ Date dt= sdf.parse(dateString);
+ int[] weekDays = {7, 1, 2, 3, 4,5, 6};
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(dt);
+ int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
+ if (w < 0){
+ w = 0;
+ }
+ return weekDays[w];
+ }
+
+ /**'
+ *获取当前时间是本月第几周
+ * @return
+ */
+ public static int getWeekNum(String dateString ) throws ParseException {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ Date date= sdf.parse(dateString);
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(date);
+ int weekOfMonth = calendar.get(Calendar.WEEK_OF_MONTH);
+ if (getWeekOfDate(dateString) == 7){
+ weekOfMonth = weekOfMonth - 1;
+ }
+ return weekOfMonth;
+ }
+
+ /**
+ * 获取本月第一天在第几周
+ * @return true 0 false >0
+ * @throws ParseException
+ */
+ public static boolean getMonthOneDayIs0() throws ParseException {
+ LocalDate firstDayOfMonth = LocalDate.now().withDayOfMonth(1);
+ int t=getWeekNum(firstDayOfMonth.toString());
+// int t=getWeekNum(day);
+ if(t>0){
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * 获取上个月的最后一天
+ */
+ public static String getBeforeLastMonthdate(){
+ SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd");
+ Calendar calendar=Calendar.getInstance();
+ int month=calendar.get(Calendar.MONTH);
+ calendar.set(Calendar.MONTH, month-1);
+ calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
+ String format = sf.format(calendar.getTime());
+ return format;
+ }
+
+ /**
+ * 获取当前日期
+ * @return
+ */
+ public static String getCurrentDay(){
+ Date date=new Date();
+ SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+ return formatter.format(date);
+ }
+
+ /**
+ * 获取昨天的日期
+ * @return
+ */
+ public static String getLastDayYYYYMMDD(){
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ Calendar c = Calendar.getInstance();
+ c.add(Calendar.DATE, -1);//-1.昨天时间 0.当前时间 1.明天时间 *以此类推
+ String time = sdf.format(c.getTime());
+ System.out.println("昨天的时间时间是:" + time);//20190704
+ return time;
+ }
+ private static List getARandomCollectionOfData() {
+ Random random = new Random();
+ int minCount = 3; // 最小数量
+ int maxCount = 5; // 最大数量
+ int count = random.nextInt(maxCount - minCount + 1) + minCount; // 随机生成数量
+ List numbers = new ArrayList<>();
+ while (numbers.size() < count) {
+ int randomNumber = random.nextInt(6) + 2; // 随机生成1到7的数字
+ if (!numbers.contains(randomNumber)) {
+ numbers.add(randomNumber);
+ }
+ }
+ Collections.shuffle(numbers);
+ System.out.println(numbers);
+ return numbers;
+ }
+
+ public static void main(String[] args) throws ParseException {
+// System.out.println(getMMDDByNow());
+ //获取一个随机数据集合
+ List list = getARandomCollectionOfData();
+ for (int i = 0; i < list.size(); i++) {
+ String type = "";
+ String company = "";
+ if (i < 2){
+ type = "通信测试";
+ }else {
+ type = "日常操练";
+ }
+ switch(String.valueOf(list.get(i))){
+ case "1":
+ company = "宿州";
+ break;
+ case "2":
+ company = "埇桥";
+ break;
+ case "3":
+ company = "砀山";
+ break;
+ case "4":
+ company = "萧县";
+ break;
+ case "5":
+ company = "灵璧";
+ break;
+ case "6":
+ company = "城郊";
+ break;
+ case "7":
+ company = "泗县";
+ break;
+ default:
+ break;
+ }
+ System.out.println(type);
+ System.out.println(company);
+ System.out.println(i+1);
+ System.out.println("-------------------");
+ }
+ }
+ public static String getCurrentDay2(){
+ Date date=new Date();
+ SimpleDateFormat formatter = new SimpleDateFormat("MM月dd日");
+ return formatter.format(date);
+ }
+
+ /**
+ * 获取昨天的日期
+ * @return
+ */
+ public static String getLastDay(){
+ SimpleDateFormat sdf = new SimpleDateFormat("MM月dd日");
+ Calendar c = Calendar.getInstance();
+ c.add(Calendar.DATE, -1);//-1.昨天时间 0.当前时间 1.明天时间 *以此类推
+ String time = sdf.format(c.getTime());
+ System.out.println("昨天的时间时间是:" + time);//20190704
+ return time;
+ }
+ /**
+ * 获取明天的日期
+ * @return
+ */
+ public static String getTomorrowDate() {
+ SimpleDateFormat sdf = new SimpleDateFormat("MM月dd日");
+ Calendar c = Calendar.getInstance();
+ c.add(Calendar.DATE, 1);//-1.昨天时间 0.当前时间 1.明天时间 *以此类推
+ String time = sdf.format(c.getTime());
+ System.out.println("昨天的时间时间是:" + time);//20190704
+ return time;
+ }
+ /**
+ * 获取当前月日
+ * @return
+ */
+ public static String getCurrentDayByMonth(){
+ Date date=new Date();
+ SimpleDateFormat formatter = new SimpleDateFormat("MM月dd日");
+ return formatter.format(date);
+ }
+ public static String getMMDDByNow(){
+ Date date=new Date();
+ SimpleDateFormat formatter = new SimpleDateFormat("MMdd");
+ return formatter.format(date);
+ }
+
+ /**
+ * 判断当前日期是否为本月第一天
+ * @return
+ */
+ public static boolean isOneDay(){
+ // TODO Auto-generated method stub
+ Date now = new Date();
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");//可以方便地修改日期格式
+ String curr = dateFormat.format( now );
+ System.out.println("当前日期:" + curr);
+
+ Calendar c = Calendar.getInstance();//可以对每个时间域单独修改
+
+ int year = c.get(Calendar.YEAR);
+ int month = c.get(Calendar.MONTH);
+ int date = c.get(Calendar.DATE);
+ if(date == 1){
+ System.out.println(curr + "是第一天");
+ return true;
+ }
+ else{
+ System.out.println(curr + "不是第一天");
+ return false;
+ }
+ }
+
+ /**
+ * 判断当前时间是否在[startTime, endTime]区间,注意三个参数的时间格式要一致
+ * @param startTime
+ * @param endTime
+ * @return 在时间段内返回true,不在返回false
+ */
+ public static boolean isEffectiveDate(String startTime, String endTime){
+ /**
+ * 判断当前时间是否在一个时间段内 HH:mm 格式
+ */
+ SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
+ String now = sdf.format(new Date());
+ Date nowTime;
+ try{
+ nowTime = sdf.parse(now);
+ Date startTime1 = sdf.parse(startTime);
+ Date endTime1 = sdf.parse(endTime);
+ if (nowTime.getTime() == startTime1.getTime()
+ || nowTime.getTime() == endTime1.getTime()) {
+ return true;
+ }
+
+ Calendar date = Calendar.getInstance();
+ date.setTime(nowTime);
+
+ Calendar begin = Calendar.getInstance();
+ begin.setTime(startTime1);
+
+ Calendar end = Calendar.getInstance();
+ end.setTime(endTime1);
+
+ return date.after(begin) && date.before(end);
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return false;
+ }
+
+ public static boolean compareDate(String date1, String date2) throws ParseException {
+ boolean tf = false;
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
+
+ // 定义起始日期和结束日期
+ Date startDate = dateFormat.parse(date1 + " 00:00:00");
+ Date endDate = dateFormat.parse(date2 + " 23:59:59");
+
+ // 定义要判断的日期
+ Date dateToCheck = new Date();
+
+ // 判断日期是否在范围内
+ if (startDate.compareTo(dateToCheck) <= 0 && endDate.compareTo(dateToCheck) >= 0) {
+ System.out.println("日期在范围内");
+ tf = true;
+ } else {
+ tf = false;
+ System.out.println("日期不在范围内");
+ }
+ return tf;
+ }
+}
diff --git a/src/main/java/com/bonus/emergencyrap/vo/AnnexEightBean.java b/src/main/java/com/bonus/emergencyrap/vo/AnnexEightBean.java
new file mode 100644
index 0000000..b699fbe
--- /dev/null
+++ b/src/main/java/com/bonus/emergencyrap/vo/AnnexEightBean.java
@@ -0,0 +1,78 @@
+package com.bonus.emergencyrap.vo;
+
+import lombok.Data;
+
+/**
+ * 日报实体类
+ * 附件八-输配电线停运及恢复
+ * @author ztq
+ */
+@Data
+public class AnnexEightBean {
+
+ /**
+ * 特高压
+ */
+ private String transmit_electricity_add_outage_uvh;
+ private String transmit_electricity_add_repair_uvh;
+ private String transmit_electricity_add_no_repair_uvh;
+
+ private String transmit_electricity_cumulative_outage_uvh;
+ private String transmit_electricity_cumulative_repair_uvh;
+ private String transmit_electricity_cumulative_no_repair_uvh;
+
+ /**
+ * 500kv
+ */
+ private String transmit_electricity_add_outage_five;
+ private String transmit_electricity_add_repair_five;
+ private String transmit_electricity_add_no_repair_five;
+
+ private String transmit_electricity_cumulative_outage_five;
+ private String transmit_electricity_cumulative_repair_five;
+ private String transmit_electricity_cumulative_no_repair_five;
+
+ /**
+ * 220/300kv
+ */
+ private String transmit_electricity_add_outage_two;
+ private String transmit_electricity_add_repair_two;
+ private String transmit_electricity_add_no_repair_two;
+
+ private String transmit_electricity_cumulative_outage_two;
+ private String transmit_electricity_cumulative_repair_two;
+ private String transmit_electricity_cumulative_no_repair_two;
+
+ /**
+ * 110/66kv
+ */
+ private String transmit_electricity_add_outage_one;
+ private String transmit_electricity_add_repair_one;
+ private String transmit_electricity_add_no_repair_one;
+
+ private String transmit_electricity_cumulative_outage_one;
+ private String transmit_electricity_cumulative_repair_one;
+ private String transmit_electricity_cumulative_no_repair_one;
+
+ /**
+ * 35kv
+ */
+ private String transmit_electricity_add_outage_three;
+ private String transmit_electricity_add_repair_three;
+ private String transmit_electricity_add_no_repair_three;
+
+ private String transmit_electricity_cumulative_outage_three;
+ private String transmit_electricity_cumulative_repair_three;
+ private String transmit_electricity_cumulative_no_repair_three;
+
+ /**
+ * 10kv
+ */
+ private String transmit_electricity_add_outage_ten;
+ private String transmit_electricity_add_repair_ten;
+ private String transmit_electricity_add_no_repair_ten;
+
+ private String transmit_electricity_cumulative_outage_ten;
+ private String transmit_electricity_cumulative_repair_ten;
+ private String transmit_electricity_cumulative_no_repair_ten;
+}
diff --git a/src/main/java/com/bonus/emergencyrap/vo/AnnexElevenBean.java b/src/main/java/com/bonus/emergencyrap/vo/AnnexElevenBean.java
new file mode 100644
index 0000000..6186ee8
--- /dev/null
+++ b/src/main/java/com/bonus/emergencyrap/vo/AnnexElevenBean.java
@@ -0,0 +1,23 @@
+package com.bonus.emergencyrap.vo;
+
+import lombok.Data;
+
+/**
+ * 包名称:com.bonus.autoweb.UI.entity
+ * 类名称:AnnexTenBean
+ * 类描述:附件十一
+ * 创建人:@author tqzhang
+ * 创建时间:2023年08月01日 13:23
+ */
+@Data
+public class AnnexElevenBean {
+ private String uhv;
+ private String fiveHundredKv;
+ private String twoHundredTwentyKv;
+ private String oneHundredTenKv;
+ private String thirtyFiveKv;
+ private String tenKv;
+ private String averageWaterLevel;
+ private String measuredValue;
+ private String actionHasBeenTaken;
+}
diff --git a/src/main/java/com/bonus/emergencyrap/vo/AnnexFiveBean.java b/src/main/java/com/bonus/emergencyrap/vo/AnnexFiveBean.java
new file mode 100644
index 0000000..e28ffff
--- /dev/null
+++ b/src/main/java/com/bonus/emergencyrap/vo/AnnexFiveBean.java
@@ -0,0 +1,26 @@
+package com.bonus.emergencyrap.vo;
+
+import lombok.Data;
+
+/**
+ * 包名称:com.bonus.autoweb.UI.entity
+ * 类名称:AnnexFiveBean
+ * 类描述:附件五 入境筛查和集中观察场所供电保障情况表
+ * 创建人:@author tqzhang
+ * 创建时间:2023年07月27日 11:29
+ */
+
+@Data
+public class AnnexFiveBean {
+ //入境筛选和集中观察场所数量
+ private String airportPort;
+ private String venueHospital;
+ private String guesthouseHotel;
+ private String safeguardPersonnel;
+ //投入力量
+ private String electricallyGuaranteedVehicles;
+ private String powerGenerationVehicles;
+ private String dynamo;
+ private String remark;
+
+}
diff --git a/src/main/java/com/bonus/emergencyrap/vo/AnnexFourBean.java b/src/main/java/com/bonus/emergencyrap/vo/AnnexFourBean.java
new file mode 100644
index 0000000..d171a2e
--- /dev/null
+++ b/src/main/java/com/bonus/emergencyrap/vo/AnnexFourBean.java
@@ -0,0 +1,58 @@
+package com.bonus.emergencyrap.vo;
+
+import lombok.Data;
+
+/**
+ * 日报实体类
+ * 附件四-疫情防控供电保障情况统计表
+ * @author zys
+ */
+@Data
+public class AnnexFourBean {
+
+ /**
+ * 定点医院
+ */
+ private String designated_hospitals;
+
+ /**
+ * 发热门诊
+ */
+ private String fever_clinic;
+
+ /**
+ * 防疫用品企业
+ */
+ private String epidemic_enterprise;
+
+ /**
+ * 其他重要用户
+ */
+ private String other_important_users;
+
+ /**
+ * 客户用电保障人员
+ */
+ private String customer_power_personnel;
+
+ /**
+ * 电网运维保障人员
+ */
+ private String power_devops_personnel;
+
+ /**
+ * 保电车辆
+ */
+ private String electrically_vehicles;
+
+ /**
+ * 应急发电车
+ */
+ private String emergency_power_vehicles;
+
+ /**
+ * 应急发电机
+ */
+ private String emergency_generator;
+
+}
diff --git a/src/main/java/com/bonus/emergencyrap/vo/AnnexFourteenBean.java b/src/main/java/com/bonus/emergencyrap/vo/AnnexFourteenBean.java
new file mode 100644
index 0000000..e026b30
--- /dev/null
+++ b/src/main/java/com/bonus/emergencyrap/vo/AnnexFourteenBean.java
@@ -0,0 +1,24 @@
+package com.bonus.emergencyrap.vo;
+
+import lombok.Data;
+
+/**
+ * 包名称:com.bonus.autoweb.UI.entity
+ * 类名称:AnnexTwelveBean
+ * 类描述:附件十四 超设计风力线路数量统计表
+ * 创建人:@author tqzhang
+ * 创建时间:2023年07月27日 13:15
+ */
+@Data
+public class AnnexFourteenBean {
+ private String uhv;
+ private String fiveHundredKv;
+ private String twoHundredTwentyKv;
+ private String oneHundredTenKv;
+ private String thirtyFiveKv;
+ private String tenKv;
+ private String averageWaterLevel;
+ private String measuredValue;
+ private String designValues;
+ private String actionHasBeenTaken;
+}
diff --git a/src/main/java/com/bonus/emergencyrap/vo/AnnexNineBean.java b/src/main/java/com/bonus/emergencyrap/vo/AnnexNineBean.java
new file mode 100644
index 0000000..b0a838b
--- /dev/null
+++ b/src/main/java/com/bonus/emergencyrap/vo/AnnexNineBean.java
@@ -0,0 +1,45 @@
+package com.bonus.emergencyrap.vo;
+
+/**
+ * 日报实体类
+ * 附件九-台区用户停电及恢复
+ * @author ztq
+ */
+
+import lombok.Data;
+
+@Data
+public class AnnexNineBean {
+
+ /**
+ * 台区
+ */
+ private String add_blackout_tai_district;
+ private String add_repair_tai_district;
+ private String add_no_repair_tai_district;
+
+ private String cumulative_blackout_tai_district;
+ private String cumulative_repair_tai_district;
+ private String cumulative_no_repair_tai_district;
+
+ /**
+ * 用户
+ */
+ private String add_blackout_user;
+ private String add_repair_user;
+ private String add_no_repair_user;
+
+ private String cumulative_blackout_user;
+ private String cumulative_repair_user;
+ private String cumulative_no_repair_user;
+
+ /**
+ * 出动抢修力量
+ * 人员 车辆
+ */
+ private String add_power_personnel;
+ private String add_power_vehicle;
+
+ private String cumulative_power_personnel;
+ private String cumulative_power_vehicle;
+}
diff --git a/src/main/java/com/bonus/emergencyrap/vo/AnnexOneBean.java b/src/main/java/com/bonus/emergencyrap/vo/AnnexOneBean.java
new file mode 100644
index 0000000..6bfc68a
--- /dev/null
+++ b/src/main/java/com/bonus/emergencyrap/vo/AnnexOneBean.java
@@ -0,0 +1,55 @@
+package com.bonus.emergencyrap.vo;
+
+import lombok.Data;
+
+/**
+ * 日报实体类
+ * 附件一-操练情况统计表
+ * @author zys
+ */
+@Data
+public class AnnexOneBean {
+
+ /**
+ * 操练内容(选择框)
+ * “四要素”检查
+ * 通信测试
+ * 重要站线视频连线检查
+ */
+ private String exercise_content;
+
+ /**
+ * 操练数量
+ * 人员
+ */
+ private String exercise_person_num;
+
+ /**
+ * 操练数量
+ * 车辆
+ */
+ private String exercise_vehicle_num;
+
+ /**
+ * 操练数量
+ * 发电车
+ */
+ private String exercise_power_vehicle_num;
+
+ /**
+ * 操练数量
+ * 发电机
+ */
+ private String exercise_dynamo_num;
+
+ /**
+ * 操练发现的问题
+ */
+ private String exercise_find_problems;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+}
diff --git a/src/main/java/com/bonus/emergencyrap/vo/AnnexSevenBean.java b/src/main/java/com/bonus/emergencyrap/vo/AnnexSevenBean.java
new file mode 100644
index 0000000..9111777
--- /dev/null
+++ b/src/main/java/com/bonus/emergencyrap/vo/AnnexSevenBean.java
@@ -0,0 +1,69 @@
+package com.bonus.emergencyrap.vo;
+
+import lombok.Data;
+
+/**
+ * 日报实体类
+ * 附件七-变电站停运及恢复
+ * @author ztq
+ */
+@Data
+public class AnnexSevenBean {
+
+ /**
+ * 特高压
+ */
+ private String power_substation_add_outage_uvh;
+ private String power_substation_add_repair_uvh;
+ private String power_substation_add_no_repair_uvh;
+
+ private String power_substation_cumulative_outage_uvh;
+ private String power_substation_cumulative_repair_uvh;
+ private String power_substation_cumulative_no_repair_uvh;
+
+ /**
+ * 500kv
+ */
+ private String power_substation_add_outage_five;
+ private String power_substation_add_repair_five;
+ private String power_substation_add_no_repair_five;
+
+ private String power_substation_cumulative_outage_five;
+ private String power_substation_cumulative_repair_five;
+ private String power_substation_cumulative_no_repair_five;
+
+ /**
+ * 220/300kv
+ */
+ private String power_substation_add_outage_two;
+ private String power_substation_add_repair_two;
+ private String power_substation_add_no_repair_two;
+
+ private String power_substation_cumulative_outage_two;
+ private String power_substation_cumulative_repair_two;
+ private String power_substation_cumulative_no_repair_two;
+
+ /**
+ * 110/66kv
+ */
+ private String power_substation_add_outage_one;
+ private String power_substation_add_repair_one;
+ private String power_substation_add_no_repair_one;
+
+ private String power_substation_cumulative_outage_one;
+ private String power_substation_cumulative_repair_one;
+ private String power_substation_cumulative_no_repair_one;
+
+ /**
+ * 35kv
+ */
+ private String power_substation_add_outage_three;
+ private String power_substation_add_repair_three;
+ private String power_substation_add_no_repair_three;
+
+ private String power_substation_cumulative_outage_three;
+ private String power_substation_cumulative_repair_three;
+ private String power_substation_cumulative_no_repair_three;
+
+
+}
diff --git a/src/main/java/com/bonus/emergencyrap/vo/AnnexSixBean.java b/src/main/java/com/bonus/emergencyrap/vo/AnnexSixBean.java
new file mode 100644
index 0000000..4c76f05
--- /dev/null
+++ b/src/main/java/com/bonus/emergencyrap/vo/AnnexSixBean.java
@@ -0,0 +1,47 @@
+package com.bonus.emergencyrap.vo;
+
+import lombok.Data;
+
+/**
+ * 日报实体类
+ * 附件六-预警及应急响应情况跟踪表
+ * @author zys
+ */
+@Data
+public class AnnexSixBean {
+
+ /**
+ * 领导及指挥人员
+ */
+ private String leaders_command_staff;
+
+ /**
+ * 投入力量
+ * 人员
+ */
+ private String input_amount_person;
+
+ /**
+ * 投入力量
+ * 车辆
+ */
+ private String input_amount_vehicle;
+
+ /**
+ * 投入力量
+ * 发电车
+ */
+ private String input_amount_power_vehicle;
+
+ /**
+ * 投入力量
+ * 发电机
+ */
+ private String input_amount_dynamo;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+}
diff --git a/src/main/java/com/bonus/emergencyrap/vo/AnnexTenBean.java b/src/main/java/com/bonus/emergencyrap/vo/AnnexTenBean.java
new file mode 100644
index 0000000..7a1165f
--- /dev/null
+++ b/src/main/java/com/bonus/emergencyrap/vo/AnnexTenBean.java
@@ -0,0 +1,24 @@
+package com.bonus.emergencyrap.vo;
+
+import lombok.Data;
+
+/**
+ * 包名称:com.bonus.autoweb.UI.entity
+ * 类名称:AnnexTenBean
+ * 类描述:附件十
+ * 创建人:@author tqzhang
+ * 创建时间:2023年08月01日 13:23
+ */
+@Data
+public class AnnexTenBean {
+ private String uhv;
+ private String fiveHundredKv;
+ private String twoHundredTwentyKv;
+ private String oneHundredTenKv;
+ private String thirtyFiveKv;
+ private String tenKv;
+ private String averageWaterLevel;
+ private String measuredValue;
+ private String designValues;
+ private String actionHasBeenTaken;
+}
diff --git a/src/main/java/com/bonus/emergencyrap/vo/AnnexThirteenBean.java b/src/main/java/com/bonus/emergencyrap/vo/AnnexThirteenBean.java
new file mode 100644
index 0000000..643d07e
--- /dev/null
+++ b/src/main/java/com/bonus/emergencyrap/vo/AnnexThirteenBean.java
@@ -0,0 +1,24 @@
+package com.bonus.emergencyrap.vo;
+
+import lombok.Data;
+
+/**
+ * 包名称:com.bonus.autoweb.UI.entity
+ * 类名称:AnnexTwelveBean
+ * 类描述:附件十三 超设计水位线路数量统计表(仅6月-9月报送)
+ * 创建人:@author tqzhang
+ * 创建时间:2023年07月27日 13:15
+ */
+@Data
+public class AnnexThirteenBean {
+ private String uhv;
+ private String fiveHundredKv;
+ private String twoHundredTwentyKv;
+ private String oneHundredTenKv;
+ private String thirtyFiveKv;
+ private String tenKv;
+ private String averageWaterLevel;
+ private String measuredValue;
+ private String designValues;
+ private String actionHasBeenTaken;
+}
diff --git a/src/main/java/com/bonus/emergencyrap/vo/AnnexThreeBean.java b/src/main/java/com/bonus/emergencyrap/vo/AnnexThreeBean.java
new file mode 100644
index 0000000..a5f4d0d
--- /dev/null
+++ b/src/main/java/com/bonus/emergencyrap/vo/AnnexThreeBean.java
@@ -0,0 +1,55 @@
+package com.bonus.emergencyrap.vo;
+
+import lombok.Data;
+
+/**
+ * 包名称:com.bonus.autoweb.UI.entity
+ * 类名称:AnnexThreeBean
+ * 类描述:附件三 电网生产相关专业员工感染情况统计表
+ * 创建人:@author tqzhang
+ * 创建时间:2023年07月27日 11:18
+ */
+
+@Data
+public class AnnexThreeBean {
+ //合计 新增
+ private String totalAddDiagnosed;
+ private String totalAddHeal;
+ private String totalAddSuspected;
+ //合计 现有
+ private String totalExistingDiagnosed;
+ private String totalExistingHeal;
+ private String totalExistingSuspected;
+ //电网调度 新增
+ private String dispatchAddDiagnosed;
+ private String dispatchAddHeal;
+ private String dispatchAddSuspected;
+ //电网调度 现有
+ private String dispatchExistingDiagnosed;
+ private String dispatchExistingHeal;
+ private String dispatchExistingSuspected;
+ //运维维修 新增
+ private String repairAddDiagnosed;
+ private String repairAddHeal;
+ private String repairAddSuspected;
+ //运维维修 现有
+ private String repairExistingDiagnosed;
+ private String repairExistingHeal;
+ private String repairExistingSuspected;
+ //营销服务 新增
+ private String marketingAddDiagnosed;
+ private String marketingAddHeal;
+ private String marketingAddSuspected;
+ //营销服务 现有
+ private String marketingExistingDiagnosed;
+ private String marketingExistingHeal;
+ private String marketingExistingSuspected;
+ //电网建设 新增
+ private String constructionAddDiagnosed;
+ private String constructionAddHeal;
+ private String constructionAddSuspected;
+ //电网建设 现有
+ private String constructionExistingDiagnosed;
+ private String constructionExistingHeal;
+ private String constructionExistingSuspected;
+}
diff --git a/src/main/java/com/bonus/emergencyrap/vo/AnnexTwelveBean.java b/src/main/java/com/bonus/emergencyrap/vo/AnnexTwelveBean.java
new file mode 100644
index 0000000..02b2770
--- /dev/null
+++ b/src/main/java/com/bonus/emergencyrap/vo/AnnexTwelveBean.java
@@ -0,0 +1,24 @@
+package com.bonus.emergencyrap.vo;
+
+import lombok.Data;
+
+/**
+ * 包名称:com.bonus.autoweb.UI.entity
+ * 类名称:AnnexTwelveBean
+ * 类描述:附件十二 超设计水位变电站数量统计表(仅6月-9月报送)
+ * 创建人:@author tqzhang
+ * 创建时间:2023年07月27日 13:15
+ */
+@Data
+public class AnnexTwelveBean {
+ private String uhv;
+ private String fiveHundredKv;
+ private String twoHundredTwentyKv;
+ private String oneHundredTenKv;
+ private String thirtyFiveKv;
+ private String tenKv;
+ private String averageWaterLevel;
+ private String measuredValue;
+ private String designValues;
+ private String actionHasBeenTaken;
+}
diff --git a/src/main/java/com/bonus/emergencyrap/vo/AnnexTwoBean.java b/src/main/java/com/bonus/emergencyrap/vo/AnnexTwoBean.java
new file mode 100644
index 0000000..97393e9
--- /dev/null
+++ b/src/main/java/com/bonus/emergencyrap/vo/AnnexTwoBean.java
@@ -0,0 +1,53 @@
+package com.bonus.emergencyrap.vo;
+
+import lombok.Data;
+
+/**
+ * 日报实体类
+ * 附件二-资源核查问题数量统计表
+ * @author zys
+ */
+@Data
+public class AnnexTwoBean {
+
+ /**
+ * 核查数量
+ * 人员
+ */
+ private String verification_person_num;
+
+ /**
+ * 核查数量
+ * 队伍
+ */
+ private String verification_team_num;
+
+ /**
+ * 核查数量
+ * 装备
+ */
+ private String verification_equip_num;
+
+ /**
+ * 核查数量
+ * 物资
+ */
+ private String verification_material_num;
+
+ /**
+ * 核查数量
+ * 车辆
+ */
+ private String verification_vehicle_num;
+
+ /**
+ * 核查发现的问题
+ */
+ private String verification_find_problems;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+}
diff --git a/src/main/java/com/bonus/emergencyrap/vo/CollectDataVo.java b/src/main/java/com/bonus/emergencyrap/vo/CollectDataVo.java
new file mode 100644
index 0000000..dba8bad
--- /dev/null
+++ b/src/main/java/com/bonus/emergencyrap/vo/CollectDataVo.java
@@ -0,0 +1,19 @@
+package com.bonus.emergencyrap.vo;
+
+import lombok.Data;
+
+/**
+ * @author 马三炮
+ * @date 2025/9/28
+ */
+@Data
+public class CollectDataVo {
+
+ private String id;
+
+ private String type;
+
+ private String updateTime;
+
+ private String data;
+}
diff --git a/src/main/java/com/bonus/emergencyrap/vo/DailyBean.java b/src/main/java/com/bonus/emergencyrap/vo/DailyBean.java
new file mode 100644
index 0000000..64ed6a6
--- /dev/null
+++ b/src/main/java/com/bonus/emergencyrap/vo/DailyBean.java
@@ -0,0 +1,140 @@
+package com.bonus.emergencyrap.vo;
+
+import lombok.Data;
+
+/**
+ * 日报实体类
+ * @author zys
+ */
+@Data
+public class DailyBean {
+
+ /**
+ * 总体情况
+ */
+ private String overall;
+
+ /**
+ * 重要事项
+ */
+ private String important_matters;
+
+ /**
+ * 安全生产情况
+ */
+ private String safety_production;
+
+ /**
+ * 值班员日常工作情况
+ */
+ private String personnel_daily_work;
+
+ /**
+ * 供电保障情况
+ * 今日重大活动保电情况
+ */
+ private String power_guarantee_today_work;
+
+ /**
+ * 供电保障情况
+ * 明日重大保电情况
+ */
+ private String power_guarantee_tomorrow_work;
+
+ /**
+ * 供电保障情况
+ * 今日疫情防控应急保电情况
+ */
+ private String power_guarantee_today_pestilence;
+
+ /**
+ * 预警及应急响应情况
+ * 公司预警情况
+ */
+ private String warning_company;
+
+ /**
+ * 预警及应急响应情况
+ * 公司应急响应情况
+ */
+ private String warning_company_impatient;
+
+ /**
+ * 预警及应急响应情况
+ * 社会突发事件救援及处置情况
+ */
+ private String warning_society_emergency;
+
+ /**
+ * 其他情况说明
+ */
+ private String other_situations;
+
+ /**
+ * 附件一
+ */
+ private AnnexOneBean oneBean;
+
+ /**
+ * 附件二
+ */
+ private AnnexTwoBean twoBean;
+
+ /**
+ * 附件三
+ */
+ private AnnexThreeBean threeBean;
+
+ /**
+ * 附件四
+ */
+ private AnnexFourBean fourBean;
+
+ /**
+ * 附件五
+ */
+ private AnnexFiveBean fiveBean;
+
+ /**
+ * 附件六
+ */
+ private AnnexSixBean sixBean;
+
+ /**
+ * 附件七
+ */
+ private AnnexSevenBean sevenBean;
+
+ /**
+ * 附件八
+ */
+ private AnnexEightBean eightBean;
+
+ /**
+ * 附件九
+ */
+ private AnnexNineBean nineBean;
+
+ /**
+ * 附件十
+ */
+ private AnnexTenBean tenBean;
+ /**
+ * 附件十一
+ */
+ private AnnexElevenBean elevenBean;
+ /**
+ * 附件十二
+ */
+ private AnnexTwelveBean twelveBean;
+
+ /**
+ * 附件十三
+ */
+ private AnnexThirteenBean thirteenBean;
+
+ /**
+ * 附件十四
+ */
+ private AnnexFourteenBean fourteenBean;
+}
diff --git a/src/main/java/com/bonus/emergencyrap/vo/LogBean.java b/src/main/java/com/bonus/emergencyrap/vo/LogBean.java
new file mode 100644
index 0000000..de1d4e3
--- /dev/null
+++ b/src/main/java/com/bonus/emergencyrap/vo/LogBean.java
@@ -0,0 +1,108 @@
+package com.bonus.emergencyrap.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 日志实体类
+ * @author zys
+ */
+@Data
+public class LogBean implements Serializable {
+
+ /**
+ * 天气
+ */
+ private String weather;
+ /**
+ * 最低气温 0/10
+ */
+ private String min_temperature;
+
+ /**
+ * 最高气温 0/10
+ */
+ private String max_temperature;
+
+ /**
+ * 事件检测标题
+ */
+ private String event_detection_title;
+
+ /**
+ * 事件检测内容
+ */
+ private String event_detection_content;
+
+ /**
+ * 保电工作标题
+ */
+ private String power_work_title;
+
+ /**
+ * 保电工作内容
+ */
+ private String power_work_content;
+
+ /**
+ * 资源核查情况标题
+ */
+ private String resource_check_title;
+
+ /**
+ * 资源核查情况内容
+ */
+ private String resource_check_content;
+
+ /**
+ * 通信测试标题
+ */
+ private String communications_test_title;
+
+ /**
+ * 通信测试内容
+ */
+ private String communications_test_content;
+
+ /**
+ * 日常操作情况标题
+ */
+ private String daily_operation_title;
+
+ /**
+ * 日常操作情况内容
+ */
+ private String daily_operation_content;
+
+ /**
+ * 日报提报情况标题
+ */
+ private String daily_submission_title;
+
+ /**
+ * 日报提报情况内容
+ */
+ private String daily_submission_content;
+
+ /**
+ * 预警处置标题
+ */
+ private String warning_disposal_title;
+
+ /**
+ * 预警处置内容
+ */
+ private String warning_disposal_content;
+
+ /**
+ * 一般记事标题
+ */
+ private String general_chronicles_title;
+
+ /**
+ * 一般记事内容
+ */
+ private String general_chronicles_content;
+
+}
diff --git a/src/main/java/com/bonus/emergencyrap/vo/TaskProcessVo.java b/src/main/java/com/bonus/emergencyrap/vo/TaskProcessVo.java
index 600200f..5877c8e 100644
--- a/src/main/java/com/bonus/emergencyrap/vo/TaskProcessVo.java
+++ b/src/main/java/com/bonus/emergencyrap/vo/TaskProcessVo.java
@@ -28,7 +28,7 @@ public class TaskProcessVo {
private double sleepTime;
/**
* 交互方式
- * 点击 、输入 、双击、单击、无操作
+ * 悬停 、文本输入 、双击、单击、获取对象、数据采集、单选、多选
*/
private String interactive;
/**
diff --git a/src/main/resources/mapper/CollectDataMapper.xml b/src/main/resources/mapper/CollectDataMapper.xml
new file mode 100644
index 0000000..53ff240
--- /dev/null
+++ b/src/main/resources/mapper/CollectDataMapper.xml
@@ -0,0 +1,14 @@
+
+
+
+
+ update tb_collect_data set data = #{date} where id =#{id}
+
+
+
+