From 631c4e914ab30be9d6243eb395d7b4b2612231ea Mon Sep 17 00:00:00 2001 From: yangjun <1173114630@qq.com> Date: Fri, 20 Jun 2025 10:24:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B8=A9=E6=B9=BF=E5=BA=A6?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E6=8A=A4=E7=90=86=E5=8D=95=E5=85=83=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/jeecg/config/shiro/ShiroConfig.java | 2 + .../NuIotTqApiRequestLogController.java | 186 ++++++ .../entity/NuIotTqApiRequestLog.java | 102 ++++ .../mapper/NuIotTqApiRequestLogMapper.java | 17 + .../mapper/xml/NuIotTqApiRequestLogMapper.xml | 5 + .../service/INuIotTqApiRequestLogService.java | 14 + .../impl/NuIotTqApiRequestLogServiceImpl.java | 19 + .../NuIotTqElectricitySyncLogController.java | 180 ++++++ .../entity/NuIotTqElectricitySyncLog.java | 105 ++++ .../NuIotTqElectricitySyncLogMapper.java | 17 + .../xml/NuIotTqElectricitySyncLogMapper.xml | 5 + .../INuIotTqElectricitySyncLogService.java | 14 + .../NuIotTqElectricitySyncLogServiceImpl.java | 19 + .../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/job/CollectorDataJob.java | 28 + .../modules/tq/common/job/MeterStatusJob.java | 28 + .../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 | 134 +++++ .../api/ElectricityMeterApiController.java | 87 +++ .../ElectricityMeterController.java | 91 +++ .../electricity/entity/ElectricityMeter.java | 80 +++ .../electricity/job/ElectricityReadJob.java | 39 ++ .../mapper/ElectricityMeterMapper.java | 18 + .../mapper/xml/ElectricityMeterMapper.xml | 139 +++++ .../service/IElectricityMeterService.java | 23 + .../impl/ElectricityMeterServiceImpl.java | 545 ++++++++++++++++++ .../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 | 74 +++ .../modules/tq/water/entity/WaterMeter.java | 81 +++ .../nu/modules/tq/water/job/WaterReadJob.java | 40 ++ .../tq/water/mapper/WaterMeterMapper.java | 19 + .../tq/water/mapper/xml/WaterMeterMapper.xml | 131 +++++ .../tq/water/service/IWaterMeterService.java | 21 + .../service/impl/WaterMeterServiceImpl.java | 441 ++++++++++++++ .../src/main/resources/application-uat.yml | 2 +- 52 files changed, 3667 insertions(+), 1 deletion(-) create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqApiRequestLog/controller/NuIotTqApiRequestLogController.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqApiRequestLog/entity/NuIotTqApiRequestLog.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqApiRequestLog/mapper/NuIotTqApiRequestLogMapper.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqApiRequestLog/mapper/xml/NuIotTqApiRequestLogMapper.xml create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqApiRequestLog/service/INuIotTqApiRequestLogService.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqApiRequestLog/service/impl/NuIotTqApiRequestLogServiceImpl.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqElectricitySyncLog/controller/NuIotTqElectricitySyncLogController.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqElectricitySyncLog/entity/NuIotTqElectricitySyncLog.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqElectricitySyncLog/mapper/NuIotTqElectricitySyncLogMapper.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqElectricitySyncLog/mapper/xml/NuIotTqElectricitySyncLogMapper.xml create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqElectricitySyncLog/service/INuIotTqElectricitySyncLogService.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqElectricitySyncLog/service/impl/NuIotTqElectricitySyncLogServiceImpl.java 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/job/CollectorDataJob.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/job/MeterStatusJob.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/job/ElectricityReadJob.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/job/WaterReadJob.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-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java b/nursing-unit-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java index 29db857..9c1fa92 100644 --- a/nursing-unit-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java +++ b/nursing-unit-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java @@ -83,6 +83,8 @@ public class ShiroConfig { } // 配置不会被拦截的链接 顺序判断 + filterChainDefinitionMap.put("/iot/tq/api/electricityMeter/**", "anon"); //电表回调 + filterChainDefinitionMap.put("/iot/tq/api/waterMeter/**", "anon"); //水表回调 filterChainDefinitionMap.put("/sys/cas/client/validateLogin", "anon"); //cas验证登录 filterChainDefinitionMap.put("/sys/randomImage/**", "anon"); //登录验证码接口排除 filterChainDefinitionMap.put("/sys/checkCaptcha", "anon"); //登录验证码接口排除 diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqApiRequestLog/controller/NuIotTqApiRequestLogController.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqApiRequestLog/controller/NuIotTqApiRequestLogController.java new file mode 100644 index 0000000..e728b1d --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqApiRequestLog/controller/NuIotTqApiRequestLogController.java @@ -0,0 +1,186 @@ +package com.nu.modules.nuIotTqApiRequestLog.controller; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.common.system.query.QueryRuleEnum; +import org.jeecg.common.util.oConvertUtils; +import com.nu.modules.nuIotTqApiRequestLog.entity.NuIotTqApiRequestLog; +import com.nu.modules.nuIotTqApiRequestLog.service.INuIotTqApiRequestLogService; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; + +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.jeecg.common.system.base.controller.JeecgController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; +import com.alibaba.fastjson.JSON; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.apache.shiro.authz.annotation.RequiresPermissions; + + /** + * @Description: api请求日志 + * @Author: jeecg-boot + * @Date: 2025-06-10 + * @Version: V1.0 + */ +@Api(tags="api请求日志") +@RestController +@RequestMapping("/nuIotTqApiRequestLog/nuIotTqApiRequestLog") +@Slf4j +public class NuIotTqApiRequestLogController extends JeecgController { + @Autowired + private INuIotTqApiRequestLogService nuIotTqApiRequestLogService; + + /** + * 分页列表查询 + * + * @param nuIotTqApiRequestLog + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "api请求日志-分页列表查询") + @ApiOperation(value="api请求日志-分页列表查询", notes="api请求日志-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(NuIotTqApiRequestLog nuIotTqApiRequestLog, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + // 自定义查询规则 + Map customeRuleMap = new HashMap<>(); + // 自定义多选的查询规则为:LIKE_WITH_OR + customeRuleMap.put("type", QueryRuleEnum.LIKE_WITH_OR); + customeRuleMap.put("requestStatus", QueryRuleEnum.LIKE_WITH_OR); + customeRuleMap.put("resolveStatus", QueryRuleEnum.LIKE_WITH_OR); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(nuIotTqApiRequestLog, req.getParameterMap(),customeRuleMap); + Page page = new Page(pageNo, pageSize); + IPage pageList = nuIotTqApiRequestLogService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param nuIotTqApiRequestLog + * @return + */ + @AutoLog(value = "api请求日志-添加") + @ApiOperation(value="api请求日志-添加", notes="api请求日志-添加") + @RequiresPermissions("nuIotTqApiRequestLog:nu_iot_tq_api_request_log:add") + @PostMapping(value = "/add") + public Result add(@RequestBody NuIotTqApiRequestLog nuIotTqApiRequestLog) { + nuIotTqApiRequestLogService.save(nuIotTqApiRequestLog); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param nuIotTqApiRequestLog + * @return + */ + @AutoLog(value = "api请求日志-编辑") + @ApiOperation(value="api请求日志-编辑", notes="api请求日志-编辑") + @RequiresPermissions("nuIotTqApiRequestLog:nu_iot_tq_api_request_log:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) + public Result edit(@RequestBody NuIotTqApiRequestLog nuIotTqApiRequestLog) { + nuIotTqApiRequestLogService.updateById(nuIotTqApiRequestLog); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "api请求日志-通过id删除") + @ApiOperation(value="api请求日志-通过id删除", notes="api请求日志-通过id删除") + @RequiresPermissions("nuIotTqApiRequestLog:nu_iot_tq_api_request_log:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + nuIotTqApiRequestLogService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "api请求日志-批量删除") + @ApiOperation(value="api请求日志-批量删除", notes="api请求日志-批量删除") + @RequiresPermissions("nuIotTqApiRequestLog:nu_iot_tq_api_request_log:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.nuIotTqApiRequestLogService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "api请求日志-通过id查询") + @ApiOperation(value="api请求日志-通过id查询", notes="api请求日志-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + NuIotTqApiRequestLog nuIotTqApiRequestLog = nuIotTqApiRequestLogService.getById(id); + if(nuIotTqApiRequestLog==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(nuIotTqApiRequestLog); + } + + /** + * 导出excel + * + * @param request + * @param nuIotTqApiRequestLog + */ + @RequiresPermissions("nuIotTqApiRequestLog:nu_iot_tq_api_request_log:exportXls") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, NuIotTqApiRequestLog nuIotTqApiRequestLog) { + return super.exportXls(request, nuIotTqApiRequestLog, NuIotTqApiRequestLog.class, "api请求日志"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequiresPermissions("nuIotTqApiRequestLog:nu_iot_tq_api_request_log:importExcel") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, NuIotTqApiRequestLog.class); + } + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqApiRequestLog/entity/NuIotTqApiRequestLog.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqApiRequestLog/entity/NuIotTqApiRequestLog.java new file mode 100644 index 0000000..228685a --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqApiRequestLog/entity/NuIotTqApiRequestLog.java @@ -0,0 +1,102 @@ +package com.nu.modules.nuIotTqApiRequestLog.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.TableLogic; +import org.jeecg.common.constant.ProvinceCityArea; +import org.jeecg.common.util.SpringContextUtils; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecg.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: api请求日志 + * @Author: jeecg-boot + * @Date: 2025-06-10 + * @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="api请求日志") +public class NuIotTqApiRequestLog implements Serializable { + private static final long serialVersionUID = 1L; + + /**id*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "id") + private Integer id; + /**操作ID*/ + @Excel(name = "操作ID", width = 15) + @ApiModelProperty(value = "操作ID") + private String oprId; + /**采集器号*/ + @Excel(name = "采集器号", width = 15) + @ApiModelProperty(value = "采集器号") + private String cid; + /**表号*/ + @Excel(name = "表号", width = 15) + @ApiModelProperty(value = "表号") + private String address; + /**类型*/ + @Excel(name = "类型", width = 15, dicCode = "dbsb_type") + @Dict(dicCode = "dbsb_type") + @ApiModelProperty(value = "类型") + private String type; + /**请求时的值*/ + @Excel(name = "请求时的值", width = 15) + @ApiModelProperty(value = "请求时的值") + private String requestValue; + /**请求时间*/ + @Excel(name = "请求时间", width = 15) + @ApiModelProperty(value = "请求时间") + private String requestTime; + /**请求状态*/ + @Excel(name = "请求状态", width = 15) + @Dict(dicCode = "dbsb_status") + @ApiModelProperty(value = "请求状态") + private String requestStatus; + /**请求描述*/ + @Excel(name = "请求描述", width = 15) + @ApiModelProperty(value = "请求描述") + private String requestRemark; + /**反馈值*/ + @Excel(name = "反馈值", width = 15) + @ApiModelProperty(value = "反馈值") + private String resolveValue; + /**反馈时间*/ + @Excel(name = "反馈时间", width = 15) + @ApiModelProperty(value = "反馈时间") + private String resolveTime; + /**反馈状态*/ + @Excel(name = "反馈状态", width = 15, dicCode = "dbsb_status") + @Dict(dicCode = "dbsb_status") + @ApiModelProperty(value = "反馈状态") + private String resolveStatus; + /**反馈描述*/ + @Excel(name = "反馈描述", width = 15) + @ApiModelProperty(value = "反馈描述") + private String resolveRemark; + /**创建时间*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建时间") + private Date createTime; + /**更新时间*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新时间") + private Date updateTime; +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqApiRequestLog/mapper/NuIotTqApiRequestLogMapper.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqApiRequestLog/mapper/NuIotTqApiRequestLogMapper.java new file mode 100644 index 0000000..16181e3 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqApiRequestLog/mapper/NuIotTqApiRequestLogMapper.java @@ -0,0 +1,17 @@ +package com.nu.modules.nuIotTqApiRequestLog.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import com.nu.modules.nuIotTqApiRequestLog.entity.NuIotTqApiRequestLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: api请求日志 + * @Author: jeecg-boot + * @Date: 2025-06-10 + * @Version: V1.0 + */ +public interface NuIotTqApiRequestLogMapper extends BaseMapper { + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqApiRequestLog/mapper/xml/NuIotTqApiRequestLogMapper.xml b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqApiRequestLog/mapper/xml/NuIotTqApiRequestLogMapper.xml new file mode 100644 index 0000000..31f35b8 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqApiRequestLog/mapper/xml/NuIotTqApiRequestLogMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqApiRequestLog/service/INuIotTqApiRequestLogService.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqApiRequestLog/service/INuIotTqApiRequestLogService.java new file mode 100644 index 0000000..6b2ce12 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqApiRequestLog/service/INuIotTqApiRequestLogService.java @@ -0,0 +1,14 @@ +package com.nu.modules.nuIotTqApiRequestLog.service; + +import com.nu.modules.nuIotTqApiRequestLog.entity.NuIotTqApiRequestLog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: api请求日志 + * @Author: jeecg-boot + * @Date: 2025-06-10 + * @Version: V1.0 + */ +public interface INuIotTqApiRequestLogService extends IService { + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqApiRequestLog/service/impl/NuIotTqApiRequestLogServiceImpl.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqApiRequestLog/service/impl/NuIotTqApiRequestLogServiceImpl.java new file mode 100644 index 0000000..ab4638b --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqApiRequestLog/service/impl/NuIotTqApiRequestLogServiceImpl.java @@ -0,0 +1,19 @@ +package com.nu.modules.nuIotTqApiRequestLog.service.impl; + +import com.nu.modules.nuIotTqApiRequestLog.entity.NuIotTqApiRequestLog; +import com.nu.modules.nuIotTqApiRequestLog.mapper.NuIotTqApiRequestLogMapper; +import com.nu.modules.nuIotTqApiRequestLog.service.INuIotTqApiRequestLogService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: api请求日志 + * @Author: jeecg-boot + * @Date: 2025-06-10 + * @Version: V1.0 + */ +@Service +public class NuIotTqApiRequestLogServiceImpl extends ServiceImpl implements INuIotTqApiRequestLogService { + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqElectricitySyncLog/controller/NuIotTqElectricitySyncLogController.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqElectricitySyncLog/controller/NuIotTqElectricitySyncLogController.java new file mode 100644 index 0000000..70b68f4 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqElectricitySyncLog/controller/NuIotTqElectricitySyncLogController.java @@ -0,0 +1,180 @@ +package com.nu.modules.nuIotTqElectricitySyncLog.controller; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.common.system.query.QueryRuleEnum; +import org.jeecg.common.util.oConvertUtils; +import com.nu.modules.nuIotTqElectricitySyncLog.entity.NuIotTqElectricitySyncLog; +import com.nu.modules.nuIotTqElectricitySyncLog.service.INuIotTqElectricitySyncLogService; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; + +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.jeecg.common.system.base.controller.JeecgController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; +import com.alibaba.fastjson.JSON; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.apache.shiro.authz.annotation.RequiresPermissions; + + /** + * @Description: 同步日志 + * @Author: jeecg-boot + * @Date: 2025-06-12 + * @Version: V1.0 + */ +@Api(tags="同步日志") +@RestController +@RequestMapping("/nuIotTqElectricitySyncLog/nuIotTqElectricitySyncLog") +@Slf4j +public class NuIotTqElectricitySyncLogController extends JeecgController { + @Autowired + private INuIotTqElectricitySyncLogService nuIotTqElectricitySyncLogService; + + /** + * 分页列表查询 + * + * @param nuIotTqElectricitySyncLog + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "同步日志-分页列表查询") + @ApiOperation(value="同步日志-分页列表查询", notes="同步日志-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(NuIotTqElectricitySyncLog nuIotTqElectricitySyncLog, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(nuIotTqElectricitySyncLog, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = nuIotTqElectricitySyncLogService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param nuIotTqElectricitySyncLog + * @return + */ + @AutoLog(value = "同步日志-添加") + @ApiOperation(value="同步日志-添加", notes="同步日志-添加") + @RequiresPermissions("nuIotTqElectricitySyncLog:nu_iot_tq_electricity_sync_log:add") + @PostMapping(value = "/add") + public Result add(@RequestBody NuIotTqElectricitySyncLog nuIotTqElectricitySyncLog) { + nuIotTqElectricitySyncLogService.save(nuIotTqElectricitySyncLog); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param nuIotTqElectricitySyncLog + * @return + */ + @AutoLog(value = "同步日志-编辑") + @ApiOperation(value="同步日志-编辑", notes="同步日志-编辑") + @RequiresPermissions("nuIotTqElectricitySyncLog:nu_iot_tq_electricity_sync_log:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) + public Result edit(@RequestBody NuIotTqElectricitySyncLog nuIotTqElectricitySyncLog) { + nuIotTqElectricitySyncLogService.updateById(nuIotTqElectricitySyncLog); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "同步日志-通过id删除") + @ApiOperation(value="同步日志-通过id删除", notes="同步日志-通过id删除") + @RequiresPermissions("nuIotTqElectricitySyncLog:nu_iot_tq_electricity_sync_log:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + nuIotTqElectricitySyncLogService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "同步日志-批量删除") + @ApiOperation(value="同步日志-批量删除", notes="同步日志-批量删除") + @RequiresPermissions("nuIotTqElectricitySyncLog:nu_iot_tq_electricity_sync_log:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.nuIotTqElectricitySyncLogService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "同步日志-通过id查询") + @ApiOperation(value="同步日志-通过id查询", notes="同步日志-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + NuIotTqElectricitySyncLog nuIotTqElectricitySyncLog = nuIotTqElectricitySyncLogService.getById(id); + if(nuIotTqElectricitySyncLog==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(nuIotTqElectricitySyncLog); + } + + /** + * 导出excel + * + * @param request + * @param nuIotTqElectricitySyncLog + */ + @RequiresPermissions("nuIotTqElectricitySyncLog:nu_iot_tq_electricity_sync_log:exportXls") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, NuIotTqElectricitySyncLog nuIotTqElectricitySyncLog) { + return super.exportXls(request, nuIotTqElectricitySyncLog, NuIotTqElectricitySyncLog.class, "同步日志"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequiresPermissions("nuIotTqElectricitySyncLog:nu_iot_tq_electricity_sync_log:importExcel") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, NuIotTqElectricitySyncLog.class); + } + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqElectricitySyncLog/entity/NuIotTqElectricitySyncLog.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqElectricitySyncLog/entity/NuIotTqElectricitySyncLog.java new file mode 100644 index 0000000..82cb6e7 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqElectricitySyncLog/entity/NuIotTqElectricitySyncLog.java @@ -0,0 +1,105 @@ +package com.nu.modules.nuIotTqElectricitySyncLog.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.TableLogic; +import org.jeecg.common.constant.ProvinceCityArea; +import org.jeecg.common.util.SpringContextUtils; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecg.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: 同步日志 + * @Author: jeecg-boot + * @Date: 2025-06-12 + * @Version: V1.0 + */ +@Data +@TableName("nu_iot_tq_electricity_sync_log") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="nu_iot_tq_electricity_sync_log对象", description="同步日志") +public class NuIotTqElectricitySyncLog implements Serializable { + private static final long serialVersionUID = 1L; + + /**id*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "id") + private String id; + /**createBy*/ + @ApiModelProperty(value = "createBy") + private String createBy; + /**createTime*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "createTime") + private Date createTime; + /**updateBy*/ + @ApiModelProperty(value = "updateBy") + private String updateBy; + /**updateTime*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "updateTime") + private Date updateTime; + /**主表id*/ + @Excel(name = "主表id", width = 15) + @ApiModelProperty(value = "主表id") + private String mainId; + /**主表名称*/ + @Excel(name = "主表名称", width = 15) + @ApiModelProperty(value = "主表名称") + private String mainName; + /**同步类型*/ + @Excel(name = "同步类型", width = 15) + @ApiModelProperty(value = "同步类型") + private String syncType; + /**原机构id*/ + @Excel(name = "原机构id", width = 15) + @ApiModelProperty(value = "原机构id") + private String orgId; + /**原机构名称*/ + @Excel(name = "原机构名称", width = 15) + @ApiModelProperty(value = "原机构名称") + private String orgName; + /**原机构编码*/ + @Excel(name = "原机构编码", width = 15) + @ApiModelProperty(value = "原机构编码") + private String orgCode; + /**新机构id*/ + @Excel(name = "新机构id", width = 15) + @ApiModelProperty(value = "新机构id") + private String newOrgId; + /**新机构名称*/ + @Excel(name = "新机构名称", width = 15) + @ApiModelProperty(value = "新机构名称") + private String newOrgName; + /**新机构编码*/ + @Excel(name = "新机构编码", width = 15) + @ApiModelProperty(value = "新机构编码") + private String newOrgCode; + /**状态*/ + @Excel(name = "状态", width = 15) + @ApiModelProperty(value = "状态") + private String status; + /**备注*/ + @Excel(name = "备注", width = 15) + @ApiModelProperty(value = "备注") + private String content; + /**服务类型*/ + @Excel(name = "服务类型", width = 15) + @ApiModelProperty(value = "服务类型") + private String serverType; +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqElectricitySyncLog/mapper/NuIotTqElectricitySyncLogMapper.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqElectricitySyncLog/mapper/NuIotTqElectricitySyncLogMapper.java new file mode 100644 index 0000000..fecebbe --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqElectricitySyncLog/mapper/NuIotTqElectricitySyncLogMapper.java @@ -0,0 +1,17 @@ +package com.nu.modules.nuIotTqElectricitySyncLog.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import com.nu.modules.nuIotTqElectricitySyncLog.entity.NuIotTqElectricitySyncLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 同步日志 + * @Author: jeecg-boot + * @Date: 2025-06-12 + * @Version: V1.0 + */ +public interface NuIotTqElectricitySyncLogMapper extends BaseMapper { + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqElectricitySyncLog/mapper/xml/NuIotTqElectricitySyncLogMapper.xml b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqElectricitySyncLog/mapper/xml/NuIotTqElectricitySyncLogMapper.xml new file mode 100644 index 0000000..b4f9a34 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqElectricitySyncLog/mapper/xml/NuIotTqElectricitySyncLogMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqElectricitySyncLog/service/INuIotTqElectricitySyncLogService.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqElectricitySyncLog/service/INuIotTqElectricitySyncLogService.java new file mode 100644 index 0000000..bd60a30 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqElectricitySyncLog/service/INuIotTqElectricitySyncLogService.java @@ -0,0 +1,14 @@ +package com.nu.modules.nuIotTqElectricitySyncLog.service; + +import com.nu.modules.nuIotTqElectricitySyncLog.entity.NuIotTqElectricitySyncLog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: 同步日志 + * @Author: jeecg-boot + * @Date: 2025-06-12 + * @Version: V1.0 + */ +public interface INuIotTqElectricitySyncLogService extends IService { + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqElectricitySyncLog/service/impl/NuIotTqElectricitySyncLogServiceImpl.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqElectricitySyncLog/service/impl/NuIotTqElectricitySyncLogServiceImpl.java new file mode 100644 index 0000000..2954565 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/nuIotTqElectricitySyncLog/service/impl/NuIotTqElectricitySyncLogServiceImpl.java @@ -0,0 +1,19 @@ +package com.nu.modules.nuIotTqElectricitySyncLog.service.impl; + +import com.nu.modules.nuIotTqElectricitySyncLog.entity.NuIotTqElectricitySyncLog; +import com.nu.modules.nuIotTqElectricitySyncLog.mapper.NuIotTqElectricitySyncLogMapper; +import com.nu.modules.nuIotTqElectricitySyncLog.service.INuIotTqElectricitySyncLogService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: 同步日志 + * @Author: jeecg-boot + * @Date: 2025-06-12 + * @Version: V1.0 + */ +@Service +public class NuIotTqElectricitySyncLogServiceImpl extends ServiceImpl implements INuIotTqElectricitySyncLogService { + +} 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..091bb3d --- /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(false); + return Result.OK("获取设备信息成功!"); + } + + /** + * 采集器设备信息 + * @return + */ + @GetMapping(value = "/getAllCollector") + public Result getAllCollector() { + service.getAllCollector(false); + 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/job/CollectorDataJob.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/job/CollectorDataJob.java new file mode 100644 index 0000000..f6d7abd --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/job/CollectorDataJob.java @@ -0,0 +1,28 @@ +package com.nu.modules.tq.common.job; + +import com.nu.modules.tq.common.service.ITqDeviceInfoService; +import lombok.extern.slf4j.Slf4j; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 采集器状态信息同步 + */ +@Slf4j +public class CollectorDataJob implements Job { + + @Autowired + ITqDeviceInfoService service; + + /** + * 5分钟一次 + * @param jobExecutionContext + * @throws JobExecutionException + */ + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + service.getAllCollector(true); + } +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/job/MeterStatusJob.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/job/MeterStatusJob.java new file mode 100644 index 0000000..43c457a --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/job/MeterStatusJob.java @@ -0,0 +1,28 @@ +package com.nu.modules.tq.common.job; + +import com.nu.modules.tq.common.service.ITqDeviceInfoService; +import lombok.extern.slf4j.Slf4j; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 表设备状态信息同步 + */ +@Slf4j +public class MeterStatusJob implements Job { + + @Autowired + ITqDeviceInfoService service; + + /** + * 5分钟一次 + * @param jobExecutionContext + * @throws JobExecutionException + */ + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + service.getAllMeter(true); + } +} 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..694bfe2 --- /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(boolean isJob); + void getAllCollector(boolean isJob); +} 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..6200852 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/common/service/impl/TqDeviceInfoServiceImpl.java @@ -0,0 +1,134 @@ +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(boolean isJob){ + 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..4badd1a --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/controller/ElectricityMeterController.java @@ -0,0 +1,91 @@ +package com.nu.modules.tq.electricity.controller; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.nu.modules.tq.electricity.entity.ElectricityMeter; +import com.nu.modules.tq.electricity.service.IElectricityMeterService; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.system.base.controller.JeecgController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; + +@Slf4j +@RestController +@RequestMapping("/iot/tq/electricityMeter") +public class ElectricityMeterController extends JeecgController { + + @Autowired + private IElectricityMeterService service; + + /** + * 分页列表查询 + * + * @param electricityMeter + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @GetMapping(value = "/list") + public Result> queryPageList(ElectricityMeter electricityMeter, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + Page page = new Page(pageNo, pageSize); + IPage pageList = service.findPage(page, electricityMeter); + return Result.OK(pageList); + } + + /** + * 获取设备信息 + * @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); + } + + + + @AutoLog(value = "修改机构及护理单元信息") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) + public Result edit(@RequestBody ElectricityMeter electricityMeter) { + service.updateById(electricityMeter); + return Result.OK("编辑成功!"); + } + + + @AutoLog(value = "同步电表到业务系统") + @RequestMapping(value = "/syncElectricity", method = {RequestMethod.PUT,RequestMethod.POST}) + public Result syncElectricity(@RequestBody ElectricityMeter electricityMeter) { + String dataSourceCode = electricityMeter.getDepartServerUrl(); + service.syncElectricity(dataSourceCode,electricityMeter); + return Result.OK("同步成功!"); + } +} 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..f9d6eb7 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/entity/ElectricityMeter.java @@ -0,0 +1,80 @@ +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电表合闸 + @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; + + private String nuId;//护理单元ID + private String nuName;//护理单元 + private String departId;//机构ID + private String departName;//机构名称 + private String departServerUrl;//机构服务地址 + private String oldServerUrl;//原机构服务地址 + private String syncType;//是否同步 0 未同步 1已同步 + private String oldDepartId;//原机构id + private String oldDepartName;//原机构名称 + +} \ No newline at end of file diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/job/ElectricityReadJob.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/job/ElectricityReadJob.java new file mode 100644 index 0000000..67b5d56 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/job/ElectricityReadJob.java @@ -0,0 +1,39 @@ +package com.nu.modules.tq.electricity.job; + +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.util.DateUtils; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.beans.factory.annotation.Autowired; +import java.util.List; + +/** + * 电表设备抄表信息同步 + */ +@Slf4j +public class ElectricityReadJob implements Job { + + @Autowired + IElectricityMeterService service; + + /** + * 1小时一次 + * @param jobExecutionContext + * @throws JobExecutionException + */ + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + List electricityList = service.findAllList(); + if(electricityList!=null&&electricityList.size()>0){ + for(int i=0;i< electricityList.size();i++){ + ElectricityMeter electricityMeter = electricityList.get(i); + Result result = service.eleRead(electricityMeter); + log.error("ElectricityReadJob:{}-{}", DateUtils.now(),result.getResult()); + } + } + } +} 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..9164e53 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/mapper/ElectricityMeterMapper.java @@ -0,0 +1,18 @@ +package com.nu.modules.tq.electricity.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.nu.modules.tq.electricity.entity.ElectricityMeter; +import org.apache.ibatis.annotations.Param; +import java.util.List; + +public interface ElectricityMeterMapper extends BaseMapper { + IPage findPage(Page page, @Param("params") ElectricityMeter electricityMeter); + List findAllList(); + 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..853338c --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/mapper/xml/ElectricityMeterMapper.xml @@ -0,0 +1,139 @@ + + + + + + + + + + + + insert into nu_iot_tq_water_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..9be9315 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/service/IElectricityMeterService.java @@ -0,0 +1,23 @@ +package com.nu.modules.tq.electricity.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.nu.modules.tq.electricity.entity.ElectricityMeter; +import org.jeecg.common.api.vo.Result; + +import java.util.List; + +public interface IElectricityMeterService extends IService { + IPage findPage(Page page, ElectricityMeter electricityMeter); + List findAllList(); + 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); + + void syncElectricity(String dataSourceCode, ElectricityMeter electricityMeter); +} 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..d15b1a9 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/electricity/service/impl/ElectricityMeterServiceImpl.java @@ -0,0 +1,545 @@ +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.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.nu.modules.nuIotTqElectricitySyncLog.entity.NuIotTqElectricitySyncLog; +import com.nu.modules.nuIotTqElectricitySyncLog.service.INuIotTqElectricitySyncLogService; +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.apache.commons.lang.StringUtils; +import org.jeecg.common.api.vo.Result; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.util.*; + +@Slf4j +@Service +public class ElectricityMeterServiceImpl extends ServiceImpl implements IElectricityMeterService { + + @Autowired + TqApi tqApi; + + @Autowired + ITqApiLogService logService; + + @Autowired + public INuIotTqElectricitySyncLogService nuIotTqElectricitySyncLogService; + + @Lazy + @Autowired + private ElectricityMeterServiceImpl syncImpl; + + @Override + public IPage findPage(Page page, ElectricityMeter electricityMeter){ + return baseMapper.findPage(page,electricityMeter); + } + + @Override + public List findAllList(){ + return baseMapper.findAllList(); + } + + /** + * 清零 + */ + @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 queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("cid",electricityMeter.getCid()); + ElectricityMeter oldParam = baseMapper.selectOne(queryWrapper);//查询数据库中该表号数据原始数据 + if(oldParam == null){ + baseMapper.insert(electricityMeter); + }else{ + baseMapper.updateById(electricityMeter); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + return true; + } +} + diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/enums/TqApiEnum.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/enums/TqApiEnum.java new file mode 100644 index 0000000..0c1e579 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/enums/TqApiEnum.java @@ -0,0 +1,24 @@ +package com.nu.modules.tq.enums; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * 接口枚举类 + */ +@Getter +@RequiredArgsConstructor +public enum TqApiEnum { + + METER_INFO("/Api/Meter","查询设备列表和当前状态"), + COLLECTOR_INFO("/Api/Collector","查询采集器列表和当前状态"), + ELE_RESET("/Api_v2/ele_security/reset","电表清零"), + WATER_RESET("/Api_v2/water_security/reset","水表清零"), + ELE_CONTROL("/Api_v2/ele_control","电表开关闸"), + WATER_CONTROL("/Api_v2/water_control","水表开关闸"), + ELE_READ("/Api_v2/ele_read","电表抄表"), + WATER_READ("/Api_v2/water_read","水表抄表"); + + private final String value;//自定义属性,枚举值,获取:如ApiEnum.GET_ENCRYPT_KEY_FOR_LOGIN.getValue(); + private final String remark;//自定义属性,枚举描述,获取:如ApiEnum.GET_ENCRYPT_KEY_FOR_LOGIN.getRemark(); +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/utils/HttpTool.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/utils/HttpTool.java new file mode 100644 index 0000000..b25e2c5 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/utils/HttpTool.java @@ -0,0 +1,165 @@ +package com.nu.modules.tq.utils; + +import cn.hutool.json.JSONObject; +import com.google.gson.Gson; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.HttpClient; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; + +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +public class HttpTool { + + public static String generateOperateId() { + return UUID.randomUUID().toString().replaceAll("-", ""); + } + + public static String getUrlParams(Map 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..48c8ff5 --- /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("waterReset: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("waterReset: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..831ef38 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/controller/WaterMeterController.java @@ -0,0 +1,74 @@ +package com.nu.modules.tq.water.controller; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +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.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import javax.servlet.http.HttpServletRequest; + +@Slf4j +@RestController +@RequestMapping("/iot/tq/waterMeter") +public class WaterMeterController extends JeecgController { + + @Autowired + private IWaterMeterService service; + + /** + * 分页列表查询 + * + * @param waterMeter + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @GetMapping(value = "/list") + public Result> queryPageList(WaterMeter waterMeter, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + Page page = new Page(pageNo, pageSize); + IPage pageList = service.findPage(page, waterMeter); + return Result.OK(pageList); + } + + /** + * 清零 + * @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..70a4995 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/entity/WaterMeter.java @@ -0,0 +1,81 @@ +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_water_meter") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="nu_iot_tq_water_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抄表 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; + + @TableField(exist = false) + private String nuId;//护理单元ID + @TableField(exist = false) + private String nuName;//护理单元 + @TableField(exist = false) + private String departId;//机构ID + @TableField(exist = false) + private String departName;//机构名称 +} \ No newline at end of file diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/job/WaterReadJob.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/job/WaterReadJob.java new file mode 100644 index 0000000..210e74c --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/job/WaterReadJob.java @@ -0,0 +1,40 @@ +package com.nu.modules.tq.water.job; + +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.util.DateUtils; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; + +/** + * 水表设备抄表信息同步 + */ +@Slf4j +public class WaterReadJob implements Job { + + @Autowired + IWaterMeterService service; + + /** + * 1小时一次 + * @param jobExecutionContext + * @throws JobExecutionException + */ + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + List waterList = service.findAllList(); + if(waterList!=null&&waterList.size()>0){ + for(int i=0;i< waterList.size();i++){ + WaterMeter waterMeter = waterList.get(i); + Result result = service.waterRead(waterMeter); + log.error("WaterReadJob:{}-{}", DateUtils.now(),result.getResult()); + } + } + } +} 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..ae33632 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/mapper/WaterMeterMapper.java @@ -0,0 +1,19 @@ +package com.nu.modules.tq.water.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.nu.modules.tq.water.entity.WaterMeter; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface WaterMeterMapper extends BaseMapper { + IPage findPage(Page page, @Param("params") WaterMeter waterMeter); + List findAllList(); + 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..394ba3f --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/mapper/xml/WaterMeterMapper.xml @@ -0,0 +1,131 @@ + + + + + + + + + + + + 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..0661cd3 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/service/IWaterMeterService.java @@ -0,0 +1,21 @@ +package com.nu.modules.tq.water.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.nu.modules.tq.water.entity.WaterMeter; +import org.jeecg.common.api.vo.Result; + +import java.util.List; + +public interface IWaterMeterService extends IService { + IPage findPage(Page page, WaterMeter waterMeter); + List findAllList(); + 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..427b2dc --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tq/water/service/impl/WaterMeterServiceImpl.java @@ -0,0 +1,441 @@ +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.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +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 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 IPage findPage(Page page, WaterMeter waterMeter){ + return baseMapper.findPage(page,waterMeter); + } + + @Override + public List findAllList(){ + return baseMapper.findAllList(); + } + + /** + * 清零 + */ + @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.waterControl(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;i0){ + tqApiLog.setResolveValue(waterVelues[0]); + }else{ + tqApiLog.setResolveValue(resolveValue); + } + tqApiLog.setResolveTime(resolveTime); + tqApiLog.setResolveStatus(status); + tqApiLog.setResolveRemark(dsp); + TqApiLog logEntity = logService.getApiLog(tqApiLog); + if(logEntity!=null){ + String cid = logEntity.getCid(); + String address = logEntity.getAddress(); + WaterMeter wm = new WaterMeter(); + wm.setCid(cid); + wm.setAddress(address); + if(waterVelues.length>0){ + wm.setWaterValue(waterVelues[0]); + }else{ + wm.setWaterValue(resolveValue); + } + wm.setReadTime(resolveTime); + baseMapper.updateValue(wm); + tqApiLog.setId(logEntity.getId()); + logService.update(tqApiLog); + } + } + }else{ + TqApiLog tqApiLog = new TqApiLog(); + tqApiLog.setOprId(oprId); + tqApiLog.setResolveTime(resolveTime); + tqApiLog.setResolveStatus(status); + TqApiLog logEntity = logService.getApiLog(tqApiLog); + if(logEntity!=null){ + tqApiLog.setId(logEntity.getId()); + logService.update(tqApiLog); + } + } + } + }catch (Exception e){ + return "FAIL"; + } + return "SUCCESS"; + } + +} diff --git a/nursing-unit-system/nu-system-start/src/main/resources/application-uat.yml b/nursing-unit-system/nu-system-start/src/main/resources/application-uat.yml index d22caf9..fe2372a 100644 --- a/nursing-unit-system/nu-system-start/src/main/resources/application-uat.yml +++ b/nursing-unit-system/nu-system-start/src/main/resources/application-uat.yml @@ -7,7 +7,7 @@ server: include-stacktrace: ALWAYS include-message: ALWAYS servlet: - context-path: /nursing-unit_001 + context-path: /nursingunit001 compression: enabled: true min-response-size: 1024