feat(alarm): 优化报警查询接口并完善显示字段关联填充

- 增加SensorName和DisposeUserName字段到AlarmDisposeCO、AlarmRecordCO及其DO对象
- 重构AlarmDisposeQueryExe、AlarmRecordQueryExe及APP端对应查询执行器逻辑,改用分页查询方法
- 在查询结果中填充传感器名称和处置人姓名,提升数据展示完整性
- 扩展AlarmRecordRepository和Mapper,支持多种分页查询接口
- 传感器与用户数据通过批量ID查询并映射,减少单条查询压力
- 新增DeviceRegion相关字段(外部消防区域名称、负责人姓名、绑定传感器等)及分页查询能力
- 更新DeviceRegionGateway及实现类,支持负责人姓名更新
- 规范Mybatis配置文件,增加更多Mapper文件扫描路径
main
wangyan 2026-04-03 18:24:11 +08:00
parent 7d40840231
commit 79bcee2aa5
32 changed files with 558 additions and 226 deletions

View File

@ -1,5 +1,5 @@
mybatis-plus: mybatis-plus:
mapper-locations: classpath*:mapper/*.xml,classpath*:mapper/**/*Mapper.xml mapper-locations: classpath*:mapper/*.xml,classpath*:mapper/**/*Mapper.xml,classpath*:mybatis/*.xml,classpath*:mybatis/**/*Mapper.xml
type-handlers-package: com.jjb.saas.framework.datascope.handler type-handlers-package: com.jjb.saas.framework.datascope.handler
global-config: global-config:
banner: false banner: false

View File

@ -30,7 +30,12 @@ public class ManagerExe {
throw new BizException("区域配置不存在"); throw new BizException("区域配置不存在");
} }
Boolean res = deviceRegionGateway.updateManager(cmd.getId(), cmd.getManagerId(), cmd.getDepartmentId()); Boolean res = deviceRegionGateway.updateManager(
cmd.getId(),
cmd.getManagerId(),
cmd.getManagerName(),
cmd.getDepartmentId()
);
if (!res) { if (!res) {
throw new BizException("负责人配置失败"); throw new BizException("负责人配置失败");
} }

View File

@ -7,13 +7,23 @@ import com.alibaba.cola.dto.SingleResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zcloud.dto.AlarmDisposePageQry; import com.zcloud.dto.AlarmDisposePageQry;
import com.zcloud.dto.clientobject.AlarmDisposeCO; import com.zcloud.dto.clientobject.AlarmDisposeCO;
import com.zcloud.gbscommon.utils.PageQueryHelper;
import com.zcloud.persistence.dataobject.AlarmRecordDO; import com.zcloud.persistence.dataobject.AlarmRecordDO;
import com.zcloud.persistence.dataobject.SensorDeviceDO;
import com.zcloud.persistence.dataobject.UserDO;
import com.zcloud.persistence.repository.AlarmRecordRepository; import com.zcloud.persistence.repository.AlarmRecordRepository;
import com.zcloud.persistence.repository.SensorDeviceRepository;
import com.zcloud.persistence.repository.UserRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/** /**
* AlarmDisposeQueryExe - * AlarmDisposeQueryExe -
@ -25,40 +35,13 @@ import java.util.List;
public class AlarmDisposeQueryExe { public class AlarmDisposeQueryExe {
private final AlarmRecordRepository alarmRecordRepository; private final AlarmRecordRepository alarmRecordRepository;
private final SensorDeviceRepository sensorDeviceRepository;
private final UserRepository userRepository;
public PageResponse<AlarmDisposeCO> execute(AlarmDisposePageQry qry) { public PageResponse<AlarmDisposeCO> execute(AlarmDisposePageQry qry) {
LambdaQueryWrapper<AlarmRecordDO> wrapper = new LambdaQueryWrapper<>(); PageResponse<AlarmRecordDO> pageResponse = alarmRecordRepository.disposeListPage(PageQueryHelper.toHashMap(qry));
List<AlarmDisposeCO> alarmDisposeCOs = BeanUtil.copyToList(pageResponse.getData(), AlarmDisposeCO.class);
wrapper.eq(ObjectUtil.isNotEmpty(qry.getTenantId()), AlarmRecordDO::getTenantId, qry.getTenantId()) return PageResponse.of(alarmDisposeCOs, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
.eq(ObjectUtil.isNotEmpty(qry.getOrgId()), AlarmRecordDO::getOrgId, qry.getOrgId())
.like(ObjectUtil.isNotEmpty(qry.getAlarmNo()), AlarmRecordDO::getAlarmNo, qry.getAlarmNo())
.eq(ObjectUtil.isNotEmpty(qry.getAlarmSource()), AlarmRecordDO::getAlarmSource, qry.getAlarmSource())
.like(ObjectUtil.isNotEmpty(qry.getSensorCode()), AlarmRecordDO::getSensorCode, qry.getSensorCode())
.eq(ObjectUtil.isNotEmpty(qry.getFireRegionId()), AlarmRecordDO::getFireRegionId, qry.getFireRegionId())
.eq(ObjectUtil.isNotEmpty(qry.getDepartmentId()), AlarmRecordDO::getDepartmentId, qry.getDepartmentId())
.eq(ObjectUtil.isNotEmpty(qry.getDisposeUserId()), AlarmRecordDO::getManagerId, qry.getDisposeUserId())
.eq(ObjectUtil.isNotEmpty(qry.getAlarmLevel()), AlarmRecordDO::getAlarmLevel, qry.getAlarmLevel())
.eq(ObjectUtil.isNotEmpty(qry.getAlarmType()), AlarmRecordDO::getAlarmType, qry.getAlarmType())
// 查询待研判(10)或待处置(20)的报警
.in(AlarmRecordDO::getStatus, 10, 20)
.eq(AlarmRecordDO::getActiveFlag, 1)
.orderByDesc(AlarmRecordDO::getAlarmTime);
// 处理报警时间范围
if (ObjectUtil.isNotEmpty(qry.getAlarmTimeStart())) {
wrapper.ge(AlarmRecordDO::getAlarmTime, qry.getAlarmTimeStart());
}
if (ObjectUtil.isNotEmpty(qry.getAlarmTimeEnd())) {
wrapper.le(AlarmRecordDO::getAlarmTime, qry.getAlarmTimeEnd());
}
List<AlarmRecordDO> results = alarmRecordRepository.list(wrapper);
int total = results.size();
// Convert to CO
List<AlarmDisposeCO> alarmDisposeCOs = BeanUtil.copyToList(results, AlarmDisposeCO.class);
return PageResponse.of(alarmDisposeCOs, total, qry.getPageSize(), qry.getPageIndex());
} }
public SingleResponse<AlarmDisposeCO> getById(Long id) { public SingleResponse<AlarmDisposeCO> getById(Long id) {
@ -69,6 +52,44 @@ public class AlarmDisposeQueryExe {
AlarmDisposeCO co = new AlarmDisposeCO(); AlarmDisposeCO co = new AlarmDisposeCO();
BeanUtils.copyProperties(d, co); BeanUtils.copyProperties(d, co);
fillDisplayFields(Collections.singletonList(co));
return SingleResponse.of(co); return SingleResponse.of(co);
} }
private void fillDisplayFields(List<AlarmDisposeCO> alarmDisposeCOs) {
if (alarmDisposeCOs == null || alarmDisposeCOs.isEmpty()) {
return;
}
Set<Long> sensorIds = alarmDisposeCOs.stream()
.map(AlarmDisposeCO::getSensorId)
.filter(ObjectUtil::isNotEmpty)
.collect(Collectors.toCollection(HashSet::new));
Set<Long> disposeUserIds = alarmDisposeCOs.stream()
.map(AlarmDisposeCO::getDisposeUserId)
.filter(ObjectUtil::isNotEmpty)
.collect(Collectors.toCollection(HashSet::new));
Map<Long, String> sensorNameMap = Collections.emptyMap();
if (!sensorIds.isEmpty()) {
LambdaQueryWrapper<SensorDeviceDO> sensorWrapper = new LambdaQueryWrapper<>();
sensorWrapper.in(SensorDeviceDO::getId, sensorIds)
.eq(SensorDeviceDO::getDeleteEnum, "FALSE");
sensorNameMap = sensorDeviceRepository.list(sensorWrapper).stream()
.collect(Collectors.toMap(SensorDeviceDO::getId, SensorDeviceDO::getSensorName, (left, right) -> left));
}
Map<Long, String> userNameMap = Collections.emptyMap();
if (!disposeUserIds.isEmpty()) {
LambdaQueryWrapper<UserDO> userWrapper = new LambdaQueryWrapper<>();
userWrapper.in(UserDO::getId, disposeUserIds);
userNameMap = userRepository.list(userWrapper).stream()
.collect(Collectors.toMap(UserDO::getId, UserDO::getName, (left, right) -> left));
}
for (AlarmDisposeCO alarmDisposeCO : alarmDisposeCOs) {
alarmDisposeCO.setSensorName(sensorNameMap.get(alarmDisposeCO.getSensorId()));
alarmDisposeCO.setDisposeUserName(userNameMap.get(alarmDisposeCO.getDisposeUserId()));
}
}
} }

View File

@ -7,13 +7,23 @@ import com.alibaba.cola.dto.SingleResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zcloud.dto.AlarmRecordPageQry; import com.zcloud.dto.AlarmRecordPageQry;
import com.zcloud.dto.clientobject.AlarmRecordCO; import com.zcloud.dto.clientobject.AlarmRecordCO;
import com.zcloud.gbscommon.utils.PageQueryHelper;
import com.zcloud.persistence.dataobject.AlarmRecordDO; import com.zcloud.persistence.dataobject.AlarmRecordDO;
import com.zcloud.persistence.dataobject.SensorDeviceDO;
import com.zcloud.persistence.dataobject.UserDO;
import com.zcloud.persistence.repository.AlarmRecordRepository; import com.zcloud.persistence.repository.AlarmRecordRepository;
import com.zcloud.persistence.repository.SensorDeviceRepository;
import com.zcloud.persistence.repository.UserRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/** /**
* AlarmRecordQueryExe - * AlarmRecordQueryExe -
@ -25,35 +35,13 @@ import java.util.List;
public class AlarmRecordQueryExe { public class AlarmRecordQueryExe {
private final AlarmRecordRepository alarmRecordRepository; private final AlarmRecordRepository alarmRecordRepository;
private final SensorDeviceRepository sensorDeviceRepository;
private final UserRepository userRepository;
public PageResponse<AlarmRecordCO> execute(AlarmRecordPageQry qry) { public PageResponse<AlarmRecordCO> execute(AlarmRecordPageQry qry) {
LambdaQueryWrapper<AlarmRecordDO> wrapper = new LambdaQueryWrapper<>(); PageResponse<AlarmRecordDO> pageResponse = alarmRecordRepository.listPage(PageQueryHelper.toHashMap(qry));
List<AlarmRecordCO> alarmRecordCOs = BeanUtil.copyToList(pageResponse.getData(), AlarmRecordCO.class);
wrapper.eq(ObjectUtil.isNotEmpty(qry.getTenantId()), AlarmRecordDO::getTenantId, qry.getTenantId()) return PageResponse.of(alarmRecordCOs, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
.eq(ObjectUtil.isNotEmpty(qry.getOrgId()), AlarmRecordDO::getOrgId, qry.getOrgId())
.like(ObjectUtil.isNotEmpty(qry.getAlarmNo()), AlarmRecordDO::getAlarmNo, qry.getAlarmNo())
.eq(ObjectUtil.isNotEmpty(qry.getAlarmSource()), AlarmRecordDO::getAlarmSource, qry.getAlarmSource())
.like(ObjectUtil.isNotEmpty(qry.getSensorCode()), AlarmRecordDO::getSensorCode, qry.getSensorCode())
// 支持按状态筛选(不指定则查询所有状态)
.eq(ObjectUtil.isNotEmpty(qry.getStatus()), AlarmRecordDO::getStatus, qry.getStatus())
.eq(AlarmRecordDO::getDeleteEnum, "FALSE")
.orderByDesc(AlarmRecordDO::getAlarmTime);
// 处理报警时间范围
if (ObjectUtil.isNotEmpty(qry.getAlarmTimeStart())) {
wrapper.ge(AlarmRecordDO::getAlarmTime, qry.getAlarmTimeStart());
}
if (ObjectUtil.isNotEmpty(qry.getAlarmTimeEnd())) {
wrapper.le(AlarmRecordDO::getAlarmTime, qry.getAlarmTimeEnd());
}
List<AlarmRecordDO> results = alarmRecordRepository.list(wrapper);
int total = results.size();
// Convert to CO
List<AlarmRecordCO> alarmRecordCOs = BeanUtil.copyToList(results, AlarmRecordCO.class);
return PageResponse.of(alarmRecordCOs, total, qry.getPageSize(), qry.getPageIndex());
} }
public SingleResponse<AlarmRecordCO> getById(Long id) { public SingleResponse<AlarmRecordCO> getById(Long id) {
@ -64,6 +52,44 @@ public class AlarmRecordQueryExe {
AlarmRecordCO co = new AlarmRecordCO(); AlarmRecordCO co = new AlarmRecordCO();
BeanUtils.copyProperties(d, co); BeanUtils.copyProperties(d, co);
fillDisplayFields(Collections.singletonList(co));
return SingleResponse.of(co); return SingleResponse.of(co);
} }
private void fillDisplayFields(List<AlarmRecordCO> alarmRecordCOs) {
if (alarmRecordCOs == null || alarmRecordCOs.isEmpty()) {
return;
}
Set<Long> sensorIds = alarmRecordCOs.stream()
.map(AlarmRecordCO::getSensorId)
.filter(ObjectUtil::isNotEmpty)
.collect(Collectors.toCollection(HashSet::new));
Set<Long> disposeUserIds = alarmRecordCOs.stream()
.map(AlarmRecordCO::getDisposeUserId)
.filter(ObjectUtil::isNotEmpty)
.collect(Collectors.toCollection(HashSet::new));
Map<Long, String> sensorNameMap = Collections.emptyMap();
if (!sensorIds.isEmpty()) {
LambdaQueryWrapper<SensorDeviceDO> sensorWrapper = new LambdaQueryWrapper<>();
sensorWrapper.in(SensorDeviceDO::getId, sensorIds)
.eq(SensorDeviceDO::getDeleteEnum, "FALSE");
sensorNameMap = sensorDeviceRepository.list(sensorWrapper).stream()
.collect(Collectors.toMap(SensorDeviceDO::getId, SensorDeviceDO::getSensorName, (left, right) -> left));
}
Map<Long, String> userNameMap = Collections.emptyMap();
if (!disposeUserIds.isEmpty()) {
LambdaQueryWrapper<UserDO> userWrapper = new LambdaQueryWrapper<>();
userWrapper.in(UserDO::getId, disposeUserIds);
userNameMap = userRepository.list(userWrapper).stream()
.collect(Collectors.toMap(UserDO::getId, UserDO::getName, (left, right) -> left));
}
for (AlarmRecordCO alarmRecordCO : alarmRecordCOs) {
alarmRecordCO.setSensorName(sensorNameMap.get(alarmRecordCO.getSensorId()));
alarmRecordCO.setDisposeUserName(userNameMap.get(alarmRecordCO.getDisposeUserId()));
}
}
} }

View File

@ -7,13 +7,23 @@ import com.alibaba.cola.dto.SingleResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zcloud.dto.AppAlarmDisposePageQry; import com.zcloud.dto.AppAlarmDisposePageQry;
import com.zcloud.dto.clientobject.AlarmDisposeCO; import com.zcloud.dto.clientobject.AlarmDisposeCO;
import com.zcloud.gbscommon.utils.PageQueryHelper;
import com.zcloud.persistence.dataobject.AlarmRecordDO; import com.zcloud.persistence.dataobject.AlarmRecordDO;
import com.zcloud.persistence.dataobject.SensorDeviceDO;
import com.zcloud.persistence.dataobject.UserDO;
import com.zcloud.persistence.repository.AlarmRecordRepository; import com.zcloud.persistence.repository.AlarmRecordRepository;
import com.zcloud.persistence.repository.SensorDeviceRepository;
import com.zcloud.persistence.repository.UserRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/** /**
* AppAlarmDisposeQueryExe - APP * AppAlarmDisposeQueryExe - APP
@ -25,43 +35,16 @@ import java.util.List;
public class AppAlarmDisposeQueryExe { public class AppAlarmDisposeQueryExe {
private final AlarmRecordRepository alarmRecordRepository; private final AlarmRecordRepository alarmRecordRepository;
private final SensorDeviceRepository sensorDeviceRepository;
private final UserRepository userRepository;
/** /**
* *
*/ */
public PageResponse<AlarmDisposeCO> execute(AppAlarmDisposePageQry qry) { public PageResponse<AlarmDisposeCO> execute(AppAlarmDisposePageQry qry) {
LambdaQueryWrapper<AlarmRecordDO> wrapper = new LambdaQueryWrapper<>(); PageResponse<AlarmRecordDO> pageResponse = alarmRecordRepository.appDisposeListPage(PageQueryHelper.toHashMap(qry));
List<AlarmDisposeCO> alarmDisposeCOs = BeanUtil.copyToList(pageResponse.getData(), AlarmDisposeCO.class);
wrapper.eq(ObjectUtil.isNotEmpty(qry.getTenantId()), AlarmRecordDO::getTenantId, qry.getTenantId()) return PageResponse.of(alarmDisposeCOs, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
.eq(ObjectUtil.isNotEmpty(qry.getOrgId()), AlarmRecordDO::getOrgId, qry.getOrgId())
.like(ObjectUtil.isNotEmpty(qry.getAlarmNo()), AlarmRecordDO::getAlarmNo, qry.getAlarmNo())
.eq(ObjectUtil.isNotEmpty(qry.getAlarmSource()), AlarmRecordDO::getAlarmSource, qry.getAlarmSource())
.like(ObjectUtil.isNotEmpty(qry.getSensorCode()), AlarmRecordDO::getSensorCode, qry.getSensorCode())
.eq(ObjectUtil.isNotEmpty(qry.getFireRegionId()), AlarmRecordDO::getFireRegionId, qry.getFireRegionId())
.eq(ObjectUtil.isNotEmpty(qry.getAlarmLevel()), AlarmRecordDO::getAlarmLevel, qry.getAlarmLevel())
.eq(ObjectUtil.isNotEmpty(qry.getAlarmType()), AlarmRecordDO::getAlarmType, qry.getAlarmType())
// 关键按当前用户过滤managerId = 当前用户ID
.eq(ObjectUtil.isNotEmpty(qry.getCurrentUserId()), AlarmRecordDO::getManagerId, qry.getCurrentUserId())
// 只查询待处置(20)状态的报警
.eq(AlarmRecordDO::getStatus, 20)
.eq(AlarmRecordDO::getActiveFlag, 1)
.orderByDesc(AlarmRecordDO::getAlarmTime);
// 处理报警时间范围
if (ObjectUtil.isNotEmpty(qry.getAlarmTimeStart())) {
wrapper.ge(AlarmRecordDO::getAlarmTime, qry.getAlarmTimeStart());
}
if (ObjectUtil.isNotEmpty(qry.getAlarmTimeEnd())) {
wrapper.le(AlarmRecordDO::getAlarmTime, qry.getAlarmTimeEnd());
}
List<AlarmRecordDO> results = alarmRecordRepository.list(wrapper);
int total = results.size();
// Convert to CO
List<AlarmDisposeCO> alarmDisposeCOs = BeanUtil.copyToList(results, AlarmDisposeCO.class);
return PageResponse.of(alarmDisposeCOs, total, qry.getPageSize(), qry.getPageIndex());
} }
/** /**
@ -75,6 +58,44 @@ public class AppAlarmDisposeQueryExe {
AlarmDisposeCO co = new AlarmDisposeCO(); AlarmDisposeCO co = new AlarmDisposeCO();
BeanUtils.copyProperties(d, co); BeanUtils.copyProperties(d, co);
fillDisplayFields(Collections.singletonList(co));
return SingleResponse.of(co); return SingleResponse.of(co);
} }
private void fillDisplayFields(List<AlarmDisposeCO> alarmDisposeCOs) {
if (alarmDisposeCOs == null || alarmDisposeCOs.isEmpty()) {
return;
}
Set<Long> sensorIds = alarmDisposeCOs.stream()
.map(AlarmDisposeCO::getSensorId)
.filter(ObjectUtil::isNotEmpty)
.collect(Collectors.toCollection(HashSet::new));
Set<Long> disposeUserIds = alarmDisposeCOs.stream()
.map(AlarmDisposeCO::getDisposeUserId)
.filter(ObjectUtil::isNotEmpty)
.collect(Collectors.toCollection(HashSet::new));
Map<Long, String> sensorNameMap = Collections.emptyMap();
if (!sensorIds.isEmpty()) {
LambdaQueryWrapper<SensorDeviceDO> sensorWrapper = new LambdaQueryWrapper<>();
sensorWrapper.in(SensorDeviceDO::getId, sensorIds)
.eq(SensorDeviceDO::getDeleteEnum, "FALSE");
sensorNameMap = sensorDeviceRepository.list(sensorWrapper).stream()
.collect(Collectors.toMap(SensorDeviceDO::getId, SensorDeviceDO::getSensorName, (left, right) -> left));
}
Map<Long, String> userNameMap = Collections.emptyMap();
if (!disposeUserIds.isEmpty()) {
LambdaQueryWrapper<UserDO> userWrapper = new LambdaQueryWrapper<>();
userWrapper.in(UserDO::getId, disposeUserIds);
userNameMap = userRepository.list(userWrapper).stream()
.collect(Collectors.toMap(UserDO::getId, UserDO::getName, (left, right) -> left));
}
for (AlarmDisposeCO alarmDisposeCO : alarmDisposeCOs) {
alarmDisposeCO.setSensorName(sensorNameMap.get(alarmDisposeCO.getSensorId()));
alarmDisposeCO.setDisposeUserName(userNameMap.get(alarmDisposeCO.getDisposeUserId()));
}
}
} }

View File

@ -8,13 +8,23 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jjb.saas.framework.auth.utils.AuthContext; import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.dto.AppAlarmRecordPageQry; import com.zcloud.dto.AppAlarmRecordPageQry;
import com.zcloud.dto.clientobject.AlarmRecordCO; import com.zcloud.dto.clientobject.AlarmRecordCO;
import com.zcloud.gbscommon.utils.PageQueryHelper;
import com.zcloud.persistence.dataobject.AlarmRecordDO; import com.zcloud.persistence.dataobject.AlarmRecordDO;
import com.zcloud.persistence.dataobject.SensorDeviceDO;
import com.zcloud.persistence.dataobject.UserDO;
import com.zcloud.persistence.repository.AlarmRecordRepository; import com.zcloud.persistence.repository.AlarmRecordRepository;
import com.zcloud.persistence.repository.SensorDeviceRepository;
import com.zcloud.persistence.repository.UserRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/** /**
* AppAlarmRecordQueryExe - APP * AppAlarmRecordQueryExe - APP
@ -26,33 +36,15 @@ import java.util.List;
public class AppAlarmRecordQueryExe { public class AppAlarmRecordQueryExe {
private final AlarmRecordRepository alarmRecordRepository; private final AlarmRecordRepository alarmRecordRepository;
private final SensorDeviceRepository sensorDeviceRepository;
private final UserRepository userRepository;
public PageResponse<AlarmRecordCO> execute(AppAlarmRecordPageQry qry) { public PageResponse<AlarmRecordCO> execute(AppAlarmRecordPageQry qry) {
LambdaQueryWrapper<AlarmRecordDO> wrapper = new LambdaQueryWrapper<>(); Map<String, Object> params = PageQueryHelper.toHashMap(qry);
params.put("currentUserId", AuthContext.getUserId());
// 按当前用户过滤处置人ID PageResponse<AlarmRecordDO> pageResponse = alarmRecordRepository.appListPage(params);
Long userId = AuthContext.getUserId(); List<AlarmRecordCO> alarmRecordCOs = BeanUtil.copyToList(pageResponse.getData(), AlarmRecordCO.class);
wrapper.eq(userId != null, AlarmRecordDO::getDisposeUserId, userId); return PageResponse.of(alarmRecordCOs, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
// 支持按状态筛选30已消警/40误报
wrapper.eq(ObjectUtil.isNotEmpty(qry.getStatus()), AlarmRecordDO::getStatus, qry.getStatus())
.eq(AlarmRecordDO::getDeleteEnum, "FALSE")
.orderByDesc(AlarmRecordDO::getAlarmTime);
// 处理报警时间范围
if (ObjectUtil.isNotEmpty(qry.getAlarmTimeStart())) {
wrapper.ge(AlarmRecordDO::getAlarmTime, qry.getAlarmTimeStart());
}
if (ObjectUtil.isNotEmpty(qry.getAlarmTimeEnd())) {
wrapper.le(AlarmRecordDO::getAlarmTime, qry.getAlarmTimeEnd());
}
List<AlarmRecordDO> results = alarmRecordRepository.list(wrapper);
int total = results.size();
// Convert to CO
List<AlarmRecordCO> alarmRecordCOs = BeanUtil.copyToList(results, AlarmRecordCO.class);
return PageResponse.of(alarmRecordCOs, total, qry.getPageSize(), qry.getPageIndex());
} }
public SingleResponse<AlarmRecordCO> getById(Long id) { public SingleResponse<AlarmRecordCO> getById(Long id) {
@ -69,6 +61,44 @@ public class AppAlarmRecordQueryExe {
AlarmRecordCO co = new AlarmRecordCO(); AlarmRecordCO co = new AlarmRecordCO();
BeanUtils.copyProperties(d, co); BeanUtils.copyProperties(d, co);
fillDisplayFields(Collections.singletonList(co));
return SingleResponse.of(co); return SingleResponse.of(co);
} }
private void fillDisplayFields(List<AlarmRecordCO> alarmRecordCOs) {
if (alarmRecordCOs == null || alarmRecordCOs.isEmpty()) {
return;
}
Set<Long> sensorIds = alarmRecordCOs.stream()
.map(AlarmRecordCO::getSensorId)
.filter(ObjectUtil::isNotEmpty)
.collect(Collectors.toCollection(HashSet::new));
Set<Long> disposeUserIds = alarmRecordCOs.stream()
.map(AlarmRecordCO::getDisposeUserId)
.filter(ObjectUtil::isNotEmpty)
.collect(Collectors.toCollection(HashSet::new));
Map<Long, String> sensorNameMap = Collections.emptyMap();
if (!sensorIds.isEmpty()) {
LambdaQueryWrapper<SensorDeviceDO> sensorWrapper = new LambdaQueryWrapper<>();
sensorWrapper.in(SensorDeviceDO::getId, sensorIds)
.eq(SensorDeviceDO::getDeleteEnum, "FALSE");
sensorNameMap = sensorDeviceRepository.list(sensorWrapper).stream()
.collect(Collectors.toMap(SensorDeviceDO::getId, SensorDeviceDO::getSensorName, (left, right) -> left));
}
Map<Long, String> userNameMap = Collections.emptyMap();
if (!disposeUserIds.isEmpty()) {
LambdaQueryWrapper<UserDO> userWrapper = new LambdaQueryWrapper<>();
userWrapper.in(UserDO::getId, disposeUserIds);
userNameMap = userRepository.list(userWrapper).stream()
.collect(Collectors.toMap(UserDO::getId, UserDO::getName, (left, right) -> left));
}
for (AlarmRecordCO alarmRecordCO : alarmRecordCOs) {
alarmRecordCO.setSensorName(sensorNameMap.get(alarmRecordCO.getSensorId()));
alarmRecordCO.setDisposeUserName(userNameMap.get(alarmRecordCO.getDisposeUserId()));
}
}
} }

View File

@ -8,13 +8,27 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zcloud.dto.DeviceRegionPageQry; import com.zcloud.dto.DeviceRegionPageQry;
import com.zcloud.dto.clientobject.DeviceRegionCO; import com.zcloud.dto.clientobject.DeviceRegionCO;
import com.zcloud.dto.clientobject.FireRegionCO; import com.zcloud.dto.clientobject.FireRegionCO;
import com.zcloud.dto.clientobject.SensorDeviceCO;
import com.zcloud.gbscommon.utils.PageQueryHelper;
import com.zcloud.persistence.dataobject.DepartmentDO;
import com.zcloud.persistence.dataobject.DeviceRegionDO; import com.zcloud.persistence.dataobject.DeviceRegionDO;
import com.zcloud.persistence.dataobject.RegionSensorRelDO;
import com.zcloud.persistence.dataobject.SensorDeviceDO;
import com.zcloud.persistence.dataobject.UserDO;
import com.zcloud.persistence.repository.DepartmentRepository;
import com.zcloud.persistence.repository.DeviceRegionRepository; import com.zcloud.persistence.repository.DeviceRegionRepository;
import com.zcloud.persistence.repository.RegionSensorRelRepository;
import com.zcloud.persistence.repository.SensorDeviceRepository;
import com.zcloud.persistence.repository.UserRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/** /**
* DeviceRegionQueryExe - * DeviceRegionQueryExe -
@ -26,26 +40,15 @@ import java.util.List;
public class DeviceRegionQueryExe { public class DeviceRegionQueryExe {
private final DeviceRegionRepository deviceRegionRepository; private final DeviceRegionRepository deviceRegionRepository;
private final RegionSensorRelRepository regionSensorRelRepository;
private final SensorDeviceRepository sensorDeviceRepository;
private final DepartmentRepository departmentRepository;
private final UserRepository userRepository;
public PageResponse<DeviceRegionCO> execute(DeviceRegionPageQry qry) { public PageResponse<DeviceRegionCO> execute(DeviceRegionPageQry qry) {
LambdaQueryWrapper<DeviceRegionDO> wrapper = new LambdaQueryWrapper<>(); PageResponse<DeviceRegionDO> pageResponse = deviceRegionRepository.listPage(PageQueryHelper.toHashMap(qry));
List<DeviceRegionCO> deviceRegionCOs = BeanUtil.copyToList(pageResponse.getData(), DeviceRegionCO.class);
wrapper.eq(ObjectUtil.isNotEmpty(qry.getTenantId()), DeviceRegionDO::getTenantId, qry.getTenantId()) return PageResponse.of(deviceRegionCOs, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
.eq(ObjectUtil.isNotEmpty(qry.getOrgId()), DeviceRegionDO::getOrgId, qry.getOrgId())
.like(ObjectUtil.isNotEmpty(qry.getFireRegionCode()), DeviceRegionDO::getFireRegionCode, qry.getFireRegionCode())
.eq(ObjectUtil.isNotEmpty(qry.getDepartmentId()), DeviceRegionDO::getDepartmentId, qry.getDepartmentId())
.eq(ObjectUtil.isNotEmpty(qry.getManagerId()), DeviceRegionDO::getManagerId, qry.getManagerId())
.eq(ObjectUtil.isNotEmpty(qry.getStatus()), DeviceRegionDO::getStatus, qry.getStatus())
.eq(DeviceRegionDO::getDeleteEnum, "FALSE")
.orderByDesc(DeviceRegionDO::getCreateTime);
List<DeviceRegionDO> results = deviceRegionRepository.list(wrapper);
int total = results.size();
// Convert to CO
List<DeviceRegionCO> deviceRegionCOs = BeanUtil.copyToList(results, DeviceRegionCO.class);
return PageResponse.of(deviceRegionCOs, total, qry.getPageSize(), qry.getPageIndex());
} }
public SingleResponse<DeviceRegionCO> getById(Long id) { public SingleResponse<DeviceRegionCO> getById(Long id) {
@ -56,6 +59,8 @@ public class DeviceRegionQueryExe {
DeviceRegionCO co = new DeviceRegionCO(); DeviceRegionCO co = new DeviceRegionCO();
BeanUtils.copyProperties(d, co); BeanUtils.copyProperties(d, co);
fillBindSensorInfo(Collections.singletonList(co), true);
fillDisplayFields(Collections.singletonList(co));
return SingleResponse.of(co); return SingleResponse.of(co);
} }
@ -67,10 +72,99 @@ public class DeviceRegionQueryExe {
.orderByDesc(DeviceRegionDO::getCreateTime); .orderByDesc(DeviceRegionDO::getCreateTime);
List<DeviceRegionDO> results = deviceRegionRepository.list(wrapper); List<DeviceRegionDO> results = deviceRegionRepository.list(wrapper);
// Convert to FireRegionCO
List<FireRegionCO> fireRegionCOs = BeanUtil.copyToList(results, FireRegionCO.class); List<FireRegionCO> fireRegionCOs = BeanUtil.copyToList(results, FireRegionCO.class);
return SingleResponse.of(fireRegionCOs.isEmpty() ? null : fireRegionCOs.get(0)); return SingleResponse.of(fireRegionCOs.isEmpty() ? null : fireRegionCOs.get(0));
} }
private void fillBindSensorInfo(List<DeviceRegionCO> deviceRegionCOs, boolean includeBoundSensors) {
if (deviceRegionCOs == null || deviceRegionCOs.isEmpty()) {
return;
}
Set<Long> regionIds = deviceRegionCOs.stream()
.map(DeviceRegionCO::getId)
.filter(ObjectUtil::isNotEmpty)
.collect(Collectors.toSet());
if (regionIds.isEmpty()) {
return;
}
LambdaQueryWrapper<RegionSensorRelDO> relWrapper = new LambdaQueryWrapper<>();
relWrapper.in(RegionSensorRelDO::getRegionConfigId, regionIds)
.eq(RegionSensorRelDO::getDeleteEnum, "FALSE");
List<RegionSensorRelDO> relList = regionSensorRelRepository.list(relWrapper);
Map<Long, List<RegionSensorRelDO>> relMap = relList.stream()
.collect(Collectors.groupingBy(RegionSensorRelDO::getRegionConfigId));
Map<Long, SensorDeviceCO> sensorMap = Collections.emptyMap();
if (includeBoundSensors && !relList.isEmpty()) {
Set<Long> sensorIds = relList.stream()
.map(RegionSensorRelDO::getSensorId)
.filter(ObjectUtil::isNotEmpty)
.collect(Collectors.toSet());
if (!sensorIds.isEmpty()) {
LambdaQueryWrapper<SensorDeviceDO> sensorWrapper = new LambdaQueryWrapper<>();
sensorWrapper.in(SensorDeviceDO::getId, sensorIds)
.eq(SensorDeviceDO::getDeleteEnum, "FALSE");
sensorMap = sensorDeviceRepository.list(sensorWrapper).stream()
.map(sensor -> BeanUtil.copyProperties(sensor, SensorDeviceCO.class))
.collect(Collectors.toMap(SensorDeviceCO::getId, sensor -> sensor));
}
}
for (DeviceRegionCO deviceRegionCO : deviceRegionCOs) {
List<RegionSensorRelDO> currentRelList = relMap.getOrDefault(deviceRegionCO.getId(), Collections.emptyList());
deviceRegionCO.setBindSensorCount(currentRelList.size());
if (!includeBoundSensors) {
continue;
}
List<SensorDeviceCO> boundSensors = currentRelList.stream()
.map(RegionSensorRelDO::getSensorId)
.map(sensorMap::get)
.filter(ObjectUtil::isNotEmpty)
.collect(Collectors.toList());
deviceRegionCO.setBoundSensors(boundSensors);
}
}
private void fillDisplayFields(List<DeviceRegionCO> deviceRegionCOs) {
if (deviceRegionCOs == null || deviceRegionCOs.isEmpty()) {
return;
}
Set<Long> departmentIds = deviceRegionCOs.stream()
.map(DeviceRegionCO::getDepartmentId)
.filter(ObjectUtil::isNotEmpty)
.collect(Collectors.toSet());
Set<Long> managerIds = deviceRegionCOs.stream()
.map(DeviceRegionCO::getManagerId)
.filter(ObjectUtil::isNotEmpty)
.collect(Collectors.toSet());
Map<Long, String> departmentNameMap = Collections.emptyMap();
if (!departmentIds.isEmpty()) {
LambdaQueryWrapper<DepartmentDO> departmentWrapper = new LambdaQueryWrapper<>();
departmentWrapper.in(DepartmentDO::getId, departmentIds);
departmentNameMap = departmentRepository.list(departmentWrapper).stream()
.collect(Collectors.toMap(DepartmentDO::getId, DepartmentDO::getName, (left, right) -> left));
}
Map<Long, String> managerNameMap = Collections.emptyMap();
if (!managerIds.isEmpty()) {
LambdaQueryWrapper<UserDO> userWrapper = new LambdaQueryWrapper<>();
userWrapper.in(UserDO::getId, managerIds);
managerNameMap = userRepository.list(userWrapper).stream()
.collect(Collectors.toMap(UserDO::getId, UserDO::getName, (left, right) -> left));
}
for (DeviceRegionCO deviceRegionCO : deviceRegionCOs) {
deviceRegionCO.setDepartmentName(departmentNameMap.get(deviceRegionCO.getDepartmentId()));
if (ObjectUtil.isEmpty(deviceRegionCO.getManagerName())) {
deviceRegionCO.setManagerName(managerNameMap.get(deviceRegionCO.getManagerId()));
}
}
}
} }

View File

@ -1,12 +1,11 @@
package com.zcloud.command.query; package com.zcloud.command.query;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.cola.dto.PageResponse; import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.SingleResponse; import com.alibaba.cola.dto.SingleResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zcloud.dto.SensorDevicePageQry; import com.zcloud.dto.SensorDevicePageQry;
import com.zcloud.dto.clientobject.SensorDeviceCO; import com.zcloud.dto.clientobject.SensorDeviceCO;
import com.zcloud.gbscommon.utils.PageQueryHelper;
import com.zcloud.persistence.dataobject.SensorDeviceDO; import com.zcloud.persistence.dataobject.SensorDeviceDO;
import com.zcloud.persistence.repository.SensorDeviceRepository; import com.zcloud.persistence.repository.SensorDeviceRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -27,28 +26,9 @@ public class SensorDeviceQueryExe {
private final SensorDeviceRepository sensorDeviceRepository; private final SensorDeviceRepository sensorDeviceRepository;
public PageResponse<SensorDeviceCO> execute(SensorDevicePageQry qry) { public PageResponse<SensorDeviceCO> execute(SensorDevicePageQry qry) {
LambdaQueryWrapper<SensorDeviceDO> wrapper = new LambdaQueryWrapper<>(); PageResponse<SensorDeviceDO> pageResponse = sensorDeviceRepository.listPage(PageQueryHelper.toHashMap(qry));
List<SensorDeviceCO> sensorDeviceCOs = BeanUtil.copyToList(pageResponse.getData(), SensorDeviceCO.class);
wrapper.eq(ObjectUtil.isNotEmpty(qry.getTenantId()), SensorDeviceDO::getTenantId, qry.getTenantId()) return PageResponse.of(sensorDeviceCOs, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
.eq(ObjectUtil.isNotEmpty(qry.getOrgId()), SensorDeviceDO::getOrgId, qry.getOrgId())
.like(ObjectUtil.isNotEmpty(qry.getSensorCode()), SensorDeviceDO::getSensorCode, qry.getSensorCode())
.like(ObjectUtil.isNotEmpty(qry.getSensorName()), SensorDeviceDO::getSensorName, qry.getSensorName())
.eq(ObjectUtil.isNotEmpty(qry.getSensorTypeId()), SensorDeviceDO::getSensorTypeId, qry.getSensorTypeId())
.eq(ObjectUtil.isNotEmpty(qry.getSensorAttr()), SensorDeviceDO::getSensorAttr, qry.getSensorAttr())
.eq(ObjectUtil.isNotEmpty(qry.getSensorStatus()), SensorDeviceDO::getSensorStatus, qry.getSensorStatus())
.eq(ObjectUtil.isNotEmpty(qry.getAlarmSwitch()), SensorDeviceDO::getAlarmSwitch, qry.getAlarmSwitch())
.eq(ObjectUtil.isNotEmpty(qry.getThresholdFlag()), SensorDeviceDO::getThresholdFlag, qry.getThresholdFlag())
.like(ObjectUtil.isNotEmpty(qry.getInstallPosition()), SensorDeviceDO::getInstallPosition, qry.getInstallPosition())
.eq(SensorDeviceDO::getDeleteEnum, "FALSE")
.orderByDesc(SensorDeviceDO::getCreateTime);
List<SensorDeviceDO> results = sensorDeviceRepository.list(wrapper);
int total = results.size();
// Convert to CO
List<SensorDeviceCO> sensorDeviceCOs = BeanUtil.copyToList(results, SensorDeviceCO.class);
return PageResponse.of(sensorDeviceCOs, total, qry.getPageSize(), qry.getPageIndex());
} }
public SingleResponse<SensorDeviceCO> getById(Long id) { public SingleResponse<SensorDeviceCO> getById(Long id) {

View File

@ -1,12 +1,11 @@
package com.zcloud.command.query; package com.zcloud.command.query;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.cola.dto.PageResponse; import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.SingleResponse; import com.alibaba.cola.dto.SingleResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zcloud.dto.SensorTypePageQry; import com.zcloud.dto.SensorTypePageQry;
import com.zcloud.dto.clientobject.SensorTypeCO; import com.zcloud.dto.clientobject.SensorTypeCO;
import com.zcloud.gbscommon.utils.PageQueryHelper;
import com.zcloud.persistence.dataobject.SensorTypeDO; import com.zcloud.persistence.dataobject.SensorTypeDO;
import com.zcloud.persistence.repository.SensorTypeRepository; import com.zcloud.persistence.repository.SensorTypeRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -27,24 +26,9 @@ public class SensorTypeQueryExe {
private final SensorTypeRepository sensorTypeRepository; private final SensorTypeRepository sensorTypeRepository;
public PageResponse<SensorTypeCO> execute(SensorTypePageQry qry) { public PageResponse<SensorTypeCO> execute(SensorTypePageQry qry) {
LambdaQueryWrapper<SensorTypeDO> wrapper = new LambdaQueryWrapper<>(); PageResponse<SensorTypeDO> pageResponse = sensorTypeRepository.listPage(PageQueryHelper.toHashMap(qry));
List<SensorTypeCO> sensorTypeCOs = BeanUtil.copyToList(pageResponse.getData(), SensorTypeCO.class);
wrapper.eq(ObjectUtil.isNotEmpty(qry.getTenantId()), SensorTypeDO::getTenantId, qry.getTenantId()) return PageResponse.of(sensorTypeCOs, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
.eq(ObjectUtil.isNotEmpty(qry.getOrgId()), SensorTypeDO::getOrgId, qry.getOrgId())
.like(ObjectUtil.isNotEmpty(qry.getTypeCode()), SensorTypeDO::getTypeCode, qry.getTypeCode())
.like(ObjectUtil.isNotEmpty(qry.getTypeName()), SensorTypeDO::getTypeName, qry.getTypeName())
.eq(ObjectUtil.isNotEmpty(qry.getSensorAttr()), SensorTypeDO::getSensorAttr, qry.getSensorAttr())
.eq(ObjectUtil.isNotEmpty(qry.getStatus()), SensorTypeDO::getStatus, qry.getStatus())
.eq(SensorTypeDO::getDeleteEnum, "FALSE")
.orderByDesc(SensorTypeDO::getCreateTime);
List<SensorTypeDO> results = sensorTypeRepository.list(wrapper);
int total = results.size();
// Convert to CO
List<SensorTypeCO> sensorTypeCOs = BeanUtil.copyToList(results, SensorTypeCO.class);
return PageResponse.of(sensorTypeCOs, total, qry.getPageSize(), qry.getPageIndex());
} }
public SingleResponse<SensorTypeCO> getById(Long id) { public SingleResponse<SensorTypeCO> getById(Long id) {

View File

@ -24,6 +24,9 @@ public class DeviceRegionAddCmd extends Command {
@ApiModelProperty(value = "外部消防区域主键", name = "fireRegionId", required = true) @ApiModelProperty(value = "外部消防区域主键", name = "fireRegionId", required = true)
private Long fireRegionId; private Long fireRegionId;
@ApiModelProperty(value = "外部消防区域名称", name = "fireRegionName")
private String fireRegionName;
@ApiModelProperty(value = "外部消防区域编码", name = "fireRegionCode") @ApiModelProperty(value = "外部消防区域编码", name = "fireRegionCode")
private String fireRegionCode; private String fireRegionCode;

View File

@ -24,6 +24,9 @@ public class ManagerCmd extends Command {
@ApiModelProperty(value = "负责人ID", name = "managerId", required = true) @ApiModelProperty(value = "负责人ID", name = "managerId", required = true)
private Long managerId; private Long managerId;
@ApiModelProperty(value = "负责人姓名", name = "managerName")
private String managerName;
@ApiModelProperty(value = "负责部门ID", name = "departmentId") @ApiModelProperty(value = "负责部门ID", name = "departmentId")
private Long departmentId; private Long departmentId;
} }

View File

@ -37,6 +37,9 @@ public class AlarmDisposeCO extends ClientObject {
@ApiModelProperty(value = "传感器编码") @ApiModelProperty(value = "传感器编码")
private String sensorCode; private String sensorCode;
@ApiModelProperty(value = "传感器名称")
private String sensorName;
@ApiModelProperty(value = "消防区域ID") @ApiModelProperty(value = "消防区域ID")
private Long fireRegionId; private Long fireRegionId;
@ -82,6 +85,9 @@ public class AlarmDisposeCO extends ClientObject {
@ApiModelProperty(value = "处置人ID") @ApiModelProperty(value = "处置人ID")
private Long disposeUserId; private Long disposeUserId;
@ApiModelProperty(value = "处置人姓名")
private String disposeUserName;
@ApiModelProperty(value = "当前处置结果快照") @ApiModelProperty(value = "当前处置结果快照")
private String disposeResult; private String disposeResult;

View File

@ -37,6 +37,9 @@ public class AlarmRecordCO extends ClientObject {
@ApiModelProperty(value = "传感器编码") @ApiModelProperty(value = "传感器编码")
private String sensorCode; private String sensorCode;
@ApiModelProperty(value = "传感器名称")
private String sensorName;
@ApiModelProperty(value = "消防区域ID") @ApiModelProperty(value = "消防区域ID")
private Long fireRegionId; private Long fireRegionId;
@ -82,6 +85,9 @@ public class AlarmRecordCO extends ClientObject {
@ApiModelProperty(value = "处置人ID") @ApiModelProperty(value = "处置人ID")
private Long disposeUserId; private Long disposeUserId;
@ApiModelProperty(value = "处置人姓名")
private String disposeUserName;
@ApiModelProperty(value = "当前处置结果快照") @ApiModelProperty(value = "当前处置结果快照")
private String disposeResult; private String disposeResult;

View File

@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* DeviceRegionCO - * DeviceRegionCO -
@ -24,15 +25,30 @@ public class DeviceRegionCO extends ClientObject {
@ApiModelProperty(value = "外部消防区域主键") @ApiModelProperty(value = "外部消防区域主键")
private Long fireRegionId; private Long fireRegionId;
@ApiModelProperty(value = "外部消防区域名称")
private String fireRegionName;
@ApiModelProperty(value = "外部消防区域编码") @ApiModelProperty(value = "外部消防区域编码")
private String fireRegionCode; private String fireRegionCode;
@ApiModelProperty(value = "负责部门ID") @ApiModelProperty(value = "负责部门ID")
private Long departmentId; private Long departmentId;
@ApiModelProperty(value = "负责部门名称")
private String departmentName;
@ApiModelProperty(value = "负责人ID") @ApiModelProperty(value = "负责人ID")
private Long managerId; private Long managerId;
@ApiModelProperty(value = "负责人姓名")
private String managerName;
@ApiModelProperty(value = "已绑定传感器数量")
private Integer bindSensorCount;
@ApiModelProperty(value = "已绑定传感器列表")
private List<SensorDeviceCO> boundSensors;
@ApiModelProperty(value = "状态 1启用0停用") @ApiModelProperty(value = "状态 1启用0停用")
private Integer status; private Integer status;

View File

@ -30,6 +30,9 @@ public class SensorDeviceCO extends ClientObject {
@ApiModelProperty(value = "传感器类型主键ID") @ApiModelProperty(value = "传感器类型主键ID")
private Long sensorTypeId; private Long sensorTypeId;
@ApiModelProperty(value = "传感器类型名称")
private String sensorTypeName;
@ApiModelProperty(value = "传感器属性快照(NUMBER/SWITCH)") @ApiModelProperty(value = "传感器属性快照(NUMBER/SWITCH)")
private String sensorAttr; private String sensorAttr;

View File

@ -43,5 +43,5 @@ public interface DeviceRegionGateway {
/** /**
* *
*/ */
Boolean updateManager(Long id, Long managerId, Long departmentId); Boolean updateManager(Long id, Long managerId, String managerName, Long departmentId);
} }

View File

@ -23,6 +23,11 @@ public class DeviceRegionE extends BaseE {
*/ */
private Long fireRegionId; private Long fireRegionId;
/**
*
*/
private String fireRegionName;
/** /**
* *
*/ */
@ -38,6 +43,11 @@ public class DeviceRegionE extends BaseE {
*/ */
private Long managerId; private Long managerId;
/**
*
*/
private String managerName;
/** /**
* 10 * 10
*/ */

View File

@ -85,10 +85,11 @@ public class DeviceRegionGatewayImpl implements DeviceRegionGateway {
} }
@Override @Override
public Boolean updateManager(Long id, Long managerId, Long departmentId) { public Boolean updateManager(Long id, Long managerId, String managerName, Long departmentId) {
DeviceRegionDO d = new DeviceRegionDO(); DeviceRegionDO d = new DeviceRegionDO();
d.setId(id); d.setId(id);
d.setManagerId(managerId); d.setManagerId(managerId);
d.setManagerName(managerName);
d.setDepartmentId(departmentId); d.setDepartmentId(departmentId);
deviceRegionRepository.updateById(d); deviceRegionRepository.updateById(d);
return true; return true;

View File

@ -1,5 +1,6 @@
package com.zcloud.persistence.dataobject; package com.zcloud.persistence.dataobject;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.jjb.saas.framework.repository.basedo.BaseDO; import com.jjb.saas.framework.repository.basedo.BaseDO;
@ -37,6 +38,10 @@ public class AlarmRecordDO extends BaseDO {
@ApiModelProperty(value = "传感器编码") @ApiModelProperty(value = "传感器编码")
private String sensorCode; private String sensorCode;
@TableField(exist = false)
@ApiModelProperty(value = "传感器名称")
private String sensorName;
@ApiModelProperty(value = "消防区域ID") @ApiModelProperty(value = "消防区域ID")
private Long fireRegionId; private Long fireRegionId;
@ -82,6 +87,10 @@ public class AlarmRecordDO extends BaseDO {
@ApiModelProperty(value = "处置人ID") @ApiModelProperty(value = "处置人ID")
private Long disposeUserId; private Long disposeUserId;
@TableField(exist = false)
@ApiModelProperty(value = "处置人姓名")
private String disposeUserName;
@ApiModelProperty(value = "当前处置结果快照") @ApiModelProperty(value = "当前处置结果快照")
private String disposeResult; private String disposeResult;

View File

@ -1,5 +1,6 @@
package com.zcloud.persistence.dataobject; package com.zcloud.persistence.dataobject;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.jjb.saas.framework.repository.basedo.BaseDO; import com.jjb.saas.framework.repository.basedo.BaseDO;
@ -23,18 +24,32 @@ public class DeviceRegionDO extends BaseDO {
@ApiModelProperty(value = "外部消防区域主键") @ApiModelProperty(value = "外部消防区域主键")
private Long fireRegionId; private Long fireRegionId;
@ApiModelProperty(value = "外部消防区域名称")
private String fireRegionName;
@ApiModelProperty(value = "外部消防区域编码") @ApiModelProperty(value = "外部消防区域编码")
private String fireRegionCode; private String fireRegionCode;
@ApiModelProperty(value = "负责部门ID") @ApiModelProperty(value = "负责部门ID")
private Long departmentId; private Long departmentId;
@TableField(exist = false)
@ApiModelProperty(value = "负责部门名称")
private String departmentName;
@ApiModelProperty(value = "负责人ID") @ApiModelProperty(value = "负责人ID")
private Long managerId; private Long managerId;
@ApiModelProperty(value = "负责人姓名")
private String managerName;
@ApiModelProperty(value = "状态 1启用0停用") @ApiModelProperty(value = "状态 1启用0停用")
private Integer status; private Integer status;
@TableField(exist = false)
@ApiModelProperty(value = "已绑定传感器数量")
private Integer bindSensorCount;
@ApiModelProperty(value = "备注") @ApiModelProperty(value = "备注")
private String remarks; private String remarks;

View File

@ -1,5 +1,6 @@
package com.zcloud.persistence.dataobject; package com.zcloud.persistence.dataobject;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.jjb.saas.framework.repository.basedo.BaseDO; import com.jjb.saas.framework.repository.basedo.BaseDO;
@ -29,6 +30,10 @@ public class SensorDeviceDO extends BaseDO {
@ApiModelProperty(value = "传感器类型主键ID") @ApiModelProperty(value = "传感器类型主键ID")
private Long sensorTypeId; private Long sensorTypeId;
@TableField(exist = false)
@ApiModelProperty(value = "传感器类型名称")
private String sensorTypeName;
@ApiModelProperty(value = "传感器属性快照(NUMBER/SWITCH)") @ApiModelProperty(value = "传感器属性快照(NUMBER/SWITCH)")
private String sensorAttr; private String sensorAttr;

View File

@ -1,8 +1,12 @@
package com.zcloud.persistence.mapper; package com.zcloud.persistence.mapper;
import com.zcloud.persistence.dataobject.AlarmRecordDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zcloud.persistence.dataobject.AlarmRecordDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Map;
/** /**
* AlarmRecordMapper - Mapper * AlarmRecordMapper - Mapper
@ -10,4 +14,13 @@ import org.apache.ibatis.annotations.Mapper;
* @Date 2026-04-03 00:00:00 * @Date 2026-04-03 00:00:00
*/ */
@Mapper @Mapper
public interface AlarmRecordMapper extends BaseMapper<AlarmRecordDO> {} public interface AlarmRecordMapper extends BaseMapper<AlarmRecordDO> {
IPage<AlarmRecordDO> listPage(IPage<AlarmRecordDO> page, @Param("params") Map<String, Object> params);
IPage<AlarmRecordDO> disposeListPage(IPage<AlarmRecordDO> page, @Param("params") Map<String, Object> params);
IPage<AlarmRecordDO> appListPage(IPage<AlarmRecordDO> page, @Param("params") Map<String, Object> params);
IPage<AlarmRecordDO> appDisposeListPage(IPage<AlarmRecordDO> page, @Param("params") Map<String, Object> params);
}

View File

@ -1,8 +1,12 @@
package com.zcloud.persistence.mapper; package com.zcloud.persistence.mapper;
import com.zcloud.persistence.dataobject.DeviceRegionDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zcloud.persistence.dataobject.DeviceRegionDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Map;
/** /**
* DeviceRegionMapper - Mapper * DeviceRegionMapper - Mapper
@ -10,4 +14,7 @@ import org.apache.ibatis.annotations.Mapper;
* @Date 2026-04-03 00:00:00 * @Date 2026-04-03 00:00:00
*/ */
@Mapper @Mapper
public interface DeviceRegionMapper extends BaseMapper<DeviceRegionDO> {} public interface DeviceRegionMapper extends BaseMapper<DeviceRegionDO> {
IPage<DeviceRegionDO> listPage(IPage<DeviceRegionDO> page, @Param("params") Map<String, Object> params);
}

View File

@ -1,8 +1,12 @@
package com.zcloud.persistence.mapper; package com.zcloud.persistence.mapper;
import com.zcloud.persistence.dataobject.SensorDeviceDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zcloud.persistence.dataobject.SensorDeviceDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Map;
/** /**
* SensorDeviceMapper - Mapper * SensorDeviceMapper - Mapper
@ -10,4 +14,7 @@ import org.apache.ibatis.annotations.Mapper;
* @Date 2026-04-03 00:00:00 * @Date 2026-04-03 00:00:00
*/ */
@Mapper @Mapper
public interface SensorDeviceMapper extends BaseMapper<SensorDeviceDO> {} public interface SensorDeviceMapper extends BaseMapper<SensorDeviceDO> {
IPage<SensorDeviceDO> listPage(IPage<SensorDeviceDO> page, @Param("params") Map<String, Object> params);
}

View File

@ -1,8 +1,12 @@
package com.zcloud.persistence.mapper; package com.zcloud.persistence.mapper;
import com.zcloud.persistence.dataobject.SensorTypeDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zcloud.persistence.dataobject.SensorTypeDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Map;
/** /**
* SensorTypeMapper - Mapper * SensorTypeMapper - Mapper
@ -10,4 +14,7 @@ import org.apache.ibatis.annotations.Mapper;
* @Date 2026-04-03 00:00:00 * @Date 2026-04-03 00:00:00
*/ */
@Mapper @Mapper
public interface SensorTypeMapper extends BaseMapper<SensorTypeDO> {} public interface SensorTypeMapper extends BaseMapper<SensorTypeDO> {
IPage<SensorTypeDO> listPage(IPage<SensorTypeDO> page, @Param("params") Map<String, Object> params);
}

View File

@ -1,11 +1,23 @@
package com.zcloud.persistence.repository; package com.zcloud.persistence.repository;
import com.zcloud.persistence.dataobject.AlarmRecordDO; import com.alibaba.cola.dto.PageResponse;
import com.jjb.saas.framework.repository.repo.BaseRepository; import com.jjb.saas.framework.repository.repo.BaseRepository;
import com.zcloud.persistence.dataobject.AlarmRecordDO;
import java.util.Map;
/** /**
* AlarmRecordRepository - * AlarmRecordRepository -
* @Author wangyan * @Author wangyan
* @Date 2026-04-03 00:00:00 * @Date 2026-04-03 00:00:00
*/ */
public interface AlarmRecordRepository extends BaseRepository<AlarmRecordDO> {} public interface AlarmRecordRepository extends BaseRepository<AlarmRecordDO> {
PageResponse<AlarmRecordDO> listPage(Map<String, Object> params);
PageResponse<AlarmRecordDO> disposeListPage(Map<String, Object> params);
PageResponse<AlarmRecordDO> appListPage(Map<String, Object> params);
PageResponse<AlarmRecordDO> appDisposeListPage(Map<String, Object> params);
}

View File

@ -1,11 +1,17 @@
package com.zcloud.persistence.repository; package com.zcloud.persistence.repository;
import com.zcloud.persistence.dataobject.DeviceRegionDO; import com.alibaba.cola.dto.PageResponse;
import com.jjb.saas.framework.repository.repo.BaseRepository; import com.jjb.saas.framework.repository.repo.BaseRepository;
import com.zcloud.persistence.dataobject.DeviceRegionDO;
import java.util.Map;
/** /**
* DeviceRegionRepository - * DeviceRegionRepository -
* @Author wangyan * @Author wangyan
* @Date 2026-04-03 00:00:00 * @Date 2026-04-03 00:00:00
*/ */
public interface DeviceRegionRepository extends BaseRepository<DeviceRegionDO> {} public interface DeviceRegionRepository extends BaseRepository<DeviceRegionDO> {
PageResponse<DeviceRegionDO> listPage(Map<String, Object> params);
}

View File

@ -1,11 +1,17 @@
package com.zcloud.persistence.repository; package com.zcloud.persistence.repository;
import com.zcloud.persistence.dataobject.SensorDeviceDO; import com.alibaba.cola.dto.PageResponse;
import com.jjb.saas.framework.repository.repo.BaseRepository; import com.jjb.saas.framework.repository.repo.BaseRepository;
import com.zcloud.persistence.dataobject.SensorDeviceDO;
import java.util.Map;
/** /**
* SensorDeviceRepository - * SensorDeviceRepository -
* @Author wangyan * @Author wangyan
* @Date 2026-04-03 00:00:00 * @Date 2026-04-03 00:00:00
*/ */
public interface SensorDeviceRepository extends BaseRepository<SensorDeviceDO> {} public interface SensorDeviceRepository extends BaseRepository<SensorDeviceDO> {
PageResponse<SensorDeviceDO> listPage(Map<String, Object> params);
}

View File

@ -1,11 +1,17 @@
package com.zcloud.persistence.repository; package com.zcloud.persistence.repository;
import com.zcloud.persistence.dataobject.SensorTypeDO; import com.alibaba.cola.dto.PageResponse;
import com.jjb.saas.framework.repository.repo.BaseRepository; import com.jjb.saas.framework.repository.repo.BaseRepository;
import com.zcloud.persistence.dataobject.SensorTypeDO;
import java.util.Map;
/** /**
* SensorTypeRepository - * SensorTypeRepository -
* @Author wangyan * @Author wangyan
* @Date 2026-04-03 00:00:00 * @Date 2026-04-03 00:00:00
*/ */
public interface SensorTypeRepository extends BaseRepository<SensorTypeDO> {} public interface SensorTypeRepository extends BaseRepository<SensorTypeDO> {
PageResponse<SensorTypeDO> listPage(Map<String, Object> params);
}

View File

@ -1,12 +1,18 @@
package com.zcloud.persistence.repository.impl; package com.zcloud.persistence.repository.impl;
import com.alibaba.cola.dto.PageResponse;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jjb.saas.framework.repository.common.PageHelper;
import com.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl;
import com.zcloud.persistence.dataobject.SensorDeviceDO; import com.zcloud.persistence.dataobject.SensorDeviceDO;
import com.zcloud.persistence.mapper.SensorDeviceMapper; import com.zcloud.persistence.mapper.SensorDeviceMapper;
import com.zcloud.persistence.repository.SensorDeviceRepository; import com.zcloud.persistence.repository.SensorDeviceRepository;
import com.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl; import com.zcloud.utils.Query;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.Map;
/** /**
* SensorDeviceRepositoryImpl - * SensorDeviceRepositoryImpl -
* @Author wangyan * @Author wangyan
@ -15,4 +21,13 @@ import org.springframework.stereotype.Repository;
@Repository @Repository
@RequiredArgsConstructor @RequiredArgsConstructor
public class SensorDeviceRepositoryImpl extends BaseRepositoryImpl<SensorDeviceMapper, SensorDeviceDO> implements SensorDeviceRepository { public class SensorDeviceRepositoryImpl extends BaseRepositoryImpl<SensorDeviceMapper, SensorDeviceDO> implements SensorDeviceRepository {
private final SensorDeviceMapper sensorDeviceMapper;
@Override
public PageResponse<SensorDeviceDO> listPage(Map<String, Object> params) {
IPage<SensorDeviceDO> page = new Query<SensorDeviceDO>().getPage(params);
IPage<SensorDeviceDO> result = sensorDeviceMapper.listPage(page, params);
return PageHelper.pageToResponse(result, result.getRecords());
}
} }

View File

@ -1,12 +1,18 @@
package com.zcloud.persistence.repository.impl; package com.zcloud.persistence.repository.impl;
import com.alibaba.cola.dto.PageResponse;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jjb.saas.framework.repository.common.PageHelper;
import com.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl;
import com.zcloud.persistence.dataobject.SensorTypeDO; import com.zcloud.persistence.dataobject.SensorTypeDO;
import com.zcloud.persistence.mapper.SensorTypeMapper; import com.zcloud.persistence.mapper.SensorTypeMapper;
import com.zcloud.persistence.repository.SensorTypeRepository; import com.zcloud.persistence.repository.SensorTypeRepository;
import com.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl; import com.zcloud.utils.Query;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.Map;
/** /**
* SensorTypeRepositoryImpl - * SensorTypeRepositoryImpl -
* @Author wangyan * @Author wangyan
@ -15,4 +21,13 @@ import org.springframework.stereotype.Repository;
@Repository @Repository
@RequiredArgsConstructor @RequiredArgsConstructor
public class SensorTypeRepositoryImpl extends BaseRepositoryImpl<SensorTypeMapper, SensorTypeDO> implements SensorTypeRepository { public class SensorTypeRepositoryImpl extends BaseRepositoryImpl<SensorTypeMapper, SensorTypeDO> implements SensorTypeRepository {
private final SensorTypeMapper sensorTypeMapper;
@Override
public PageResponse<SensorTypeDO> listPage(Map<String, Object> params) {
IPage<SensorTypeDO> page = new Query<SensorTypeDO>().getPage(params);
IPage<SensorTypeDO> result = sensorTypeMapper.listPage(page, params);
return PageHelper.pageToResponse(result, result.getRecords());
}
} }