liulin
2025-07-09 49aaecfb0617b0e6043147c86f3d303e9f24867e
修改yml配置
已删除1个文件
已添加19个文件
已修改24个文件
2264 ■■■■ 文件已修改
pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/common/enums/EFacilityState.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/entity/request/alarmscheme/ReqCreateAlarmScheme.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/entity/request/alarmscheme/ReqModifyAlarmScheme.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/entity/request/facilityalarmrecord/ReqCreateFacilityAlarmRecord.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/entity/request/test/TestPayVO.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/entity/request/waterfacility/ReqCreateWaterFacility.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/entity/request/waterfacilityparameter/ReqAddParameter.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/entity/response/alarm/FacilityAlarm.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/entity/response/facility/FacilityCount.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/entity/response/facility/FacilityData.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/entity/search/SearchAlarmScheme.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/entity/search/SearchFacilityAlarmRecord.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/host/controller/AlarmSchemeController.java 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/host/controller/TestInfoServiceController.java 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/host/controller/WaterFacilityParameterController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/host/controller/visualized/FacilityDataController.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/host/controller/visualized/HomeDataController.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/host/controller/visualized/StatisticsDataController.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/host/controller/visualized/visualizedDataController.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/host/mqtt/PushCallback.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/repository/impl/AlarmSchemeMapperImpl.java 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/repository/impl/FacilityAlarmRecordMapperImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/repository/impl/WaterFacilityParameterMapperImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/repository/mapper/AlarmSchemeMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/repository/mapper/FacilityAlarmRecordMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/repository/po/AlarmSchemePO.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/repository/po/FacilityAlarmRecordPO.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/repository/po/UserWorkOrderPO.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/repository/po/WaterFacilityPO.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/repository/po/WaterMonitoryPointPO.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/repository/vo/AlarmSchemeVO.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/repository/vo/UserWorkOrderVO.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/service/AlarmSchemeService.java 245 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/service/DataUploadRecordService.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/service/FacilityAlarmRecordService.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/service/TestInfoService.java 430 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/service/UserWorkOrderService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/service/WaterFacilityParameterService.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/service/WaterFacilityService.java 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fengdu/gas/service/convert/AlarmSchemeConvert.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-dev.yml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-prod.yml 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/fengdu/gas/GenCodeGauss.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -320,7 +320,7 @@
                    <!--指定生成文档的使用的配置文件,配置文件放在自己的 目中 项 -->
                    <configFile>./src/main/resources/smart-doc.json</configFile>
                    <!--指定 目名称 项 -->
                    <projectName>xxx项目-xxx服务-接口文档</projectName>
                    <projectName>丰都气体监测项目-api服务-接口文档</projectName>
                    <!-- &lt;!&ndash;smart-doc 实现自动分析依赖树加载第三方
                   依 的源 ,如果一些框架依 加 不到 致 , 使用 赖 码 赖库 载 导 报错 这时请 excludes 排除掉&ndash;&gt;
                    <excludes>
src/main/java/com/fengdu/gas/common/enums/EFacilityState.java
对比新文件
@@ -0,0 +1,56 @@
package com.fengdu.gas.common.enums;
import java.util.Arrays;
import java.util.Objects;
public enum EFacilityState {
    NO("停止", 0),
    YES("运行", 1),
    ONE("一级报警", 2),
    TWO("二级报警",3)
    ;
    private String desc;//枚举描述
    private Integer value;//枚举值
    public Integer getValue() {
        return value;
    }
    public String getDesc() {
        return desc;
    }
    /**
     * 构造方法
     * @param desc 枚举描述
     * @param value 枚举值
     */
    EFacilityState(String desc, Integer value) {
        this.desc = desc;
        this.value = value;
    }
    /**
     * 根据值获取枚举
     *
     * @param value 枚举值
     * @return
     */
    public static EFacilityState getByValue(Integer value) {
        return Arrays.stream(EFacilityState.values())
                .filter(e -> Objects.equals(e.getValue(), value))
                .findFirst()
                .orElse(null);
    }
    @Override
    public String toString() {
        return "EFacilityState{" +
                "desc='" + desc + '\'' +
                ", value=" + value +
                '}';
    }
}
src/main/java/com/fengdu/gas/entity/request/alarmscheme/ReqCreateAlarmScheme.java
对比新文件
@@ -0,0 +1,58 @@
/**
#                                                    __----~~~~~~~~~~~------___
#                                   .  .   ~~//====......          __--~ ~~
#                   -.            \_|//     |||\\  ~~~~~~::::... /~
#                ___-==_       _-~o~  \/    |||  \\            _/~~-
#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
#          '         ~-|      /|    |-~\~~       __--~~
#                      |-~~-_/ |    |   ~\_   _-~            /\
#                           /  \     \__   \/~                \__
#                       _--~ _/ | .-~~____--~-/                  ~~==.
#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
#                                 -_     ~\      ~~---l__i__i__i--~~_/
#                                 _-~-__   ~)  \--______________--~~
#                               //.-~~~-~_--~- |-------~~~~~~~~
#                                      //.-~~~--\
#                  神兽保佑
#                  永无BUG!
*/
package com.fengdu.gas.entity.request.alarmscheme;
import lombok.Data;
import java.math.BigDecimal;
/**
 * 报警规则配置
 * @author zr
 */
@Data
public class ReqCreateAlarmScheme {
    /**
     * 设备参数code
     */
    private String columnsCode;
    /**
     * 参数名称
     */
    private String columnsShow;
    /**
     * 低报警值
     */
    private BigDecimal lowAlarm;
    /**
     * 高报警值
     */
    private BigDecimal tallAlarm;
    /**
     * 通知人员
     */
    private String informUser;
    /**
     * 备注
     */
    private String remark;
}
src/main/java/com/fengdu/gas/entity/request/alarmscheme/ReqModifyAlarmScheme.java
对比新文件
@@ -0,0 +1,62 @@
/**
#                                                    __----~~~~~~~~~~~------___
#                                   .  .   ~~//====......          __--~ ~~
#                   -.            \_|//     |||\\  ~~~~~~::::... /~
#                ___-==_       _-~o~  \/    |||  \\            _/~~-
#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
#          '         ~-|      /|    |-~\~~       __--~~
#                      |-~~-_/ |    |   ~\_   _-~            /\
#                           /  \     \__   \/~                \__
#                       _--~ _/ | .-~~____--~-/                  ~~==.
#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
#                                 -_     ~\      ~~---l__i__i__i--~~_/
#                                 _-~-__   ~)  \--______________--~~
#                               //.-~~~-~_--~- |-------~~~~~~~~
#                                      //.-~~~--\
#                  神兽保佑
#                  永无BUG!
*/
package com.fengdu.gas.entity.request.alarmscheme;
import lombok.Data;
import java.math.BigDecimal;
/**
 * 报警规则配置
 * @author zr
 */
@Data
public class ReqModifyAlarmScheme {
    /**
     * null
     */
    private Long id;
    /**
     * 设备参数code
     */
    private String columnsCode;
    /**
     * 参数名称
     */
    private String columnsShow;
    /**
     * 低报警值
     */
    private BigDecimal lowAlarm;
    /**
     * 高报警值
     */
    private BigDecimal tallAlarm;
    /**
     * 通知人员
     */
    private String informUser;
    /**
     * 备注
     */
    private String remark;
}
src/main/java/com/fengdu/gas/entity/request/facilityalarmrecord/ReqCreateFacilityAlarmRecord.java
@@ -54,6 +54,16 @@
     * 参数名称
     */
    private String columnsName;
    private Integer alarmType;
    private String columnsValue;
    private String minValue;
    private String maxValue;
    /**
     * 报警描述
     */
src/main/java/com/fengdu/gas/entity/request/test/TestPayVO.java
对比新文件
@@ -0,0 +1,28 @@
package com.fengdu.gas.entity.request.test;
import lombok.Data;
@Data
public class TestPayVO {
    private String service;
    private String mer_no;
    private String account_type;
    private String card_no;
    private String real_name;
    private String bank_code;
    private String id_type;
    private String id_no;
    private String notify_url;
    private String goods_name;
    private String goods_num;
    private String goods_price;
    private String goods_type;
    private String order_no;
    private String order_amount;
    private String order_time;
    private String currency;
    private String pay_comments;
    private String remark;
}
src/main/java/com/fengdu/gas/entity/request/waterfacility/ReqCreateWaterFacility.java
@@ -47,6 +47,10 @@
     */
    private Long pointId;
    /**
     * 监控点名称
     */
    private String pointName;
    /**
     * 是否在线
     */
    private Integer isOnline;
src/main/java/com/fengdu/gas/entity/request/waterfacilityparameter/ReqAddParameter.java
对比新文件
@@ -0,0 +1,17 @@
package com.fengdu.gas.entity.request.waterfacilityparameter;
import lombok.Data;
import java.util.List;
@Data
public class ReqAddParameter {
    /**
     * 设备id
     */
    private Long facilityId;
    /**
     * 参数列表
     */
    private List<ReqCreateWaterFacilityParameter> parameterList;
}
src/main/java/com/fengdu/gas/entity/response/alarm/FacilityAlarm.java
对比新文件
@@ -0,0 +1,23 @@
package com.fengdu.gas.entity.response.alarm;
import lombok.Data;
@Data
public class FacilityAlarm {
    /**
     * 报警名称
     */
    private String name;
    /**
     * 最小报警值
     */
    private String minValue;
    /**
     * 最大报警值
     */
    private String maxValue;
    /**
     * 报警次数
     */
    private Integer count;
}
src/main/java/com/fengdu/gas/entity/response/facility/FacilityCount.java
对比新文件
@@ -0,0 +1,35 @@
package com.fengdu.gas.entity.response.facility;
import lombok.Data;
@Data
public class FacilityCount {
    /**
     * 监控点id
     */
    private Long pointId;
    /**
     * 监控点名称
     */
    private String pointName;
    /**
     * 甲烷传感器数量
     */
    private Integer methaneCount;
    /**
     * 硫化氢传感器数量
     */
    private Integer hyrothionCount;
    /**
     * 风机数量
     */
    private Integer facilityFanCount;
    /**
     * 终端设备台数
     */
    private Integer boxCount;
    /**
     * 总设备数量
     */
    private Integer sumCount;
}
src/main/java/com/fengdu/gas/entity/response/facility/FacilityData.java
对比新文件
@@ -0,0 +1,53 @@
package com.fengdu.gas.entity.response.facility;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class FacilityData {
    /**
     * 监测点id
     */
    private Long  pointId;
    /**
     * 监测点名称名称
     */
    private String pointName;
    /**
     * 左边距
     */
    private String left;
    /**
     * 上边距
     */
    private String top;
    /**
     * 设备id
     */
    private Long  facilityId;
    /**
     * 设备名称
     */
    private String facilityName;
    /**
     * 设备状态
     */
    private String facilityState;
    /**
     * 设备风机状态
     */
    private String facilityFanState;
    /**
     * 设备甲烷值
     */
    private BigDecimal methaneValue;
    /**
     * 硫化氢值
     */
    private BigDecimal hyrothionValue;
    /**
     * 温度
     */
    private BigDecimal temperature;
}
src/main/java/com/fengdu/gas/entity/search/SearchAlarmScheme.java
对比新文件
@@ -0,0 +1,14 @@
package com.fengdu.gas.entity.search;
import lombok.Data;
import com.fengdu.gas.entity.dto.SearchBasicDTO;
/**
 * 报警规则配置
 * @author zr
 */
@Data
public class SearchAlarmScheme extends SearchBasicDTO {
}
src/main/java/com/fengdu/gas/entity/search/SearchFacilityAlarmRecord.java
@@ -10,5 +10,8 @@
 */
@Data
public class SearchFacilityAlarmRecord extends SearchBasicDTO {
    /**
     *1本日 2本月 3本年
     */
    private Integer dateType;
}
src/main/java/com/fengdu/gas/host/controller/AlarmSchemeController.java
对比新文件
@@ -0,0 +1,113 @@
/**
#                                                    __----~~~~~~~~~~~------___
#                                   .  .   ~~//====......          __--~ ~~
#                   -.            \_|//     |||\\  ~~~~~~::::... /~
#                ___-==_       _-~o~  \/    |||  \\            _/~~-
#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
#          '         ~-|      /|    |-~\~~       __--~~
#                      |-~~-_/ |    |   ~\_   _-~            /\
#                           /  \     \__   \/~                \__
#                       _--~ _/ | .-~~____--~-/                  ~~==.
#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
#                                 -_     ~\      ~~---l__i__i__i--~~_/
#                                 _-~-__   ~)  \--______________--~~
#                               //.-~~~-~_--~- |-------~~~~~~~~
#                                      //.-~~~--\
#                  神兽保佑
#                  永无BUG!
*/
package com.fengdu.gas.host.controller;
import com.fengdu.gas.common.ExecutedResult;
import com.fengdu.gas.common.PagerResult;
import com.fengdu.gas.common.util.ParameterUtil;
import com.fengdu.gas.common.validator.ParameterValidateResult;
import com.fengdu.gas.common.validator.ParameterValidator;
import com.fengdu.gas.entity.request.ReqListId;
import com.fengdu.gas.host.BasicController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import com.fengdu.gas.service.AlarmSchemeService;
import com.fengdu.gas.entity.request.alarmscheme.ReqCreateAlarmScheme;
import com.fengdu.gas.entity.request.alarmscheme.ReqModifyAlarmScheme;
import com.fengdu.gas.entity.search.SearchAlarmScheme;
import com.fengdu.gas.repository.vo.AlarmSchemeVO;
/**
 * 9000.报警规则配置
 * @author zr
 * @order 9000
 */
@RestController
@RequestMapping(value = "alarmScheme")
public class AlarmSchemeController extends BasicController {
    @Autowired
    private AlarmSchemeService service;
    /**
     * 创建[报警规则配置]
     * @author zr
     */
    @PostMapping(value = "create")
    public ExecutedResult<Long> create(@RequestBody ReqCreateAlarmScheme 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 zr
     */
    @PostMapping(value = "modify")
    public ExecutedResult<String> modify(@RequestBody ReqModifyAlarmScheme 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 zr
     */
    @GetMapping(value = "get/{id}")
    public ExecutedResult<AlarmSchemeVO> get(@PathVariable Long id) {
        return service.get(id);
    }
    /**
     * 查询[报警规则配置]
     * @author zr
     */
    @PostMapping(value = "search")
    public ExecutedResult<PagerResult<AlarmSchemeVO>> search(@RequestBody SearchAlarmScheme request) {
        return service.search(request);
    }
}
src/main/java/com/fengdu/gas/host/controller/TestInfoServiceController.java
@@ -12,6 +12,7 @@
import com.fengdu.gas.entity.request.ReqSetSort;
import com.fengdu.gas.entity.request.test.ReqCreateTestInfo;
import com.fengdu.gas.entity.request.test.ReqModifyTestInfo;
import com.fengdu.gas.entity.request.test.TestPayVO;
import com.fengdu.gas.entity.search.SearchTestInfo;
import com.fengdu.gas.service.TestInfoService;
import com.fengdu.gas.host.BasicController;
@@ -36,222 +37,27 @@
public class TestInfoServiceController extends BasicController {
    @Autowired
    private TestInfoService service;
    /**
     * 创建[测试信息]
     * 测试支付信息
     *
     * @author lin.liu
     * @date 2021/11/23
     */
    @PostMapping(value = "create")
    public ExecutedResult<Long> create(@RequestBody ReqCreateTestInfo request) {
        //#region 参数验证
        ParameterValidator validator = new ParameterValidator()
                // 非空
                .addNotNullOrEmpty(ParameterUtil.named("名称"), request.getName())
                // 限制最大长度
                .addLengthMax(ParameterUtil.named("名称"), request.getName(), ConstantFactory.LENGTH_MAX50)
                // 必须大于0
                .addGreater(ParameterUtil.named("用户id"), request.getUserId(), 0L)
                // 必须是手机号码(正则)
                .addMustMobile(ParameterUtil.named("电话"), request.getPhone())
                // 金额大于0
                .addGreaterThan(ParameterUtil.named("余额"), request.getBalance(), BigDecimal.ZERO)
                // 必须是枚举值
                .addMustEnum(ParameterUtil.named("性别"), request.getSex(), ESex.class)
                // 必须是日期字符串(yyyy-MM-dd)
                .addMustDate(ParameterUtil.named("生日"), request.getBirthday())
                // 必须大于0
                .addGreater(ParameterUtil.named("排序值"), request.getSort(), 0)
                // 限制最大长度
                .addLengthMax(ParameterUtil.named("备注"), request.getComment(), ConstantFactory.LENGTH_MAX500);
        ParameterValidateResult result = validator.validate();
        if (result.getIsFiled()) {
            return failed(result.getErrorMsg());
        }
        //#endregion
        return this.service.create(request);
    @PostMapping(value = "pay")
    public ExecutedResult<String> pay() throws Exception {
        return this.service.testPay();
    }
    /**
     * 编辑[测试信息]
     * 测试支付信息
     *
     * @author lin.liu
     * @date 2021/11/23
     */
    @PostMapping(value = "modify")
    public ExecutedResult<String> modify(@RequestBody ReqModifyTestInfo 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)
                // 必须大于0
                .addGreater(ParameterUtil.named("用户id"), request.getUserId(), 0L)
                // 必须是手机号码(正则)
                .addMustMobile(ParameterUtil.named("电话"), request.getPhone())
                // 金额大于0
                .addGreaterThan(ParameterUtil.named("余额"), request.getBalance(), BigDecimal.ZERO)
                // 必须是枚举值
                .addMustEnum(ParameterUtil.named("性别"), request.getSex(), ESex.class)
                // 必须是日期字符串(yyyy-MM-dd)
                .addMustDate(ParameterUtil.named("生日"), request.getBirthday())
                // 必须大于0
                .addGreater(ParameterUtil.named("排序值"), request.getSort(), 0)
                // 限制最大长度
                .addLengthMax(ParameterUtil.named("备注"), request.getComment(), ConstantFactory.LENGTH_MAX500);
        ParameterValidateResult result = validator.validate();
        if (result.getIsFiled()) {
            return failed(result.getErrorMsg());
        }
        //#endregion
        return this.service.modify(request);
    @PostMapping(value = "confirmPay")
    public ExecutedResult<String> confirmPay() throws Exception {
        return this.service.confirmPay();
    }
    /**
     * 获取[测试信息]
     *
     * @author lin.liu
     * @date 2021/11/23
     */
    @GetMapping(value = "get/{id}")
    public ExecutedResult<TestInfoVO> get(@PathVariable Long id) {
        return this.service.get(id);
    }
    /**
     * 根据id批量获取[测试信息]
     *
     * @author lin.liu
     * @date 2021/11/23
     */
    @PostMapping(value = "getList")
    public ExecutedResult<List<TestInfoVO>> getList(@RequestBody ReqListId request) {
        //#region 参数验证
        ParameterValidator validator = new ParameterValidator()
                // 不能为空
                .addNotNullOrEmpty(ParameterUtil.named("[测试信息]id列表"), request.getListId())
                ;
        ParameterValidateResult result = validator.validate();
        if (result.getIsFiled()) {
            return failed(result.getErrorMsg());
        }
        //#endregion
        return this.service.getList(request.getListId());
    }
    /**
     * [测试信息]设置排序值
     *
     * @author lin.liu
     * @date 2021/11/23
     */
    @PostMapping(value = "setSort")
    public ExecutedResult<String> setSort(@RequestBody ReqSetSort request) {
        //#region 参数验证
        ParameterValidator validator = new ParameterValidator()
                // 必须大于0
                .addGreater(ParameterUtil.named("[测试信息]id"), request.getId(), 0L)
                // 必须大于0
                .addGreaterThan(ParameterUtil.named("排序值"), request.getSort(), 0)
                ;
        ParameterValidateResult result = validator.validate();
        if (result.getIsFiled()) {
            return failed(result.getErrorMsg());
        }
        //#endregion
        return this.service.setSort(request);
    }
    /**
     * [测试信息]批量设置排序值
     *
     * @author lin.liu
     * @date 2021/11/23
     */
    @PostMapping(value = "listSetSort")
    ExecutedResult<String> listSetSort(ReqListSetSort request) {
        //#region 参数验证
        ParameterValidator validator = new ParameterValidator()
                // 不能为空
                .addNotNullOrEmpty(ParameterUtil.named("[测试信息]排序设置列表"), request.getList())
                ;
        ParameterValidateResult result = validator.validate();
        if (result.getIsFiled()) {
            return failed(result.getErrorMsg());
        }
        //#endregion
        return this.service.listSetSort(request);
    }
    /**
     * 停用[测试信息]
     *
     * @param id [测试]id
     * @author lin.liu
     * @date 2021/11/23
     */
    @PostMapping(value = "stop/{id}")
    public ExecutedResult<String> stop(@PathVariable Long id) {
        return this.service.stop(id);
    }
    /**
     * 启用[测试信息]
     *
     * @param id [测试]id
     * @author lin.liu
     * @date 2021/11/23
     */
    @PostMapping(value = "enable/{id}")
    public ExecutedResult<String> enable(@PathVariable Long id) {
        return this.service.enable(id);
    }
    /**
     * 删除[测试信息]
     *
     * @param id [测试]id
     * @author lin.liu
     * @date 2021/11/23
     */
    @PostMapping(value = "remove/{id}")
    public ExecutedResult<String> remove(@PathVariable Long id) {
        return this.service.remove(id);
    }
    /**
     * 批量删除[测试信息]
     *
     * @author lin.liu
     * @date 2021/11/23
     */
    @PostMapping(value = "removeList")
    public ExecutedResult<String> removeList(@RequestBody ReqListId request) {
        //#region 参数验证
        ParameterValidator validator = new ParameterValidator()
                // 不能为空
                .addNotNullOrEmpty(ParameterUtil.named("[测试信息]id列表"), request.getListId())
                ;
        ParameterValidateResult result = validator.validate();
        if (result.getIsFiled()) {
            return failed(result.getErrorMsg());
        }
        //#endregion
        return this.service.removeList(request.getListId());
    }
    /**
     * 查询[测试信息]
     *
     * @author lin.liu
     * @date 2021/11/23
     */
    @NonLogin
    @PostMapping(value = "search")
    public ExecutedResult<PagerResult<TestInfoVO>> search(@RequestBody SearchTestInfo request) {
        return this.service.search(request);
    }
}
src/main/java/com/fengdu/gas/host/controller/WaterFacilityParameterController.java
@@ -28,6 +28,7 @@
import com.fengdu.gas.common.validator.ParameterValidateResult;
import com.fengdu.gas.common.validator.ParameterValidator;
import com.fengdu.gas.entity.request.ReqListId;
import com.fengdu.gas.entity.request.waterfacilityparameter.ReqAddParameter;
import com.fengdu.gas.host.BasicController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -54,11 +55,12 @@
     * @author zr
     */
    @PostMapping(value = "create")
    public ExecutedResult<Long> create(@RequestBody ReqCreateWaterFacilityParameter request) {
    public ExecutedResult<String> create(@RequestBody ReqAddParameter request) {
        //#region 参数验证
        ParameterValidator validator = new ParameterValidator()
                // 非空
                //.addNotNullOrEmpty(ParameterUtil.named("名称"), request.getName())
                .addNotNullOrEmpty(ParameterUtil.named("设备id"), request.getFacilityId())
                .addNotNullOrEmpty(ParameterUtil.named("参数列表"), request.getParameterList())
                // 限制最大长度
                //.addLengthMax(ParameterUtil.named("名称"), request.getName(), ConstantFactory.LENGTH_MAX50)
                ;
src/main/java/com/fengdu/gas/host/controller/visualized/FacilityDataController.java
对比新文件
@@ -0,0 +1,17 @@
package com.fengdu.gas.host.controller.visualized;
import com.fengdu.gas.host.BasicController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * 10000.可视化数据大屏设备管理
 * @author zr
 * @order 10000
 */
@RestController
@RequestMapping(value = "facilityData")
public class FacilityDataController extends BasicController {
    /*****************************设备管理**********************************/
}
src/main/java/com/fengdu/gas/host/controller/visualized/HomeDataController.java
对比新文件
@@ -0,0 +1,58 @@
package com.fengdu.gas.host.controller.visualized;
import com.fengdu.gas.common.ExecutedResult;
import com.fengdu.gas.common.PagerResult;
import com.fengdu.gas.common.util.ParameterUtil;
import com.fengdu.gas.common.validator.ParameterValidateResult;
import com.fengdu.gas.common.validator.ParameterValidator;
import com.fengdu.gas.entity.request.commonparameters.ReqModifyCommonParameters;
import com.fengdu.gas.entity.response.facility.FacilityCount;
import com.fengdu.gas.entity.response.facility.FacilityData;
import com.fengdu.gas.entity.search.SearchUserWorkOrder;
import com.fengdu.gas.host.BasicController;
import com.fengdu.gas.repository.vo.UserWorkOrderVO;
import com.fengdu.gas.service.UserWorkOrderService;
import com.fengdu.gas.service.WaterFacilityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * 10000.可视化数据大屏首页总览
 * @author zr
 * @order 10000
 */
@RestController
@RequestMapping(value = "homeData")
public class HomeDataController extends BasicController {
    @Autowired
    private WaterFacilityService waterFacilityService;
    @Autowired
    private UserWorkOrderService userWorkOrderService;
    /**
     * 查询设备
     * @author zr
     */
    @PostMapping(value = "getFacilityList")
    public ExecutedResult<List<FacilityData>> getFacilityList() {
        return waterFacilityService.getFacilityList();
    }
    /**
     * 区域设备数量统计
     * @author zr
     */
    @PostMapping(value = "deviceCount")
    public ExecutedResult<List<FacilityCount>> deviceCount() {
        return waterFacilityService.deviceCount();
    }
    /**
     * 工单统计
     * @author zr
     */
    @PostMapping(value = "workOrderList")
    public ExecutedResult<PagerResult<UserWorkOrderVO>> workOrderList(@ RequestBody  SearchUserWorkOrder search) {
        return userWorkOrderService.search(search);
    }
}
src/main/java/com/fengdu/gas/host/controller/visualized/StatisticsDataController.java
对比新文件
@@ -0,0 +1,31 @@
package com.fengdu.gas.host.controller.visualized;
import com.fengdu.gas.common.ExecutedResult;
import com.fengdu.gas.common.PagerResult;
import com.fengdu.gas.entity.response.alarm.FacilityAlarm;
import com.fengdu.gas.entity.search.SearchFacilityAlarmRecord;
import com.fengdu.gas.entity.search.SearchUserWorkOrder;
import com.fengdu.gas.host.BasicController;
import com.fengdu.gas.repository.vo.FacilityAlarmRecordVO;
import com.fengdu.gas.repository.vo.UserWorkOrderVO;
import com.fengdu.gas.service.FacilityAlarmRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * 10000.可视化数据大屏数据统计
 * @author zr
 * @order 10000
 */
@RestController
@RequestMapping(value = "statisticsData")
public class StatisticsDataController extends BasicController {
@Autowired
private FacilityAlarmRecordService facilityAlarmRecordService;
    @PostMapping(value = "getAlarmList")
    public ExecutedResult<List<FacilityAlarm>> getAlarmList(Integer dateType) {
        return facilityAlarmRecordService.getAlarmList(dateType);
    }
}
src/main/java/com/fengdu/gas/host/controller/visualized/visualizedDataController.java
文件已删除
src/main/java/com/fengdu/gas/host/mqtt/PushCallback.java
@@ -3,13 +3,17 @@
import com.fengdu.gas.common.enums.ELogger;
import com.fengdu.gas.common.util.LoggerUtil;
import com.fengdu.gas.common.util.SpringUtil;
import com.fengdu.gas.common.util.ThreadPoolUtil;
import com.fengdu.gas.service.DataUploadRecordService;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import java.nio.charset.StandardCharsets;
import java.util.Objects;
;
@@ -32,7 +36,8 @@
public class PushCallback implements MqttCallback {
    private static final Logger LOGGER_DEBUG = LoggerUtil.get(ELogger.DEBUG);
    private static final Logger LOGGER_ERROR = LoggerUtil.get(ELogger.SYS_ERROR);
    @Autowired
    DataUploadRecordService dataUploadService;
    private MQTTSubsribe mqttSubsribe;
    public PushCallback(MQTTSubsribe mqttSubsribe) {
@@ -74,8 +79,20 @@
        //这里可以针对收到的消息做处理
        ThreadPoolUtil.getDefaultPool().execute(() -> {
            try {
                if (Objects.nonNull(dataUploadService)) {
                //调用方法
                //dataUploadYwjRecordService.mqttReceived(topic, msg);
                    dataUploadService.mqttReceived(topic, msg);
                } else {
                    try {
                        System.out.println("dataUploadService bean尚未初始化...");
                        dataUploadService = SpringUtil.getBean(DataUploadRecordService.class);
                        System.out.println("dataUploadService 初始化bean成功!");
                    } catch (Exception ignored) {}
                    if (Objects.nonNull(dataUploadService)) {
                        //调用方法
                        dataUploadService.mqttReceived(topic, msg);
                    }
                }
            } catch (Exception e) {
                LOGGER_ERROR.error("messageArrived", e);
            }
src/main/java/com/fengdu/gas/repository/impl/AlarmSchemeMapperImpl.java
对比新文件
@@ -0,0 +1,137 @@
/**
#                                                    __----~~~~~~~~~~~------___
#                                   .  .   ~~//====......          __--~ ~~
#                   -.            \_|//     |||\\  ~~~~~~::::... /~
#                ___-==_       _-~o~  \/    |||  \\            _/~~-
#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
#          '         ~-|      /|    |-~\~~       __--~~
#                      |-~~-_/ |    |   ~\_   _-~            /\
#                           /  \     \__   \/~                \__
#                       _--~ _/ | .-~~____--~-/                  ~~==.
#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
#                                 -_     ~\      ~~---l__i__i__i--~~_/
#                                 _-~-__   ~)  \--______________--~~
#                               //.-~~~-~_--~- |-------~~~~~~~~
#                                      //.-~~~--\
#                  神兽保佑
#                  永无BUG!
*/
package com.fengdu.gas.repository.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fengdu.gas.common.PagerResult;
import com.fengdu.gas.common.enums.EYesOrNo;
import com.fengdu.gas.common.util.*;
import com.fengdu.gas.entity.dto.*;
import com.fengdu.gas.entity.enums.*;
import com.fengdu.gas.repository.BasicMapperImpl;
import org.springframework.stereotype.Repository;
import java.util.List;
import com.fengdu.gas.entity.search.SearchAlarmScheme;
import com.fengdu.gas.repository.mapper.AlarmSchemeMapper;
import com.fengdu.gas.repository.po.AlarmSchemePO;
/**
 * 报警规则配置
 * @author zr
 */
@Repository
public class AlarmSchemeMapperImpl extends BasicMapperImpl<AlarmSchemePO, AlarmSchemeMapper> {
    AlarmSchemeMapperImpl(AlarmSchemeMapper mapper) {
        super(mapper);
    }
    @Override
    public PagerResult<AlarmSchemePO> search(SearchBasicDTO request) {
        // 还原查询条件真实类型
        SearchAlarmScheme search = (SearchAlarmScheme)request;
        // 查询条件
        LambdaQueryWrapper<AlarmSchemePO> queryWrapper = this.query();
        // 非逻辑删除
        queryWrapper.eq(AlarmSchemePO::getIsDelete, EYesOrNo.NO.getValue());
        // 状态
        //queryWrapper.eq(NumericUtil.tryParseInt(search.getStatus()).compareTo(0) > 0, AlarmSchemePO::getStatus, search.getStatus());
        // 状态列表
        //queryWrapper.in(ListUtil.isNotNullOrEmpty(search.getListStatus()), AlarmSchemePO::getStatus, search.getListStatus());
        // 数据创建时间-起始
        queryWrapper.ge(NumericUtil.tryParseLong(search.getCreateTimeStart()).compareTo(0L) > 0, AlarmSchemePO::getCreateTime, search.getCreateTimeStart());
        // 数据创建时间-截止
        queryWrapper.le(NumericUtil.tryParseLong(search.getCreateTimeEnd()).compareTo(0L) > 0, AlarmSchemePO::getCreateTime, search.getCreateTimeEnd());
        // 关键字
        //if (StringUtil.isNotNullOrEmpty(search.getKeywords())) {
        //    queryWrapper.and(q ->
        //        q.like(AlarmSchemePO::getName, search.getKeywords())
        //        .or().like(AlarmSchemePO::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(AlarmSchemePO::getId);
                            break;
                        // 数据创建时间
                        case CREATE_TIME:
                            queryWrapper.orderByAsc(AlarmSchemePO::getCreateTime);
                            break;
                        // 最后更新时间
                        case UPDATE_TIME:
                            queryWrapper.orderByAsc(AlarmSchemePO::getUpdateTime);
                            break;
                    }
                } else {
                    // 倒叙排序
                    switch (orderBy) {
                        // 主键
                        case ID:
                            queryWrapper.orderByDesc(AlarmSchemePO::getId);
                            break;
                        // 数据创建时间
                        case CREATE_TIME:
                            queryWrapper.orderByDesc(AlarmSchemePO::getCreateTime);
                            break;
                        // 最后更新时间
                        case UPDATE_TIME:
                            queryWrapper.orderByDesc(AlarmSchemePO::getUpdateTime);
                            break;
                    }
                }
            }
        } else {
            queryWrapper.orderByDesc(AlarmSchemePO::getId);
        }
        Page<AlarmSchemePO> pageResult = super.selectPage(new Page<>(search.getPage(), search.getLimit()), queryWrapper);
        return new PagerResult<>(pageResult.getSize(), pageResult.getCurrent(), pageResult.getTotal(), pageResult.getRecords());
    }
    public Boolean add(AlarmSchemePO item) {
        int rowCount = super.insert(item);
        return rowCount == 1;
    }
    public Boolean addNotIncrement(AlarmSchemePO item) {
        int rowCount = super.insert(item);
        return rowCount == 1;
    }
    public AlarmSchemePO getById(Long id) {
        return super.get(id);
    }
    public List<AlarmSchemePO> getListById(List<Long> listId) {
        return super.getList(listId);
    }
}
src/main/java/com/fengdu/gas/repository/impl/FacilityAlarmRecordMapperImpl.java
@@ -29,6 +29,7 @@
import com.fengdu.gas.common.util.*;
import com.fengdu.gas.entity.dto.*;
import com.fengdu.gas.entity.enums.*;
import com.fengdu.gas.entity.response.alarm.FacilityAlarm;
import com.fengdu.gas.repository.BasicMapperImpl;
import org.springframework.stereotype.Repository;
@@ -134,4 +135,8 @@
    public List<FacilityAlarmRecordPO> getListById(List<Long> listId) {
        return super.getList(listId);
    }
    public List<FacilityAlarm> getByDateType(String beginTime,String endTime){
        return DB.getByDateType(beginTime,endTime);
    }
}
src/main/java/com/fengdu/gas/repository/impl/WaterFacilityParameterMapperImpl.java
@@ -126,7 +126,12 @@
        int rowCount = super.insert(item);
        return rowCount == 1;
    }
    public List<WaterFacilityParameterPO> getListByFacilityId(Long facilityId) {
        LambdaQueryWrapper<WaterFacilityParameterPO> queryWrapper = this.query();
        queryWrapper.eq(WaterFacilityParameterPO::getFacilityId,facilityId);
        queryWrapper.eq(WaterFacilityParameterPO::getIsDelete,EYesOrNo.NO.getValue());
        return DB.selectList(queryWrapper);
    }
    public WaterFacilityParameterPO getById(Long id) {
        return super.get(id);
    }
src/main/java/com/fengdu/gas/repository/mapper/AlarmSchemeMapper.java
对比新文件
@@ -0,0 +1,10 @@
package com.fengdu.gas.repository.mapper;
import com.fengdu.gas.repository.BasicMapper;import com.fengdu.gas.repository.po.AlarmSchemePO;
/**
 * 报警规则配置 mapper
 * @author zr
 */
public interface AlarmSchemeMapper extends BasicMapper<AlarmSchemePO> {
}
src/main/java/com/fengdu/gas/repository/mapper/FacilityAlarmRecordMapper.java
@@ -1,10 +1,19 @@
package com.fengdu.gas.repository.mapper;
import com.fengdu.gas.repository.BasicMapper;import com.fengdu.gas.repository.po.FacilityAlarmRecordPO;
import com.fengdu.gas.entity.response.alarm.FacilityAlarm;
import com.fengdu.gas.repository.BasicMapper;
import com.fengdu.gas.repository.po.FacilityAlarmRecordPO;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
 * 设备报警记录 mapper
 * @author zr
 */
public interface FacilityAlarmRecordMapper extends BasicMapper<FacilityAlarmRecordPO> {
    @Select("SELECT description AS NAME ,MIN(min_value) AS minValue ,MAX(max_value) AS maxValue,COUNT(id) AS count FROM facility_alarm_record \n" +
            "WHERE is_delete=0 AND latest_alarm_time BETWEEN #{beginTime} AND #{endTime} '\n" +
            "GROUP BY description\n")
    List<FacilityAlarm> getByDateType(String beginTime, String endTime);
}
src/main/java/com/fengdu/gas/repository/po/AlarmSchemePO.java
对比新文件
@@ -0,0 +1,90 @@
/**
#                                                    __----~~~~~~~~~~~------___
#                                   .  .   ~~//====......          __--~ ~~
#                   -.            \_|//     |||\\  ~~~~~~::::... /~
#                ___-==_       _-~o~  \/    |||  \\            _/~~-
#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
#          '         ~-|      /|    |-~\~~       __--~~
#                      |-~~-_/ |    |   ~\_   _-~            /\
#                           /  \     \__   \/~                \__
#                       _--~ _/ | .-~~____--~-/                  ~~==.
#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
#                                 -_     ~\      ~~---l__i__i__i--~~_/
#                                 _-~-__   ~)  \--______________--~~
#                               //.-~~~-~_--~- |-------~~~~~~~~
#                                      //.-~~~--\
#                  神兽保佑
#                  永无BUG!
*/
package com.fengdu.gas.repository.po;
import lombok.Data;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.sql.Timestamp;
import java.math.BigDecimal;
/**
 * 报警规则配置
 * @author zr
 */
@Data
@TableName("alarm_scheme")
public class AlarmSchemePO implements Serializable {
    /**
     * null
     */
    private Long id;
    /**
     * 设备参数code
     */
    @TableField(value = "columns_code")
    private String columnsCode;
    /**
     * 参数名称
     */
    @TableField(value = "columns_show")
    private String columnsShow;
    /**
     * 低报警值
     */
    @TableField(value = "low_alarm")
    private BigDecimal lowAlarm;
    /**
     * 高报警值
     */
    @TableField(value = "tall_alarm")
    private BigDecimal tallAlarm;
    /**
     * 通知人员
     */
    @TableField(value = "inform_user")
    private String informUser;
    /**
     * 备注
     */
    @TableField(value = "remark")
    private String remark;
    /**
     * 是否删除
     */
    @TableLogic
    @TableField(value = "is_delete")
    private Integer isDelete;
    /**
     * 创建时间
     */
    @TableField(value = "create_time")
    private Long createTime;
    /**
     * 修改时间
     */
    @TableField(value = "update_time")
    private Timestamp updateTime;
}
src/main/java/com/fengdu/gas/repository/po/FacilityAlarmRecordPO.java
@@ -61,21 +61,37 @@
    @TableField(value = "facility_name")
    private String facilityName;
    /**
     * 报警类型(1 一级报警 2二级报警)
     */
    @TableField(value = "alarm_type")
    private Integer alarmType;
    /**
     * 参数编码
     */
    @TableField(value = "columns_code")
    private String columnsCode;
    /**
     * 参数名称
     * 报警值
     */
    @TableField(value = "columns_name")
    private String columnsName;
    /**
     * 参数名称
     */
    @TableField(value = "columns_name")
    @TableField(value = "columns_value")
    private String columnsValue;
    /**
     * 最小报警值
     */
    @TableField(value = "min_value")
    private String minValue;
    /**
     * 最大报警值
     */
    @TableField(value = "max_value")
    private String maxValue;
    /**
     * 报警描述
     */
    @TableField(value = "description")
src/main/java/com/fengdu/gas/repository/po/UserWorkOrderPO.java
@@ -56,6 +56,16 @@
    @TableField(value = "type")
    private Integer type;
    /**
     * 所属监测点编号
     */
    @TableField(value = "point_code")
    private String pointCode;
    /**
     * 所属设备编号
     */
    @TableField(value = "facility_code")
    private String facilityCode;
    /**
     * 内容描述
     */
    @TableField(value = "content")
src/main/java/com/fengdu/gas/repository/po/WaterFacilityPO.java
@@ -86,6 +86,16 @@
    @TableField(value = "facility_url")
    private String facilityUrl;
    /**
     * 设备状态
     */
    @TableField(value = "facility_state")
    private Integer facilityState;
    /**
     * 设备风机运行状态
     */
    @TableField(value = "facility_fan_state")
    private Integer facilityFanState;
    /**
     * 数据创建时间
     */
    @TableField(value = "create_time")
src/main/java/com/fengdu/gas/repository/po/WaterMonitoryPointPO.java
@@ -61,6 +61,16 @@
    @TableField(value = "remark")
    private String remark;
    /**
     * 左边距
     */
    @TableField(value = "left_margin")
    private String leftMargin;
    /**
     * 上边距
     */
    @TableField(value = "top_margin")
    private String topMargin;
    /**
     * 监控点图片
     */
    @TableField(value = "image_rul")
src/main/java/com/fengdu/gas/repository/vo/AlarmSchemeVO.java
对比新文件
@@ -0,0 +1,54 @@
/**
#                                                    __----~~~~~~~~~~~------___
#                                   .  .   ~~//====......          __--~ ~~
#                   -.            \_|//     |||\\  ~~~~~~::::... /~
#                ___-==_       _-~o~  \/    |||  \\            _/~~-
#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
#          '         ~-|      /|    |-~\~~       __--~~
#                      |-~~-_/ |    |   ~\_   _-~            /\
#                           /  \     \__   \/~                \__
#                       _--~ _/ | .-~~____--~-/                  ~~==.
#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
#                                 -_     ~\      ~~---l__i__i__i--~~_/
#                                 _-~-__   ~)  \--______________--~~
#                               //.-~~~-~_--~- |-------~~~~~~~~
#                                      //.-~~~--\
#                  神兽保佑
#                  永无BUG!
*/
package com.fengdu.gas.repository.vo;
import lombok.Data;
import com.fengdu.gas.common.util.LocalDateTimeUtil;
import com.fengdu.gas.common.util.NumericUtil;
import java.util.Objects;
import com.fengdu.gas.repository.po.AlarmSchemePO;
/**
 * 报警规则配置
 * @author zr
 */
@Data
public class AlarmSchemeVO extends AlarmSchemePO 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/fengdu/gas/repository/vo/UserWorkOrderVO.java
@@ -22,11 +22,14 @@
*/
package com.fengdu.gas.repository.vo;
import com.fengdu.gas.entity.enums.EExecuteType;
import lombok.Data;
import com.fengdu.gas.common.util.LocalDateTimeUtil;
import com.fengdu.gas.common.util.NumericUtil;
import java.util.Objects;
import com.fengdu.gas.repository.po.UserWorkOrderPO;
/**
@@ -35,6 +38,8 @@
 */
@Data
public class UserWorkOrderVO extends UserWorkOrderPO implements BasicVO {
    private String pointName;
    private String facilityName;
    @Override
    public String getCreateTimeView() {
@@ -51,4 +56,11 @@
        }
        return LocalDateTimeUtil.toFormatFullString(this.getUpdateTime());
    }
    public String getExecuteStateView() {
        if (Objects.isNull(this.getExecuteState())) {
            return "";
        }
        return EExecuteType.getByValue(this.getExecuteState()).getDesc();
    }
}
src/main/java/com/fengdu/gas/service/AlarmSchemeService.java
对比新文件
@@ -0,0 +1,245 @@
/**
#                                                    __----~~~~~~~~~~~------___
#                                   .  .   ~~//====......          __--~ ~~
#                   -.            \_|//     |||\\  ~~~~~~::::... /~
#                ___-==_       _-~o~  \/    |||  \\            _/~~-
#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
#          '         ~-|      /|    |-~\~~       __--~~
#                      |-~~-_/ |    |   ~\_   _-~            /\
#                           /  \     \__   \/~                \__
#                       _--~ _/ | .-~~____--~-/                  ~~==.
#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
#                                 -_     ~\      ~~---l__i__i__i--~~_/
#                                 _-~-__   ~)  \--______________--~~
#                               //.-~~~-~_--~- |-------~~~~~~~~
#                                      //.-~~~--\
#                  神兽保佑
#                  永无BUG!
*/
package com.fengdu.gas.service;
import com.fengdu.gas.common.*;
import com.fengdu.gas.common.enums.*;
import com.fengdu.gas.common.model.Tuple;
import com.fengdu.gas.common.util.*;
import com.fengdu.gas.repository.vo.UserWorkOrderVO;
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.fengdu.gas.repository.impl.AlarmSchemeMapperImpl;
import com.fengdu.gas.repository.po.AlarmSchemePO;
import com.fengdu.gas.entity.request.alarmscheme.ReqCreateAlarmScheme;
import com.fengdu.gas.entity.request.alarmscheme.ReqModifyAlarmScheme;
import com.fengdu.gas.entity.search.SearchAlarmScheme;
import com.fengdu.gas.repository.vo.AlarmSchemeVO;
import com.fengdu.gas.service.convert.AlarmSchemeConvert;
/**
 * 报警规则配置
 * @author zr
 */
@Service
public class AlarmSchemeService extends BaseService {
    @Autowired
    private AlarmSchemeMapperImpl mapper;
    public ExecutedResult<Long> create(ReqCreateAlarmScheme request) {
        // 转换po
        AlarmSchemePO item = CopierUtil.mapTo(request, AlarmSchemePO.class);
        // 设置状态
        //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(ReqModifyAlarmScheme request) {
        // 验证记录是否存在
        ExecutedResult<AlarmSchemePO> checkExists = this.check4Id(request.getId());
        if (checkExists.isFailed()) {
            return ExecutedResult.failed(checkExists.getMsg());
        }
        // 转换po
        AlarmSchemePO item = AlarmSchemeConvert.INSTANCE.toModify(request);
        int rowCount = mapper.updateById(item);
        if (rowCount != 1) {
            return ExecutedResult.failed("编辑[报警规则配置]失败。");
        }
        return ExecutedResult.success();
    }
    public ExecutedResult<AlarmSchemeVO> get(Long id) {
        AlarmSchemeVO result = new AlarmSchemeVO();
        AlarmSchemePO find = mapper.get(id);
        if (null != find) {
            // 转换vo
            result = AlarmSchemeConvert.INSTANCE.toVo(find);
        }
        return ExecutedResult.success(result);
    }
//    public ExecutedResult<String> stop(Long id) {
//        // 验证记录是否存在
//        ExecutedResult<AlarmSchemePO> checkExists = this.check4Id(id);
//        if (checkExists.isFailed()) {
//            return ExecutedResult.failed(checkExists.getMsg());
//        }
//        AlarmSchemePO item = new AlarmSchemePO();
//        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<AlarmSchemePO> checkExists = this.check4Id(id);
//        if (checkExists.isFailed()) {
//            return ExecutedResult.failed(checkExists.getMsg());
//        }
//        AlarmSchemePO item = new AlarmSchemePO();
//        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<AlarmSchemePO> checkExists = this.check4Id(request.getId());
//        if (checkExists.isFailed()) {
//            return ExecutedResult.failed(checkExists.getMsg());
//        }
//        AlarmSchemePO item = new AlarmSchemePO();
//        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<AlarmSchemePO>> checkExists = this.check4Id(listId);
//        if (checkExists.isFailed()) {
//            return ExecutedResult.failed(checkExists.getMsg());
//        }
//
//        List<AlarmSchemePO> listUpdate = request.getList().stream()
//                .map(c -> {
//                    AlarmSchemePO item = new AlarmSchemePO();
//                    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<List<AlarmSchemeVO>> getList(List<Long> listId) {
        List<AlarmSchemeVO> result = new ArrayList<>();
        List<AlarmSchemePO> list = mapper.getList(listId);
        if (ListUtil.isNotNullOrEmpty(list)) {
            // 转换vo
            result = AlarmSchemeConvert.INSTANCE.toVo(list);
        }
        return ExecutedResult.success(result);
    }
    public ExecutedResult<PagerResult<AlarmSchemeVO>> search(SearchAlarmScheme 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<AlarmSchemePO> pageList = mapper.search(search);
        List<AlarmSchemeVO> listVo = new ArrayList<>();
        List<AlarmSchemePO> list = pageList.getList();
        if (ListUtil.isNotNullOrEmpty(list)) {
            pageList.setLastId(list.get(list.size() - 1).getId());
            // 转换vo
            listVo = AlarmSchemeConvert.INSTANCE.toVo(list);
        }
        PagerResult<AlarmSchemeVO> result = new PagerResult<>(pageList.getLimit(), pageList.getPage(), pageList.getTotal(), listVo);
        result.setLastId(pageList.getLastId());
        return ExecutedResult.success(result);
    }
    protected ExecutedResult<AlarmSchemePO> check4Id(Long id) {
        AlarmSchemePO exists = mapper.get(id);
        if (Objects.isNull(exists)) {
            return ExecutedResult.failed("[报警规则配置]不存在:" + id);
        }
        return ExecutedResult.success(exists);
    }
    protected ExecutedResult<List<AlarmSchemePO>> check4Id(List<Long> listId) {
        // 从数据库查找报警规则配置
        List<AlarmSchemePO> list = mapper.getList(listId);
        if (ListUtil.isNullOrEmpty(list)) {
            return ExecutedResult.failed("[报警规则配置]不存在." + listId);
        }
        // 数据库找到的id列表
        List<Long> listIdFind = list.stream().map(AlarmSchemePO::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/fengdu/gas/service/DataUploadRecordService.java
@@ -33,6 +33,7 @@
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.apache.commons.lang3.BooleanUtils;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -67,7 +68,8 @@
    private DataUploadRecordMonthMapperImpl dataUploadRecordMonthMapper;
    @Autowired
    private WaterFacilityParameterMapperImpl waterFacilityParameterMapper;
    private static final Logger DEBUG_LOGGER = LoggerUtil.get(ELogger.DEBUG);
    private static final Logger ERROR_LOGGER = LoggerUtil.get(ELogger.SYS_ERROR);
    public ExecutedResult<Long> create(ReqCreateDataUploadRecord request) {
        // 转换po
        DataUploadRecordPO item = DataUploadRecordConvert.INSTANCE.toCreate(request);
@@ -202,9 +204,31 @@
//        }
//        return ExecutedResult.success();
//    }
    /**
     * mqtt收到消息
     * @param topic 主题
     * @param msg 消息内容
     */
    public void mqttReceived(String topic, String msg) {
        if (StringUtil.isNullOrEmpty(topic)) {
            ERROR_LOGGER.error("主题不能为空");
            return;
        }
        if (StringUtil.isNullOrEmpty(msg)) {
            ERROR_LOGGER.error("消息不能为空");
            return;
        }
        if (msg.startsWith("{\"platform")) {
            return;
        }
        //报文解析
        //添加参数报警记录
        List<WaterFacilityPO> facilityPOList = waterFacilityMapper.getList();
        FacilityAlarmRecordPO recordPO=new FacilityAlarmRecordPO();
    }
    public ExecutedResult<String> dataUpload(Long startTime, Long endTime, Integer type) {
        List<WaterFacilityPO> facilityPOList = waterFacilityMapper.getList();
        List<WaterMonitoryPointPO> pointPOList = waterMonitoryPointMapper.getList();
        //获取所有设备参数
        List<WaterFacilityParameterPO> parameterPOList = waterFacilityParameterMapper.getList();
src/main/java/com/fengdu/gas/service/FacilityAlarmRecordService.java
@@ -22,10 +22,13 @@
*/
package com.fengdu.gas.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fengdu.gas.common.*;
import com.fengdu.gas.common.enums.*;
import com.fengdu.gas.common.model.Tuple;
import com.fengdu.gas.common.util.*;
import com.fengdu.gas.entity.response.alarm.FacilityAlarm;
import com.fengdu.gas.repository.po.AlarmSchemePO;
import org.apache.commons.lang3.BooleanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -50,7 +53,7 @@
    public ExecutedResult<Long> create(ReqCreateFacilityAlarmRecord request) {
        // 转换po
        FacilityAlarmRecordPO item = FacilityAlarmRecordConvert.INSTANCE.toCreate(request);
        FacilityAlarmRecordPO item = CopierUtil.mapTo(request, FacilityAlarmRecordPO.class);
        // 设置状态
        //item.setStatus(EState.NORMAL.getValue());
        // 设置记录创建时间
@@ -193,16 +196,37 @@
        }
        return ExecutedResult.success(result);
    }
    public ExecutedResult<PagerResult<FacilityAlarmRecordVO>> search(SearchFacilityAlarmRecord search) {
    public ExecutedResult<List<FacilityAlarm>> getAlarmList(Integer dateType){
        List<FacilityAlarm> result=new ArrayList<>();
        // 处理创建时间范围-查询参数
        Tuple<String, String> createTimeRange = ParameterUtil.getTimeRange(search.getCreateTimeRange());
        if (StringUtil.isNotNullOrEmpty(createTimeRange.getItem1())) {
            search.setCreateTimeStart(LocalDateTimeUtil.getTimeStamp(createTimeRange.getItem1()).getTime());
        if(dateType!=null&&dateType>0) {
            Long beginTime = 0L;
            Long endTime = 0L;
            switch (dateType) {
                case 1:
                    beginTime = LocalDateTimeUtil.getTimeStamp(LocalDateTimeUtils.todayStartTime()).getTime();
                    endTime = LocalDateTimeUtil.getTimeStamp(LocalDateTimeUtils.todayEndTime()).getTime();
                    break;
                case 2:
                    beginTime = LocalDateTimeUtil.getTimeStamp(LocalDateTimeUtils.weekStartTime()).getTime();
                    endTime = LocalDateTimeUtil.getTimeStamp(LocalDateTimeUtils.weekEndTime()).getTime();
                    break;
                case 3:
                    beginTime = LocalDateTimeUtil.getTimeStamp(LocalDateTimeUtils.monthStartTime()).getTime();
                    endTime = LocalDateTimeUtil.getTimeStamp(LocalDateTimeUtils.monthEndTime()).getTime();
                    break;
                case 4:
                    beginTime = LocalDateTimeUtil.getTimeStamp(LocalDateTimeUtils.yearStartTime()).getTime();
                    endTime = LocalDateTimeUtil.getTimeStamp(LocalDateTimeUtils.yearEndTime()).getTime();
                    break;
        }
        if (StringUtil.isNotNullOrEmpty(createTimeRange.getItem2())) {
            search.setCreateTimeEnd(LocalDateTimeUtil.getTimeStamp(createTimeRange.getItem2()).getTime());
            if (beginTime > 0&&endTime > 0) {
                result= mapper.getByDateType(LocalDateTimeUtil.toFormatString(beginTime),LocalDateTimeUtil.toFormatString(endTime));
        }
        }
        return ExecutedResult.success(result);
    }
    public ExecutedResult<PagerResult<FacilityAlarmRecordVO>> search(SearchFacilityAlarmRecord search) {
        PagerResult<FacilityAlarmRecordPO> pageList = mapper.search(search);
        List<FacilityAlarmRecordVO> listVo = new ArrayList<>();
src/main/java/com/fengdu/gas/service/TestInfoService.java
@@ -1,5 +1,6 @@
package com.fengdu.gas.service;
import com.fengdu.gas.entity.request.test.TestPayVO;
import com.fengdu.gas.repository.po.TestInfoPO;
import com.fengdu.gas.service.convert.TestInfoConvert;
import com.fengdu.gas.common.ExecutedResult;
@@ -15,10 +16,30 @@
import com.fengdu.gas.entity.search.SearchTestInfo;
import com.fengdu.gas.repository.impl.TestInfoMapperImpl;
import com.fengdu.gas.repository.vo.TestInfoVO;
import com.google.gson.Gson;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.http.HttpStatus;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.KeyStore;
import java.security.NoSuchAlgorithmException;
import java.security.Signature;
import java.security.interfaces.RSAPrivateCrtKey;
import java.util.*;
import java.util.stream.Collectors;
@@ -29,222 +50,237 @@
public class TestInfoService extends BaseService {
    @Autowired
    private TestInfoMapperImpl mapper;
    //私钥
   private final static String PRIVATE_KEY="";
    private final static String PASSWORD="";
    public ExecutedResult<Long> create(ReqCreateTestInfo request) {
        // 转换po
        TestInfoPO item = TestInfoConvert.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());
    /**
     * AES256加密
     * @param data
     * @return
     * @throws Exception
     */
    public String AES256(String data) throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(256); // 初始化密钥生成器,指定AES-256
        SecretKey key = keyGenerator.generateKey();
        Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] encrypted = cipher.doFinal(data.getBytes("UTF-8"));
        return Base64.getEncoder().encodeToString(encrypted);
    }
    public ExecutedResult<String> modify(ReqModifyTestInfo request) {
        // 验证记录是否存在
        ExecutedResult<TestInfoPO> checkExists = this.check4Id(request.getId());
        if (checkExists.isFailed()) {
            return ExecutedResult.failed(checkExists.getMsg());
    /**
     * Base64加密
     * @param data
     * @return
     */
    public String Base64(String data) {
        String encodedString = Base64.getEncoder().encodeToString(data.getBytes());
        return encodedString;
    }
    public static String getKeyAndValueStr(Map<String, String> map) {
        String result = "";
        try {
            List<Map.Entry<String, String>> infoIds = new ArrayList<>(map.entrySet());
            // 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)
            Collections.sort(infoIds, Comparator.comparing(Map.Entry::getKey));
            // 构造签名键值对的格式
            StringBuilder sb = new StringBuilder();
            for (Map.Entry<String, String> item : infoIds) {
                if (item.getKey() != null && item.getKey() != "") {
                    String key = item.getKey();
                    String val = item.getValue();
                    if (!(val == "" || val == null)) {
                        sb.append(key + "=" + val + "&");
                    }
                }
            }
            result = sb.toString().substring(0, sb.length() - 1);
        } catch (Exception e) {
            return null;
        }
        return result;
        }
        // 转换po
        TestInfoPO item = TestInfoConvert.INSTANCE.toModify(request);
        int rowCount = mapper.updateById(item);
        if (rowCount != 1) {
            return ExecutedResult.failed("编辑[测试信息]失败。");
    /**
     * 测试支付
     * @return
     * @throws Exception
     */
    public ExecutedResult<String> testPay() throws Exception {
        CloseableHttpClient client = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost("https://test.sumpay.cn/entrance/gateway.htm");
        List<BasicNameValuePair> pairList = new ArrayList<>();
        Map<String, String> map = new HashMap<>();
        map.put("service", "fosun.sumpay.api.orderpay.order.apply");
        map.put("version","1.0");
        map.put("format","JSON");
        map.put("app_id",);
        map.put("timestamp","20250313142521");
        map.put("terminal_type","api");
        map.put("mer_no", "200102833852");//商户号
        map.put("account_type", "01");//付款方账户类型
        map.put("card_no", AES256("6217007200125513450"));//付款方账户号
        map.put("real_name", AES256("尹勇"));//付款方账户名
        //map.put("bank_code","");//银行代码
        //map.put("id_type","1");//证件类型
        //map.put("id_no",AES256(""));//证件号码
        //map.put("notify_url");//商户后台通知URL
        map.put("goods_name", Base64("测试001"));//商品名称
        map.put("goods_num", "1");//商品数量
        map.put("goods_price", "0.11");//商品价格
        map.put("goods_type", "1");//商品类型
        map.put("order_no", "111111111111111");//订单号
        map.put("order_amount", "0.11");//订单金额
        map.put("order_time", "20250313142521");//订单时间
        map.put("currency", "CNY");//币种
        // map.put("pay_comments");//附言
        //map.put("remark");//备注字段
        Map<String, String> map1 = new HashMap<>();
        for (Map.Entry<String, String> entry : map.entrySet()) {
            map1.put(entry.getKey(), entry.getValue());
        }
        //map转换字符串&拼接并排序
        String keyAndValueStr = getKeyAndValueStr(map);
        //签名处理
        String msg = signMsg(keyAndValueStr, PRIVATE_KEY, PASSWORD, "UTF-8");
        map1.put("sign_type","CERT");
        map1.put("sign",msg);
        for(String key:map1.keySet()){
            pairList.add(new BasicNameValuePair(key,map1.get(key)));
        }
        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairList, "UTF-8");
        httpPost.setEntity(entity);
        try {
            // 执行请求并获取响应
            CloseableHttpResponse response = client.execute(httpPost);
            try {
               if(response.getStatusLine().getStatusCode()== HttpStatus.SC_OK){
                   String data=EntityUtils.toString(response.getEntity(),"UTF-8");
                   System.out.println(data);
               }else {
                   throw new RuntimeException("接口连接失败");
               }
                // 处理响应...
            } finally {
                response.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                client.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return ExecutedResult.success();
    }
    public ExecutedResult<TestInfoVO> get(Long id) {
        TestInfoVO result = new TestInfoVO();
        TestInfoPO find = mapper.selectById(id);
        if (null != find) {
            result = TestInfoConvert.INSTANCE.toVo(find);
    /**
     * 订单支付确认接口
     * @return
     * @throws Exception
     */
    public ExecutedResult<String> confirmPay() throws Exception {
        CloseableHttpClient client = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost("https://test.sumpay.cn/entrance/gateway.htm");
        List<BasicNameValuePair> pairList = new ArrayList<>();
        Map<String, String> map = new HashMap<>();
        map.put("service", "fosun.sumpay.api.orderpay.order.apply");
        map.put("version","1.0");
        map.put("format","JSON");
        map.put("app_id",);
        map.put("timestamp","20250313142521");
        map.put("terminal_type","api");
        map.put("mer_no", "200102833852");//商户号
        map.put("order_no", "111111111111111");//订单号
        map.put("serial_no", "");//入账流水号
        Map<String, String> map1 = new HashMap<>();
        for (Map.Entry<String, String> entry : map.entrySet()) {
            map1.put(entry.getKey(), entry.getValue());
        }
        return ExecutedResult.success(result);
        //map转换字符串&拼接并排序
        String keyAndValueStr = getKeyAndValueStr(map);
        //签名处理
        String msg = signMsg(keyAndValueStr, PRIVATE_KEY, PASSWORD, "UTF-8");
        map1.put("sign_type","CERT");
        map1.put("sign",msg);
        for(String key:map1.keySet()){
            pairList.add(new BasicNameValuePair(key,map1.get(key)));
    }
    public ExecutedResult<String> stop(Long id) {
        // 验证记录是否存在
        ExecutedResult<TestInfoPO> checkExists = this.check4Id(id);
        if (checkExists.isFailed()) {
            return ExecutedResult.failed(checkExists.getMsg());
        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairList, "UTF-8");
        httpPost.setEntity(entity);
        try {
            // 执行请求并获取响应
            CloseableHttpResponse response = client.execute(httpPost);
            try {
                if(response.getStatusLine().getStatusCode()== HttpStatus.SC_OK){
                    String data=EntityUtils.toString(response.getEntity(),"UTF-8");
                    System.out.println(data);
                }else {
                    throw new RuntimeException("接口连接失败");
        }
        TestInfoPO item = new TestInfoPO();
        item.setId(id);
        item.setStatus(EState.DISABLED.getValue());
        int rowCount = mapper.updateById(item);
        if (rowCount != 1) {
            return ExecutedResult.failed("停用[测试信息]失败。");
                // 处理响应...
            } finally {
                response.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                client.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return ExecutedResult.success();
    }
    public ExecutedResult<String> enable(Long id) {
        // 验证记录是否存在
        ExecutedResult<TestInfoPO> checkExists = this.check4Id(id);
        if (checkExists.isFailed()) {
            return ExecutedResult.failed(checkExists.getMsg());
    /**
     * 签名处理
     * @param privateKeyPath:私钥
     * @param plaintext:原始字符串
     * @param passWord:证书密码
     * @param charset :UTF-8
     * @return
     */
    public String signMsg(String plaintext, String privateKeyPath, String passWord, String charset) {
        try {
            InputStream keyFile = new FileInputStream(new File(privateKeyPath));
            KeyStore ks = KeyStore.getInstance("PKCS12");
            try {
                ks.load(keyFile, passWord.toCharArray());
            } catch (Throwable ex) {
                if (keyFile != null)
                    keyFile.close();
                throw new RuntimeException("加载私钥失败",ex);
        }
        TestInfoPO item = new TestInfoPO();
        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<TestInfoPO> checkExists = this.check4Id(request.getId());
        if (checkExists.isFailed()) {
            return ExecutedResult.failed(checkExists.getMsg());
        }
        TestInfoPO item = new TestInfoPO();
        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<TestInfoPO>> checkExists = this.check4Id(listId);
        if (checkExists.isFailed()) {
            return ExecutedResult.failed(checkExists.getMsg());
        }
        List<TestInfoPO> listUpdate = request.getList().stream()
                .map(c -> {
                    TestInfoPO item = new TestInfoPO();
                    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) {
        // 验证记录是否存在
        ExecutedResult<TestInfoPO> checkExists = this.check4Id(id);
        if (checkExists.isFailed()) {
            return ExecutedResult.failed(checkExists.getMsg());
        }
        Boolean result = mapper.deleteLogic(id);
        if (BooleanUtils.isFalse(result)) {
            return ExecutedResult.failed("删除[测试信息]失败。");
        }
        return ExecutedResult.success();
    }
    public ExecutedResult<String> removeList(List<Long> listId) {
        // 验证记录是否存在
        ExecutedResult<List<TestInfoPO>> checkExists = this.check4Id(listId);
        if (checkExists.isFailed()) {
            return ExecutedResult.failed(checkExists.getMsg());
        }
        Boolean result = mapper.deleteLogic(listId);
        if (BooleanUtils.isFalse(result)) {
            return ExecutedResult.failed("删除[测试信息]失败。");
        }
        return ExecutedResult.success();
    }
    public ExecutedResult<List<TestInfoVO>> getList(List<Long> listId) {
        List<TestInfoVO> result = new ArrayList<>();
        List<TestInfoPO> list = mapper.getList(listId);
        if (ListUtil.isNotNullOrEmpty(list)) {
            result = CopierUtil.mapTo(list, TestInfoVO.class);
        }
        return ExecutedResult.success(result);
    }
    public ExecutedResult<PagerResult<TestInfoVO>> search(SearchTestInfo 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<TestInfoPO> pageList = mapper.search(search);
        List<TestInfoVO> listVo = new ArrayList<>();
        List<TestInfoPO> list = pageList.getList();
        if (ListUtil.isNotNullOrEmpty(list)) {
            pageList.setLastId(list.get(list.size() - 1).getId());
            // 转换vo
            listVo = TestInfoConvert.INSTANCE.toVo(list);
        }
        PagerResult<TestInfoVO> result = new PagerResult<>(pageList.getLimit(), pageList.getPage(), pageList.getTotal(), listVo);
        result.setLastId(pageList.getLastId());
        return ExecutedResult.success(result);
    }
    protected ExecutedResult<TestInfoPO> check4Id(Long id) {
        TestInfoPO exists = mapper.get(id);
        if (Objects.isNull(exists)) {
            return ExecutedResult.failed("[测试信息]不存在:" + id);
        }
        return ExecutedResult.success(exists);
    }
    protected ExecutedResult<List<TestInfoPO>> check4Id(List<Long> listId) {
        // 从数据库查找测试信息
        List<TestInfoPO> list = mapper.getList(listId);
        if (ListUtil.isNullOrEmpty(list)) {
            return ExecutedResult.failed("[测试信息]不存在." + listId);
        }
        // 数据库找到的id列表
        List<Long> listIdFind = list.stream().map(TestInfoPO::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);
            Enumeration<String> myEnum = ks.aliases();
            String keyAlias = null;
            RSAPrivateCrtKey prikey = null;
            /* IBM JDK必须使用While循环取最后一个别名,才能得到个人私钥别名 */
            while (myEnum.hasMoreElements()) {
                keyAlias = myEnum.nextElement();
                if (ks.isKeyEntry(keyAlias)) {
                    prikey = (RSAPrivateCrtKey) ks.getKey(keyAlias, passWord.toCharArray());
                    break;
            }
        }
        return ExecutedResult.success(list);
            if (prikey == null) {
                throw new RuntimeException("没有找到匹配私钥");
            } else {
                Signature sign = Signature.getInstance("SHA256withRSA");
                sign.initSign(prikey);
                sign.update(plaintext.getBytes(charset));
                return org.apache.commons.codec.binary.Base64.encodeBase64String(sign.sign());
    }
    protected Map<Long, TestInfoPO> getMap4Id(List<Long> listId) {
        List<TestInfoPO> list = mapper.getList(listId);
        if (ListUtil.isNullOrEmpty(list)) {
            return new HashMap<>(0);
        } catch (RuntimeException e) {
            throw e;
        } catch (Throwable e) {
            throw new RuntimeException("签名失败",e);
        }
        return list.stream().collect(Collectors.toMap(TestInfoPO::getId, c -> c));
    }
}
src/main/java/com/fengdu/gas/service/UserWorkOrderService.java
@@ -26,6 +26,8 @@
import com.fengdu.gas.common.enums.*;
import com.fengdu.gas.common.model.Tuple;
import com.fengdu.gas.common.util.*;
import com.fengdu.gas.repository.impl.WaterFacilityMapperImpl;
import com.fengdu.gas.repository.po.WaterFacilityPO;
import org.apache.commons.lang3.BooleanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -47,6 +49,8 @@
public class UserWorkOrderService extends BaseService {
    @Autowired
    private UserWorkOrderMapperImpl mapper;
    @Autowired
    private WaterFacilityMapperImpl waterFacilityMapper;
    public ExecutedResult<Long> create(ReqCreateUserWorkOrder request) {
        // 转换po
@@ -210,7 +214,15 @@
        if (ListUtil.isNotNullOrEmpty(list)) {
            pageList.setLastId(list.get(list.size() - 1).getId());
            // 转换vo
            listVo = UserWorkOrderConvert.INSTANCE.toVo(list);
            listVo = CopierUtil.mapTo(list, UserWorkOrderVO.class);
            List<WaterFacilityPO> facilityPOList = waterFacilityMapper.getList();
            for(UserWorkOrderVO vo:listVo){
                WaterFacilityPO waterFacilityPO = facilityPOList.stream().filter(item -> item.getFacilityCode().equals(vo.getFacilityCode())).findFirst().orElse(null);
                if(Objects.nonNull(waterFacilityPO)){
                    vo.setPointName(waterFacilityPO.getPointName());
                    vo.setFacilityName(waterFacilityPO.getFacilityName());
                }
            }
        }
        PagerResult<UserWorkOrderVO> result = new PagerResult<>(pageList.getLimit(), pageList.getPage(), pageList.getTotal(), listVo);
        result.setLastId(pageList.getLastId());
src/main/java/com/fengdu/gas/service/WaterFacilityParameterService.java
@@ -26,6 +26,9 @@
import com.fengdu.gas.common.enums.*;
import com.fengdu.gas.common.model.Tuple;
import com.fengdu.gas.common.util.*;
import com.fengdu.gas.entity.request.waterfacilityparameter.ReqAddParameter;
import com.fengdu.gas.repository.impl.WaterFacilityMapperImpl;
import com.fengdu.gas.repository.po.WaterFacilityPO;
import org.apache.commons.lang3.BooleanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -47,22 +50,34 @@
public class WaterFacilityParameterService extends BaseService {
    @Autowired
    private WaterFacilityParameterMapperImpl mapper;
    @Autowired
    private WaterFacilityMapperImpl waterFacilityMapper;
    public ExecutedResult<Long> create(ReqCreateWaterFacilityParameter request) {
        // 转换po
        WaterFacilityParameterPO item = WaterFacilityParameterConvert.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("创建[设备设定参数]失败。");
    public ExecutedResult<String> create(ReqAddParameter request) {
        WaterFacilityPO facilityPO = waterFacilityMapper.get(request.getFacilityId());
        if (Objects.isNull(facilityPO)) {
            return ExecutedResult.failed("所属设备[id=" + request.getFacilityId() + "]不存在。");
        }
        return ExecutedResult.success(item.getId());
        List<WaterFacilityParameterPO> list = mapper.getListByFacilityId(request.getFacilityId());
        if (ListUtil.isNotNullOrEmpty(request.getParameterList())) {
            for (ReqCreateWaterFacilityParameter x : request.getParameterList()) {
                WaterFacilityParameterPO parameterPO = list.stream().filter(item -> item.getFacilityId().equals(request.getFacilityId()) && item.getColumnsCode().equals(x.getColumnsCode())).findFirst().orElse(null);
                if(Objects.isNull(parameterPO)) {
                    WaterFacilityParameterPO item = new WaterFacilityParameterPO();
                    item.setId(SnowFlakeUtil.getId());
                    item.setFacilityId(facilityPO.getId());
                    item.setFacilityCode(facilityPO.getFacilityCode());
                    item.setCreateTime(LocalDateTimeUtil.nowTimeStamp());
                    item.setColumnsUnits(x.getColumnsUnits());
                    item.setColumnsCode(x.getColumnsCode());
                    item.setColumnsShow(x.getColumnsShow());
                    item.setColumnValue("");
                    item.setLastTime("");
                    this.mapper.insert(item);
                }
            }
        }
        return ExecutedResult.success("添加成功");
    }
    public ExecutedResult<String> modify(ReqModifyWaterFacilityParameter request) {
src/main/java/com/fengdu/gas/service/WaterFacilityService.java
@@ -26,11 +26,21 @@
import com.fengdu.gas.common.enums.*;
import com.fengdu.gas.common.model.Tuple;
import com.fengdu.gas.common.util.*;
import com.fengdu.gas.entity.response.facility.FacilityCount;
import com.fengdu.gas.entity.response.facility.FacilityData;
import com.fengdu.gas.repository.impl.WaterFacilityParameterMapperImpl;
import com.fengdu.gas.repository.impl.WaterMonitoryPointMapperImpl;
import com.fengdu.gas.repository.po.WaterFacilityParameterPO;
import com.fengdu.gas.repository.po.WaterMonitoryPointPO;
import org.apache.commons.lang3.BooleanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import com.fengdu.gas.repository.impl.WaterFacilityMapperImpl;
import com.fengdu.gas.repository.po.WaterFacilityPO;
import com.fengdu.gas.entity.request.waterfacility.ReqCreateWaterFacility;
@@ -47,10 +57,14 @@
public class WaterFacilityService extends BaseService {
    @Autowired
    private WaterFacilityMapperImpl mapper;
    @Autowired
    private WaterFacilityParameterMapperImpl waterFacilityParameterMapper;
    @Autowired
    private WaterMonitoryPointMapperImpl waterMonitoryPointMapper;
    public ExecutedResult<Long> create(ReqCreateWaterFacility request) {
        // 转换po
        WaterFacilityPO item = WaterFacilityConvert.INSTANCE.toCreate(request);
        WaterFacilityPO item = CopierUtil.mapTo(request, WaterFacilityPO.class);
        // 设置状态
        //item.setStatus(EState.NORMAL.getValue());
        // 设置记录创建时间
@@ -92,96 +106,63 @@
        return ExecutedResult.success(result);
    }
//    public ExecutedResult<String> stop(Long id) {
//        // 验证记录是否存在
//        ExecutedResult<WaterFacilityPO> checkExists = this.check4Id(id);
//        if (checkExists.isFailed()) {
//            return ExecutedResult.failed(checkExists.getMsg());
//        }
//        WaterFacilityPO item = new WaterFacilityPO();
//        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<WaterFacilityPO> checkExists = this.check4Id(id);
//        if (checkExists.isFailed()) {
//            return ExecutedResult.failed(checkExists.getMsg());
//        }
//        WaterFacilityPO item = new WaterFacilityPO();
//        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<WaterFacilityPO> checkExists = this.check4Id(request.getId());
//        if (checkExists.isFailed()) {
//            return ExecutedResult.failed(checkExists.getMsg());
//        }
//        WaterFacilityPO item = new WaterFacilityPO();
//        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<WaterFacilityPO>> checkExists = this.check4Id(listId);
//        if (checkExists.isFailed()) {
//            return ExecutedResult.failed(checkExists.getMsg());
//        }
//
//        List<WaterFacilityPO> listUpdate = request.getList().stream()
//                .map(c -> {
//                    WaterFacilityPO item = new WaterFacilityPO();
//                    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<List<FacilityData>> getFacilityList() {
        List<FacilityData> result = new ArrayList<>();
        List<WaterMonitoryPointPO> pointPOList = waterMonitoryPointMapper.getList();
        List<WaterFacilityPO> facilityPOList = mapper.getList();
        List<WaterFacilityParameterPO> parameterPOList = waterFacilityParameterMapper.getList();
        for (WaterFacilityPO facilityPO : facilityPOList) {
            WaterMonitoryPointPO pointPO = pointPOList.stream().filter(item -> item.getId().equals(facilityPO.getPointId())).findFirst().orElse(null);
            FacilityData data = new FacilityData();
            data.setPointId(facilityPO.getPointId());
            data.setPointName(facilityPO.getPointName());
            data.setLeft(pointPO.getLeftMargin());
            data.setTop(pointPO.getTopMargin());
            data.setFacilityId(facilityPO.getId());
            data.setFacilityName(facilityPO.getFacilityName());
            data.setFacilityState(EFacilityState.getByValue(facilityPO.getFacilityState()).getDesc());
            data.setFacilityFanState(EFacilityState.getByValue(facilityPO.getFacilityFanState()).getDesc());
            List<WaterFacilityParameterPO> poList = parameterPOList.stream().filter(item -> item.getFacilityId().equals(facilityPO.getId())).collect(Collectors.toList());
            if (ListUtil.isNotNullOrEmpty(poList)) {
                //获取甲烷值
                String methaneValue = poList.stream().filter(item -> item.getColumnsCode().equals("JW001")).map(WaterFacilityParameterPO::getColumnValue).findFirst().orElse(null);
                //获取硫化氢值
                String hyrothionValue = poList.stream().filter(item -> item.getColumnsCode().equals("LHQ001")).map(WaterFacilityParameterPO::getColumnValue).findFirst().orElse(null);
                //获取温度
                String temperature = poList.stream().filter(item -> item.getColumnsCode().equals("WD001")).map(WaterFacilityParameterPO::getColumnValue).findFirst().orElse(null);
                if (StringUtil.isNotNullOrEmpty(methaneValue))
                    data.setMethaneValue(new BigDecimal(methaneValue));
                if (StringUtil.isNotNullOrEmpty(hyrothionValue))
                    data.setHyrothionValue(new BigDecimal(hyrothionValue));
                if (StringUtil.isNotNullOrEmpty(temperature))
                    data.setTemperature(new BigDecimal(temperature));
            }
            result.add(data);
        }
        return ExecutedResult.success(result);
    }
    public ExecutedResult<List<FacilityCount>> deviceCount(){
        List<FacilityCount> result = new ArrayList<>();
        List<WaterMonitoryPointPO> pointPOList = waterMonitoryPointMapper.getList();
        List<WaterFacilityPO> facilityPOList = mapper.getList();
        for(WaterMonitoryPointPO po:pointPOList){
            List<WaterFacilityPO> collect = facilityPOList.stream().filter(item -> item.getPointId().equals(po.getId())).collect(Collectors.toList());
            if(ListUtil.isNotNullOrEmpty(collect)&&collect.size()>0){
                FacilityCount count=new FacilityCount();
                count.setPointId(po.getId());
                count.setPointName(po.getPointName());
                count.setFacilityFanCount(collect.size());
                count.setMethaneCount(collect.size());
                count.setHyrothionCount(collect.size());
                count.setBoxCount(collect.size());
                int i = count.getFacilityFanCount() + count.getMethaneCount() + count.getHyrothionCount() + count.getBoxCount();
                count.setSumCount( i);
                result.add(count);
            }
        }
        return ExecutedResult.success(result);
    }
    public ExecutedResult<List<WaterFacilityVO>> getList(List<Long> listId) {
        List<WaterFacilityVO> result = new ArrayList<>();
@@ -224,6 +205,7 @@
        }
        return ExecutedResult.success(exists);
    }
    protected ExecutedResult<List<WaterFacilityPO>> check4Id(List<Long> listId) {
        // 从数据库查找设备信息
        List<WaterFacilityPO> list = mapper.getList(listId);
@@ -241,4 +223,5 @@
            }
        }
        return ExecutedResult.success(list);
    }}
    }
}
src/main/java/com/fengdu/gas/service/convert/AlarmSchemeConvert.java
对比新文件
@@ -0,0 +1,48 @@
/**
#                                                    __----~~~~~~~~~~~------___
#                                   .  .   ~~//====......          __--~ ~~
#                   -.            \_|//     |||\\  ~~~~~~::::... /~
#                ___-==_       _-~o~  \/    |||  \\            _/~~-
#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
#          '         ~-|      /|    |-~\~~       __--~~
#                      |-~~-_/ |    |   ~\_   _-~            /\
#                           /  \     \__   \/~                \__
#                       _--~ _/ | .-~~____--~-/                  ~~==.
#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
#                                 -_     ~\      ~~---l__i__i__i--~~_/
#                                 _-~-__   ~)  \--______________--~~
#                               //.-~~~-~_--~- |-------~~~~~~~~
#                                      //.-~~~--\
#                  神兽保佑
#                  永无BUG!
*/
package com.fengdu.gas.service.convert;
import com.fengdu.gas.entity.request.alarmscheme.ReqCreateAlarmScheme;
import com.fengdu.gas.entity.request.alarmscheme.ReqModifyAlarmScheme;
import com.fengdu.gas.repository.po.AlarmSchemePO;
import com.fengdu.gas.repository.vo.AlarmSchemeVO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
/**
 * 报警规则配置
 * @author {#=author}
 */
@Mapper
public interface AlarmSchemeConvert {
    AlarmSchemeConvert INSTANCE = Mappers.getMapper(AlarmSchemeConvert.class);
    AlarmSchemePO toCreate(ReqCreateAlarmScheme request);
    AlarmSchemePO toModify(ReqModifyAlarmScheme request);
    AlarmSchemeVO toVo(AlarmSchemePO item);
    List<AlarmSchemeVO> toVo(List<AlarmSchemePO> list);
}
src/main/resources/application-dev.yml
@@ -44,10 +44,10 @@
# mybatis-plus 配置:
#mybatis-plus:
#  configuration:
#    ### 开启打印sql配置
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mybatis-plus:
  configuration:
    ### 开启打印sql配置
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mqtt:
  # 是否启用
src/main/resources/application-prod.yml
src/test/java/com/fengdu/gas/GenCodeGauss.java
@@ -243,7 +243,7 @@
     * 只生成以下配置的表
     */
    private static final List<String> ONLY_TABLES = Arrays.asList(
       "data_upload_record","data_upload_record_day","data_upload_record_hour","data_upload_record_month"
       "alarm_scheme"
    );
    public static void main(String[] args) {