3a1efe863c0cf30683870c204fb9b55ff6c35500..3ca43c0f02fd9974eb087c79f411a3d55f806613
6 天以前 elkers
添加监控
3ca43c 对比 | 目录
6 天以前 elkers
添加监控
e7c3cc 对比 | 目录
6 天以前 elkers
添加监控
7d84a1 对比 | 目录
6 天以前 elkers
修改yml
0d6261 对比 | 目录
6 天以前 elkers
修改yml
a01614 对比 | 目录
6 天以前 elkers
添加报警记录
c1c91b 对比 | 目录
6 天以前 elkers
添加报警记录
60041d 对比 | 目录
已修改9个文件
已添加22个文件
2248 ■■■■■ 文件已修改
pom.xml 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/entity/request/heartbeatdata/ReqCreateHeartbeatData.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/entity/request/heartbeatdata/ReqModifyHeartbeatData.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/entity/request/monitorvideostreaming/ReqCreateMonitorVideoStreaming.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/entity/request/monitorvideostreaming/ReqModifyMonitorVideoStreaming.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/entity/search/SearchHeartbeatData.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/entity/search/SearchMonitorVideoStreaming.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/host/controller/HeartbeatDataController.java 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/host/controller/MonitorVideoStreamingController.java 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/repository/impl/HeartbeatDataMapperImpl.java 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/repository/impl/MonitorVideoStreamingMapperImpl.java 161 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/repository/impl/WaterFacilityParameterMapperImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/repository/mapper/HeartbeatDataMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/repository/mapper/MonitorVideoStreamingMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/repository/mapper/WaterFacilityParameterMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/repository/po/DataUploadRecordPO.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/repository/po/HeartbeatDataPO.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/repository/po/MonitorVideoStreamingPO.java 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/repository/vo/FacilityParameterDataVO.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/repository/vo/HeartbeatDataVO.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/repository/vo/MonitorVideoStreamingVO.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/service/DataUploadRecordService.java 125 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/service/HeartbeatDataService.java 251 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/service/MonitorVideoStreamingService.java 425 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/service/WaterFacilityParameterService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/service/convert/HeartbeatDataConvert.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/service/convert/MonitorVideoStreamingConvert.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanjing/water/service/quartz/QuartzExecutor.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-local.yml 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/static/job-list.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/nanjing/water/GenCodeGauss.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -10,10 +10,10 @@
    </parent>
    <groupId>com.nanjing.water</groupId>
    <artifactId>nanjing-station</artifactId>
    <artifactId>nanjing-station-service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>nanjing-station-service</name>
    <description>The service which yyy of xxx project</description>
    <description>The service which name is nanjing-station of water</description>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -297,6 +297,16 @@
                <package.buildName></package.buildName>
            </properties>
        </profile>
        <!-- 本地化部署环境 -->
        <profile>
            <id>local</id>
            <properties>
                <!-- 设置参数“package.environment”的值 -->
                <package.environment>local</package.environment>
                <package.buildName></package.buildName>
            </properties>
        </profile>
    </profiles>
    <build>
src/main/java/com/nanjing/water/entity/request/heartbeatdata/ReqCreateHeartbeatData.java
对比新文件
@@ -0,0 +1,45 @@
/**
#                                                    __----~~~~~~~~~~~------___
#                                   .  .   ~~//====......          __--~ ~~
#                   -.            \_|//     |||\\  ~~~~~~::::... /~
#                ___-==_       _-~o~  \/    |||  \\            _/~~-
#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
#          '         ~-|      /|    |-~\~~       __--~~
#                      |-~~-_/ |    |   ~\_   _-~            /\
#                           /  \     \__   \/~                \__
#                       _--~ _/ | .-~~____--~-/                  ~~==.
#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
#                                 -_     ~\      ~~---l__i__i__i--~~_/
#                                 _-~-__   ~)  \--______________--~~
#                               //.-~~~-~_--~- |-------~~~~~~~~
#                                      //.-~~~--\
#                  神兽保佑
#                  永无BUG!
*/
package com.nanjing.water.entity.request.heartbeatdata;
import lombok.Data;
/**
 * HeartbeatData
 * @author lin.liu
 */
@Data
public class ReqCreateHeartbeatData {
    /**
     * null
     */
    private String dataKey;
    /**
     * null
     */
    private Integer dataValue;
    /**
     * null
     */
    private String remark;
}
src/main/java/com/nanjing/water/entity/request/heartbeatdata/ReqModifyHeartbeatData.java
对比新文件
@@ -0,0 +1,49 @@
/**
#                                                    __----~~~~~~~~~~~------___
#                                   .  .   ~~//====......          __--~ ~~
#                   -.            \_|//     |||\\  ~~~~~~::::... /~
#                ___-==_       _-~o~  \/    |||  \\            _/~~-
#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
#          '         ~-|      /|    |-~\~~       __--~~
#                      |-~~-_/ |    |   ~\_   _-~            /\
#                           /  \     \__   \/~                \__
#                       _--~ _/ | .-~~____--~-/                  ~~==.
#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
#                                 -_     ~\      ~~---l__i__i__i--~~_/
#                                 _-~-__   ~)  \--______________--~~
#                               //.-~~~-~_--~- |-------~~~~~~~~
#                                      //.-~~~--\
#                  神兽保佑
#                  永无BUG!
*/
package com.nanjing.water.entity.request.heartbeatdata;
import lombok.Data;
/**
 * HeartbeatData
 * @author lin.liu
 */
@Data
public class ReqModifyHeartbeatData {
    /**
     * null
     */
    private Long id;
    /**
     * null
     */
    private String dataKey;
    /**
     * null
     */
    private Integer dataValue;
    /**
     * null
     */
    private String remark;
}
src/main/java/com/nanjing/water/entity/request/monitorvideostreaming/ReqCreateMonitorVideoStreaming.java
对比新文件
@@ -0,0 +1,69 @@
/**
#                                                    __----~~~~~~~~~~~------___
#                                   .  .   ~~//====......          __--~ ~~
#                   -.            \_|//     |||\\  ~~~~~~::::... /~
#                ___-==_       _-~o~  \/    |||  \\            _/~~-
#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
#          '         ~-|      /|    |-~\~~       __--~~
#                      |-~~-_/ |    |   ~\_   _-~            /\
#                           /  \     \__   \/~                \__
#                       _--~ _/ | .-~~____--~-/                  ~~==.
#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
#                                 -_     ~\      ~~---l__i__i__i--~~_/
#                                 _-~-__   ~)  \--______________--~~
#                               //.-~~~-~_--~- |-------~~~~~~~~
#                                      //.-~~~--\
#                  神兽保佑
#                  永无BUG!
*/
package com.nanjing.water.entity.request.monitorvideostreaming;
import lombok.Data;
/**
 * 监控视频播放流
 * @author lin.liu
 */
@Data
public class ReqCreateMonitorVideoStreaming {
    /**
     * 设备编号
     */
    private String deviceId;
    /**
     * 通道编号
     */
    private String channelId;
    /**
     * 流地址
     */
    private String url;
    /**
     * 直播开始时间
     */
    private Long beginTime;
    /**
     * 直播结束时间
     */
    private Long endTime;
    /**
     * 备注
     */
    private String remark;
    /**
     * 监控点id
     */
    private Long pointId;
    /**
     * 监控点code
     */
    private String pointCode;
    /**
     * 监控点名称
     */
    private String pointName;
}
src/main/java/com/nanjing/water/entity/request/monitorvideostreaming/ReqModifyMonitorVideoStreaming.java
对比新文件
@@ -0,0 +1,77 @@
/**
#                                                    __----~~~~~~~~~~~------___
#                                   .  .   ~~//====......          __--~ ~~
#                   -.            \_|//     |||\\  ~~~~~~::::... /~
#                ___-==_       _-~o~  \/    |||  \\            _/~~-
#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
#          '         ~-|      /|    |-~\~~       __--~~
#                      |-~~-_/ |    |   ~\_   _-~            /\
#                           /  \     \__   \/~                \__
#                       _--~ _/ | .-~~____--~-/                  ~~==.
#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
#                                 -_     ~\      ~~---l__i__i__i--~~_/
#                                 _-~-__   ~)  \--______________--~~
#                               //.-~~~-~_--~- |-------~~~~~~~~
#                                      //.-~~~--\
#                  神兽保佑
#                  永无BUG!
*/
package com.nanjing.water.entity.request.monitorvideostreaming;
import lombok.Data;
/**
 * 监控视频播放流
 * @author lin.liu
 */
@Data
public class ReqModifyMonitorVideoStreaming {
    /**
     * 主键id
     */
    private Long id;
    /**
     * 设备编号
     */
    private String deviceId;
    /**
     * 通道编号
     */
    private String channelId;
    /**
     * 流地址
     */
    private String url;
    /**
     * 直播状态
     */
    private Integer state;
    /**
     * 直播开始时间
     */
    private Long beginTime;
    /**
     * 直播结束时间
     */
    private Long endTime;
    /**
     * 备注
     */
    private String remark;
    /**
     * 监控点id
     */
    private Long pointId;
    /**
     * 监控点code
     */
    private String pointCode;
    /**
     * 监控点名称
     */
    private String pointName;
}
src/main/java/com/nanjing/water/entity/search/SearchHeartbeatData.java
对比新文件
@@ -0,0 +1,14 @@
package com.nanjing.water.entity.search;
import lombok.Data;
import com.nanjing.water.entity.dto.SearchBasicDTO;
/**
 * HeartbeatData
 * @author lin.liu
 */
@Data
public class SearchHeartbeatData extends SearchBasicDTO {
}
src/main/java/com/nanjing/water/entity/search/SearchMonitorVideoStreaming.java
对比新文件
@@ -0,0 +1,14 @@
package com.nanjing.water.entity.search;
import lombok.Data;
import com.nanjing.water.entity.dto.SearchBasicDTO;
/**
 * 监控视频播放流
 * @author lin.liu
 */
@Data
public class SearchMonitorVideoStreaming extends SearchBasicDTO {
}
src/main/java/com/nanjing/water/host/controller/HeartbeatDataController.java
对比新文件
@@ -0,0 +1,136 @@
/**
#                                                    __----~~~~~~~~~~~------___
#                                   .  .   ~~//====......          __--~ ~~
#                   -.            \_|//     |||\\  ~~~~~~::::... /~
#                ___-==_       _-~o~  \/    |||  \\            _/~~-
#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
#          '         ~-|      /|    |-~\~~       __--~~
#                      |-~~-_/ |    |   ~\_   _-~            /\
#                           /  \     \__   \/~                \__
#                       _--~ _/ | .-~~____--~-/                  ~~==.
#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
#                                 -_     ~\      ~~---l__i__i__i--~~_/
#                                 _-~-__   ~)  \--______________--~~
#                               //.-~~~-~_--~- |-------~~~~~~~~
#                                      //.-~~~--\
#                  神兽保佑
#                  永无BUG!
*/
package com.nanjing.water.host.controller;
import com.nanjing.water.common.ExecutedResult;
import com.nanjing.water.common.PagerResult;
import com.nanjing.water.common.util.ParameterUtil;
import com.nanjing.water.common.validator.ParameterValidateResult;
import com.nanjing.water.common.validator.ParameterValidator;
import com.nanjing.water.entity.request.ReqListId;
import com.nanjing.water.host.BasicController;
import com.nanjing.water.host.api.NonLogin;
import com.nanjing.water.host.mqtt.WebSocket;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpRange;
import org.springframework.http.HttpRequest;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import com.nanjing.water.service.HeartbeatDataService;
import com.nanjing.water.entity.request.heartbeatdata.ReqCreateHeartbeatData;
import com.nanjing.water.entity.request.heartbeatdata.ReqModifyHeartbeatData;
import com.nanjing.water.entity.search.SearchHeartbeatData;
import com.nanjing.water.repository.vo.HeartbeatDataVO;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
/**
 * 9000.HeartbeatData
 * @author lin.liu
 * @order 9000
 */
@RestController
@CrossOrigin
@RequestMapping(value = "heartbeatData")
public class HeartbeatDataController extends BasicController {
    @Autowired
    private HeartbeatDataService service;
    @Autowired
    private WebSocket webSocket;
    /**
     * 创建[null]
     * @author lin.liu
     */
    @PostMapping(value = "create")
    public ExecutedResult<Long> create(@RequestBody ReqCreateHeartbeatData request) {
        //#region 参数验证
        ParameterValidator validator = new ParameterValidator()
                // 非空
                //.addNotNullOrEmpty(ParameterUtil.named("名称"), request.getName())
                // 限制最大长度
                //.addLengthMax(ParameterUtil.named("名称"), request.getName(), ConstantFactory.LENGTH_MAX50)
                ;
        ParameterValidateResult result = validator.validate();
        if (result.getIsFiled()) {
            return failed(result.getErrorMsg());
        }
        //#endregion
        return service.create(request);
    }
    /**
     * 编辑[null]
     * @author lin.liu
     */
    @PostMapping(value = "modify")
    public ExecutedResult<String> modify(@RequestBody ReqModifyHeartbeatData request) {
        //#region 参数验证
        ParameterValidator validator = new ParameterValidator()
                // 必须大于0
                .addGreater(ParameterUtil.named("[null]id"), request.getId(), 0L)
                // 非空
                //.addNotNullOrEmpty(ParameterUtil.named("名称"), request.getName())
                // 限制最大长度
                //.addLengthMax(ParameterUtil.named("名称"), request.getName(), ConstantFactory.LENGTH_MAX50)
                ;
        ParameterValidateResult result = validator.validate();
        if (result.getIsFiled()) {
            return failed(result.getErrorMsg());
        }
        //#endregion
        return service.modify(request);
    }
    /**
     * 获取[null]
     * @author lin.liu
     */
    @GetMapping(value = "get/{id}")
    public ExecutedResult<HeartbeatDataVO> get(@PathVariable Long id) {
        return service.get(id);
    }
    /**
     * 获取[心跳包]
     * @author lin.liu
     */
    @GetMapping(value = "getByCode")
    public ExecutedResult<HeartbeatDataVO> getByCode() {
        return service.getByCode();
    }
    /**
     * 查询[null]
     * @author lin.liu
     */
    @PostMapping(value = "search")
    public ExecutedResult<PagerResult<HeartbeatDataVO>> search(@RequestBody SearchHeartbeatData request) {
        return service.search(request);
    }
}
src/main/java/com/nanjing/water/host/controller/MonitorVideoStreamingController.java
对比新文件
@@ -0,0 +1,150 @@
/**
#                                                    __----~~~~~~~~~~~------___
#                                   .  .   ~~//====......          __--~ ~~
#                   -.            \_|//     |||\\  ~~~~~~::::... /~
#                ___-==_       _-~o~  \/    |||  \\            _/~~-
#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
#          '         ~-|      /|    |-~\~~       __--~~
#                      |-~~-_/ |    |   ~\_   _-~            /\
#                           /  \     \__   \/~                \__
#                       _--~ _/ | .-~~____--~-/                  ~~==.
#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
#                                 -_     ~\      ~~---l__i__i__i--~~_/
#                                 _-~-__   ~)  \--______________--~~
#                               //.-~~~-~_--~- |-------~~~~~~~~
#                                      //.-~~~--\
#                  神兽保佑
#                  永无BUG!
*/
package com.nanjing.water.host.controller;
import com.nanjing.water.common.ExecutedResult;
import com.nanjing.water.common.PagerResult;
import com.nanjing.water.common.util.ParameterUtil;
import com.nanjing.water.common.validator.ParameterValidateResult;
import com.nanjing.water.common.validator.ParameterValidator;
import com.nanjing.water.entity.request.ReqListId;
import com.nanjing.water.host.BasicController;
import com.nanjing.water.repository.po.MonitorVideoStreamingPO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.List;
import com.nanjing.water.service.MonitorVideoStreamingService;
import com.nanjing.water.entity.request.monitorvideostreaming.ReqCreateMonitorVideoStreaming;
import com.nanjing.water.entity.request.monitorvideostreaming.ReqModifyMonitorVideoStreaming;
import com.nanjing.water.entity.search.SearchMonitorVideoStreaming;
import com.nanjing.water.repository.vo.MonitorVideoStreamingVO;
/**
 * 9000.监控视频播放流
 * @author lin.liu
 * @order 9000
 */
@RestController
@RequestMapping(value = "monitorVideoStreaming")
public class MonitorVideoStreamingController extends BasicController {
    @Autowired
    private MonitorVideoStreamingService service;
    /**
     * 创建[监控视频播放流]
     * @author lin.liu
     */
    @PostMapping(value = "create")
    public ExecutedResult<Long> create(@RequestBody ReqCreateMonitorVideoStreaming request) {
        //#region 参数验证
        ParameterValidator validator = new ParameterValidator()
                // 非空
                //.addNotNullOrEmpty(ParameterUtil.named("名称"), request.getName())
                // 限制最大长度
                //.addLengthMax(ParameterUtil.named("名称"), request.getName(), ConstantFactory.LENGTH_MAX50)
                ;
        ParameterValidateResult result = validator.validate();
        if (result.getIsFiled()) {
            return failed(result.getErrorMsg());
        }
        //#endregion
        return service.create(request);
    }
    /**
     * 编辑[监控视频播放流]
     * @author lin.liu
     */
    @PostMapping(value = "modify")
    public ExecutedResult<String> modify(@RequestBody ReqModifyMonitorVideoStreaming request) {
        //#region 参数验证
        ParameterValidator validator = new ParameterValidator()
                // 必须大于0
                .addGreater(ParameterUtil.named("[监控视频播放流]id"), request.getId(), 0L)
                // 非空
                //.addNotNullOrEmpty(ParameterUtil.named("名称"), request.getName())
                // 限制最大长度
                //.addLengthMax(ParameterUtil.named("名称"), request.getName(), ConstantFactory.LENGTH_MAX50)
                ;
        ParameterValidateResult result = validator.validate();
        if (result.getIsFiled()) {
            return failed(result.getErrorMsg());
        }
        //#endregion
        return service.modify(request);
    }
    /**
     * 获取[监控视频播放流]
     * @author lin.liu
     */
    @GetMapping(value = "get/{id}")
    public ExecutedResult<MonitorVideoStreamingVO> get(@PathVariable Long id) {
        return service.get(id);
    }
    /**
     * 根据监控点id获取[监控视频播放流]
     * @author lin.liu
     */
    @GetMapping(value = "getAllByPoint")
    public ExecutedResult<List<MonitorVideoStreamingPO>> getAllByPoint(@RequestParam Long pointId) {
        return service.getAllByPoint(pointId);
    }
    /**
     * 查询[监控视频播放流]
     * @author lin.liu
     */
    @PostMapping(value = "search")
    public ExecutedResult<PagerResult<MonitorVideoStreamingVO>> search(@RequestBody SearchMonitorVideoStreaming request) {
        return service.search(request);
    }
    /**
     * 开启视频点播[监控视频播放流]
     * @author lin.liu
     */
    @GetMapping(value = "play/{deviceId}/{channelId}")
    public ExecutedResult<MonitorVideoStreamingPO> play(@PathVariable String deviceId, @PathVariable String channelId) throws IOException {
        return service.play(deviceId,channelId);
    }
    /**
     * 停止视频点播[监控视频播放流]
     * @author lin.liu
     */
    @GetMapping(value = "stop/{deviceId}/{channelId}")
    public ExecutedResult<MonitorVideoStreamingPO> stop(@PathVariable String deviceId,@PathVariable String channelId) throws IOException {
        return service.stop(deviceId,channelId,"手动停止点播");
    }
    /**
     * 点播续时[监控视频播放流]
     * @author lin.liu
     */
    @GetMapping(value = "updateEndTime/{deviceId}/{channelId}")
    public ExecutedResult<MonitorVideoStreamingPO> updateEndTime(@PathVariable String deviceId, @PathVariable String channelId) throws IOException {
        return service.updateEndTime(deviceId,channelId);
    }
}
src/main/java/com/nanjing/water/repository/impl/HeartbeatDataMapperImpl.java
对比新文件
@@ -0,0 +1,143 @@
/**
#                                                    __----~~~~~~~~~~~------___
#                                   .  .   ~~//====......          __--~ ~~
#                   -.            \_|//     |||\\  ~~~~~~::::... /~
#                ___-==_       _-~o~  \/    |||  \\            _/~~-
#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
#          '         ~-|      /|    |-~\~~       __--~~
#                      |-~~-_/ |    |   ~\_   _-~            /\
#                           /  \     \__   \/~                \__
#                       _--~ _/ | .-~~____--~-/                  ~~==.
#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
#                                 -_     ~\      ~~---l__i__i__i--~~_/
#                                 _-~-__   ~)  \--______________--~~
#                               //.-~~~-~_--~- |-------~~~~~~~~
#                                      //.-~~~--\
#                  神兽保佑
#                  永无BUG!
*/
package com.nanjing.water.repository.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nanjing.water.common.PagerResult;
import com.nanjing.water.common.enums.EYesOrNo;
import com.nanjing.water.common.util.*;
import com.nanjing.water.entity.dto.*;
import com.nanjing.water.entity.enums.*;
import com.nanjing.water.repository.BasicMapperImpl;
import org.springframework.stereotype.Repository;
import java.util.List;
import com.nanjing.water.entity.search.SearchHeartbeatData;
import com.nanjing.water.repository.mapper.HeartbeatDataMapper;
import com.nanjing.water.repository.po.HeartbeatDataPO;
/**
 * HeartbeatData
 * @author lin.liu
 */
@Repository
public class HeartbeatDataMapperImpl extends BasicMapperImpl<HeartbeatDataPO, HeartbeatDataMapper> {
    HeartbeatDataMapperImpl(HeartbeatDataMapper mapper) {
        super(mapper);
    }
    @Override
    public PagerResult<HeartbeatDataPO> search(SearchBasicDTO request) {
        // 还原查询条件真实类型
        SearchHeartbeatData search = (SearchHeartbeatData)request;
        // 查询条件
        LambdaQueryWrapper<HeartbeatDataPO> queryWrapper = this.query();
        // 非逻辑删除
        queryWrapper.eq(HeartbeatDataPO::getIsDelete, EYesOrNo.NO.getValue());
        // 状态
        //queryWrapper.eq(NumericUtil.tryParseInt(search.getStatus()).compareTo(0) > 0, HeartbeatDataPO::getStatus, search.getStatus());
        // 状态列表
        //queryWrapper.in(ListUtil.isNotNullOrEmpty(search.getListStatus()), HeartbeatDataPO::getStatus, search.getListStatus());
        // 数据创建时间-起始
        queryWrapper.ge(NumericUtil.tryParseLong(search.getCreateTimeStart()).compareTo(0L) > 0, HeartbeatDataPO::getCreateTime, search.getCreateTimeStart());
        // 数据创建时间-截止
        queryWrapper.le(NumericUtil.tryParseLong(search.getCreateTimeEnd()).compareTo(0L) > 0, HeartbeatDataPO::getCreateTime, search.getCreateTimeEnd());
        // 关键字
        //if (StringUtil.isNotNullOrEmpty(search.getKeywords())) {
        //    queryWrapper.and(q ->
        //        q.like(HeartbeatDataPO::getName, search.getKeywords())
        //        .or().like(HeartbeatDataPO::getPhone, search.getKeywords())
        //    );
        //}
        // 排序处理
        if (ListUtil.isNotNullOrEmpty(search.getOrderBy())) {
            for (OrderByDTO item : search.getOrderBy()) {
                EOrderBy orderBy = EOrderBy.getByValue(item.getOrderBy());
                // 顺序排序
                if (item.getIsAsc()) {
                    switch (orderBy) {
                        // 主键
                        case ID:
                            queryWrapper.orderByAsc(HeartbeatDataPO::getId);
                            break;
                        // 数据创建时间
                        case CREATE_TIME:
                            queryWrapper.orderByAsc(HeartbeatDataPO::getCreateTime);
                            break;
                        // 最后更新时间
                        case UPDATE_TIME:
                            queryWrapper.orderByAsc(HeartbeatDataPO::getUpdateTime);
                            break;
                    }
                } else {
                    // 倒叙排序
                    switch (orderBy) {
                        // 主键
                        case ID:
                            queryWrapper.orderByDesc(HeartbeatDataPO::getId);
                            break;
                        // 数据创建时间
                        case CREATE_TIME:
                            queryWrapper.orderByDesc(HeartbeatDataPO::getCreateTime);
                            break;
                        // 最后更新时间
                        case UPDATE_TIME:
                            queryWrapper.orderByDesc(HeartbeatDataPO::getUpdateTime);
                            break;
                    }
                }
            }
        } else {
            queryWrapper.orderByDesc(HeartbeatDataPO::getId);
        }
        Page<HeartbeatDataPO> pageResult = super.selectPage(new Page<>(search.getPage(), search.getLimit()), queryWrapper);
        return new PagerResult<>(pageResult.getSize(), pageResult.getCurrent(), pageResult.getTotal(), pageResult.getRecords());
    }
    public Boolean add(HeartbeatDataPO item) {
        int rowCount = super.insert(item);
        return rowCount == 1;
    }
    public Boolean addNotIncrement(HeartbeatDataPO item) {
        int rowCount = super.insert(item);
        return rowCount == 1;
    }
    public HeartbeatDataPO getById(Long id) {
        return super.get(id);
    }
    public HeartbeatDataPO getByCode(String code) {
        LambdaQueryWrapper<HeartbeatDataPO> queryWrapper = this.query();
        queryWrapper.eq(HeartbeatDataPO::getDataKey,code);
        return super.selectOne(queryWrapper);
    }
    public List<HeartbeatDataPO> getListById(List<Long> listId) {
        return super.getList(listId);
    }
}
src/main/java/com/nanjing/water/repository/impl/MonitorVideoStreamingMapperImpl.java
对比新文件
@@ -0,0 +1,161 @@
/**
#                                                    __----~~~~~~~~~~~------___
#                                   .  .   ~~//====......          __--~ ~~
#                   -.            \_|//     |||\\  ~~~~~~::::... /~
#                ___-==_       _-~o~  \/    |||  \\            _/~~-
#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
#          '         ~-|      /|    |-~\~~       __--~~
#                      |-~~-_/ |    |   ~\_   _-~            /\
#                           /  \     \__   \/~                \__
#                       _--~ _/ | .-~~____--~-/                  ~~==.
#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
#                                 -_     ~\      ~~---l__i__i__i--~~_/
#                                 _-~-__   ~)  \--______________--~~
#                               //.-~~~-~_--~- |-------~~~~~~~~
#                                      //.-~~~--\
#                  神兽保佑
#                  永无BUG!
*/
package com.nanjing.water.repository.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nanjing.water.common.ConstantFactory;
import com.nanjing.water.common.PagerResult;
import com.nanjing.water.common.enums.EYesOrNo;
import com.nanjing.water.common.util.*;
import com.nanjing.water.entity.dto.*;
import com.nanjing.water.entity.enums.*;
import com.nanjing.water.repository.BasicMapperImpl;
import org.springframework.stereotype.Repository;
import java.util.List;
import com.nanjing.water.entity.search.SearchMonitorVideoStreaming;
import com.nanjing.water.repository.mapper.MonitorVideoStreamingMapper;
import com.nanjing.water.repository.po.MonitorVideoStreamingPO;
/**
 * 监控视频播放流
 * @author lin.liu
 */
@Repository
public class MonitorVideoStreamingMapperImpl extends BasicMapperImpl<MonitorVideoStreamingPO, MonitorVideoStreamingMapper> {
    MonitorVideoStreamingMapperImpl(MonitorVideoStreamingMapper mapper) {
        super(mapper);
    }
    @Override
    public PagerResult<MonitorVideoStreamingPO> search(SearchBasicDTO request) {
        // 还原查询条件真实类型
        SearchMonitorVideoStreaming search = (SearchMonitorVideoStreaming)request;
        // 查询条件
        LambdaQueryWrapper<MonitorVideoStreamingPO> queryWrapper = this.query();
        // 非逻辑删除
        queryWrapper.eq(MonitorVideoStreamingPO::getIsDelete, EYesOrNo.NO.getValue());
        // 状态
        //queryWrapper.eq(NumericUtil.tryParseInt(search.getStatus()).compareTo(0) > 0, MonitorVideoStreamingPO::getStatus, search.getStatus());
        // 状态列表
        //queryWrapper.in(ListUtil.isNotNullOrEmpty(search.getListStatus()), MonitorVideoStreamingPO::getStatus, search.getListStatus());
        // 数据创建时间-起始
        queryWrapper.ge(NumericUtil.tryParseLong(search.getCreateTimeStart()).compareTo(0L) > 0, MonitorVideoStreamingPO::getCreateTime, search.getCreateTimeStart());
        // 数据创建时间-截止
        queryWrapper.le(NumericUtil.tryParseLong(search.getCreateTimeEnd()).compareTo(0L) > 0, MonitorVideoStreamingPO::getCreateTime, search.getCreateTimeEnd());
        // 关键字
        //if (StringUtil.isNotNullOrEmpty(search.getKeywords())) {
        //    queryWrapper.and(q ->
        //        q.like(MonitorVideoStreamingPO::getName, search.getKeywords())
        //        .or().like(MonitorVideoStreamingPO::getPhone, search.getKeywords())
        //    );
        //}
        // 排序处理
        if (ListUtil.isNotNullOrEmpty(search.getOrderBy())) {
            for (OrderByDTO item : search.getOrderBy()) {
                EOrderBy orderBy = EOrderBy.getByValue(item.getOrderBy());
                // 顺序排序
                if (item.getIsAsc()) {
                    switch (orderBy) {
                        // 主键
                        case ID:
                            queryWrapper.orderByAsc(MonitorVideoStreamingPO::getId);
                            break;
                        // 数据创建时间
                        case CREATE_TIME:
                            queryWrapper.orderByAsc(MonitorVideoStreamingPO::getCreateTime);
                            break;
                        // 最后更新时间
                        case UPDATE_TIME:
                            queryWrapper.orderByAsc(MonitorVideoStreamingPO::getUpdateTime);
                            break;
                    }
                } else {
                    // 倒叙排序
                    switch (orderBy) {
                        // 主键
                        case ID:
                            queryWrapper.orderByDesc(MonitorVideoStreamingPO::getId);
                            break;
                        // 数据创建时间
                        case CREATE_TIME:
                            queryWrapper.orderByDesc(MonitorVideoStreamingPO::getCreateTime);
                            break;
                        // 最后更新时间
                        case UPDATE_TIME:
                            queryWrapper.orderByDesc(MonitorVideoStreamingPO::getUpdateTime);
                            break;
                    }
                }
            }
        } else {
            queryWrapper.orderByDesc(MonitorVideoStreamingPO::getId);
        }
        Page<MonitorVideoStreamingPO> pageResult = super.selectPage(new Page<>(search.getPage(), search.getLimit()), queryWrapper);
        return new PagerResult<>(pageResult.getSize(), pageResult.getCurrent(), pageResult.getTotal(), pageResult.getRecords());
    }
    public Boolean add(MonitorVideoStreamingPO item) {
        int rowCount = super.insert(item);
        return rowCount == 1;
    }
    public Boolean addNotIncrement(MonitorVideoStreamingPO item) {
        int rowCount = super.insert(item);
        return rowCount == 1;
    }
    public MonitorVideoStreamingPO getByDeviceId(String  deviceId,String channelId) {
        LambdaQueryWrapper<MonitorVideoStreamingPO> queryWrapper = this.query();
        queryWrapper.eq(MonitorVideoStreamingPO::getDeviceId,deviceId);
        queryWrapper.eq(MonitorVideoStreamingPO::getChannelId,channelId);
        return super.selectOne(queryWrapper);
    }
    public MonitorVideoStreamingPO getById(Long id) {
        return super.get(id);
    }
    public List<MonitorVideoStreamingPO> getListById(List<Long> listId) {
        return super.getList(listId);
    }
    public int updateEndTime(Long id) {
        MonitorVideoStreamingPO upd = new MonitorVideoStreamingPO();
        upd.setId(id);
        upd.setEndTime(LocalDateTimeUtil.nowTimeStamp() + ConstantFactory.TIME_LEN_1MIN * 3L);
        return super.updateById(upd);
    }
    public List<MonitorVideoStreamingPO> getAllByPoint(Long pointId) {
        LambdaQueryWrapper<MonitorVideoStreamingPO> queryWrapper = this.query();
        queryWrapper.eq(MonitorVideoStreamingPO::getPointId,pointId);
        return super.selectList(queryWrapper);
    }
    public List<MonitorVideoStreamingPO> list4WaitingStop() {
        LambdaQueryWrapper<MonitorVideoStreamingPO> queryWrapper = this.query();
        queryWrapper.eq(MonitorVideoStreamingPO::getState,EYesOrNo.YES.getValue());
        queryWrapper.le(MonitorVideoStreamingPO::getEndTime,LocalDateTimeUtil.nowTimeStamp());
        return super.selectList(queryWrapper);
    }
}
src/main/java/com/nanjing/water/repository/impl/WaterFacilityParameterMapperImpl.java
@@ -33,6 +33,7 @@
import com.nanjing.water.repository.BasicMapperImpl;
import com.nanjing.water.repository.mapper.WaterFacilityParameterMapper;
import com.nanjing.water.repository.po.WaterFacilityParameterPO;
import com.nanjing.water.repository.vo.FacilityParameterDataVO;
import org.springframework.stereotype.Repository;
import java.util.List;
@@ -148,4 +149,7 @@
        queryWrapper.in(WaterFacilityParameterPO::getFacilityId, facilityId);
        return DB.selectList(queryWrapper);
    }
    public List<FacilityParameterDataVO> getListNewPump() {
        return DB.getListNewPump();
    }
}
src/main/java/com/nanjing/water/repository/mapper/HeartbeatDataMapper.java
对比新文件
@@ -0,0 +1,10 @@
package com.nanjing.water.repository.mapper;
import com.nanjing.water.repository.BasicMapper;import com.nanjing.water.repository.po.HeartbeatDataPO;
/**
 * HeartbeatData
 * @author lin.liu
 */
public interface HeartbeatDataMapper extends BasicMapper<HeartbeatDataPO> {
}
src/main/java/com/nanjing/water/repository/mapper/MonitorVideoStreamingMapper.java
对比新文件
@@ -0,0 +1,10 @@
package com.nanjing.water.repository.mapper;
import com.nanjing.water.repository.BasicMapper;import com.nanjing.water.repository.po.MonitorVideoStreamingPO;
/**
 * 监控视频播放流 mapper
 * @author lin.liu
 */
public interface MonitorVideoStreamingMapper extends BasicMapper<MonitorVideoStreamingPO> {
}
src/main/java/com/nanjing/water/repository/mapper/WaterFacilityParameterMapper.java
@@ -2,6 +2,10 @@
import com.nanjing.water.repository.BasicMapper;
import com.nanjing.water.repository.po.WaterFacilityParameterPO;
import com.nanjing.water.repository.vo.FacilityParameterDataVO;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
 * 设备设定参数 mapper
@@ -9,4 +13,8 @@
 * @author lin.liu
 */
public interface WaterFacilityParameterMapper extends BasicMapper<WaterFacilityParameterPO> {
    @Select("SELECT wf.id,wf.facility_code,wf.facility_name,wfp.columns_code,wfp.columns_show,wfp.column_value,wfp.last_time FROM  water_facility wf right JOIN water_facility_parameter wfp ON wf.id=wfp.facility_id WHERE wf.is_delete=0\n" +
            "AND (wfp.columns_code='B001StartNumber' OR wfp.columns_code='B002StartNumber')")
    List<FacilityParameterDataVO> getListNewPump();
}
src/main/java/com/nanjing/water/repository/po/DataUploadRecordPO.java
@@ -52,20 +52,10 @@
    @TableField(value = "facility_name")
    private String facilityName;
    /**
     * 字段名
     */
    @TableField(value = "columns_code")
    private String columnsCode;
    /**
     * 字段展示
     */
    @TableField(value = "columns_show")
    private String columnsShow;
    /**
     * 字段值
     */
    @TableField(value = "columns_value")
    private BigDecimal columnsValue;
    private String columnsValue;
    /**
     * 是否删除(逻辑删除)
     */
src/main/java/com/nanjing/water/repository/po/HeartbeatDataPO.java
对比新文件
@@ -0,0 +1,74 @@
/**
#                                                    __----~~~~~~~~~~~------___
#                                   .  .   ~~//====......          __--~ ~~
#                   -.            \_|//     |||\\  ~~~~~~::::... /~
#                ___-==_       _-~o~  \/    |||  \\            _/~~-
#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
#          '         ~-|      /|    |-~\~~       __--~~
#                      |-~~-_/ |    |   ~\_   _-~            /\
#                           /  \     \__   \/~                \__
#                       _--~ _/ | .-~~____--~-/                  ~~==.
#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
#                                 -_     ~\      ~~---l__i__i__i--~~_/
#                                 _-~-__   ~)  \--______________--~~
#                               //.-~~~-~_--~- |-------~~~~~~~~
#                                      //.-~~~--\
#                  神兽保佑
#                  永无BUG!
*/
package com.nanjing.water.repository.po;
import lombok.Data;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.sql.Timestamp;
/**
 * HeartbeatData
 * @author lin.liu
 */
@Data
@TableName("heartbeat_data")
public class HeartbeatDataPO implements Serializable {
    /**
     * null
     */
    private Long id;
    /**
     * null
     */
    @TableField(value = "data_key")
    private String dataKey;
    /**
     * null
     */
    @TableField(value = "data_value")
    private Integer dataValue;
    /**
     * null
     */
    @TableLogic
    @TableField(value = "is_delete")
    private Integer isDelete;
    /**
     * null
     */
    @TableField(value = "remark")
    private String remark;
    /**
     * null
     */
    @TableField(value = "create_time")
    private Long createTime;
    /**
     * null
     */
    @TableField(value = "update_time")
    private Timestamp updateTime;
}
src/main/java/com/nanjing/water/repository/po/MonitorVideoStreamingPO.java
对比新文件
@@ -0,0 +1,109 @@
/**
#                                                    __----~~~~~~~~~~~------___
#                                   .  .   ~~//====......          __--~ ~~
#                   -.            \_|//     |||\\  ~~~~~~::::... /~
#                ___-==_       _-~o~  \/    |||  \\            _/~~-
#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
#          '         ~-|      /|    |-~\~~       __--~~
#                      |-~~-_/ |    |   ~\_   _-~            /\
#                           /  \     \__   \/~                \__
#                       _--~ _/ | .-~~____--~-/                  ~~==.
#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
#                                 -_     ~\      ~~---l__i__i__i--~~_/
#                                 _-~-__   ~)  \--______________--~~
#                               //.-~~~-~_--~- |-------~~~~~~~~
#                                      //.-~~~--\
#                  神兽保佑
#                  永无BUG!
*/
package com.nanjing.water.repository.po;
import lombok.Data;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.sql.Timestamp;
/**
 * 监控视频播放流
 * @author lin.liu
 */
@Data
@TableName("monitor_video_streaming")
public class MonitorVideoStreamingPO implements Serializable {
    /**
     * 主键id
     */
    private Long id;
    /**
     * 设备编号
     */
    @TableField(value = "device_id")
    private String deviceId;
    /**
     * 通道编号
     */
    @TableField(value = "channel_id")
    private String channelId;
    /**
     * 流地址
     */
    @TableField(value = "url")
    private String url;
    /**
     * 直播状态
     */
    @TableField(value = "state")
    private Integer state;
    /**
     * 直播开始时间
     */
    @TableField(value = "begin_time")
    private Long beginTime;
    /**
     * 直播结束时间
     */
    @TableField(value = "end_time")
    private Long endTime;
    /**
     * 备注
     */
    @TableField(value = "remark")
    private String remark;
    /**
     * 创建日期
     */
    @TableField(value = "create_time")
    private Long createTime;
    /**
     * 修改日期
     */
    @TableField(value = "update_time")
    private Timestamp updateTime;
    /**
     * 是否删除
     */
    @TableLogic
    @TableField(value = "is_delete")
    private Integer isDelete;
    /**
     * 监控点id
     */
    @TableField(value = "point_id")
    private Long pointId;
    /**
     * 监控点code
     */
    @TableField(value = "point_code")
    private String pointCode;
    /**
     * 监控点名称
     */
    @TableField(value = "point_name")
    private String pointName;
}
src/main/java/com/nanjing/water/repository/vo/FacilityParameterDataVO.java
对比新文件
@@ -0,0 +1,14 @@
package com.nanjing.water.repository.vo;
import lombok.Data;
@Data
public class FacilityParameterDataVO {
    private Long id;
    private String facilityCode;
    private String facilityName;
    private String columnsCode;
    private String columnsShow;
    private String columnValue;
    private String lastTime;
}
src/main/java/com/nanjing/water/repository/vo/HeartbeatDataVO.java
对比新文件
@@ -0,0 +1,54 @@
/**
#                                                    __----~~~~~~~~~~~------___
#                                   .  .   ~~//====......          __--~ ~~
#                   -.            \_|//     |||\\  ~~~~~~::::... /~
#                ___-==_       _-~o~  \/    |||  \\            _/~~-
#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
#          '         ~-|      /|    |-~\~~       __--~~
#                      |-~~-_/ |    |   ~\_   _-~            /\
#                           /  \     \__   \/~                \__
#                       _--~ _/ | .-~~____--~-/                  ~~==.
#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
#                                 -_     ~\      ~~---l__i__i__i--~~_/
#                                 _-~-__   ~)  \--______________--~~
#                               //.-~~~-~_--~- |-------~~~~~~~~
#                                      //.-~~~--\
#                  神兽保佑
#                  永无BUG!
*/
package com.nanjing.water.repository.vo;
import lombok.Data;
import com.nanjing.water.common.util.LocalDateTimeUtil;
import com.nanjing.water.common.util.NumericUtil;
import java.util.Objects;
import com.nanjing.water.repository.po.HeartbeatDataPO;
/**
 * HeartbeatData
 * @author lin.liu
 */
@Data
public class HeartbeatDataVO extends HeartbeatDataPO implements BasicVO {
    @Override
    public String getCreateTimeView() {
        if (NumericUtil.tryParseLong(this.getCreateTime()).compareTo(0L) > 0) {
            return LocalDateTimeUtil.toFormatString(this.getCreateTime());
        }
        return "";
    }
    @Override
    public String getUpdateTimeView() {
        if (Objects.isNull(this.getUpdateTime())) {
            return "";
        }
        return LocalDateTimeUtil.toFormatFullString(this.getUpdateTime());
    }
}
src/main/java/com/nanjing/water/repository/vo/MonitorVideoStreamingVO.java
对比新文件
@@ -0,0 +1,54 @@
/**
#                                                    __----~~~~~~~~~~~------___
#                                   .  .   ~~//====......          __--~ ~~
#                   -.            \_|//     |||\\  ~~~~~~::::... /~
#                ___-==_       _-~o~  \/    |||  \\            _/~~-
#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
#          '         ~-|      /|    |-~\~~       __--~~
#                      |-~~-_/ |    |   ~\_   _-~            /\
#                           /  \     \__   \/~                \__
#                       _--~ _/ | .-~~____--~-/                  ~~==.
#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
#                                 -_     ~\      ~~---l__i__i__i--~~_/
#                                 _-~-__   ~)  \--______________--~~
#                               //.-~~~-~_--~- |-------~~~~~~~~
#                                      //.-~~~--\
#                  神兽保佑
#                  永无BUG!
*/
package com.nanjing.water.repository.vo;
import lombok.Data;
import com.nanjing.water.common.util.LocalDateTimeUtil;
import com.nanjing.water.common.util.NumericUtil;
import java.util.Objects;
import com.nanjing.water.repository.po.MonitorVideoStreamingPO;
/**
 * 监控视频播放流
 * @author lin.liu
 */
@Data
public class MonitorVideoStreamingVO extends MonitorVideoStreamingPO implements BasicVO {
    @Override
    public String getCreateTimeView() {
        if (NumericUtil.tryParseLong(this.getCreateTime()).compareTo(0L) > 0) {
            return LocalDateTimeUtil.toFormatString(this.getCreateTime());
        }
        return "";
    }
    @Override
    public String getUpdateTimeView() {
        if (Objects.isNull(this.getUpdateTime())) {
            return "";
        }
        return LocalDateTimeUtil.toFormatFullString(this.getUpdateTime());
    }
}
src/main/java/com/nanjing/water/service/DataUploadRecordService.java
@@ -23,6 +23,7 @@
package com.nanjing.water.service;
import com.baomidou.mybatisplus.core.toolkit.Sequence;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
@@ -32,14 +33,21 @@
import com.nanjing.water.common.model.Tuple;
import com.nanjing.water.common.util.*;
import com.nanjing.water.host.mqtt.CountVO;
import com.nanjing.water.host.mqtt.MQTTServer;
import com.nanjing.water.repository.impl.*;
import com.nanjing.water.repository.po.*;
import com.nanjing.water.repository.vo.FacilityParameterDataVO;
import org.apache.commons.lang3.BooleanUtils;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -68,6 +76,16 @@
    private WaterMonitoryPointMapperImpl waterMonitoryPointMapper;
    @Autowired
    private AlarmHistoryMapperImpl alarmHistoryMapper;
    @Autowired
    private HeartbeatDataMapperImpl heartbeatDataMapper;
    @Autowired
    private DataUploadRecordMapperImpl dataUploadRecordMapper;
    @Autowired
    private MQTTServer mqttServer;
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private ObjectMapper objectMapper;
    public ExecutedResult<Long> create(ReqCreateDataUploadRecord request) {
        // 转换po
@@ -268,7 +286,7 @@
     * @param topic 主题
     * @param msg 消息内容
     */
    public void mqttReceived(String topic, String msg) {
    public void mqttReceived(String topic, String msg) throws MqttException {
        String action = "mqtt收到消息";
        if (StringUtil.isNullOrEmpty(topic)) {
            ERROR_LOGGER.error(action, "主题不能为空");
@@ -278,6 +296,23 @@
            ERROR_LOGGER.error(action, "消息不能为空");
            return;
        }
        //处理心跳
        Random random=new Random();
        int i=random.nextInt(100);
        BigDecimal delayTime=BigDecimal.valueOf(1.0);
        List<HeartbeatDataPO> list = heartbeatDataMapper.getList();
        if(Objects.nonNull(list)){
            HeartbeatDataPO heartbeatUp = list.stream().filter(item -> item.getDataKey().equals("heartbeat_up")).findFirst().orElse(null);
            if(Objects.nonNull(heartbeatUp)){
                heartbeatUp.setDataValue(i);
                heartbeatDataMapper.updateById(heartbeatUp);
            }
            HeartbeatDataPO alarmTime = list.stream().filter(item -> item.getDataKey().equals("alarm_time")).findFirst().orElse(null);
           if(Objects.nonNull(alarmTime)){
               delayTime=new BigDecimal(alarmTime.getDataValue()).setScale(1, RoundingMode.DOWN);
           }
        }
        //获取延时报警时间
        Gson gson = new Gson();
        JsonObject object = gson.fromJson(msg, JsonObject.class);
        String asJsonObject = object.get("time").getAsString();
@@ -291,14 +326,32 @@
            vo.setName(split[0]);
            vo.setCode(split[1]);
        }
        List<WaterFacilityPO> facilityPOList = waterFacilityMapper.getList();
        List<WaterFacilityParameterPO> parameterPOList = waterFacilityParameterMapper.getList();
        //获取存入redis每天开始的启泵次数
        List<FacilityParameterDataVO> dataVOList=new ArrayList<>();
        String objects = redisTemplate.opsForValue().get("pump_start_number");
        if(StringUtil.isNotNullOrEmpty(objects)){
                dataVOList= SerializeUtil.toListObject(objects, FacilityParameterDataVO.class);
        }
       // List<AlarmHistoryPO> historyPOList = alarmHistoryMapper.getList();
        //根据设备编号分组
        Map<String, List<CountVO>> collect = listVo.stream().collect(Collectors.groupingBy(CountVO::getName));
        for (Map.Entry<String, List<CountVO>> entry : collect.entrySet()) {
            //获取设备信息
            WaterFacilityPO facilityPO = facilityPOList.stream().filter(x -> x.getFacilityCode().equals(entry.getKey())).findFirst().orElse(null);
            //历史记录上报
            DataUploadRecordPO recordPO=new DataUploadRecordPO();
            recordPO.setFacilityId(facilityPO.getId());
            recordPO.setFacilityName(facilityPO.getFacilityName());
            String json = gson.toJson(entry.getValue());
            recordPO.setColumnsValue(json);
            recordPO.setCreateTime(LocalDateTimeUtil.nowTimeStamp());
            recordPO.setUploadDate(LocalDateTimeUtil.toDateString(LocalDateTimeUtil.nowTimeStamp()));
            recordPO.setUploadTime(LocalDateTimeUtil.nowTimeStamp());
            dataUploadRecordMapper.insert(recordPO);
            //获取设备所属监控点
            List<WaterFacilityParameterPO>parameterList=new ArrayList<>();
            //循环上报数据
@@ -318,39 +371,47 @@
                switch (vo.getCode()){
                    case "QF1":
                        //1号空开吸合关闭报警
                        QFCreateAlarm(facilityPO,parameterPO1, vo.getValue() );
                        QFCreateAlarm(facilityPO,parameterPO1, vo.getValue(),gson,delayTime);
                        break;
                    case "QF2":
                        //2号空开吸合关闭报警
                        QFCreateAlarm(facilityPO,parameterPO1, vo.getValue());
                        QFCreateAlarm(facilityPO,parameterPO1, vo.getValue(),gson,delayTime);
                        break;
                    case "QF3":
                        //3号空开吸合关闭报警
                        QFCreateAlarm(facilityPO,parameterPO1, vo.getValue());
                        QFCreateAlarm(facilityPO,parameterPO1, vo.getValue(),gson,delayTime);
                        break;
                    case "QF4":
                        //4号空开吸合关闭报警
                        QFCreateAlarm(facilityPO,parameterPO1, vo.getValue());
                        QFCreateAlarm(facilityPO,parameterPO1, vo.getValue(),gson,delayTime);
                        break;
                    case "B001Fault":
                        //1号泵综合故障
                        faultCreateAlarm(facilityPO,parameterPO1, vo.getValue());
                        faultCreateAlarm(facilityPO,parameterPO1, vo.getValue(),gson,delayTime);
                        break;
                    case "B002Fault":
                        //2号泵综合故障
                        faultCreateAlarm(facilityPO,parameterPO1, vo.getValue());
                        faultCreateAlarm(facilityPO,parameterPO1, vo.getValue(),gson,delayTime);
                        break;
                    case "SQ":
                        //水侵报警
                        SQFaultCreateAlarm(facilityPO,parameterPO1, vo.getValue());
                        SQFaultCreateAlarm(facilityPO,parameterPO1, vo.getValue(),gson,delayTime);
                        break;
                    case "H1001Fault":
                        //高水位报警
                        faultCreateAlarm(facilityPO,parameterPO1, vo.getValue());
                        faultCreateAlarm(facilityPO,parameterPO1, vo.getValue(),gson,delayTime);
                        break;
                    case "L1001Fault":
                        //低水位报警
                        faultCreateAlarm(facilityPO,parameterPO1, vo.getValue());
                        faultCreateAlarm(facilityPO,parameterPO1, vo.getValue(),gson,delayTime);
                        break;
                    case "B001StartNumber":
                        //1号泵启泵次数
                        startNumber(facilityPO,parameterPO1, vo.getValue(),dataVOList);
                        break;
                    case "B002StartNumber":
                        //2号泵启泵次数
                        startNumber(facilityPO,parameterPO1, vo.getValue(),dataVOList);
                        break;
                }
            }
@@ -359,7 +420,7 @@
        }
    }
     public void QFCreateAlarm(WaterFacilityPO facilityPO,WaterFacilityParameterPO parameterPO,String value){
     public void QFCreateAlarm(WaterFacilityPO facilityPO,WaterFacilityParameterPO parameterPO,String value, Gson gson,BigDecimal delayTime) throws MqttException {
        if(value.equals("false")){
                alarmHistoryMapper.deleteList(parameterPO.getFacilityId(),parameterPO.getColumnsCode());
                AlarmHistoryPO alarmHistoryPO=new AlarmHistoryPO();
@@ -370,11 +431,15 @@
                alarmHistoryPO.setCreateTime(LocalDateTimeUtil.nowTimeStamp());
                alarmHistoryPO.setLastTime(LocalDateTimeUtil.nowTimeStamp());
                alarmHistoryMapper.insert(alarmHistoryPO);
                Map<String, Object> map = new HashMap<>();
                map.put("alarm","true");
                map.put("alarm_time",delayTime);
                String dataValue = gson.toJson(map);
                mqttServer.send("nanjing/alarm",dataValue);
        }
     }
    public void faultCreateAlarm(WaterFacilityPO facilityPO,WaterFacilityParameterPO parameterPO,String value){
    public void faultCreateAlarm(WaterFacilityPO facilityPO,WaterFacilityParameterPO parameterPO,String value, Gson gson,BigDecimal delayTime) throws MqttException {
        if(value.equals("true")){
            alarmHistoryMapper.deleteList(parameterPO.getFacilityId(),parameterPO.getColumnsCode());
            AlarmHistoryPO alarmHistoryPO=new AlarmHistoryPO();
@@ -385,11 +450,16 @@
            alarmHistoryPO.setCreateTime(LocalDateTimeUtil.nowTimeStamp());
            alarmHistoryPO.setLastTime(LocalDateTimeUtil.nowTimeStamp());
            alarmHistoryMapper.insert(alarmHistoryPO);
            Map<String, Object> map = new HashMap<>();
            map.put("alarm","true");
            map.put("alarm_time",delayTime);
            String dataValue = gson.toJson(map);
            mqttServer.send("nanjing/alarm",dataValue);
        }
    }
    public void SQFaultCreateAlarm(WaterFacilityPO facilityPO,WaterFacilityParameterPO parameterPO,String value){
    public void SQFaultCreateAlarm(WaterFacilityPO facilityPO,WaterFacilityParameterPO parameterPO,String value, Gson gson,BigDecimal delayTime) throws MqttException {
        if(value.equals("1")){
            alarmHistoryMapper.deleteList(parameterPO.getFacilityId(),parameterPO.getColumnsCode());
            AlarmHistoryPO alarmHistoryPO=new AlarmHistoryPO();
@@ -400,8 +470,35 @@
            alarmHistoryPO.setCreateTime(LocalDateTimeUtil.nowTimeStamp());
            alarmHistoryPO.setLastTime(LocalDateTimeUtil.nowTimeStamp());
            alarmHistoryMapper.insert(alarmHistoryPO);
            Map<String, Object> map = new HashMap<>();
            map.put("alarm","true");
            map.put("alarm_time",delayTime);
            String dataValue = gson.toJson(map);
            mqttServer.send("nanjing/alarm",dataValue);
        }
    }
    public void startNumber(WaterFacilityPO facilityPO,WaterFacilityParameterPO parameterPO,String value,List<FacilityParameterDataVO> dataVOList){
        if(ListUtil.isNotNullOrEmpty(dataVOList)){
            FacilityParameterDataVO facilityParameterDataVO = dataVOList.stream().filter(item -> item.getFacilityCode().equals(facilityPO.getFacilityCode()) && item.getColumnsCode().equals(parameterPO.getColumnsCode())).findFirst().orElse(null);
            if(Objects.nonNull(facilityParameterDataVO)){
                Integer columnsValue = Integer.valueOf(facilityParameterDataVO.getColumnValue());
                Integer value1 = Integer.valueOf(value);
                Integer dataNumber=value1-columnsValue;
                alarmHistoryMapper.deleteList(parameterPO.getFacilityId(),parameterPO.getColumnsCode());
                if(dataNumber>5){
                    alarmHistoryMapper.deleteList(parameterPO.getFacilityId(),parameterPO.getColumnsCode());
                    AlarmHistoryPO alarmHistoryPO=new AlarmHistoryPO();
                    alarmHistoryPO.setFacilityId(facilityPO.getId());
                    alarmHistoryPO.setFacilityName(facilityPO.getFacilityName());
                    alarmHistoryPO.setCode(parameterPO.getColumnsCode());
                    alarmHistoryPO.setDescription(parameterPO.getColumnsShow()+"超过5次");
                    alarmHistoryPO.setCreateTime(LocalDateTimeUtil.nowTimeStamp());
                    alarmHistoryPO.setLastTime(LocalDateTimeUtil.nowTimeStamp());
                    alarmHistoryMapper.insert(alarmHistoryPO);
                }
            }
        }
    }
}
src/main/java/com/nanjing/water/service/HeartbeatDataService.java
对比新文件
@@ -0,0 +1,251 @@
/**
#                                                    __----~~~~~~~~~~~------___
#                                   .  .   ~~//====......          __--~ ~~
#                   -.            \_|//     |||\\  ~~~~~~::::... /~
#                ___-==_       _-~o~  \/    |||  \\            _/~~-
#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
#          '         ~-|      /|    |-~\~~       __--~~
#                      |-~~-_/ |    |   ~\_   _-~            /\
#                           /  \     \__   \/~                \__
#                       _--~ _/ | .-~~____--~-/                  ~~==.
#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
#                                 -_     ~\      ~~---l__i__i__i--~~_/
#                                 _-~-__   ~)  \--______________--~~
#                               //.-~~~-~_--~- |-------~~~~~~~~
#                                      //.-~~~--\
#                  神兽保佑
#                  永无BUG!
*/
package com.nanjing.water.service;
import com.nanjing.water.common.*;
import com.nanjing.water.common.enums.*;
import com.nanjing.water.common.model.Tuple;
import com.nanjing.water.common.util.*;
import org.apache.commons.lang3.BooleanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
import com.nanjing.water.repository.impl.HeartbeatDataMapperImpl;
import com.nanjing.water.repository.po.HeartbeatDataPO;
import com.nanjing.water.entity.request.heartbeatdata.ReqCreateHeartbeatData;
import com.nanjing.water.entity.request.heartbeatdata.ReqModifyHeartbeatData;
import com.nanjing.water.entity.search.SearchHeartbeatData;
import com.nanjing.water.repository.vo.HeartbeatDataVO;
import com.nanjing.water.service.convert.HeartbeatDataConvert;
/**
 * HeartbeatData
 * @author lin.liu
 */
@Service
public class HeartbeatDataService extends BaseService {
    @Autowired
    private HeartbeatDataMapperImpl mapper;
    public ExecutedResult<Long> create(ReqCreateHeartbeatData request) {
        // 转换po
        HeartbeatDataPO item = HeartbeatDataConvert.INSTANCE.toCreate(request);
        // 设置状态
        //item.setStatus(EState.NORMAL.getValue());
        // 设置记录创建时间
        item.setCreateTime(LocalDateTimeUtil.nowTimeStamp());
        // 是否删除(逻辑删除)初始值
        item.setIsDelete(EYesOrNo.NO.getValue());
        int rowCount = mapper.insert(item);
        if (rowCount != 1) {
            return ExecutedResult.failed("创建[null]失败。");
        }
        return ExecutedResult.success(item.getId());
    }
    public ExecutedResult<String> modify(ReqModifyHeartbeatData request) {
        // 验证记录是否存在
        ExecutedResult<HeartbeatDataPO> checkExists = this.check4Id(request.getId());
        if (checkExists.isFailed()) {
            return ExecutedResult.failed(checkExists.getMsg());
        }
        // 转换po
        HeartbeatDataPO item = HeartbeatDataConvert.INSTANCE.toModify(request);
        int rowCount = mapper.updateById(item);
        if (rowCount != 1) {
            return ExecutedResult.failed("编辑[null]失败。");
        }
        return ExecutedResult.success();
    }
    public ExecutedResult<HeartbeatDataVO> get(Long id) {
        HeartbeatDataVO result = new HeartbeatDataVO();
        HeartbeatDataPO find = mapper.get(id);
        if (null != find) {
            // 转换vo
            result = HeartbeatDataConvert.INSTANCE.toVo(find);
        }
        return ExecutedResult.success(result);
    }
    public ExecutedResult<HeartbeatDataVO> getByCode(){
        HeartbeatDataVO vo=new HeartbeatDataVO();
        HeartbeatDataPO heartbeatUp = mapper.getByCode("heartbeat_up");
        if(Objects.nonNull(heartbeatUp)){
            vo = HeartbeatDataConvert.INSTANCE.toVo(heartbeatUp);
        }
        return ExecutedResult.success(vo);
    }
//    public ExecutedResult<String> stop(Long id) {
//        // 验证记录是否存在
//        ExecutedResult<HeartbeatDataPO> checkExists = this.check4Id(id);
//        if (checkExists.isFailed()) {
//            return ExecutedResult.failed(checkExists.getMsg());
//        }
//        HeartbeatDataPO item = new HeartbeatDataPO();
//        item.setId(id);
//        item.setStatus(EState.DISABLED.getValue());
//
//        int rowCount = mapper.updateById(item);
//        if (rowCount != 1) {
//           return ExecutedResult.failed("停用[null]失败。");
//       }
//       return ExecutedResult.success();
//   }
//
//    public ExecutedResult<String> enable(Long id) {
//        // 验证记录是否存在
//        ExecutedResult<HeartbeatDataPO> checkExists = this.check4Id(id);
//        if (checkExists.isFailed()) {
//            return ExecutedResult.failed(checkExists.getMsg());
//        }
//        HeartbeatDataPO item = new HeartbeatDataPO();
//        item.setId(id);
//        item.setStatus(EState.NORMAL.getValue());
//
//        int rowCount = mapper.updateById(item);
//        if (rowCount != 1) {
//            return ExecutedResult.failed("启用[null]失败。");
//        }
//        return ExecutedResult.success();
//    }
//
//    public ExecutedResult<String> setSort(ReqSetSort request) {
//        // 验证记录是否存在
//        ExecutedResult<HeartbeatDataPO> checkExists = this.check4Id(request.getId());
//        if (checkExists.isFailed()) {
//            return ExecutedResult.failed(checkExists.getMsg());
//        }
//        HeartbeatDataPO item = new HeartbeatDataPO();
//        item.setId(request.getId());
//        item.setSort(request.getSort());
//
//        int rowCount = mapper.updateById(item);
//        if (rowCount != 1) {
//            return ExecutedResult.failed("设置[null]排序值失败。");
//        }
//        return ExecutedResult.success();
//    }
//
//    public ExecutedResult<String> listSetSort(ReqListSetSort request) {
//        // id列表
//        List<Long> listId = request.getList().stream().map(ReqSetSort::getId).collect(Collectors.toList());
//        // 验证记录是否存在
//        ExecutedResult<List<HeartbeatDataPO>> checkExists = this.check4Id(listId);
//        if (checkExists.isFailed()) {
//            return ExecutedResult.failed(checkExists.getMsg());
//        }
//
//        List<HeartbeatDataPO> listUpdate = request.getList().stream()
//                .map(c -> {
//                    HeartbeatDataPO item = new HeartbeatDataPO();
//                    item.setId(c.getId());
//                    item.setSort(c.getSort());
//                    return item;
//                })
//                .collect(Collectors.toList());
//        Boolean result = mapper.modifyList(listUpdate);
//        if (result) {
//            return ExecutedResult.success();
//        }
//        return ExecutedResult.failed("[null]设置排序值失败");
//    }
//
//    public ExecutedResult<String> remove(Long id) {
//        Boolean result = mapper.deleteLogic(id);
//        if (BooleanUtils.isFalse(result)) {
//            return ExecutedResult.failed("删除[null]失败。");
//        }
//        return ExecutedResult.success();
//    }
//
//    public ExecutedResult<String> removeList(List<Long> ids) {
//        Boolean result = mapper.deleteLogic(ids);
//        if (BooleanUtils.isFalse(result)) {
//            return ExecutedResult.failed("删除[null]失败。");
//        }
//        return ExecutedResult.success();
//    }
    public ExecutedResult<List<HeartbeatDataVO>> getList(List<Long> listId) {
        List<HeartbeatDataVO> result = new ArrayList<>();
        List<HeartbeatDataPO> list = mapper.getList(listId);
        if (ListUtil.isNotNullOrEmpty(list)) {
            // 转换vo
            result = HeartbeatDataConvert.INSTANCE.toVo(list);
        }
        return ExecutedResult.success(result);
    }
    public ExecutedResult<PagerResult<HeartbeatDataVO>> search(SearchHeartbeatData search) {
        // 处理创建时间范围-查询参数
        Tuple<String, String> createTimeRange = ParameterUtil.getTimeRange(search.getCreateTimeRange());
        if (StringUtil.isNotNullOrEmpty(createTimeRange.getItem1())) {
            search.setCreateTimeStart(LocalDateTimeUtil.getTimeStamp(createTimeRange.getItem1()).getTime());
        }
        if (StringUtil.isNotNullOrEmpty(createTimeRange.getItem2())) {
            search.setCreateTimeEnd(LocalDateTimeUtil.getTimeStamp(createTimeRange.getItem2()).getTime());
        }
        PagerResult<HeartbeatDataPO> pageList = mapper.search(search);
        List<HeartbeatDataVO> listVo = new ArrayList<>();
        List<HeartbeatDataPO> list = pageList.getList();
        if (ListUtil.isNotNullOrEmpty(list)) {
            pageList.setLastId(list.get(list.size() - 1).getId());
            // 转换vo
            listVo = HeartbeatDataConvert.INSTANCE.toVo(list);
        }
        PagerResult<HeartbeatDataVO> result = new PagerResult<>(pageList.getLimit(), pageList.getPage(), pageList.getTotal(), listVo);
        result.setLastId(pageList.getLastId());
        return ExecutedResult.success(result);
    }
    protected ExecutedResult<HeartbeatDataPO> check4Id(Long id) {
        HeartbeatDataPO exists = mapper.get(id);
        if (Objects.isNull(exists)) {
            return ExecutedResult.failed("[null]不存在:" + id);
        }
        return ExecutedResult.success(exists);
    }
    protected ExecutedResult<List<HeartbeatDataPO>> check4Id(List<Long> listId) {
        // 从数据库查找null
        List<HeartbeatDataPO> list = mapper.getList(listId);
        if (ListUtil.isNullOrEmpty(list)) {
            return ExecutedResult.failed("[null]不存在." + listId);
        }
        // 数据库找到的id列表
        List<Long> listIdFind = list.stream().map(HeartbeatDataPO::getId).collect(Collectors.toList());
        // 数量不一致
        if (listId.size() != listIdFind.size()) {
            // 筛选数据库不存在的null
            List<Long> listIdNotFound = listId.stream().filter(c -> !listIdFind.contains(c)).collect(Collectors.toList());
            if (ListUtil.isNullOrEmpty(list)) {
                return ExecutedResult.failed("[null]不存在." + listIdNotFound);
            }
        }
        return ExecutedResult.success(list);
    }}
src/main/java/com/nanjing/water/service/MonitorVideoStreamingService.java
对比新文件
@@ -0,0 +1,425 @@
/**
#                                                    __----~~~~~~~~~~~------___
#                                   .  .   ~~//====......          __--~ ~~
#                   -.            \_|//     |||\\  ~~~~~~::::... /~
#                ___-==_       _-~o~  \/    |||  \\            _/~~-
#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
#          '         ~-|      /|    |-~\~~       __--~~
#                      |-~~-_/ |    |   ~\_   _-~            /\
#                           /  \     \__   \/~                \__
#                       _--~ _/ | .-~~____--~-/                  ~~==.
#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
#                                 -_     ~\      ~~---l__i__i__i--~~_/
#                                 _-~-__   ~)  \--______________--~~
#                               //.-~~~-~_--~- |-------~~~~~~~~
#                                      //.-~~~--\
#                  神兽保佑
#                  永无BUG!
*/
package com.nanjing.water.service;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.nanjing.water.common.*;
import com.nanjing.water.common.enums.*;
import com.nanjing.water.common.model.Tuple;
import com.nanjing.water.common.util.*;
import com.nanjing.water.repository.vo.SysDictDataVO;
import org.apache.commons.lang3.BooleanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import com.nanjing.water.repository.impl.MonitorVideoStreamingMapperImpl;
import com.nanjing.water.repository.po.MonitorVideoStreamingPO;
import com.nanjing.water.entity.request.monitorvideostreaming.ReqCreateMonitorVideoStreaming;
import com.nanjing.water.entity.request.monitorvideostreaming.ReqModifyMonitorVideoStreaming;
import com.nanjing.water.entity.search.SearchMonitorVideoStreaming;
import com.nanjing.water.repository.vo.MonitorVideoStreamingVO;
import com.nanjing.water.service.convert.MonitorVideoStreamingConvert;
/**
 * 监控视频播放流
 * @author lin.liu
 */
@Service
public class MonitorVideoStreamingService extends BaseService {
    @Autowired
    private MonitorVideoStreamingMapperImpl mapper;
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private SysDictDataService sysDictDataService;
    public ExecutedResult<Long> create(ReqCreateMonitorVideoStreaming request) {
        // 转换po
        MonitorVideoStreamingPO item = MonitorVideoStreamingConvert.INSTANCE.toCreate(request);
        // 设置状态
        //item.setStatus(EState.NORMAL.getValue());
        // 设置记录创建时间
        item.setCreateTime(LocalDateTimeUtil.nowTimeStamp());
        // 是否删除(逻辑删除)初始值
        item.setIsDelete(EYesOrNo.NO.getValue());
        int rowCount = mapper.insert(item);
        if (rowCount != 1) {
            return ExecutedResult.failed("创建[监控视频播放流]失败。");
        }
        return ExecutedResult.success(item.getId());
    }
    public ExecutedResult<String> modify(ReqModifyMonitorVideoStreaming request) {
        // 验证记录是否存在
        ExecutedResult<MonitorVideoStreamingPO> checkExists = this.check4Id(request.getId());
        if (checkExists.isFailed()) {
            return ExecutedResult.failed(checkExists.getMsg());
        }
        // 转换po
        MonitorVideoStreamingPO item = MonitorVideoStreamingConvert.INSTANCE.toModify(request);
        int rowCount = mapper.updateById(item);
        if (rowCount != 1) {
            return ExecutedResult.failed("编辑[监控视频播放流]失败。");
        }
        return ExecutedResult.success();
    }
    public ExecutedResult<List<MonitorVideoStreamingPO>> getAllByPoint( Long pointId){
        List<MonitorVideoStreamingPO> result=mapper.getAllByPoint(pointId);
        return ExecutedResult.success(result);
    }
    public ExecutedResult<MonitorVideoStreamingVO> get(Long id) {
        MonitorVideoStreamingVO result = new MonitorVideoStreamingVO();
        MonitorVideoStreamingPO find = mapper.get(id);
        if (null != find) {
            // 转换vo
            result = MonitorVideoStreamingConvert.INSTANCE.toVo(find);
        }
        return ExecutedResult.success(result);
    }
//    public ExecutedResult<String> stop(Long id) {
//        // 验证记录是否存在
//        ExecutedResult<MonitorVideoStreamingPO> checkExists = this.check4Id(id);
//        if (checkExists.isFailed()) {
//            return ExecutedResult.failed(checkExists.getMsg());
//        }
//        MonitorVideoStreamingPO item = new MonitorVideoStreamingPO();
//        item.setId(id);
//        item.setStatus(EState.DISABLED.getValue());
//
//        int rowCount = mapper.updateById(item);
//        if (rowCount != 1) {
//           return ExecutedResult.failed("停用[监控视频播放流]失败。");
//       }
//       return ExecutedResult.success();
//   }
//
//    public ExecutedResult<String> enable(Long id) {
//        // 验证记录是否存在
//        ExecutedResult<MonitorVideoStreamingPO> checkExists = this.check4Id(id);
//        if (checkExists.isFailed()) {
//            return ExecutedResult.failed(checkExists.getMsg());
//        }
//        MonitorVideoStreamingPO item = new MonitorVideoStreamingPO();
//        item.setId(id);
//        item.setStatus(EState.NORMAL.getValue());
//
//        int rowCount = mapper.updateById(item);
//        if (rowCount != 1) {
//            return ExecutedResult.failed("启用[监控视频播放流]失败。");
//        }
//        return ExecutedResult.success();
//    }
//
//    public ExecutedResult<String> setSort(ReqSetSort request) {
//        // 验证记录是否存在
//        ExecutedResult<MonitorVideoStreamingPO> checkExists = this.check4Id(request.getId());
//        if (checkExists.isFailed()) {
//            return ExecutedResult.failed(checkExists.getMsg());
//        }
//        MonitorVideoStreamingPO item = new MonitorVideoStreamingPO();
//        item.setId(request.getId());
//        item.setSort(request.getSort());
//
//        int rowCount = mapper.updateById(item);
//        if (rowCount != 1) {
//            return ExecutedResult.failed("设置[监控视频播放流]排序值失败。");
//        }
//        return ExecutedResult.success();
//    }
//
//    public ExecutedResult<String> listSetSort(ReqListSetSort request) {
//        // id列表
//        List<Long> listId = request.getList().stream().map(ReqSetSort::getId).collect(Collectors.toList());
//        // 验证记录是否存在
//        ExecutedResult<List<MonitorVideoStreamingPO>> checkExists = this.check4Id(listId);
//        if (checkExists.isFailed()) {
//            return ExecutedResult.failed(checkExists.getMsg());
//        }
//
//        List<MonitorVideoStreamingPO> listUpdate = request.getList().stream()
//                .map(c -> {
//                    MonitorVideoStreamingPO item = new MonitorVideoStreamingPO();
//                    item.setId(c.getId());
//                    item.setSort(c.getSort());
//                    return item;
//                })
//                .collect(Collectors.toList());
//        Boolean result = mapper.modifyList(listUpdate);
//        if (result) {
//            return ExecutedResult.success();
//        }
//        return ExecutedResult.failed("[监控视频播放流]设置排序值失败");
//    }
//
//    public ExecutedResult<String> remove(Long id) {
//        Boolean result = mapper.deleteLogic(id);
//        if (BooleanUtils.isFalse(result)) {
//            return ExecutedResult.failed("删除[监控视频播放流]失败。");
//        }
//        return ExecutedResult.success();
//    }
//
//    public ExecutedResult<String> removeList(List<Long> ids) {
//        Boolean result = mapper.deleteLogic(ids);
//        if (BooleanUtils.isFalse(result)) {
//            return ExecutedResult.failed("删除[监控视频播放流]失败。");
//        }
//        return ExecutedResult.success();
//    }
public ExecutedResult<MonitorVideoStreamingPO> play(String deviceId,String channelId) throws IOException {
    MonitorVideoStreamingPO result=new MonitorVideoStreamingPO();
    ExecutedResult<String> token = getToken();
    if(token.isSuccess()&&StringUtil.isNotNullOrEmpty(token.getData())){
        ExecutedResult<String> executedResult = playStart(deviceId, channelId, token.getData());
        if(executedResult.isSuccess()&&StringUtil.isNotNullOrEmpty(executedResult.getData())){
            //查询数据是否存在
            result= mapper.getByDeviceId(deviceId, channelId);
            if(Objects.nonNull(result)){
                result.setState(EYesOrNo.YES.getValue());
                result.setUrl(executedResult.getData());
                result.setBeginTime(LocalDateTimeUtil.nowTimeStamp());
                result.setEndTime(result.getBeginTime()+ ConstantFactory.TIME_LEN_1MIN * 3L);
                result.setRemark("正在点播");
                mapper.updateById(result);
            }else {
                result=new MonitorVideoStreamingPO();
                result.setDeviceId(deviceId);
                result.setChannelId(channelId);
                result.setUrl(executedResult.getData());
                result.setState(EYesOrNo.YES.getValue());
                result.setRemark("正在点播");
                result.setBeginTime(LocalDateTimeUtil.nowTimeStamp());
                result.setEndTime(result.getBeginTime()+ ConstantFactory.TIME_LEN_1MIN * 3L);
                result.setCreateTime(LocalDateTimeUtil.nowTimeStamp());
                mapper.insert(result);
            }
        }
    }
    return ExecutedResult.success(result);
}
    public ExecutedResult<MonitorVideoStreamingPO> stop(String deviceId,String channelId,String remark) throws IOException{
        ExecutedResult<String> token = getToken();
        if(token.isSuccess()&&StringUtil.isNotNullOrEmpty(token.getData())){
            String httpsURL = "http://120.71.144.117:18097/api/play/stop/"+deviceId+'/'+channelId;
            URL myURL = new URL(httpsURL);
            // 打开连接
            HttpURLConnection conn = (HttpURLConnection) myURL.openConnection();
            // 设置请求方法为GET
            conn.setRequestMethod("GET");
            // 设置通用的请求属性
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("access-token",token.getData());
            // 建立连接
            conn.connect();
            // 读取响应
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
            String inputLine;
            StringBuilder content = new StringBuilder();
            while ((inputLine = in.readLine()) != null) {
                content.append(inputLine);
            }
            in.close();
            conn.disconnect();
            String data = content.toString();
            Gson gson = new Gson();
            JsonObject jsonObject = gson.fromJson(data, JsonObject.class);
            String code= jsonObject.get("code").getAsString();
            if(code.equals("0")){
                MonitorVideoStreamingPO streamingPO = mapper.getByDeviceId(deviceId, channelId);
                if(Objects.nonNull(streamingPO)){
                    streamingPO.setState(EYesOrNo.NO.getValue());
                    streamingPO.setEndTime(LocalDateTimeUtil.nowTimeStamp());
                    streamingPO.setRemark("手动关闭点播");
                    mapper.updateById(streamingPO);
                }
                return ExecutedResult.success(streamingPO);
            }else {
                return ExecutedResult.failed("调用第三方接口失败");
            }
        }
        return ExecutedResult.failed("获取token失败");
    }
    public ExecutedResult<String> playStart(String deviceId,String channelId,String token) throws IOException {
        String httpsURL = "http://120.71.144.117:18097/api/play/start/"+deviceId+'/'+channelId;
        URL myURL = new URL(httpsURL);
        // 打开连接
        HttpURLConnection conn = (HttpURLConnection) myURL.openConnection();
        // 设置请求方法为GET
        conn.setRequestMethod("GET");
        // 设置通用的请求属性
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setRequestProperty("access-token",token);
        // 建立连接
        conn.connect();
        // 读取响应
        BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
        String inputLine;
        StringBuilder content = new StringBuilder();
        while ((inputLine = in.readLine()) != null) {
            content.append(inputLine);
        }
        in.close();
        conn.disconnect();
        String data = content.toString();
        Gson gson = new Gson();
        JsonObject jsonObject = gson.fromJson(data, JsonObject.class);
        String code= jsonObject.get("code").getAsString();
        if(code.equals("0")){
            JsonObject asJsonArray = jsonObject.get("data").getAsJsonObject();
            String httpsFlv = asJsonArray.get("https_flv").getAsString();
            return ExecutedResult.success(httpsFlv);
        }
        return ExecutedResult.failed("请求第三方接口返回失败");
    }
    public ExecutedResult<String> getToken() throws IOException {
        //获取缓存中token
        String token = redisTemplate.opsForValue().get("accessToken");
        if(StringUtil.isNotNullOrEmpty(token)){
            return ExecutedResult.success(token);
        }else {
            String userName="";
            String password="";
            ExecutedResult<List<SysDictDataVO>> wvpLogin = sysDictDataService.getListByType("wvp_login");
            if(wvpLogin.isSuccess()){
                List<SysDictDataVO> data = wvpLogin.getData();
                userName=data.stream().filter(x->x.getDictValue().equals("username")).findFirst().orElse(null).getDictLabel();
                password=data.stream().filter(x->x.getDictValue().equals("password")).findFirst().orElse(null).getDictLabel();
            }
            String httpsURL = "http://120.71.144.117:18097/api/user/login?username="+userName+"&password="+password; // 第三方接口URL
            URL myURL = new URL(httpsURL);
            // 打开连接
            HttpURLConnection conn = (HttpURLConnection) myURL.openConnection();
            // 设置请求方法为GET
            conn.setRequestMethod("GET");
            // 设置通用的请求属性
            conn.setRequestProperty("Content-Type", "application/json");
            // 建立连接
            conn.connect();
            // 读取响应
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
            String inputLine;
            StringBuilder content = new StringBuilder();
            while ((inputLine = in.readLine()) != null) {
                content.append(inputLine);
            }
            in.close();
            conn.disconnect();
            String data = content.toString();
            Gson gson = new Gson();
            JsonObject jsonObject = gson.fromJson(data, JsonObject.class);
            JsonObject asJsonArray = jsonObject.get("data").getAsJsonObject();
            String accessToken = asJsonArray.get("accessToken").getAsString();
            if(StringUtil.isNotNullOrEmpty(accessToken)){
                redisTemplate.opsForValue().set("accessToken",accessToken);
                redisTemplate.expire("accessToken",24, TimeUnit.HOURS);
                return ExecutedResult.success(accessToken);
            }
        }
        return ExecutedResult.failed("token不存在");
    }
    public ExecutedResult<List<MonitorVideoStreamingVO>> getList(List<Long> listId) {
        List<MonitorVideoStreamingVO> result = new ArrayList<>();
        List<MonitorVideoStreamingPO> list = mapper.getList(listId);
        if (ListUtil.isNotNullOrEmpty(list)) {
            // 转换vo
            result = MonitorVideoStreamingConvert.INSTANCE.toVo(list);
        }
        return ExecutedResult.success(result);
    }
    public ExecutedResult<MonitorVideoStreamingPO> updateEndTime(String deviceId, String channelId) {
        MonitorVideoStreamingPO find = mapper.getByDeviceId(deviceId, channelId);
        if (Objects.isNull(find)) {
            return ExecutedResult.failed("视频信息不存在");
        }
        int rowCount = mapper.updateEndTime(find.getId());
        if (rowCount == 1) {
            return ExecutedResult.success();
        }
        return ExecutedResult.failed("点播续时失败");
    }
    public ExecutedResult<PagerResult<MonitorVideoStreamingVO>> search(SearchMonitorVideoStreaming search) {
        // 处理创建时间范围-查询参数
        Tuple<String, String> createTimeRange = ParameterUtil.getTimeRange(search.getCreateTimeRange());
        if (StringUtil.isNotNullOrEmpty(createTimeRange.getItem1())) {
            search.setCreateTimeStart(LocalDateTimeUtil.getTimeStamp(createTimeRange.getItem1()).getTime());
        }
        if (StringUtil.isNotNullOrEmpty(createTimeRange.getItem2())) {
            search.setCreateTimeEnd(LocalDateTimeUtil.getTimeStamp(createTimeRange.getItem2()).getTime());
        }
        PagerResult<MonitorVideoStreamingPO> pageList = mapper.search(search);
        List<MonitorVideoStreamingVO> listVo = new ArrayList<>();
        List<MonitorVideoStreamingPO> list = pageList.getList();
        if (ListUtil.isNotNullOrEmpty(list)) {
            pageList.setLastId(list.get(list.size() - 1).getId());
            // 转换vo
            listVo = MonitorVideoStreamingConvert.INSTANCE.toVo(list);
        }
        PagerResult<MonitorVideoStreamingVO> result = new PagerResult<>(pageList.getLimit(), pageList.getPage(), pageList.getTotal(), listVo);
        result.setLastId(pageList.getLastId());
        return ExecutedResult.success(result);
    }
    protected ExecutedResult<MonitorVideoStreamingPO> check4Id(Long id) {
        MonitorVideoStreamingPO exists = mapper.get(id);
        if (Objects.isNull(exists)) {
            return ExecutedResult.failed("[监控视频播放流]不存在:" + id);
        }
        return ExecutedResult.success(exists);
    }
    protected ExecutedResult<List<MonitorVideoStreamingPO>> check4Id(List<Long> listId) {
        // 从数据库查找监控视频播放流
        List<MonitorVideoStreamingPO> list = mapper.getList(listId);
        if (ListUtil.isNullOrEmpty(list)) {
            return ExecutedResult.failed("[监控视频播放流]不存在." + listId);
        }
        // 数据库找到的id列表
        List<Long> listIdFind = list.stream().map(MonitorVideoStreamingPO::getId).collect(Collectors.toList());
        // 数量不一致
        if (listId.size() != listIdFind.size()) {
            // 筛选数据库不存在的监控视频播放流
            List<Long> listIdNotFound = listId.stream().filter(c -> !listIdFind.contains(c)).collect(Collectors.toList());
            if (ListUtil.isNullOrEmpty(list)) {
                return ExecutedResult.failed("[监控视频播放流]不存在." + listIdNotFound);
            }
        }
        return ExecutedResult.success(list);
    }}
src/main/java/com/nanjing/water/service/WaterFacilityParameterService.java
@@ -35,9 +35,12 @@
import com.nanjing.water.repository.impl.WaterMonitoryPointMapperImpl;
import com.nanjing.water.repository.po.WaterFacilityPO;
import com.nanjing.water.repository.po.WaterFacilityParameterPO;
import com.nanjing.water.repository.vo.FacilityParameterDataVO;
import com.nanjing.water.repository.vo.WaterFacilityParameterVO;
import com.nanjing.water.repository.vo.WaterFacilityVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
@@ -45,6 +48,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
@@ -59,6 +63,8 @@
    private WaterFacilityMapperImpl waterFacilityMapper;
    @Autowired
    private WaterMonitoryPointMapperImpl waterMonitoryPointMapper;
    @Autowired
    private StringRedisTemplate redisTemplate;
    public ExecutedResult<String> create(ReqAddParameter request) {
        WaterFacilityPO facilityPO = waterFacilityMapper.get(request.getFacilityId());
@@ -119,6 +125,17 @@
        return ExecutedResult.success(result);
    }
    /**
     *
     * @return
     */
    public ExecutedResult<String> getNewDataPump(){
        //获取所有泵房启泵次数
        List<FacilityParameterDataVO> listNewPump = mapper.getListNewPump();
        redisTemplate.opsForValue().set("pump_start_number",SerializeUtil.toJson(listNewPump));
        redisTemplate.expire("pump_start_number",24,TimeUnit.HOURS);
        return ExecutedResult.success();
    }
    public ExecutedResult<List<WaterFacilityParameterPO>> getListByFacilityId(Long facilityId) {
        List<WaterFacilityParameterPO> list = new ArrayList<>();
        LambdaQueryWrapper<WaterFacilityParameterPO> wrapper = new LambdaQueryWrapper<>();
src/main/java/com/nanjing/water/service/convert/HeartbeatDataConvert.java
对比新文件
@@ -0,0 +1,48 @@
/**
#                                                    __----~~~~~~~~~~~------___
#                                   .  .   ~~//====......          __--~ ~~
#                   -.            \_|//     |||\\  ~~~~~~::::... /~
#                ___-==_       _-~o~  \/    |||  \\            _/~~-
#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
#          '         ~-|      /|    |-~\~~       __--~~
#                      |-~~-_/ |    |   ~\_   _-~            /\
#                           /  \     \__   \/~                \__
#                       _--~ _/ | .-~~____--~-/                  ~~==.
#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
#                                 -_     ~\      ~~---l__i__i__i--~~_/
#                                 _-~-__   ~)  \--______________--~~
#                               //.-~~~-~_--~- |-------~~~~~~~~
#                                      //.-~~~--\
#                  神兽保佑
#                  永无BUG!
*/
package com.nanjing.water.service.convert;
import com.nanjing.water.entity.request.heartbeatdata.ReqCreateHeartbeatData;
import com.nanjing.water.entity.request.heartbeatdata.ReqModifyHeartbeatData;
import com.nanjing.water.repository.po.HeartbeatDataPO;
import com.nanjing.water.repository.vo.HeartbeatDataVO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
/**
 * HeartbeatData
 * @author {#=author}
 */
@Mapper
public interface HeartbeatDataConvert {
    HeartbeatDataConvert INSTANCE = Mappers.getMapper(HeartbeatDataConvert.class);
    HeartbeatDataPO toCreate(ReqCreateHeartbeatData request);
    HeartbeatDataPO toModify(ReqModifyHeartbeatData request);
    HeartbeatDataVO toVo(HeartbeatDataPO item);
    List<HeartbeatDataVO> toVo(List<HeartbeatDataPO> list);
}
src/main/java/com/nanjing/water/service/convert/MonitorVideoStreamingConvert.java
对比新文件
@@ -0,0 +1,48 @@
/**
#                                                    __----~~~~~~~~~~~------___
#                                   .  .   ~~//====......          __--~ ~~
#                   -.            \_|//     |||\\  ~~~~~~::::... /~
#                ___-==_       _-~o~  \/    |||  \\            _/~~-
#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
#          '         ~-|      /|    |-~\~~       __--~~
#                      |-~~-_/ |    |   ~\_   _-~            /\
#                           /  \     \__   \/~                \__
#                       _--~ _/ | .-~~____--~-/                  ~~==.
#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
#                                 -_     ~\      ~~---l__i__i__i--~~_/
#                                 _-~-__   ~)  \--______________--~~
#                               //.-~~~-~_--~- |-------~~~~~~~~
#                                      //.-~~~--\
#                  神兽保佑
#                  永无BUG!
*/
package com.nanjing.water.service.convert;
import com.nanjing.water.entity.request.monitorvideostreaming.ReqCreateMonitorVideoStreaming;
import com.nanjing.water.entity.request.monitorvideostreaming.ReqModifyMonitorVideoStreaming;
import com.nanjing.water.repository.po.MonitorVideoStreamingPO;
import com.nanjing.water.repository.vo.MonitorVideoStreamingVO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
/**
 * 监控视频播放流
 * @author {#=author}
 */
@Mapper
public interface MonitorVideoStreamingConvert {
    MonitorVideoStreamingConvert INSTANCE = Mappers.getMapper(MonitorVideoStreamingConvert.class);
    MonitorVideoStreamingPO toCreate(ReqCreateMonitorVideoStreaming request);
    MonitorVideoStreamingPO toModify(ReqModifyMonitorVideoStreaming request);
    MonitorVideoStreamingVO toVo(MonitorVideoStreamingPO item);
    List<MonitorVideoStreamingVO> toVo(List<MonitorVideoStreamingPO> list);
}
src/main/java/com/nanjing/water/service/quartz/QuartzExecutor.java
@@ -5,11 +5,16 @@
import com.google.gson.JsonParser;
import com.nanjing.water.common.ConstantFactory;
import com.nanjing.water.common.ExecutedResult;
import com.nanjing.water.common.util.ListUtil;
import com.nanjing.water.common.util.LocalDateTimeUtil;
import com.nanjing.water.common.util.NumericUtil;
import com.nanjing.water.common.util.StringUtil;
import com.nanjing.water.repository.impl.MonitorVideoStreamingMapperImpl;
import com.nanjing.water.repository.impl.QuartzTaskErrorMapperImpl;
import com.nanjing.water.repository.impl.QuartzTaskRecordMapperImpl;
import com.nanjing.water.repository.po.MonitorVideoStreamingPO;
import com.nanjing.water.service.MonitorVideoStreamingService;
import com.nanjing.water.service.WaterFacilityParameterService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -17,6 +22,7 @@
import java.lang.reflect.Method;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
@Service
@@ -27,6 +33,12 @@
    private QuartzTaskRecordMapperImpl taskRecordsDao;
    @Autowired
    private QuartzTaskErrorMapperImpl taskErrorsDao;
    @Autowired
    private WaterFacilityParameterService waterFacilityParameterService;
    @Autowired
    private MonitorVideoStreamingService streamingService;
    @Autowired
    private MonitorVideoStreamingMapperImpl streamingMapper;
    /**
     * 执行job
@@ -42,7 +54,38 @@
            return ExecutedResult.failed(e.toString());
        }
    }
    /***
     * job执行器-查询最新启泵数据
     * @param jobParameter 执行参数
     */
    public ExecutedResult<String> getNewDataPump(String jobParameter) {
        try {
            waterFacilityParameterService.getNewDataPump();
            return ExecutedResult.success();
        } catch (Exception e) {
            return ExecutedResult.failed(e.toString());
        }
    }
    /***
     * job执行器-定时关闭直播流
     */
    public ExecutedResult<String> stopVideo(String jobParameter) {
        try {
            //查询正在直播的列表
            List<MonitorVideoStreamingPO> list = streamingMapper.list4WaitingStop();
            if (ListUtil.isNotNullOrEmpty(list)) {
                for (MonitorVideoStreamingPO po : list) {
                    ExecutedResult<MonitorVideoStreamingPO> stop = streamingService.stop(po.getDeviceId(), po.getChannelId(), "无人观看,主动断开");
                    if (stop.isFailed() || Objects.isNull(stop.getData())) {
                        ExecutedResult.failed("停止点播定时任务调用接口失败!");
                    }
                }
            }
            return ExecutedResult.success();
        } catch (Exception e) {
            return ExecutedResult.failed(e.toString());
        }
    }
    /***
     * job执行器-清理任务调度日志
     * @param jobParameter 执行参数
src/main/resources/application-local.yml
对比新文件
@@ -0,0 +1,64 @@
server:
  port: 9038
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
  datasource:
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://127.0.0.1:7654/nanjing_water_system
    username: nanjing
    password: nanjing.2025
    druid:
      initial-size: 4 #连接池初始化大小
      min-idle: 10 #最小空闲连接数
      max-active: 20 #最大连接数
      web-stat-filter:
        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" #不统计这些请求数据
      stat-view-servlet: #访问监控网页的登录用户名和密码
        login-username: druid
        login-password: lunhan123
  redis:
    host: 127.0.0.1 # Redis服务器地址
    database: 2 # Redis数据库索引(默认为0)
    port: 6379 # Redis服务器连接端口
    password:  # Redis服务器连接密码(默认为空)
    timeout: 300 # 连接超时时间(毫秒)
    # invalid in2.4 # maxActive: 1024 # 可用连接实例的最大数目,默认为8,如果赋值为-1,则表示不限制,如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
    maxIdle: 200 # 制一个pool最多有多少个状态为idle(空闲的)的jedis实例
    maxWaitMillis: 10000 # 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException
    maxTotal: maxTotal #控制一个pool可分配多少个jedis实例,用来替换上面的redis.maxActive,如果是jedis 2.4以后用该属性
logging:
  file:
    path: ./logs
  level:
    root: info
    com.nanjing.water: info
# mybatis-plus 配置:
mybatis-plus:
  configuration:
    ### 开启打印sql配置
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mqtt:
  # 是否启用
  enable: true
  host: 113.250.189.120
  port: 20007
  user: admin
  password: public
  # 订阅主题
  topic: nanjing/#
  # 订阅消息的客户端id
  clientId: nanjing-station-dev
  # 连接超时时间
  connectionTimeout: 10
  # 心跳
  keepAliveInterval: 20
  # 发送消息的客户端id
  serverClientId: nanjing-station-publish-dev
# quartz定时任务配置
quartz:
  # 是否启用
  enable: false
src/main/resources/static/job-list.html
@@ -7,7 +7,7 @@
    <meta name="renderer" content="webkit">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="icon" href="favicon.ico">
    <title>xxx系统</title>
    <title>智慧水务-南京地铁智慧泵站监测系统</title>
    <link rel="stylesheet" href="css/main.css" />
src/test/java/com/nanjing/water/GenCodeGauss.java
@@ -244,7 +244,7 @@
     * 只生成以下配置的表
     */
    private static final List<String> ONLY_TABLES = Arrays.asList(
     "data_upload_record"
     "monitor_video_streaming"
    );
    public static void main(String[] args) {