From 2d0d0b1ac46eac3a9fb54c0c27770e017c3577e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E7=A3=8A?= <45566618@qq.com> Date: Mon, 9 Jun 2025 14:25:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=BA=E6=B0=91=E4=BC=81=E4=B8=9A=E6=99=BA?= =?UTF-8?q?=E8=83=BD=E7=94=B5=E8=A1=A8=E6=B0=B4=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DeviceInfoController.java | 41 ++ .../nu/modules/tq/common/entity/TqApiLog.java | 43 ++ .../nu/modules/tq/common/entity/TqConfig.java | 36 ++ .../tq/common/entity/TqDeviceInfo.java | 38 ++ .../tq/common/mapper/TqApiLogMapper.java | 19 + .../tq/common/mapper/TqConfigMapper.java | 18 + .../tq/common/mapper/TqDeviceInfoMapper.java | 19 + .../tq/common/mapper/xml/TqApiLogMapper.xml | 69 +++ .../tq/common/mapper/xml/TqConfigMapper.xml | 17 + .../common/mapper/xml/TqDeviceInfoMapper.xml | 60 +++ .../tq/common/service/ITqApiLogService.java | 16 + .../tq/common/service/ITqConfigService.java | 14 + .../common/service/ITqDeviceInfoService.java | 15 + .../service/impl/TqApiLogServiceImpl.java | 34 ++ .../service/impl/TqConfigServiceImpl.java | 23 + .../service/impl/TqDeviceInfoServiceImpl.java | 130 ++++++ .../api/ElectricityMeterApiController.java | 87 ++++ .../ElectricityMeterController.java | 51 +++ .../electricity/entity/ElectricityMeter.java | 69 +++ .../mapper/ElectricityMeterMapper.java | 12 + .../mapper/xml/ElectricityMeterMapper.xml | 66 +++ .../service/IElectricityMeterService.java | 17 + .../impl/ElectricityMeterServiceImpl.java | 420 +++++++++++++++++ .../com/nu/modules/tq/enums/TqApiEnum.java | 24 + .../com/nu/modules/tq/utils/HttpTool.java | 165 +++++++ .../com/nu/modules/tq/utils/SignTool.java | 65 +++ .../java/com/nu/modules/tq/utils/TqApi.java | 170 +++++++ .../tq/water/api/WaterMeterApiController.java | 76 ++++ .../controller/WaterMeterController.java | 51 +++ .../modules/tq/water/entity/WaterMeter.java | 72 +++ .../tq/water/mapper/WaterMeterMapper.java | 12 + .../tq/water/mapper/xml/WaterMeterMapper.xml | 69 +++ .../tq/water/service/IWaterMeterService.java | 16 + .../service/impl/WaterMeterServiceImpl.java | 421 ++++++++++++++++++ 34 files changed, 2455 insertions(+) create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/controller/DeviceInfoController.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/entity/TqApiLog.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/entity/TqConfig.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/entity/TqDeviceInfo.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/mapper/TqApiLogMapper.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/mapper/TqConfigMapper.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/mapper/TqDeviceInfoMapper.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/mapper/xml/TqApiLogMapper.xml create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/mapper/xml/TqConfigMapper.xml create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/mapper/xml/TqDeviceInfoMapper.xml create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/service/ITqApiLogService.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/service/ITqConfigService.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/service/ITqDeviceInfoService.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/service/impl/TqApiLogServiceImpl.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/service/impl/TqConfigServiceImpl.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/service/impl/TqDeviceInfoServiceImpl.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/api/ElectricityMeterApiController.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/controller/ElectricityMeterController.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/entity/ElectricityMeter.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/mapper/ElectricityMeterMapper.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/mapper/xml/ElectricityMeterMapper.xml create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/service/IElectricityMeterService.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/service/impl/ElectricityMeterServiceImpl.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/enums/TqApiEnum.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/utils/HttpTool.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/utils/SignTool.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/utils/TqApi.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/api/WaterMeterApiController.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/controller/WaterMeterController.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/entity/WaterMeter.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/mapper/WaterMeterMapper.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/mapper/xml/WaterMeterMapper.xml create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/service/IWaterMeterService.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/service/impl/WaterMeterServiceImpl.java diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/controller/DeviceInfoController.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/controller/DeviceInfoController.java new file mode 100644 index 0000000..1f4cacf --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/controller/DeviceInfoController.java @@ -0,0 +1,41 @@ +package com.nu.modules.tq.common.controller; + +import com.nu.modules.tq.common.entity.TqDeviceInfo; +import com.nu.modules.tq.common.service.ITqDeviceInfoService; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.base.controller.JeecgController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Slf4j +@RestController +@RequestMapping("/iot/tq/common/device") +public class DeviceInfoController extends JeecgController { + + @Autowired + private ITqDeviceInfoService service; + + /** + * 获取设备信息 + * @return + */ + @GetMapping(value = "/getAllMeter") + public Result getAllMeter() { + service.getAllMeter(); + return Result.OK("获取设备信息成功!"); + } + + /** + * 采集器设备信息 + * @return + */ + @GetMapping(value = "/getAllCollector") + public Result getAllCollector() { + service.getAllCollector(); + return Result.OK("获取采集器信息成功!"); + } + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/entity/TqApiLog.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/entity/TqApiLog.java new file mode 100644 index 0000000..328c6ce --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/entity/TqApiLog.java @@ -0,0 +1,43 @@ +package com.nu.modules.tq.common.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * @Description: 护理单元-物联管理-电水表-接口请求记录表 + * @Author: caolei + * @Date: 2025-06-04 + * @Version: V1.0 + */ +@Data +@TableName("nu_iot_tq_api_request_log") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="nu_iot_tq_api_request_log", description="护理单元-物联管理-电水表-接口请求记录表") +public class TqApiLog implements Serializable { + private static final long serialVersionUID = 1L; + /**ID*/ + @TableId(type = IdType.AUTO) + @ApiModelProperty(value = "ID") + private Integer id; + private String oprId; //操作ID + private String cid; //采集器号 + private String address; //表号 + private Integer type; //类型 0清零 3抄表 10电表拉闸 11电表合闸 43水表开闸 53水表关闸 + private String requestValue; //请求时的值 + private String requestTime; //请求时间 + private String requestStatus; //请求状态 + private String requestRemark; //请求描述 + private String resolveValue; //反馈值 + private String resolveTime; //反馈时间 + private String resolveStatus; //反馈状态 + private String resolveRemark; //反馈描述 +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/entity/TqConfig.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/entity/TqConfig.java new file mode 100644 index 0000000..e960b87 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/entity/TqConfig.java @@ -0,0 +1,36 @@ +package com.nu.modules.tq.common.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * @Description: 护理单元-物联管理-电水表-配置信息 + * @Author: caolei + * @Date: 2025-06-04 + * @Version: V1.0 + */ +@Data +@TableName("nu_iot_tq_config") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="nu_iot_tq_config", description="护理单元-物联管理-电水表-配置信息") +public class TqConfig implements Serializable { + private static final long serialVersionUID = 1L; + /**ID*/ + @TableId(type = IdType.AUTO) + @ApiModelProperty(value = "ID") + private Integer id; + private String requestUrl; //后台系统地址 + private String authCode; //授权码 + private String randomCode; //随机字符串,签名时需要 + private String notifyUrl; //通知地址 +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/entity/TqDeviceInfo.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/entity/TqDeviceInfo.java new file mode 100644 index 0000000..00c2f09 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/entity/TqDeviceInfo.java @@ -0,0 +1,38 @@ +package com.nu.modules.tq.common.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; + +import java.io.Serializable; + +/** + * @Description: 护理单元-物联管理-电水表-设备信息和采集器信息表 + * @Author: caolei + * @Date: 2025-06-04 + * @Version: V1.0 + */ +@Data +@TableName("nu_iot_tq_collector") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="nu_iot_tq_collector", description="物联采集器") +public class TqDeviceInfo implements Serializable { + private static final long serialVersionUID = 1L; + /**ID*/ + @TableId(type = IdType.AUTO) + @ApiModelProperty(value = "ID") + private Integer id; + private String cid; //采集器号 + private String online; //采集器-在线状态 true 在线 false 离线 + private String csq ; //采集器-信号值 1-31 。 20以上算信号稳定 + private String disconnectTime; //采集器-上次掉线时间 online = false 时 + private String connectTime; //采集器-上次上线时间 online = true 时 + private String remark; //备注 +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/mapper/TqApiLogMapper.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/mapper/TqApiLogMapper.java new file mode 100644 index 0000000..3b13053 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/mapper/TqApiLogMapper.java @@ -0,0 +1,19 @@ +package com.nu.modules.tq.common.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.nu.modules.tq.common.entity.TqApiLog; +import org.apache.ibatis.annotations.Mapper; + +/** + * @Description: 护理单元-物联管理-电水表配置信息 + * @Author: jeecg-boot + * @Date: 2025-06-04 + * @Version: V1.0 + */ + +@Mapper +public interface TqApiLogMapper extends BaseMapper { + TqApiLog getApiLog(TqApiLog tqApiLog); + int insert(TqApiLog tqApiLog); + int update(TqApiLog tqApiLog); +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/mapper/TqConfigMapper.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/mapper/TqConfigMapper.java new file mode 100644 index 0000000..d6d0d59 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/mapper/TqConfigMapper.java @@ -0,0 +1,18 @@ +package com.nu.modules.tq.common.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.nu.modules.tq.common.entity.TqConfig; +import org.apache.ibatis.annotations.Mapper; +import java.util.Map; + +/** + * @Description: 护理单元-物联管理-电水表配置信息 + * @Author: jeecg-boot + * @Date: 2025-06-04 + * @Version: V1.0 + */ + +@Mapper +public interface TqConfigMapper extends BaseMapper { + TqConfig getConfig(); +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/mapper/TqDeviceInfoMapper.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/mapper/TqDeviceInfoMapper.java new file mode 100644 index 0000000..9f3ec1c --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/mapper/TqDeviceInfoMapper.java @@ -0,0 +1,19 @@ +package com.nu.modules.tq.common.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.nu.modules.tq.common.entity.TqDeviceInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + * @Description: 护理单元-物联管理-电水表配置信息 + * @Author: jeecg-boot + * @Date: 2025-06-04 + * @Version: V1.0 + */ + +@Mapper +public interface TqDeviceInfoMapper extends BaseMapper { + TqDeviceInfo getDeviceInfo(TqDeviceInfo tqDeviceInfo); + int insert(TqDeviceInfo tqDeviceInfo); + int update(TqDeviceInfo tqDeviceInfo); +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/mapper/xml/TqApiLogMapper.xml b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/mapper/xml/TqApiLogMapper.xml new file mode 100644 index 0000000..8945bdc --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/mapper/xml/TqApiLogMapper.xml @@ -0,0 +1,69 @@ + + + + + + + + insert into nu_iot_tq_api_request_log( + opr_id, + cid, + address, + type, + request_value, + request_time, + request_status, + request_remark, + create_time + ) + values( + #{oprId}, + #{cid}, + #{address}, + #{type}, + #{requestValue}, + #{requestTime}, + #{requestStatus}, + #{requestRemark}, + now() + ) + + + + update nu_iot_tq_api_request_log + set + resolve_value = #{resolveValue}, + resolve_time = #{resolveTime}, + resolve_status = #{resolveStatus}, + resolve_remark = #{resolveRemark}, + update_time = now() + where id = #{id} + + + \ No newline at end of file diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/mapper/xml/TqConfigMapper.xml b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/mapper/xml/TqConfigMapper.xml new file mode 100644 index 0000000..e3a3198 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/mapper/xml/TqConfigMapper.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/mapper/xml/TqDeviceInfoMapper.xml b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/mapper/xml/TqDeviceInfoMapper.xml new file mode 100644 index 0000000..9056113 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/mapper/xml/TqDeviceInfoMapper.xml @@ -0,0 +1,60 @@ + + + + + + + + insert into nu_iot_tq_collector( + cid, + online, + csq, + + disconnect_time, + + + connect_time, + + create_time + ) + values( + #{cid}, + #{online}, + #{csq}, + + #{disconnectTime}, + + + #{connectTime}, + + now() + ) + + + + update nu_iot_tq_collector + set + online = #{online}, + csq = #{csq}, + + disconnect_time = #{disconnectTime}, + + + connect_time = #{connectTime}, + + update_time = now() + where cid = #{cid} + + + \ No newline at end of file diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/service/ITqApiLogService.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/service/ITqApiLogService.java new file mode 100644 index 0000000..c7a82a5 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/service/ITqApiLogService.java @@ -0,0 +1,16 @@ +package com.nu.modules.tq.common.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.nu.modules.tq.common.entity.TqApiLog; + +/** + * @Description: 护理单元-物联管理-电水表-接口请求记录表 + * @Author: jeecg-boot + * @Date: caolei + * @Version: V1.0 + */ +public interface ITqApiLogService extends IService { + TqApiLog getApiLog(TqApiLog tqApiLog); + int insert(TqApiLog tqApiLog); + int update(TqApiLog tqApiLog); +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/service/ITqConfigService.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/service/ITqConfigService.java new file mode 100644 index 0000000..9b136ce --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/service/ITqConfigService.java @@ -0,0 +1,14 @@ +package com.nu.modules.tq.common.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.nu.modules.tq.common.entity.TqConfig; + +/** + * @Description: 护理单元-物联管理-电水表-配置信息 + * @Author: jeecg-boot + * @Date: caolei + * @Version: V1.0 + */ +public interface ITqConfigService extends IService { + TqConfig getConfig(); +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/service/ITqDeviceInfoService.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/service/ITqDeviceInfoService.java new file mode 100644 index 0000000..7c1b5ec --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/service/ITqDeviceInfoService.java @@ -0,0 +1,15 @@ +package com.nu.modules.tq.common.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.nu.modules.tq.common.entity.TqDeviceInfo; + +/** + * @Description: 护理单元-物联管理-电水表-设备信息和采集器信息表 + * @Author: jeecg-boot + * @Date: caolei + * @Version: V1.0 + */ +public interface ITqDeviceInfoService extends IService { + void getAllMeter(); + void getAllCollector(); +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/service/impl/TqApiLogServiceImpl.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/service/impl/TqApiLogServiceImpl.java new file mode 100644 index 0000000..6d705dd --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/service/impl/TqApiLogServiceImpl.java @@ -0,0 +1,34 @@ +package com.nu.modules.tq.common.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.nu.modules.tq.common.entity.TqApiLog; +import com.nu.modules.tq.common.entity.TqConfig; +import com.nu.modules.tq.common.mapper.TqApiLogMapper; +import com.nu.modules.tq.common.service.ITqApiLogService; +import org.springframework.stereotype.Service; + +/** + * @Description: 护理单元-物联管理-电水表配置信息 + * @Author: caolei + * @Date: 2025-06-04 + * @Version: V1.0 + */ +@Service +public class TqApiLogServiceImpl extends ServiceImpl implements ITqApiLogService { + + @Override + public TqApiLog getApiLog(TqApiLog tqApiLog){ + return baseMapper.getApiLog(tqApiLog); + } + + @Override + public int insert(TqApiLog tqApiLog){ + return baseMapper.insert(tqApiLog); + } + + @Override + public int update(TqApiLog tqApiLog){ + return baseMapper.update(tqApiLog); + } + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/service/impl/TqConfigServiceImpl.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/service/impl/TqConfigServiceImpl.java new file mode 100644 index 0000000..8d3e399 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/service/impl/TqConfigServiceImpl.java @@ -0,0 +1,23 @@ +package com.nu.modules.tq.common.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.nu.modules.tq.common.entity.TqConfig; +import com.nu.modules.tq.common.mapper.TqConfigMapper; +import com.nu.modules.tq.common.service.ITqConfigService; +import org.springframework.stereotype.Service; + +/** + * @Description: 护理单元-物联管理-电水表配置信息 + * @Author: caolei + * @Date: 2025-06-04 + * @Version: V1.0 + */ +@Service +public class TqConfigServiceImpl extends ServiceImpl implements ITqConfigService { + + @Override + public TqConfig getConfig(){ + return baseMapper.getConfig(); + } + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/service/impl/TqDeviceInfoServiceImpl.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/service/impl/TqDeviceInfoServiceImpl.java new file mode 100644 index 0000000..c079897 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/service/impl/TqDeviceInfoServiceImpl.java @@ -0,0 +1,130 @@ +package com.nu.modules.tq.common.service.impl; + +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.nu.modules.tq.common.entity.TqDeviceInfo; +import com.nu.modules.tq.common.mapper.TqDeviceInfoMapper; +import com.nu.modules.tq.common.service.ITqDeviceInfoService; +import com.nu.modules.tq.electricity.entity.ElectricityMeter; +import com.nu.modules.tq.electricity.mapper.ElectricityMeterMapper; +import com.nu.modules.tq.utils.TqApi; +import com.nu.modules.tq.water.entity.WaterMeter; +import com.nu.modules.tq.water.mapper.WaterMeterMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +/** + * @Description: 护理单元-物联管理-电水表-设备信息和采集器信息表 + * @Author: caolei + * @Date: 2025-06-04 + * @Version: V1.0 + */ +@Service +public class TqDeviceInfoServiceImpl extends ServiceImpl implements ITqDeviceInfoService { + + @Autowired + TqApi tqApi; + + @Autowired + ElectricityMeterMapper electricityMeterMapper; + + @Autowired + WaterMeterMapper waterMeterMapper; + + /** + * 获取设备信息 + * @return + */ + @Override + public void getAllMeter(){ + String responseStr = tqApi.getMeters(); + JSONObject jsonObject = new JSONObject(responseStr); + String status = jsonObject.getStr("status"); + if(status.equals("1")){ +// Integer total = jsonObject.getInt("total"); + String data = jsonObject.getStr("data"); + JSONArray jsonArray = new JSONArray(data); + for(int i=0;i { + + @Autowired + private IElectricityMeterService service; + + /** + * 电表清零回调 + * @param response_content + * @param timestamp + * @param sign + * @return + */ + @PostMapping("/eleResetNotify") + @ApiOperation("电表清零回调") + public String eleResetNotify(String response_content, String timestamp, String sign) { + log.info("eleResetNotify:response_content:{}",response_content); + log.info("eleResetNotify:timestamp:{}",timestamp); + log.info("eleResetNotify:sign:{}",sign); + //-----------加入业务逻辑----------- + String result = service.eleResetNotify(response_content, timestamp, sign); + return result; + } + + /** + * 电表开关闸回调 + * @param response_content + * @param timestamp + * @param sign + * @return + */ + @PostMapping("/eleControlNotify") + @ApiOperation("电表开关闸回调") + public String eleControlNotify(String response_content, String timestamp, String sign) { + log.info("eleControlNotify:response_content:{}",response_content); + log.info("eleControlNotify:timestamp:{}",timestamp); + log.info("eleControlNotify:sign:{}",sign); + //-----------加入业务逻辑----------- + String result = service.eleControlNotify(response_content, timestamp, sign); + return result; + } + + /** + * 电表抄表回调 + * @param response_content + * @param timestamp + * @param sign + * @return + */ + @PostMapping("/eleReadNotify") + @ApiOperation("电表抄表回调") + public String eleReadNotify(String response_content, String timestamp, String sign) { + log.info("eleReadNotify:response_content:{}",response_content); + log.info("eleReadNotify:timestamp:{}",timestamp); + log.info("eleReadNotify:sign:{}",sign); + //-----------加入业务逻辑----------- + String result = service.eleReadNotify(response_content, timestamp, sign); + //-------------------------------- + return result; + } + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/controller/ElectricityMeterController.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/controller/ElectricityMeterController.java new file mode 100644 index 0000000..9e2dfb2 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/controller/ElectricityMeterController.java @@ -0,0 +1,51 @@ +package com.nu.modules.tq.electricity.controller; + +import com.nu.modules.tq.electricity.entity.ElectricityMeter; +import com.nu.modules.tq.electricity.service.IElectricityMeterService; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.base.controller.JeecgController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Slf4j +@RestController +@RequestMapping("/iot/tq/electricityMeter") +public class ElectricityMeterController extends JeecgController { + + @Autowired + private IElectricityMeterService service; + + /** + * 获取设备信息 + * @param electricityMeter + * @return + */ + @GetMapping(value = "/eleReset") + public Result eleReset(ElectricityMeter electricityMeter) { + return service.eleReset(electricityMeter); + } + + /** + * 拉闸、合闸 + * @param electricityMeter + * @return + */ + @GetMapping(value = "/eleControl") + public Result eleControl(ElectricityMeter electricityMeter) { + return service.eleControl(electricityMeter); + } + + /** + * 抄表 + * @param electricityMeter + * @return + */ + @GetMapping(value = "/eleRead") + public Result eleRead(ElectricityMeter electricityMeter) { + return service.eleRead(electricityMeter); + } + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/entity/ElectricityMeter.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/entity/ElectricityMeter.java new file mode 100644 index 0000000..c7b193d --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/entity/ElectricityMeter.java @@ -0,0 +1,69 @@ +package com.nu.modules.tq.electricity.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; + +import java.io.Serializable; + +/** + *

Class :物联电表管理Entity + *

功能描述:功能描述 + */ +@Data +@TableName("nu_iot_tq_electricity_meter") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="nu_iot_tq_electricity_meter对象", description="物联电表") +public class ElectricityMeter implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(type = IdType.AUTO) + @ApiModelProperty(value = "主键") + private Integer id; + @Excel(name = "采集器号", width = 15) + @ApiModelProperty(value = "采集器号,4G、NB设备采集器号与表号一致") + private String cid; + @Excel(name = "表号", width = 15) + @ApiModelProperty(value = "表号(表地址)") + private String address; + @Excel(name = "操作类型", width = 15) + @ApiModelProperty(value = "操作类型") + @TableField(exist = false) + private Integer type;//9清零 3抄表 10电表拉闸 11电表合闸 43水表开闸 53水表关闸 + @Excel(name = "电表值", width = 15) + @ApiModelProperty(value = "电表值") + private String eleValue; //电表-电量值 + @Excel(name = "阀门状态", width = 15) + @ApiModelProperty(value = "阀门状态") + private String relayState; //电表-阀门状态 1 表示合闸/开阀, 0 表示拉闸/关阀,其他,表示未知状态或异常 + @Excel(name = "在线状态", width = 15) + @ApiModelProperty(value = "在线状态") + @TableField(exist = false) + private String online; //采集器-在线状态 true 在线 false 离线 + @Excel(name = "信号值", width = 15) + @ApiModelProperty(value = "信号值") + @TableField(exist = false) + private String csq ; //采集器-信号值 1-31 。 20以上算信号稳定 + @Excel(name = "上次掉线时间", width = 15) + @ApiModelProperty(value = "上次掉线时间") + @TableField(exist = false) + private String disconnectTime; //采集器-上次掉线时间 online = false 时 + @Excel(name = "上次上线时间", width = 15) + @ApiModelProperty(value = "上次上线时间") + @TableField(exist = false) + private String connectTime; //采集器-上次上线时间 online = true 时 + @Excel(name = "上次查表时间", width = 15) + @ApiModelProperty(value = "上次查表时间") + private String readTime; //电表-上次查表时间 + @Excel(name = "描述", width = 15) + @ApiModelProperty(value = "描述") + private String remark; +} \ No newline at end of file diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/mapper/ElectricityMeterMapper.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/mapper/ElectricityMeterMapper.java new file mode 100644 index 0000000..f0899de --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/mapper/ElectricityMeterMapper.java @@ -0,0 +1,12 @@ +package com.nu.modules.tq.electricity.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.nu.modules.tq.electricity.entity.ElectricityMeter; + +public interface ElectricityMeterMapper extends BaseMapper { + ElectricityMeter getElectricityMeter(ElectricityMeter electricityMeter); + int insert(ElectricityMeter electricityMeter); + int update(ElectricityMeter electricityMeter); + int updateValue(ElectricityMeter electricityMeter); + int updateRelayState(ElectricityMeter electricityMeter); +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/mapper/xml/ElectricityMeterMapper.xml b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/mapper/xml/ElectricityMeterMapper.xml new file mode 100644 index 0000000..2c566d8 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/mapper/xml/ElectricityMeterMapper.xml @@ -0,0 +1,66 @@ + + + + + + + + insert into nu_iot_tq_electricity_meter( + cid, + address, + relay_state, + remark, + create_time + ) + values( + #{cid}, + #{address}, + #{relayState}, + #{remark}, + now() + ) + + + + update nu_iot_tq_electricity_meter + set + relay_state = #{relayState}, + remark = #{remark}, + update_time = now() + where cid = #{cid} + and address = #{address} + + + + update nu_iot_tq_electricity_meter + set + ele_value = #{eleValue}, + read_time = #{readTime}, + update_time = now() + where cid = #{cid} + and address = #{address} + + + + update nu_iot_tq_electricity_meter + set + relay_state = #{relayState}, + update_time = now() + where cid = #{cid} + and address = #{address} + + + + \ No newline at end of file diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/service/IElectricityMeterService.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/service/IElectricityMeterService.java new file mode 100644 index 0000000..079e03a --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/service/IElectricityMeterService.java @@ -0,0 +1,17 @@ +package com.nu.modules.tq.electricity.service; + +import cn.hutool.json.JSONObject; +import com.baomidou.mybatisplus.extension.service.IService; +import com.nu.modules.tq.electricity.entity.ElectricityMeter; +import org.jeecg.common.api.vo.Result; + +public interface IElectricityMeterService extends IService { + + Result eleReset(ElectricityMeter electricityMeter); + Result eleControl(ElectricityMeter electricityMeter); + Result eleRead(ElectricityMeter electricityMeter); + + String eleResetNotify(String response_content, String timestamp, String sign); + String eleControlNotify(String response_content, String timestamp, String sign); + String eleReadNotify(String response_content, String timestamp, String sign); +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/service/impl/ElectricityMeterServiceImpl.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/service/impl/ElectricityMeterServiceImpl.java new file mode 100644 index 0000000..0377135 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/service/impl/ElectricityMeterServiceImpl.java @@ -0,0 +1,420 @@ +package com.nu.modules.tq.electricity.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.nu.modules.tq.common.entity.TqApiLog; +import com.nu.modules.tq.common.service.ITqApiLogService; +import com.nu.modules.tq.utils.HttpTool; +import com.nu.modules.tq.utils.SignTool; +import com.nu.modules.tq.utils.TqApi; +import lombok.extern.slf4j.Slf4j; +import com.nu.modules.tq.electricity.entity.ElectricityMeter; +import com.nu.modules.tq.electricity.mapper.ElectricityMeterMapper; +import com.nu.modules.tq.electricity.service.IElectricityMeterService; +import org.jeecg.common.api.vo.Result; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +@Slf4j +@Service +public class ElectricityMeterServiceImpl extends ServiceImpl implements IElectricityMeterService { + + @Autowired + TqApi tqApi; + + @Autowired + ITqApiLogService logService; + + /** + * 清零 + */ + @Override + public Result eleReset(ElectricityMeter electricityMeter){ + ElectricityMeter entity = baseMapper.getElectricityMeter(electricityMeter); + if(entity == null){ + return Result.error("请先同步电表设备信息后再进行清零"); + } + String readTimeStr = entity.getReadTime(); + if(readTimeStr == null || readTimeStr.equals("")){ + return Result.error("请先进行抄表再进行清零"); + } + Date readTime = DateUtil.parse(readTimeStr,"yyyy-MM-dd HH:mm:ss"); + Calendar c = Calendar.getInstance(); + c.add(Calendar.HOUR_OF_DAY,-1); + int comInt = DateUtil.compare(readTime,c.getTime()); + if(comInt<0){ + return Result.error("请先进行抄表再进行清零"); + } + List> req = new ArrayList<>(); + Map params = new HashMap<>(); + params.put("paymentmode", "noprepay"); + Map item = new HashMap<>(); + item.put("opr_id", HttpTool.generateOperateId()); + item.put("time_out", 0); + item.put("must_online", true); + item.put("retry_times", 1); + item.put("cid", electricityMeter.getCid()); + item.put("address", electricityMeter.getAddress()); + item.put("params", params); + req.add(item); + String responseStr = tqApi.eleReset(req); + JSONObject jsonObject = new JSONObject(responseStr); + String httpStatus = jsonObject.getStr("status"); + if(httpStatus.equals("SUCCESS")){ + String response_content = jsonObject.getStr("response_content"); + JSONArray jsonArray = new JSONArray(response_content); + for(int i=0;i eleControl(ElectricityMeter electricityMeter){ + Integer type = electricityMeter.getType(); + ElectricityMeter entity = baseMapper.getElectricityMeter(electricityMeter); + if(entity == null){ + if(type.equals(10)){ + return Result.error("请先同步电表设备信息后再进行拉闸"); + }else{ + return Result.error("请先同步电表设备信息后再进行合闸"); + } + } + List> req = new ArrayList<>(); + Map item = new HashMap<>(); + item.put("opr_id", HttpTool.generateOperateId()); + item.put("time_out", 0); + item.put("must_online", true); + item.put("retry_times", 1); + item.put("cid", electricityMeter.getCid()); + item.put("address", electricityMeter.getAddress()); + item.put("type", type); + req.add(item); + String responseStr = tqApi.eleControl(req); + JSONObject jsonObject = new JSONObject(responseStr); + String httpStatus = jsonObject.getStr("status"); + if(httpStatus.equals("SUCCESS")){ + String response_content = jsonObject.getStr("response_content"); + JSONArray jsonArray = new JSONArray(response_content); + for(int i=0;i eleRead(ElectricityMeter electricityMeter){ + ElectricityMeter entity = baseMapper.getElectricityMeter(electricityMeter); + if(entity == null){ + return Result.error("请先同步电表设备信息后再进行抄表"); + } + List> req = new ArrayList<>(); + Map item = new HashMap<>(); + item.put("opr_id", HttpTool.generateOperateId()); + item.put("time_out", 0); + item.put("must_online", true); + item.put("retry_times", 1); + item.put("cid", electricityMeter.getCid()); + item.put("address", electricityMeter.getAddress()); + item.put("type", 3); + req.add(item); + String responseStr = tqApi.eleRead(req); + JSONObject jsonObject = new JSONObject(responseStr); + String httpStatus = jsonObject.getStr("status"); + if(httpStatus.equals("SUCCESS")){ + String response_content = jsonObject.getStr("response_content"); + JSONArray jsonArray = new JSONArray(response_content); + for(int i=0;i map) { + if (map == null || map.size() == 0) { + return ""; + } + List list = new ArrayList<>(); + map.forEach((key, value)->{ + try { + list.add(key + "=" + URLEncoder.encode(value.toString(), "UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + }); + return String.join("&", list); + } + + /** + * 发送http GET请求 + * @param url + * @return + */ + public static String httpClientGet(String url) { + try { + CloseableHttpClient client = HttpClients.createDefault(); + HttpGet httpGet = new HttpGet(url); + CloseableHttpResponse Response = client.execute(httpGet); + HttpEntity entity = Response.getEntity(); + String resp = EntityUtils.toString(entity, "UTF-8"); + Response.close(); + return resp; + } catch (Exception e) { + System.out.println(e.getMessage()); + return ""; + } + } + + /** + * 发送http POST请求 + * @param url + * @param bodyMap + * @return + * @throws Exception + */ + public static String httpClientPost(String url, Map bodyMap) throws Exception { + System.out.println("请求地址:" + url); + System.out.println("发送参数:" + bodyMap.toString()); + HttpClient client = HttpClientBuilder.create().build(); + HttpPost postRequest = new HttpPost(url); + + List nvps = new ArrayList<>(); + + for(String key : bodyMap.keySet()) { + nvps.add(new BasicNameValuePair(key,bodyMap.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(nvps,"utf-8")); + + + int retry = 3; + HttpResponse execute = null; + while(retry-- > 0) { + try { + execute = client.execute(postRequest); + break; + } catch (Exception e) { + Thread.sleep(5000); + } + } + if(execute == null) { + throw new Exception("接口请求失败"); + } + String resp = EntityUtils.toString(execute.getEntity(), "UTF-8"); + System.out.println("接口返回:" + resp); + return resp; + } + +// public static String postUrl(String url, Map map){ +// String errorMsg = ""; +// Gson gson = new Gson(); +// String map2 = gson.toJson(map); +// System.out.println(map2); +// try { +// URL obj = new URL(url); +// HttpURLConnection con = (HttpURLConnection) obj.openConnection(); +// // 设置请求方法为 POST +// con.setRequestMethod("POST"); +// // 设置请求头 +// con.setRequestProperty("Content-Type", "application/json"); // 声明发送 JSON +// con.setRequestProperty("Accept", "application/json"); // 声明期望接收 JSON +// con.setDoOutput(true); // 允许写入请求体 +// // 写入 JSON 请求体 +// try (OutputStream os = con.getOutputStream()) { +// byte[] input = map2.getBytes("utf-8"); +// os.write(input, 0, input.length); +// } +// // 获取响应码 +// int responseCode = con.getResponseCode(); +// System.out.println("Response Code: " + responseCode); +// // 读取响应(成功时) +// if (responseCode == HttpURLConnection.HTTP_OK) { // 200 +// try (BufferedReader br = new BufferedReader( +// new InputStreamReader(con.getInputStream(), "UTF-8"))) { +// StringBuilder response = new StringBuilder(); +// String responseLine; +// while ((responseLine = br.readLine()) != null) { +// response.append(responseLine.trim()); +// } +// System.out.println("Response: " + response.toString()); +// JSONObject result = new JSONObject(response.toString()); +// String status = result.getStr("status"); +// if(status.equals("SUCCESS")){ +// errorMsg = ""; +// }else{ +// errorMsg = result.getStr("error_msg"); +// } +// } +// } else { // 错误时读取错误流 +// try (BufferedReader br = new BufferedReader( +// new InputStreamReader(con.getErrorStream(), "UTF-8"))) { +// StringBuilder errorResponse = new StringBuilder(); +// String errorLine; +// while ((errorLine = br.readLine()) != null) { +// errorResponse.append(errorLine.trim()); +// } +// errorMsg = errorResponse.toString(); +// System.out.println("Error Response: " + errorResponse.toString()); +// } +// } +// } catch (IOException e) { +// e.printStackTrace(); +// } +// return errorMsg; +// } +} \ No newline at end of file diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/utils/SignTool.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/utils/SignTool.java new file mode 100644 index 0000000..d0e27c7 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/utils/SignTool.java @@ -0,0 +1,65 @@ +package com.nu.modules.tq.utils; + +import com.nu.modules.tq.common.entity.TqConfig; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Map; + +@Component +public class SignTool { + + // 生成签名字符串 + public static String getSign(String nonce,Map data) + { + // 获取关键字列表 + List keys = new ArrayList<>(data.keySet()); + // 关键字列表排序 + keys.sort(Comparator.naturalOrder()); + StringBuilder sb = new StringBuilder(); + for (String key : keys) + { + // 取各个字段内容拼接字符串 + sb.append(data.get(key)); + } + // 加上双方约定随机字符串 + String txt = sb.toString() + nonce; + + // 计算哈希值 + return getMD5(txt); + } + + public static boolean checkSign(String response_content, String timestamp, String sign,String nonce) { + String buf = response_content + timestamp + nonce; + String encode = getMD5(buf); + return encode.equals(sign); + } + + // md5加密 + public static String getMD5(String password) { + MessageDigest md5 = null; + try { + md5 = MessageDigest.getInstance("MD5"); + } catch (Exception e) { + throw new RuntimeException(e); + } + byte[] byteArray = password.getBytes(StandardCharsets.UTF_8); + + byte[] md5Bytes = md5.digest(byteArray); + StringBuilder hexValue = new StringBuilder(); + for (byte md5Byte : md5Bytes) { + int val = ((int) md5Byte) & 0xff; + if (val < 16) { + hexValue.append("0"); + } + + hexValue.append(Integer.toHexString(val)); + } + return hexValue.toString(); + } +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/utils/TqApi.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/utils/TqApi.java new file mode 100644 index 0000000..475acdb --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/utils/TqApi.java @@ -0,0 +1,170 @@ +package com.nu.modules.tq.utils; + +import com.alibaba.fastjson.JSON; +import com.nu.modules.tq.enums.TqApiEnum; +import com.nu.modules.tq.common.entity.TqConfig; +import com.nu.modules.tq.common.mapper.TqConfigMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +@Slf4j +public class TqApi { + + TqConfig tqConfig; + + @Autowired + TqConfigMapper tqConfigMapper; + + private void initTqConfig(){ + if(tqConfig==null){ + tqConfig = tqConfigMapper.getConfig(); + } + } + + public TqConfig getTqConfig(){ + this.initTqConfig(); + return tqConfig; + } + + /** + * 查询设备列表和当前状态 + */ + public String getMeters(){ + this.initTqConfig(); + Map params = new HashMap<>(); + params.put("auth", tqConfig.getAuthCode()); + String urlParams = HttpTool.getUrlParams(params); + log.info("getMeters:request:{}",urlParams); + String url = tqConfig.getRequestUrl()+TqApiEnum.METER_INFO.getValue()+"?"+urlParams; + String responseStr = HttpTool.httpClientGet(url); + log.info("getMeters:response:{}",responseStr); + return responseStr; + } + + /** + * 查询采集器列表和当前状态 + */ + public String getCollectors(){ + this.initTqConfig(); + Map params = new HashMap<>(); + params.put("auth", tqConfig.getAuthCode()); + String urlParams = HttpTool.getUrlParams(params); + log.info("getCollectors:request:{}",urlParams); + String url = tqConfig.getRequestUrl()+TqApiEnum.COLLECTOR_INFO.getValue()+"?"+urlParams; + String responseStr = HttpTool.httpClientGet(url); + log.info("getCollectors:response:{}",responseStr); + return responseStr; + } + + /** + * 电表清零 + */ + public String eleReset(List> req){ + this.initTqConfig(); + String request_content = JSON.toJSONString(req); + log.info("eleReset:request:{}",request_content); + String url = tqConfig.getRequestUrl()+TqApiEnum.ELE_RESET.getValue(); + String notifyUrl = tqConfig.getNotifyUrl()+"/electricityMeter/eleResetNotify"; + String responseStr = requestAsync(url,request_content,notifyUrl); + log.info("eleReset:response:{}",responseStr); + return responseStr; + } + + /** + * 电表开关闸 + */ + public String eleControl(List> req){ + this.initTqConfig(); + String request_content = JSON.toJSONString(req); + log.info("eleControl:request:{}",request_content); + String url = tqConfig.getRequestUrl()+TqApiEnum.ELE_CONTROL.getValue(); + String notifyUrl = tqConfig.getNotifyUrl()+"/electricityMeter/eleControlNotify"; + String responseStr = requestAsync(url,request_content,notifyUrl); + log.info("eleControl:response:{}",responseStr); + return responseStr; + } + + /** + * 电表抄表 + */ + public String eleRead(List> req){ + this.initTqConfig(); + String request_content = JSON.toJSONString(req); + log.info("eleRead:request:{}",request_content); + String url = tqConfig.getRequestUrl()+TqApiEnum.ELE_READ.getValue(); + String notifyUrl = tqConfig.getNotifyUrl()+"/electricityMeter/eleReadNotify"; + String responseStr = requestAsync(url,request_content,notifyUrl); + log.info("eleRead:response:{}",responseStr); + return responseStr; + } + + /** + * 水表清零 + */ + public String waterReset(List> req){ + this.initTqConfig(); + String request_content = JSON.toJSONString(req); + log.info("eleReset:request:{}",request_content); + String url = tqConfig.getRequestUrl()+TqApiEnum.WATER_RESET.getValue(); + String notifyUrl = tqConfig.getNotifyUrl()+"/waterMeter/waterResetNotify"; + String responseStr = requestAsync(url,request_content,notifyUrl); + log.info("eleReset:response:{}",responseStr); + return responseStr; + } + + /** + * 水表开关闸 + */ + public String waterControl(List> req){ + this.initTqConfig(); + String request_content = JSON.toJSONString(req); + log.info("waterControl:request:{}",request_content); + String url = tqConfig.getRequestUrl()+TqApiEnum.WATER_CONTROL.getValue(); + String notifyUrl = tqConfig.getNotifyUrl()+"/waterMeter/waterControlNotify"; + String responseStr = requestAsync(url,request_content,notifyUrl); + log.info("waterControl:response:{}",responseStr); + return responseStr; + } + + /** + * 水表抄表 + */ + public String waterRead(List> req){ + this.initTqConfig(); + String request_content = JSON.toJSONString(req); + log.info("waterRead:request:{}",request_content); + String url = tqConfig.getRequestUrl()+TqApiEnum.WATER_READ.getValue(); + String notifyUrl = tqConfig.getNotifyUrl()+"/waterMeter/waterReadNotify"; + String responseStr = requestAsync(url,request_content,notifyUrl); + log.info("waterRead:response:{}",responseStr); + return responseStr; + } + + private String requestAsync(String url, String request_content,String notifyUrl){ + // 时间戳 + String timestamp = String.valueOf(new Date().getTime()/1000); + // 用于签名的内容 + Map data = new HashMap<>(); + data.put("timestamp", timestamp); + data.put("auth_code", tqConfig.getAuthCode()); + data.put("request_content", request_content); + data.put("notify_url", notifyUrl); + // 获取签名 + String sign = SignTool.getSign(tqConfig.getRandomCode(),data); + data.put("sign", sign); + try { + return HttpTool.httpClientPost(url, data); + } catch (Exception e) { + e.printStackTrace(); + } + return ""; + } + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/api/WaterMeterApiController.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/api/WaterMeterApiController.java new file mode 100644 index 0000000..c1dfd50 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/api/WaterMeterApiController.java @@ -0,0 +1,76 @@ +package com.nu.modules.tq.water.api; + +import com.nu.modules.tq.water.entity.WaterMeter; +import com.nu.modules.tq.water.service.IWaterMeterService; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.system.base.controller.JeecgController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Slf4j +@RestController +@RequestMapping("/iot/tq/api/waterMeter") +public class WaterMeterApiController extends JeecgController { + + @Autowired + private IWaterMeterService service; + + /** + * 水表清零回调 + * @param response_content + * @param timestamp + * @param sign + * @return + */ + @PostMapping("/waterResetNotify") + @ApiOperation("水表清零回调") + public String waterResetNotify(String response_content, String timestamp, String sign) { + log.info("waterResetNotify:response_content:{}",response_content); + log.info("waterResetNotify:timestamp:{}",timestamp); + log.info("waterResetNotify:sign:{}",sign); + //-----------加入业务逻辑----------- + String result = service.waterResetNotify(response_content, timestamp, sign); + return result; + } + + /** + * 水表开关闸回调 + * @param response_content + * @param timestamp + * @param sign + * @return + */ + @PostMapping("/waterControlNotify") + @ApiOperation("水表开关闸回调") + public String waterControlNotify(String response_content, String timestamp, String sign) { + log.info("waterControlNotify:response_content:{}",response_content); + log.info("waterControlNotify:timestamp:{}",timestamp); + log.info("waterControlNotify:sign:{}",sign); + //-----------加入业务逻辑----------- + String result = service.waterControlNotify(response_content, timestamp, sign); + return result; + } + + /** + * 水表抄表回调 + * @param response_content + * @param timestamp + * @param sign + * @return + */ + @PostMapping("/waterReadNotify") + @ApiOperation("水表抄表回调") + public String waterReadNotify(String response_content, String timestamp, String sign) { + log.info("waterReadNotify:response_content:{}",response_content); + log.info("waterReadNotify:timestamp:{}",timestamp); + log.info("waterReadNotify:sign:{}",sign); + //-----------加入业务逻辑----------- + String result = service.waterReadNotify(response_content, timestamp, sign); + //-------------------------------- + return result; + } + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/controller/WaterMeterController.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/controller/WaterMeterController.java new file mode 100644 index 0000000..d3df2da --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/controller/WaterMeterController.java @@ -0,0 +1,51 @@ +package com.nu.modules.tq.water.controller; + +import com.nu.modules.tq.water.entity.WaterMeter; +import com.nu.modules.tq.water.service.IWaterMeterService; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.base.controller.JeecgController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Slf4j +@RestController +@RequestMapping("/iot/tq/waterMeter") +public class WaterMeterController extends JeecgController { + + @Autowired + private IWaterMeterService service; + + /** + * 清零 + * @param waterMeter + * @return + */ + @GetMapping(value = "/waterReset") + public Result waterReset(WaterMeter waterMeter) { + return service.waterReset(waterMeter); + } + + /** + * 开闸、关闸 + * @param waterMeter + * @return + */ + @GetMapping(value = "/waterControl") + public Result waterControl(WaterMeter waterMeter) { + return service.waterControl(waterMeter); + } + + /** + * 抄表 + * @param waterMeter + * @return + */ + @GetMapping(value = "/waterRead") + public Result waterRead(WaterMeter waterMeter) { + return service.waterRead(waterMeter); + } + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/entity/WaterMeter.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/entity/WaterMeter.java new file mode 100644 index 0000000..cc4a0fc --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/entity/WaterMeter.java @@ -0,0 +1,72 @@ +package com.nu.modules.tq.water.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; + +import java.io.Serializable; + +/** + *

Class :物联电表管理Entity + *

功能描述:功能描述 + */ +@Data +@TableName("nu_iot_tq_electricity_meter") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="nu_iot_tq_electricity_meter对象", description="物联电表") +public class WaterMeter implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(type = IdType.AUTO) + @ApiModelProperty(value = "主键") + private Integer id; + @Excel(name = "采集器号", width = 15) + @ApiModelProperty(value = "采集器号,4G、NB设备采集器号与表号一致") + private String cid; + @Excel(name = "表号", width = 15) + @ApiModelProperty(value = "表号(表地址)") + private String address; + @Excel(name = "操作类型", width = 15) + @ApiModelProperty(value = "操作类型") + @TableField(exist = false) + private Integer type;//49清零 42抄表 10电表拉闸 11电表合闸 43水表开闸 53水表关闸 + @Excel(name = "水表值", width = 15) + @ApiModelProperty(value = "水表值") + private String waterValue; //电表-电量值 + @Excel(name = "阀门状态", width = 15) + @ApiModelProperty(value = "阀门状态") + private String relayState; //电表-阀门状态 1 表示合闸/开阀, 0 表示拉闸/关阀,其他,表示未知状态或异常 + @Excel(name = "水表电池状态", width = 15) + @ApiModelProperty(value = "水表电池状态") + private String batteryState; //水表电池状态 0 正常 , 1 电池低电压,其他 电池低电压 + @Excel(name = "在线状态", width = 15) + @ApiModelProperty(value = "在线状态") + @TableField(exist = false) + private String online; //采集器-在线状态 true 在线 false 离线 + @Excel(name = "信号值", width = 15) + @ApiModelProperty(value = "信号值") + @TableField(exist = false) + private String csq ; //采集器-信号值 1-31 。 20以上算信号稳定 + @Excel(name = "上次掉线时间", width = 15) + @ApiModelProperty(value = "上次掉线时间") + @TableField(exist = false) + private String disconnectTime; //采集器-上次掉线时间 online = false 时 + @Excel(name = "上次上线时间", width = 15) + @ApiModelProperty(value = "上次上线时间") + @TableField(exist = false) + private String connectTime; //采集器-上次上线时间 online = true 时 + @Excel(name = "上次查表时间", width = 15) + @ApiModelProperty(value = "上次查表时间") + private String readTime; //电表-上次查表时间 + @Excel(name = "描述", width = 15) + @ApiModelProperty(value = "描述") + private String remark; +} \ No newline at end of file diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/mapper/WaterMeterMapper.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/mapper/WaterMeterMapper.java new file mode 100644 index 0000000..c13cedb --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/mapper/WaterMeterMapper.java @@ -0,0 +1,12 @@ +package com.nu.modules.tq.water.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.nu.modules.tq.water.entity.WaterMeter; + +public interface WaterMeterMapper extends BaseMapper { + WaterMeter getWaterMeter(WaterMeter waterMeter); + int insert(WaterMeter waterMeter); + int update(WaterMeter waterMeter); + int updateValue(WaterMeter waterMeter); + int updateRelayState(WaterMeter waterMeter); +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/mapper/xml/WaterMeterMapper.xml b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/mapper/xml/WaterMeterMapper.xml new file mode 100644 index 0000000..aa8373e --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/mapper/xml/WaterMeterMapper.xml @@ -0,0 +1,69 @@ + + + + + + + + insert into nu_iot_tq_water_meter( + cid, + address, + relay_state, + battery_state, + remark, + create_time + ) + values( + #{cid}, + #{address}, + #{relayState}, + #{batteryState}, + #{remark}, + now() + ) + + + + update nu_iot_tq_water_meter + set + relay_state = #{relayState}, + battery_state = #{batteryState}, + remark = #{remark}, + update_time = now() + where cid = #{cid} + and address = #{address} + + + + update nu_iot_tq_water_meter + set + water_value = #{waterValue}, + read_time = #{readTime}, + update_time = now() + where cid = #{cid} + and address = #{address} + + + + update nu_iot_tq_water_meter + set + relay_state = #{relayState}, + update_time = now() + where cid = #{cid} + and address = #{address} + + + + \ No newline at end of file diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/service/IWaterMeterService.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/service/IWaterMeterService.java new file mode 100644 index 0000000..9a2a325 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/service/IWaterMeterService.java @@ -0,0 +1,16 @@ +package com.nu.modules.tq.water.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.nu.modules.tq.water.entity.WaterMeter; +import org.jeecg.common.api.vo.Result; + +public interface IWaterMeterService extends IService { + + Result waterReset(WaterMeter waterMeter); + Result waterControl(WaterMeter waterMeter); + Result waterRead(WaterMeter waterMeter); + + String waterResetNotify(String response_content, String timestamp, String sign); + String waterControlNotify(String response_content, String timestamp, String sign); + String waterReadNotify(String response_content, String timestamp, String sign); +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/service/impl/WaterMeterServiceImpl.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/service/impl/WaterMeterServiceImpl.java new file mode 100644 index 0000000..6060b89 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/service/impl/WaterMeterServiceImpl.java @@ -0,0 +1,421 @@ +package com.nu.modules.tq.water.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.nu.modules.tq.common.entity.TqApiLog; +import com.nu.modules.tq.common.service.ITqApiLogService; +import com.nu.modules.tq.electricity.entity.ElectricityMeter; +import com.nu.modules.tq.electricity.mapper.ElectricityMeterMapper; +import com.nu.modules.tq.electricity.service.IElectricityMeterService; +import com.nu.modules.tq.utils.HttpTool; +import com.nu.modules.tq.utils.SignTool; +import com.nu.modules.tq.utils.TqApi; +import com.nu.modules.tq.water.entity.WaterMeter; +import com.nu.modules.tq.water.mapper.WaterMeterMapper; +import com.nu.modules.tq.water.service.IWaterMeterService; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.api.vo.Result; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +@Slf4j +@Service +public class WaterMeterServiceImpl extends ServiceImpl implements IWaterMeterService { + + @Autowired + TqApi tqApi; + + @Autowired + ITqApiLogService logService; + + /** + * 清零 + */ + @Override + public Result waterReset(WaterMeter waterMeter){ + WaterMeter entity = baseMapper.getWaterMeter(waterMeter); + if(entity == null){ + return Result.error("请先同步水表设备信息后再进行清零"); + } + String readTimeStr = entity.getReadTime(); + if(readTimeStr == null || readTimeStr.equals("")){ + return Result.error("请先进行抄表再进行清零"); + } + Date readTime = DateUtil.parse(readTimeStr,"yyyy-MM-dd HH:mm:ss"); + Calendar c = Calendar.getInstance(); + c.add(Calendar.HOUR_OF_DAY,-1); + int comInt = DateUtil.compare(readTime,c.getTime()); + if(comInt<0){ + return Result.error("请先进行抄表再进行清零"); + } + List> req = new ArrayList<>(); + Map params = new HashMap<>(); + params.put("paymentmode", "noprepay"); + Map item = new HashMap<>(); + item.put("opr_id", HttpTool.generateOperateId()); + item.put("time_out", 0); + item.put("must_online", true); + item.put("retry_times", 1); + item.put("cid", waterMeter.getCid()); + item.put("address", waterMeter.getAddress()); + item.put("params", params); + req.add(item); + String responseStr = tqApi.waterReset(req); + JSONObject jsonObject = new JSONObject(responseStr); + String httpStatus = jsonObject.getStr("status"); + if(httpStatus.equals("SUCCESS")){ + String response_content = jsonObject.getStr("response_content"); + JSONArray jsonArray = new JSONArray(response_content); + for(int i=0;i waterControl(WaterMeter waterMeter){ + Integer type = waterMeter.getType(); + WaterMeter entity = baseMapper.getWaterMeter(waterMeter); + if(entity == null){ + if(type.equals("43")){ + return Result.error("请先同步水表设备信息后再进行开闸"); + }else{ + return Result.error("请先同步水表设备信息后再进行关闸"); + } + } + List> req = new ArrayList<>(); + Map item = new HashMap<>(); + item.put("opr_id", HttpTool.generateOperateId()); + item.put("time_out", 0); + item.put("must_online", true); + item.put("retry_times", 1); + item.put("cid", waterMeter.getCid()); + item.put("address", waterMeter.getAddress()); + item.put("type", type); + req.add(item); + String responseStr = tqApi.waterReset(req); + JSONObject jsonObject = new JSONObject(responseStr); + String httpStatus = jsonObject.getStr("status"); + if(httpStatus.equals("SUCCESS")){ + String response_content = jsonObject.getStr("response_content"); + JSONArray jsonArray = new JSONArray(response_content); + for(int i=0;i waterRead(WaterMeter waterMeter){ + WaterMeter entity = baseMapper.getWaterMeter(waterMeter); + if(entity == null){ + return Result.error("请先同步水表设备信息后再进行抄表"); + } + List> req = new ArrayList<>(); + Map item = new HashMap<>(); + item.put("opr_id", HttpTool.generateOperateId()); + item.put("time_out", 0); + item.put("must_online", true); + item.put("retry_times", 1); + item.put("cid", waterMeter.getCid()); + item.put("address", waterMeter.getAddress()); + item.put("type", 42); + req.add(item); + String responseStr = tqApi.waterRead(req); + JSONObject jsonObject = new JSONObject(responseStr); + String httpStatus = jsonObject.getStr("status"); + if(httpStatus.equals("SUCCESS")){ + String response_content = jsonObject.getStr("response_content"); + JSONArray jsonArray = new JSONArray(response_content); + for(int i=0;i