Merge branch 'master' of http://47.109.37.87:3000/by2025/SmartParks
# Conflicts: # ruoyi-modules/Sis/src/main/java/org/dromara/sis/config/RocketMQClusterConfig.java # ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/consumer/MeterRecordConsumer.java # ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/producer/ProducerService.java
This commit is contained in:
@@ -6,6 +6,7 @@ import lombok.RequiredArgsConstructor;
|
|||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import jakarta.validation.constraints.*;
|
import jakarta.validation.constraints.*;
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
|
import org.dromara.common.core.domain.TreeNode;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
||||||
@@ -103,4 +104,17 @@ public class TbMeterInfoController extends BaseController {
|
|||||||
@PathVariable("ids") Long[] ids) {
|
@PathVariable("ids") Long[] ids) {
|
||||||
return toAjax(tbMeterInfoService.deleteWithValidByIds(List.of(ids), true));
|
return toAjax(tbMeterInfoService.deleteWithValidByIds(List.of(ids), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成 社区/建组/单元/楼栋/(水电气表)树结构
|
||||||
|
*
|
||||||
|
* @param meterType 水电气类型
|
||||||
|
*
|
||||||
|
* @return (水电气表)树结构
|
||||||
|
*/
|
||||||
|
@GetMapping("/tree/{meterType}")
|
||||||
|
public R<List<TreeNode<Long>>> queryMeterInfoTree(@PathVariable("meterType") Long meterType) {
|
||||||
|
return R.ok(tbMeterInfoService.queryMeterInfoTree(meterType));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -103,4 +103,25 @@ public class TbMeterRecordController extends BaseController {
|
|||||||
@PathVariable("ids") Long[] ids) {
|
@PathVariable("ids") Long[] ids) {
|
||||||
return toAjax(tbMeterRecordService.deleteWithValidByIds(List.of(ids), true));
|
return toAjax(tbMeterRecordService.deleteWithValidByIds(List.of(ids), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取用电/水/气趋势分析数据
|
||||||
|
*
|
||||||
|
* @param floorId 楼层id
|
||||||
|
* @param meterId 仪表id
|
||||||
|
* @param meterType 仪表类型
|
||||||
|
* @param day 日期
|
||||||
|
* @param month 月份
|
||||||
|
* @param year 年份
|
||||||
|
*/
|
||||||
|
@GetMapping("/trend")
|
||||||
|
public R<Void> getEnergyTrend(@RequestParam(required = false) String floorId,
|
||||||
|
@RequestParam(required = false) String meterId,
|
||||||
|
@RequestParam Long meterType,
|
||||||
|
@RequestParam String day,
|
||||||
|
@RequestParam String month,
|
||||||
|
@RequestParam String year) {
|
||||||
|
tbMeterRecordService.getEnergyTrend(floorId, meterId, meterType, day, month, year);
|
||||||
|
return R.ok();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -32,8 +32,8 @@ public class TbMeterRecordBo extends BaseEntity {
|
|||||||
/**
|
/**
|
||||||
* 仪表编号
|
* 仪表编号
|
||||||
*/
|
*/
|
||||||
@NotBlank(message = "仪表编号不能为空", groups = { AddGroup.class, EditGroup.class })
|
@NotNull(message = "仪表编号不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||||
private String meterId;
|
private Long meterId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设备类型(1-电表,2-水表,3-气表)
|
* 设备类型(1-电表,2-水表,3-气表)
|
||||||
|
@@ -33,7 +33,7 @@ public class TbMeterRecord extends TenantEntity {
|
|||||||
/**
|
/**
|
||||||
* 仪表编号
|
* 仪表编号
|
||||||
*/
|
*/
|
||||||
private String meterId;
|
private Long meterId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设备类型(1-电表,2-水表,3-气表)
|
* 设备类型(1-电表,2-水表,3-气表)
|
||||||
|
@@ -0,0 +1,33 @@
|
|||||||
|
package org.dromara.property.domain.enums;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author lsm
|
||||||
|
* @apiNote MeterRecordTypeEnum
|
||||||
|
* @since 2025/8/27
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
public enum MeterRecordTypeEnum {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 手动上报
|
||||||
|
*/
|
||||||
|
MANUAL_RECORD(1L),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自动上报
|
||||||
|
*/
|
||||||
|
AUTO_RECORD(2L),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户上报
|
||||||
|
*/
|
||||||
|
USER_RECORD(3L);
|
||||||
|
|
||||||
|
private final Long code;
|
||||||
|
|
||||||
|
MeterRecordTypeEnum(Long code) {
|
||||||
|
this.code = code;
|
||||||
|
}
|
||||||
|
}
|
@@ -37,7 +37,7 @@ public class TbMeterRecordVo implements Serializable {
|
|||||||
* 仪表编号
|
* 仪表编号
|
||||||
*/
|
*/
|
||||||
@ExcelProperty(value = "仪表编号")
|
@ExcelProperty(value = "仪表编号")
|
||||||
private String meterId;
|
private Long meterId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设备类型(1-电表,2-水表,3-气表)
|
* 设备类型(1-电表,2-水表,3-气表)
|
||||||
|
@@ -1,10 +1,14 @@
|
|||||||
package org.dromara.property.mapper.smartDevicesMapper;
|
package org.dromara.property.mapper.smartDevicesMapper;
|
||||||
|
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
import org.dromara.property.domain.entity.smartDevices.TbMeterRecord;
|
import org.dromara.property.domain.entity.smartDevices.TbMeterRecord;
|
||||||
import org.dromara.property.domain.vo.smartDevicesVo.TbMeterRecordVo;
|
import org.dromara.property.domain.vo.smartDevicesVo.TbMeterRecordVo;
|
||||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 抄记录Mapper接口
|
* 抄记录Mapper接口
|
||||||
*
|
*
|
||||||
@@ -14,4 +18,9 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
|||||||
@Mapper
|
@Mapper
|
||||||
public interface TbMeterRecordMapper extends BaseMapperPlus<TbMeterRecord, TbMeterRecordVo> {
|
public interface TbMeterRecordMapper extends BaseMapperPlus<TbMeterRecord, TbMeterRecordVo> {
|
||||||
|
|
||||||
|
List<Map<String, Object>> getHourTrend(@Param("floorId") Long floorId, @Param("meterId") Long meterId, @Param("meterType") Long meterType, @Param("day") String day);
|
||||||
|
|
||||||
|
List<Map<String, Object>> getDayTrend(@Param("floorId") Long floorId, @Param("meterId") Long meterId, @Param("meterType") Long meterType, @Param("year") String year, @Param("month") String month);
|
||||||
|
|
||||||
|
List<Map<String, Object>> getMonthTrend(@Param("floorId") Long floorId, @Param("meterId") Long meterId, @Param("meterType") Long meterType, @Param("year") String year);
|
||||||
}
|
}
|
||||||
|
@@ -1,15 +1,18 @@
|
|||||||
package org.dromara.property.rocketmq.consumer;
|
package org.dromara.property.rocketmq.consumer;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import cn.hutool.json.JSONObject;
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.rocketmq.common.message.MessageExt;
|
import org.apache.rocketmq.common.message.MessageExt;
|
||||||
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
|
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
|
||||||
import org.apache.rocketmq.spring.core.RocketMQListener;
|
import org.apache.rocketmq.spring.core.RocketMQListener;
|
||||||
import org.dromara.property.rocketmq.RocketMqConstants;
|
import org.dromara.property.rocketmq.RocketMqConstants;
|
||||||
|
import org.dromara.property.rocketmq.domain.MeterResult;
|
||||||
|
import org.dromara.property.service.smartDevicesService.ITbMeterRecordService;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author lsm
|
* @author lsm
|
||||||
@@ -26,12 +29,14 @@ import java.util.Arrays;
|
|||||||
)
|
)
|
||||||
public class MeterRecordConsumer implements RocketMQListener<MessageExt> {
|
public class MeterRecordConsumer implements RocketMQListener<MessageExt> {
|
||||||
|
|
||||||
|
private final ITbMeterRecordService meterRecordService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onMessage(MessageExt ext) {
|
public void onMessage(MessageExt ext) {
|
||||||
log.info("消费仪表上报数据,数据长度={}", ext.getBody().length);
|
log.info("消费仪表上报数据,数据长度={}", ext.getBody().length);
|
||||||
try {
|
try {
|
||||||
String message = new String(ext.getBody());
|
List<MeterResult> meterResults = JSONUtil.toList(new String(ext.getBody()), MeterResult.class);
|
||||||
log.info("物业仪表上报数据,数据={}", message);
|
meterRecordService.autoWriteMeterRecord(meterResults);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("消费仪表上报数据处理失败,", e);
|
log.error("消费仪表上报数据处理失败,", e);
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,20 @@
|
|||||||
|
package org.dromara.property.rocketmq.domain;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author lsm
|
||||||
|
* @apiNote MeterResult
|
||||||
|
* @since 2025/8/27
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class MeterResult {
|
||||||
|
|
||||||
|
private String ip;
|
||||||
|
|
||||||
|
private String recordTime;
|
||||||
|
|
||||||
|
private List<Float> collectionValue;
|
||||||
|
}
|
@@ -1,8 +1,10 @@
|
|||||||
package org.dromara.property.service.impl.smartDevicesImpl;
|
package org.dromara.property.service.impl.smartDevicesImpl;
|
||||||
|
|
||||||
import cn.hutool.core.lang.Assert;
|
import cn.hutool.core.lang.Assert;
|
||||||
|
import org.dromara.common.core.domain.TreeNode;
|
||||||
import org.dromara.common.core.utils.MapstructUtils;
|
import org.dromara.common.core.utils.MapstructUtils;
|
||||||
import org.dromara.common.core.utils.StringUtils;
|
import org.dromara.common.core.utils.StringUtils;
|
||||||
|
import org.dromara.common.core.utils.TreeUtils;
|
||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
@@ -10,9 +12,15 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.dromara.common.satoken.utils.LoginHelper;
|
||||||
import org.dromara.property.domain.bo.TbFloorBo;
|
import org.dromara.property.domain.bo.TbFloorBo;
|
||||||
|
import org.dromara.property.domain.vo.TbBuildingVo;
|
||||||
|
import org.dromara.property.domain.vo.TbCommunityVo;
|
||||||
import org.dromara.property.domain.vo.TbFloorVo;
|
import org.dromara.property.domain.vo.TbFloorVo;
|
||||||
|
import org.dromara.property.service.ITbBuildingService;
|
||||||
|
import org.dromara.property.service.ITbCommunityService;
|
||||||
import org.dromara.property.service.ITbFloorService;
|
import org.dromara.property.service.ITbFloorService;
|
||||||
|
import org.dromara.system.api.model.LoginUser;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.dromara.property.domain.bo.smartDevicesBo.TbMeterInfoBo;
|
import org.dromara.property.domain.bo.smartDevicesBo.TbMeterInfoBo;
|
||||||
import org.dromara.property.domain.vo.smartDevicesVo.TbMeterInfoVo;
|
import org.dromara.property.domain.vo.smartDevicesVo.TbMeterInfoVo;
|
||||||
@@ -21,6 +29,7 @@ import org.dromara.property.mapper.smartDevicesMapper.TbMeterInfoMapper;
|
|||||||
import org.dromara.property.service.smartDevicesService.ITbMeterInfoService;
|
import org.dromara.property.service.smartDevicesService.ITbMeterInfoService;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@@ -39,6 +48,8 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService {
|
|||||||
|
|
||||||
private final TbMeterInfoMapper baseMapper;
|
private final TbMeterInfoMapper baseMapper;
|
||||||
private final ITbFloorService floorService;
|
private final ITbFloorService floorService;
|
||||||
|
private final ITbBuildingService buildingService;
|
||||||
|
private final ITbCommunityService communityService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询水电气
|
* 查询水电气
|
||||||
@@ -94,6 +105,7 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService {
|
|||||||
Map<String, Object> params = bo.getParams();
|
Map<String, Object> params = bo.getParams();
|
||||||
LambdaQueryWrapper<TbMeterInfo> lqw = Wrappers.lambdaQuery();
|
LambdaQueryWrapper<TbMeterInfo> lqw = Wrappers.lambdaQuery();
|
||||||
lqw.orderByAsc(TbMeterInfo::getId);
|
lqw.orderByAsc(TbMeterInfo::getId);
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getHostIp()), TbMeterInfo::getHostIp, bo.getHostIp());
|
||||||
lqw.like(StringUtils.isNotBlank(bo.getMeterName()), TbMeterInfo::getMeterName, bo.getMeterName());
|
lqw.like(StringUtils.isNotBlank(bo.getMeterName()), TbMeterInfo::getMeterName, bo.getMeterName());
|
||||||
lqw.eq(StringUtils.isNotBlank(bo.getMeterCode()), TbMeterInfo::getMeterCode, bo.getMeterCode());
|
lqw.eq(StringUtils.isNotBlank(bo.getMeterCode()), TbMeterInfo::getMeterCode, bo.getMeterCode());
|
||||||
lqw.eq(StringUtils.isNotBlank(bo.getFactoryNo()), TbMeterInfo::getFactoryNo, bo.getFactoryNo());
|
lqw.eq(StringUtils.isNotBlank(bo.getFactoryNo()), TbMeterInfo::getFactoryNo, bo.getFactoryNo());
|
||||||
@@ -160,4 +172,71 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService {
|
|||||||
}
|
}
|
||||||
return baseMapper.deleteByIds(ids) > 0;
|
return baseMapper.deleteByIds(ids) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询水电气树结构
|
||||||
|
*
|
||||||
|
* @param meterType 水电气类型
|
||||||
|
* @return 水电气树结构
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<TreeNode<Long>> queryMeterInfoTree(Long meterType) {
|
||||||
|
// 默认加载社区树
|
||||||
|
List<TreeNode<Long>> treeList = new ArrayList<>();
|
||||||
|
List<TbCommunityVo> tbCommunityVos = communityService.queryAll();
|
||||||
|
if (tbCommunityVos == null || tbCommunityVos.isEmpty()) {
|
||||||
|
return treeList;
|
||||||
|
}
|
||||||
|
List<TreeNode<Long>> l1 = tbCommunityVos.stream().map(item -> {
|
||||||
|
TreeNode<Long> node = new TreeNode<>();
|
||||||
|
node.setLevel(1);
|
||||||
|
node.setCode(item.getId());
|
||||||
|
node.setParentCode(0L);
|
||||||
|
node.setLabel(item.getCommunityName());
|
||||||
|
return node;
|
||||||
|
}).toList();
|
||||||
|
treeList.addAll(l1);
|
||||||
|
List<TbBuildingVo> tbBuildingVos = buildingService.queryAll();
|
||||||
|
if (tbBuildingVos == null || tbBuildingVos.isEmpty()) {
|
||||||
|
return treeList;
|
||||||
|
}
|
||||||
|
List<TreeNode<Long>> l2 = tbBuildingVos.stream().map(item -> {
|
||||||
|
TreeNode<Long> node = new TreeNode<>();
|
||||||
|
node.setLevel(2);
|
||||||
|
node.setCode(item.getId());
|
||||||
|
node.setParentCode(item.getCommunityId());
|
||||||
|
node.setLabel(item.getBuildingName());
|
||||||
|
return node;
|
||||||
|
}).toList();
|
||||||
|
treeList.addAll(l2);
|
||||||
|
List<TbFloorVo> tbFloorVos = floorService.queryAll();
|
||||||
|
if (tbFloorVos == null || tbFloorVos.isEmpty()) {
|
||||||
|
return treeList;
|
||||||
|
}
|
||||||
|
List<TreeNode<Long>> l3 = tbFloorVos.stream().map(item -> {
|
||||||
|
TreeNode<Long> node = new TreeNode<>();
|
||||||
|
node.setLevel(3);
|
||||||
|
node.setCode(item.getId());
|
||||||
|
node.setParentCode(item.getBuildingId());
|
||||||
|
node.setLabel(item.getFloorName());
|
||||||
|
return node;
|
||||||
|
}).toList();
|
||||||
|
treeList.addAll(l3);
|
||||||
|
|
||||||
|
TbMeterInfoBo bo = new TbMeterInfoBo();
|
||||||
|
bo.setMeterType(meterType);
|
||||||
|
List<TbMeterInfoVo> meterInfoVos = this.queryList(bo);
|
||||||
|
if (meterInfoVos != null && !meterInfoVos.isEmpty()) {
|
||||||
|
List<TreeNode<Long>> l4 = meterInfoVos.stream().map(item -> {
|
||||||
|
TreeNode<Long> node = new TreeNode<>();
|
||||||
|
node.setLevel(4);
|
||||||
|
node.setCode(item.getId());
|
||||||
|
node.setParentCode(item.getFloorId());
|
||||||
|
node.setLabel(item.getMeterName());
|
||||||
|
return node;
|
||||||
|
}).toList();
|
||||||
|
treeList.addAll(l4);
|
||||||
|
}
|
||||||
|
return TreeUtils.build(treeList, 0L);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,10 @@
|
|||||||
package org.dromara.property.service.impl.smartDevicesImpl;
|
package org.dromara.property.service.impl.smartDevicesImpl;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.lang.Assert;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import org.dromara.common.core.utils.MapstructUtils;
|
import org.dromara.common.core.utils.MapstructUtils;
|
||||||
import org.dromara.common.core.utils.StringUtils;
|
|
||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
@@ -9,22 +12,29 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.dromara.property.domain.bo.smartDevicesBo.TbMeterInfoBo;
|
||||||
|
import org.dromara.property.domain.enums.MeterRecordTypeEnum;
|
||||||
|
import org.dromara.property.domain.vo.smartDevicesVo.TbMeterInfoVo;
|
||||||
|
import org.dromara.property.rocketmq.domain.MeterResult;
|
||||||
|
import org.dromara.property.service.smartDevicesService.ITbMeterInfoService;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.dromara.property.domain.bo.smartDevicesBo.TbMeterRecordBo;
|
import org.dromara.property.domain.bo.smartDevicesBo.TbMeterRecordBo;
|
||||||
import org.dromara.property.domain.vo.smartDevicesVo.TbMeterRecordVo;
|
import org.dromara.property.domain.vo.smartDevicesVo.TbMeterRecordVo;
|
||||||
import org.dromara.property.domain.entity.smartDevices.TbMeterRecord;
|
import org.dromara.property.domain.entity.smartDevices.TbMeterRecord;
|
||||||
import org.dromara.property.mapper.smartDevicesMapper.TbMeterRecordMapper;
|
import org.dromara.property.mapper.smartDevicesMapper.TbMeterRecordMapper;
|
||||||
import org.dromara.property.service.smartDevicesService.ITbMeterRecordService;
|
import org.dromara.property.service.smartDevicesService.ITbMeterRecordService;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.List;
|
import java.math.BigDecimal;
|
||||||
import java.util.Map;
|
import java.util.*;
|
||||||
import java.util.Collection;
|
import java.util.function.Function;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 抄记录Service业务层处理
|
* 抄记录Service业务层处理
|
||||||
*
|
*
|
||||||
* @author lsm
|
* @author lsm
|
||||||
* @date 2025-07-19
|
* @since 2025-07-19
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@@ -32,6 +42,7 @@ import java.util.Collection;
|
|||||||
public class TbMeterRecordServiceImpl implements ITbMeterRecordService {
|
public class TbMeterRecordServiceImpl implements ITbMeterRecordService {
|
||||||
|
|
||||||
private final TbMeterRecordMapper baseMapper;
|
private final TbMeterRecordMapper baseMapper;
|
||||||
|
private final ITbMeterInfoService tbMeterInfoService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询抄记录
|
* 查询抄记录
|
||||||
@@ -40,7 +51,7 @@ public class TbMeterRecordServiceImpl implements ITbMeterRecordService {
|
|||||||
* @return 抄记录
|
* @return 抄记录
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public TbMeterRecordVo queryById(Long id){
|
public TbMeterRecordVo queryById(Long id) {
|
||||||
return baseMapper.selectVoById(id);
|
return baseMapper.selectVoById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,7 +85,7 @@ public class TbMeterRecordServiceImpl implements ITbMeterRecordService {
|
|||||||
Map<String, Object> params = bo.getParams();
|
Map<String, Object> params = bo.getParams();
|
||||||
LambdaQueryWrapper<TbMeterRecord> lqw = Wrappers.lambdaQuery();
|
LambdaQueryWrapper<TbMeterRecord> lqw = Wrappers.lambdaQuery();
|
||||||
lqw.orderByAsc(TbMeterRecord::getId);
|
lqw.orderByAsc(TbMeterRecord::getId);
|
||||||
lqw.eq(StringUtils.isNotBlank(bo.getMeterId()), TbMeterRecord::getMeterId, bo.getMeterId());
|
lqw.eq(bo.getMeterId() != null, TbMeterRecord::getMeterId, bo.getMeterId());
|
||||||
lqw.eq(bo.getMeterType() != null, TbMeterRecord::getMeterType, bo.getMeterType());
|
lqw.eq(bo.getMeterType() != null, TbMeterRecord::getMeterType, bo.getMeterType());
|
||||||
lqw.eq(bo.getReaderId() != null, TbMeterRecord::getReaderId, bo.getReaderId());
|
lqw.eq(bo.getReaderId() != null, TbMeterRecord::getReaderId, bo.getReaderId());
|
||||||
lqw.eq(bo.getReadingTime() != null, TbMeterRecord::getReadingTime, bo.getReadingTime());
|
lqw.eq(bo.getReadingTime() != null, TbMeterRecord::getReadingTime, bo.getReadingTime());
|
||||||
@@ -118,7 +129,7 @@ public class TbMeterRecordServiceImpl implements ITbMeterRecordService {
|
|||||||
/**
|
/**
|
||||||
* 保存前的数据校验
|
* 保存前的数据校验
|
||||||
*/
|
*/
|
||||||
private void validEntityBeforeSave(TbMeterRecord entity){
|
private void validEntityBeforeSave(TbMeterRecord entity) {
|
||||||
//TODO 做一些数据校验,如唯一约束
|
//TODO 做一些数据校验,如唯一约束
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,9 +142,108 @@ public class TbMeterRecordServiceImpl implements ITbMeterRecordService {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||||
if(isValid){
|
if (isValid) {
|
||||||
//TODO 做一些业务上的校验,判断是否需要校验
|
//TODO 做一些业务上的校验,判断是否需要校验
|
||||||
}
|
}
|
||||||
return baseMapper.deleteByIds(ids) > 0;
|
return baseMapper.deleteByIds(ids) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自动写入抄表记录
|
||||||
|
*
|
||||||
|
* @param results 推送消息
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void autoWriteMeterRecord(List<MeterResult> results) {
|
||||||
|
log.info("自动写入抄表记录, msg:{}", results);
|
||||||
|
|
||||||
|
for (MeterResult result : results) {
|
||||||
|
// 取出同一个采集器ip下,所有设备
|
||||||
|
TbMeterInfoBo infoBo = new TbMeterInfoBo();
|
||||||
|
infoBo.setHostIp(result.getIp());
|
||||||
|
List<TbMeterInfoVo> infoList = tbMeterInfoService.queryList(infoBo);
|
||||||
|
|
||||||
|
if (CollUtil.isEmpty(infoList)) {
|
||||||
|
log.info("当前采集器ip下无设备, ip:{}", result.getIp());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取设备id
|
||||||
|
Collection<Long> meterIds = infoList.stream().map(TbMeterInfoVo::getId).toList();
|
||||||
|
|
||||||
|
// 取出上次抄表记录
|
||||||
|
LambdaQueryWrapper<TbMeterRecord> lqw = new LambdaQueryWrapper<>();
|
||||||
|
lqw.in(TbMeterRecord::getMeterId, meterIds)
|
||||||
|
.orderByDesc(TbMeterRecord::getReadingTime)
|
||||||
|
.last("limit " + meterIds.size());
|
||||||
|
List<TbMeterRecord> recordOld = baseMapper.selectList(lqw);
|
||||||
|
|
||||||
|
List<TbMeterRecord> recordNew = new ArrayList<>(infoList.size());
|
||||||
|
boolean hasOldRecords = CollUtil.isNotEmpty(recordOld);
|
||||||
|
|
||||||
|
log.info("当前采集器ip下{}抄表记录, ip:{}", hasOldRecords ? "有" : "无", result.getIp());
|
||||||
|
// 创建meterId到旧记录的映射,提高查找效率
|
||||||
|
Map<Long, TbMeterRecord> oldRecordMap = hasOldRecords ?
|
||||||
|
recordOld.stream().collect(Collectors.toMap(TbMeterRecord::getMeterId, Function.identity())) :
|
||||||
|
Collections.emptyMap();
|
||||||
|
|
||||||
|
for (TbMeterInfoVo info : infoList) {
|
||||||
|
TbMeterRecord record = new TbMeterRecord();
|
||||||
|
record.setMeterId(info.getId());
|
||||||
|
record.setMeterType(info.getMeterType());
|
||||||
|
record.setReaderId(1L);
|
||||||
|
record.setReadingTime(DateUtil.parse(result.getRecordTime(), "yyyy-MM-dd HH:mm:ss"));
|
||||||
|
|
||||||
|
// 获取当前读数
|
||||||
|
BigDecimal currentReading = BigDecimal.valueOf(
|
||||||
|
result.getCollectionValue().get(Integer.parseInt(info.getMeterCode()))
|
||||||
|
);
|
||||||
|
record.setCurrentReading(currentReading);
|
||||||
|
|
||||||
|
// 设置上次读数
|
||||||
|
if (hasOldRecords) {
|
||||||
|
TbMeterRecord oldRecord = oldRecordMap.get(info.getId());
|
||||||
|
if (oldRecord != null) {
|
||||||
|
record.setPreviousReading(oldRecord.getCurrentReading());
|
||||||
|
} else {
|
||||||
|
// 如果没有找到对应的旧记录,使用默认值
|
||||||
|
record.setPreviousReading(BigDecimal.ZERO);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
record.setPreviousReading(BigDecimal.ZERO);
|
||||||
|
}
|
||||||
|
|
||||||
|
record.setReadingMethod(MeterRecordTypeEnum.AUTO_RECORD.getCode());
|
||||||
|
recordNew.add(record);
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean flag = baseMapper.insertBatch(recordNew);
|
||||||
|
Assert.isTrue(flag, "批量写入抄表记录失败!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取用电/水/气趋势分析数据
|
||||||
|
*
|
||||||
|
* @param floorId 楼层id
|
||||||
|
* @param meterId 仪表id
|
||||||
|
* @param meterType 仪表类型
|
||||||
|
* @param day 日期
|
||||||
|
* @param month 月份
|
||||||
|
* @param year 年份
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void getEnergyTrend(String floorId, String meterId, Long meterType, String day, String month, String year) {
|
||||||
|
|
||||||
|
List<Map<String, Object>> hourList = baseMapper.getHourTrend(StrUtil.isBlank(floorId) ? null : Long.parseLong(floorId), StrUtil.isBlank(meterId) ? null : Long.parseLong(meterId), meterType, day);
|
||||||
|
log.info("小时数据:{}", hourList);
|
||||||
|
|
||||||
|
String[] monthArr = month.split("-");
|
||||||
|
List<Map<String, Object>> dayList = baseMapper.getDayTrend(StrUtil.isBlank(floorId) ? null : Long.parseLong(floorId), StrUtil.isBlank(meterId) ? null : Long.parseLong(meterId), meterType, monthArr[0], monthArr[1]);
|
||||||
|
log.info("天数据:{}", dayList);
|
||||||
|
|
||||||
|
List<Map<String, Object>> monthList = baseMapper.getMonthTrend(StrUtil.isBlank(floorId) ? null : Long.parseLong(floorId), StrUtil.isBlank(meterId) ? null : Long.parseLong(meterId), meterType, year);
|
||||||
|
log.info("月数据:{}", monthList);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
package org.dromara.property.service.smartDevicesService;
|
package org.dromara.property.service.smartDevicesService;
|
||||||
|
|
||||||
|
import org.dromara.common.core.domain.TreeNode;
|
||||||
import org.dromara.property.domain.vo.smartDevicesVo.TbMeterInfoVo;
|
import org.dromara.property.domain.vo.smartDevicesVo.TbMeterInfoVo;
|
||||||
import org.dromara.property.domain.bo.smartDevicesBo.TbMeterInfoBo;
|
import org.dromara.property.domain.bo.smartDevicesBo.TbMeterInfoBo;
|
||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
@@ -65,4 +66,13 @@ public interface ITbMeterInfoService {
|
|||||||
* @return 是否删除成功
|
* @return 是否删除成功
|
||||||
*/
|
*/
|
||||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询水电气树结构
|
||||||
|
*
|
||||||
|
* @param meterType 水电气类型
|
||||||
|
*
|
||||||
|
* @return 水电气树结构
|
||||||
|
*/
|
||||||
|
List<TreeNode<Long>> queryMeterInfoTree(Long meterType);
|
||||||
}
|
}
|
||||||
|
@@ -4,6 +4,7 @@ import org.dromara.property.domain.vo.smartDevicesVo.TbMeterRecordVo;
|
|||||||
import org.dromara.property.domain.bo.smartDevicesBo.TbMeterRecordBo;
|
import org.dromara.property.domain.bo.smartDevicesBo.TbMeterRecordBo;
|
||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||||
|
import org.dromara.property.rocketmq.domain.MeterResult;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -65,4 +66,23 @@ public interface ITbMeterRecordService {
|
|||||||
* @return 是否删除成功
|
* @return 是否删除成功
|
||||||
*/
|
*/
|
||||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自动写入抄表记录
|
||||||
|
*
|
||||||
|
* @param results 推送消息
|
||||||
|
*/
|
||||||
|
void autoWriteMeterRecord(List<MeterResult> results);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取用电/水/气趋势分析数据
|
||||||
|
*
|
||||||
|
* @param floorId 楼层id
|
||||||
|
* @param meterId 仪表id
|
||||||
|
* @param meterType 仪表类型
|
||||||
|
* @param day 日期
|
||||||
|
* @param month 月份
|
||||||
|
* @param year 年份
|
||||||
|
*/
|
||||||
|
void getEnergyTrend(String floorId, String meterId, Long meterType, String day, String month, String year);
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,60 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper
|
||||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="org.dromara.property.mapper.smartDevicesMapper.TbMeterRecordMapper">
|
||||||
|
<select id="getHourTrend" resultType="map">
|
||||||
|
SELECT CONCAT_WS(':', HOUR(reading_time), '00') as hour, SUM(consumption) as total_consumption
|
||||||
|
FROM tb_meter_record a
|
||||||
|
LEFT JOIN tb_meter_info b ON a.meter_id = b.id
|
||||||
|
WHERE DATE(reading_time) = #{day}
|
||||||
|
AND b.meter_type = #{meterType}
|
||||||
|
<if test="floorId != '' and floorId != null">
|
||||||
|
AND b.floor_id = #{floorId}
|
||||||
|
</if>
|
||||||
|
<if test="meterId != '' and meterId != null">
|
||||||
|
AND a.meter_id = #{meterId}
|
||||||
|
</if>
|
||||||
|
GROUP BY CONCAT_WS(':', HOUR(reading_time), '00')
|
||||||
|
ORDER BY hour
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
<select id="getDayTrend" resultType="map">
|
||||||
|
SELECT
|
||||||
|
DAY(reading_time) AS `day`,
|
||||||
|
SUM(consumption) AS total_consumption
|
||||||
|
FROM tb_meter_record a
|
||||||
|
LEFT JOIN tb_meter_info b ON a.meter_id = b.id
|
||||||
|
WHERE YEAR(reading_time) = #{year}
|
||||||
|
AND MONTH(reading_time) = #{month}
|
||||||
|
AND b.meter_type = #{meterType}
|
||||||
|
<if test="floorId != '' and floorId != null">
|
||||||
|
AND b.floor_id = #{floorId}
|
||||||
|
</if>
|
||||||
|
<if test="meterId != '' and meterId != null">
|
||||||
|
AND a.meter_id = #{meterId}
|
||||||
|
</if>
|
||||||
|
GROUP BY DAY(reading_time)
|
||||||
|
ORDER BY `day`;
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="getMonthTrend" resultType="map">
|
||||||
|
SELECT
|
||||||
|
MONTH(reading_time) AS `month`,
|
||||||
|
SUM(consumption) AS total_consumption
|
||||||
|
FROM tb_meter_record a
|
||||||
|
LEFT JOIN tb_meter_info b ON a.meter_id = b.id
|
||||||
|
WHERE YEAR(reading_time) = #{year}
|
||||||
|
AND b.meter_type = #{meterType}
|
||||||
|
<if test="floorId != '' and floorId != null">
|
||||||
|
AND b.floor_id = #{floorId}
|
||||||
|
</if>
|
||||||
|
<if test="meterId != '' and meterId != null">
|
||||||
|
AND a.meter_id = #{meterId}
|
||||||
|
</if>
|
||||||
|
GROUP BY MONTH(reading_time)
|
||||||
|
ORDER BY `month`;
|
||||||
|
</select>
|
||||||
|
|
||||||
|
</mapper>
|
@@ -1,75 +0,0 @@
|
|||||||
//package org.dromara.sis.config;
|
|
||||||
//
|
|
||||||
//import org.apache.rocketmq.client.producer.DefaultMQProducer;
|
|
||||||
//import org.apache.rocketmq.spring.core.RocketMQTemplate;
|
|
||||||
//import org.springframework.beans.factory.annotation.Qualifier;
|
|
||||||
//import org.springframework.beans.factory.annotation.Value;
|
|
||||||
//import org.springframework.context.annotation.Bean;
|
|
||||||
//import org.springframework.context.annotation.Configuration;
|
|
||||||
//
|
|
||||||
///**
|
|
||||||
// * @author lsm
|
|
||||||
// * @apiNote RocketMQClusterConfig
|
|
||||||
// * @since 2025/8/26
|
|
||||||
// */
|
|
||||||
//@Configuration
|
|
||||||
//public class RocketMQClusterConfig {
|
|
||||||
//
|
|
||||||
// // 从配置文件中读取 cluster 的配置
|
|
||||||
// @Value("${rocketmq.cluster1.name-server}")
|
|
||||||
// private String nameServer1;
|
|
||||||
//
|
|
||||||
// @Value("${rocketmq.cluster1.producer.group}")
|
|
||||||
// private String producerGroup1;
|
|
||||||
//
|
|
||||||
// // 为第一个集群创建生产者实例
|
|
||||||
// @Bean({"clusterProducerOne"})
|
|
||||||
// public DefaultMQProducer clusterProducerOne() throws Exception {
|
|
||||||
// DefaultMQProducer producer = new DefaultMQProducer(producerGroup1);
|
|
||||||
// producer.setNamesrvAddr(nameServer1);
|
|
||||||
// // 设置发送超时时间
|
|
||||||
// producer.setSendMsgTimeout(5000);
|
|
||||||
// // 设置重试次数
|
|
||||||
// producer.setRetryTimesWhenSendFailed(2);
|
|
||||||
// producer.setRetryTimesWhenSendAsyncFailed(2);
|
|
||||||
// return producer;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// // 使用上面的生产者实例创建 RocketMQTemplate
|
|
||||||
// @Bean("rocketMQTemplateClusterOne")
|
|
||||||
// public RocketMQTemplate rocketMQTemplateClusterOne(@Qualifier("clusterProducerOne") DefaultMQProducer producer) {
|
|
||||||
// RocketMQTemplate template = new RocketMQTemplate();
|
|
||||||
// template.setProducer(producer);
|
|
||||||
// return template;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// // 从配置文件中读取 cluster 的配置
|
|
||||||
//// @Value("${rocketmq.cluster2.name-server}")
|
|
||||||
//// private String nameServer2;
|
|
||||||
////
|
|
||||||
//// @Value("${rocketmq.cluster2.producer.group}")
|
|
||||||
//// private String producerGroup2;
|
|
||||||
////
|
|
||||||
//// // 为第二个集群创建生产者实例
|
|
||||||
//// @Bean({"clusterProducerTwo"})
|
|
||||||
//// public DefaultMQProducer clusterProducerTwo() throws Exception {
|
|
||||||
//// DefaultMQProducer producer = new DefaultMQProducer(producerGroup2);
|
|
||||||
//// producer.setNamesrvAddr(nameServer2);
|
|
||||||
//// // 设置发送超时时间
|
|
||||||
//// producer.setSendMsgTimeout(5000);
|
|
||||||
//// // 设置重试次数
|
|
||||||
//// producer.setRetryTimesWhenSendFailed(2);
|
|
||||||
//// producer.setRetryTimesWhenSendAsyncFailed(2);
|
|
||||||
//// return producer;
|
|
||||||
//// }
|
|
||||||
////
|
|
||||||
//// // 使用上面的生产者实例创建 RocketMQTemplate
|
|
||||||
//// @Bean("rocketMQTemplateClusterTwo")
|
|
||||||
//// public RocketMQTemplate rocketMQTemplateClusterTwo(@Qualifier("clusterProducerTwo") DefaultMQProducer producer) {
|
|
||||||
//// RocketMQTemplate template = new RocketMQTemplate();
|
|
||||||
//// template.setProducer(producer);
|
|
||||||
//// return template;
|
|
||||||
//// }
|
|
||||||
//
|
|
||||||
//}
|
|
@@ -42,44 +42,44 @@ public class SisVisitorController {
|
|||||||
@GetMapping("/list")
|
@GetMapping("/list")
|
||||||
public TableDataInfo<AccessRecordFindRes> list(QueryDto dto) {
|
public TableDataInfo<AccessRecordFindRes> list(QueryDto dto) {
|
||||||
|
|
||||||
// TableDataInfo tableDataInfo = new TableDataInfo();
|
TableDataInfo tableDataInfo = new TableDataInfo();
|
||||||
// List<AccessRecordFindRes> accessRecordFindResList = new ArrayList<>();
|
List<AccessRecordFindRes> accessRecordFindResList = new ArrayList<>();
|
||||||
// AccessRecordFindRes accessRecordFindRes = new AccessRecordFindRes();
|
AccessRecordFindRes accessRecordFindRes = new AccessRecordFindRes();
|
||||||
// accessRecordFindRes.setDeviceName("4#岗亭09");
|
accessRecordFindRes.setDeviceName("4#岗亭09");
|
||||||
// accessRecordFindRes.setDoorName("4#岗亭09");
|
accessRecordFindRes.setDoorName("4#岗亭09");
|
||||||
// accessRecordFindRes.setDeviceType(1102);
|
accessRecordFindRes.setDeviceType(1102);
|
||||||
// accessRecordFindRes.setReaderName("");
|
accessRecordFindRes.setReaderName("");
|
||||||
// accessRecordFindRes.setGatewayType(1);
|
accessRecordFindRes.setGatewayType(1);
|
||||||
// accessRecordFindRes.setCustomerName("德隆吴鹏");
|
accessRecordFindRes.setCustomerName("德隆吴鹏");
|
||||||
// accessRecordFindRes.setOrganFullPath("主楼11楼");
|
accessRecordFindRes.setOrganFullPath("主楼11楼");
|
||||||
// accessRecordFindRes.setPictureUrl("https://bpic.588ku.com/back_list_pic/23/04/21/ef5e2a3dd5cfc336fdcf2fd000474f0f.jpg");
|
accessRecordFindRes.setPictureUrl("https://bpic.588ku.com/back_list_pic/23/04/21/ef5e2a3dd5cfc336fdcf2fd000474f0f.jpg");
|
||||||
// accessRecordFindRes.setCardType(34);
|
accessRecordFindRes.setCardType(34);
|
||||||
// accessRecordFindRes.setRecordType(2);
|
accessRecordFindRes.setRecordType(2);
|
||||||
// accessRecordFindRes.setActionTime(new Date());
|
accessRecordFindRes.setActionTime(new Date());
|
||||||
// accessRecordFindResList.add(accessRecordFindRes);
|
accessRecordFindResList.add(accessRecordFindRes);
|
||||||
// tableDataInfo.setRows(accessRecordFindResList);
|
tableDataInfo.setRows(accessRecordFindResList);
|
||||||
// tableDataInfo.setTotal(1);
|
tableDataInfo.setTotal(1);
|
||||||
// tableDataInfo.setCode(200);
|
tableDataInfo.setCode(200);
|
||||||
// return tableDataInfo;
|
return tableDataInfo;
|
||||||
|
//
|
||||||
dto.setPageIndex(1);
|
// dto.setPageIndex(1);
|
||||||
dto.setMaxResultCount(20);
|
// dto.setMaxResultCount(20);
|
||||||
|
//
|
||||||
// 10秒内
|
// // 10秒内
|
||||||
String starTime = DateUtil.format(DateUtil.offset(new Date(), DateField.SECOND, -10), "yyyy-MM-dd HH:mm:ss");
|
// String starTime = DateUtil.format(DateUtil.offset(new Date(), DateField.SECOND, -10), "yyyy-MM-dd HH:mm:ss");
|
||||||
String endTime = DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss");
|
// String endTime = DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss");
|
||||||
|
//
|
||||||
AccessRecordFindReq lift = new AccessRecordFindReq();
|
// AccessRecordFindReq lift = new AccessRecordFindReq();
|
||||||
lift.setStartTime(starTime);
|
// lift.setStartTime(starTime);
|
||||||
lift.setEndTime(endTime);
|
// lift.setEndTime(endTime);
|
||||||
lift.setRecordType(2);
|
// lift.setRecordType(2);
|
||||||
// 9号电梯
|
// // 9号电梯
|
||||||
lift.setDeviceId(550757939925061L);
|
// lift.setDeviceId(550757939925061L);
|
||||||
dto.setQueryDto(lift);
|
// dto.setQueryDto(lift);
|
||||||
// TableDataInfo<AccessRecordFindRes> nineLiftList = e8PlatformApi.getPageAccessRecordList(dto);
|
//// TableDataInfo<AccessRecordFindRes> nineLiftList = e8PlatformApi.getPageAccessRecordList(dto);
|
||||||
TableDataInfo<AccessRecordFindRes> pageAccessRecordList = new TableDataInfo();
|
// TableDataInfo<AccessRecordFindRes> pageAccessRecordList = new TableDataInfo();
|
||||||
|
//
|
||||||
return e8PlatformApi.getPageAccessRecordList(dto);
|
// return e8PlatformApi.getPageAccessRecordList(dto);
|
||||||
//如果pageAccessRecordList报错就捕获并封装
|
//如果pageAccessRecordList报错就捕获并封装
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,44 +0,0 @@
|
|||||||
//package org.dromara.sis.rocketmq.consumer;
|
|
||||||
//
|
|
||||||
//import lombok.RequiredArgsConstructor;
|
|
||||||
//import lombok.extern.slf4j.Slf4j;
|
|
||||||
//import org.apache.rocketmq.common.message.MessageExt;
|
|
||||||
//import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
|
|
||||||
//import org.apache.rocketmq.spring.core.RocketMQListener;
|
|
||||||
//import org.dromara.sis.rocketmq.RocketMqConstants;
|
|
||||||
//import org.dromara.sis.rocketmq.producer.ProducerService;
|
|
||||||
//import org.springframework.stereotype.Component;
|
|
||||||
//
|
|
||||||
///**
|
|
||||||
// * @author lsm
|
|
||||||
// * @apiNote MeterRecordConsumer
|
|
||||||
// * @since 2025/8/25
|
|
||||||
// */
|
|
||||||
//@Slf4j
|
|
||||||
//@Component
|
|
||||||
//@RequiredArgsConstructor
|
|
||||||
//@RocketMQMessageListener(
|
|
||||||
// topic = RocketMqConstants.TOPIC,
|
|
||||||
// consumerGroup = RocketMqConstants.METER_GROUP,
|
|
||||||
// selectorExpression = RocketMqConstants.METER_RECORD,
|
|
||||||
// nameServer = "${rocketmq.cluster1.name-server}"
|
|
||||||
//)
|
|
||||||
//public class MeterRecordConsumer implements RocketMQListener<MessageExt> {
|
|
||||||
//
|
|
||||||
// private final ProducerService producerService;
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void onMessage(MessageExt ext) {
|
|
||||||
// try {
|
|
||||||
// if (ext.getBody() == null) {
|
|
||||||
// log.info("仪表上报消息数据,不转发!");
|
|
||||||
// } else {
|
|
||||||
// producerService.defaultSend(RocketMqConstants.TOPIC, RocketMqConstants.METER_RECORD, new String(ext.getBody()));
|
|
||||||
// log.info("转发仪表上报数据处理成功");
|
|
||||||
// }
|
|
||||||
// } catch (Exception e) {
|
|
||||||
// log.error("转发仪表上报数据处理失败,", e);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
//}
|
|
@@ -1,65 +0,0 @@
|
|||||||
//package org.dromara.sis.rocketmq.producer;
|
|
||||||
//
|
|
||||||
//import lombok.extern.slf4j.Slf4j;
|
|
||||||
//import org.apache.rocketmq.common.message.Message;
|
|
||||||
//import org.apache.rocketmq.spring.core.RocketMQTemplate;
|
|
||||||
//import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
//import org.springframework.beans.factory.annotation.Qualifier;
|
|
||||||
//import org.springframework.stereotype.Component;
|
|
||||||
//
|
|
||||||
///**
|
|
||||||
// * @author lsm
|
|
||||||
// * @apiNote ProducerService
|
|
||||||
// * @since 2025/8/26
|
|
||||||
// */
|
|
||||||
//@Slf4j
|
|
||||||
//@Component
|
|
||||||
//public class ProducerService {
|
|
||||||
//
|
|
||||||
// @Autowired
|
|
||||||
// @Qualifier("rocketMQTemplateClusterOne")
|
|
||||||
// private RocketMQTemplate rocketMQTemplateClusterOne;
|
|
||||||
//
|
|
||||||
//// @Autowired
|
|
||||||
//// @Qualifier("rocketMQTemplateClusterTwo")
|
|
||||||
//// private RocketMQTemplate rocketMQTemplateClusterTwo;
|
|
||||||
//
|
|
||||||
// /**
|
|
||||||
// * 向mq写入消息
|
|
||||||
// *
|
|
||||||
// * @param topic 消息topic
|
|
||||||
// * @param tag 消息tag
|
|
||||||
// * @param msg 消息
|
|
||||||
// */
|
|
||||||
// public void defaultSend(String topic, String tag, String msg) {
|
|
||||||
// try {
|
|
||||||
// String destination = topic + ":" + tag;
|
|
||||||
// // 使用 RocketMQTemplate 的同步发送方法
|
|
||||||
// rocketMQTemplateClusterOne.syncSend(destination, msg);
|
|
||||||
//
|
|
||||||
// log.info("发送RocketMQOne消息成功, nameServer:{}", rocketMQTemplateClusterOne.getProducer().getNamesrvAddr());
|
|
||||||
// } catch (Exception e) {
|
|
||||||
// log.error("发送RocketMQOne消息失败", e);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// /**
|
|
||||||
// * 向mq写入消息
|
|
||||||
// *
|
|
||||||
// * @param topic 消息topic
|
|
||||||
// * @param tag 消息tag
|
|
||||||
// * @param msg 消息
|
|
||||||
// */
|
|
||||||
//// public void clusterSend(String topic, String tag, String msg) {
|
|
||||||
//// try {
|
|
||||||
//// String destination = topic + ":" + tag;
|
|
||||||
//// // 使用 RocketMQTemplate 的同步发送方法
|
|
||||||
//// rocketMQTemplateClusterTwo.syncSend(destination, msg);
|
|
||||||
////
|
|
||||||
//// log.info("发送RocketMQTwo消息成功, nameServer:{}", rocketMQTemplateClusterTwo.getProducer().getNamesrvAddr());
|
|
||||||
//// } catch (Exception e) {
|
|
||||||
//// log.error("发送RocketMQTwo消息失败", e);
|
|
||||||
//// }
|
|
||||||
//// }
|
|
||||||
//}
|
|
Reference in New Issue
Block a user