优化报警处置和设备管理功能

main
zhangyue 2026-04-29 15:39:51 +08:00
parent a0b140ae8f
commit 800da5d77d
56 changed files with 771 additions and 458 deletions

View File

@ -34,19 +34,15 @@ public class AlarmDisposeController {
return alarmDisposeService.assignList(qry);
}
@ApiOperation("单条处置分配")
@ApiOperation("处置分配")
@PostMapping("/assign")
@PreAuthorize("@pms.hasAnyPermission('iotalarm-alarmdispose-assign')")
// @PreAuthorize("@pms.hasAnyPermission('iotalarm-alarmdispose-assign')")
public SingleResponse assign(@Validated @RequestBody AlarmDisposeAssignCmd cmd) {
if (cmd.getTenantId() == null) {
cmd.setTenantId(com.jjb.saas.framework.auth.utils.AuthContext.getTenantId());
}
return alarmDisposeService.assign(cmd);
}
@ApiOperation("批量处置分配")
@PostMapping("/batchAssign")
@PreAuthorize("@pms.hasAnyPermission('iotalarm-alarmdispose-batchassign')")
public SingleResponse batchAssign(@Validated @RequestBody AlarmDisposeBatchAssignCmd cmd) {
if (cmd.getTenantId() == null) {
cmd.setTenantId(com.jjb.saas.framework.auth.utils.AuthContext.getTenantId());

View File

@ -4,6 +4,7 @@ import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.api.AlarmRecordServiceI;
import com.zcloud.dto.AlarmRecordPageQry;
import com.zcloud.dto.AlarmRecordSensorPageQry;
import com.zcloud.dto.clientobject.AlarmRecordCO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -25,14 +26,21 @@ public class AlarmRecordController {
@ApiOperation("报警记录列表")
@PostMapping("/list")
@PreAuthorize("@pms.hasAnyPermission('iotalarm-alarmrecord-list')")
// @PreAuthorize("@pms.hasAnyPermission('iotalarm-alarmrecord-list')")
public PageResponse<AlarmRecordCO> list(@RequestBody AlarmRecordPageQry qry) {
return alarmRecordService.list(qry);
}
@ApiOperation("按设备查询报警记录")
@PostMapping("/listBySensorDevice")
// @PreAuthorize("@pms.hasAnyPermission('iotalarm-alarmrecord-list')")
public PageResponse<AlarmRecordCO> listBySensorDevice(@RequestBody AlarmRecordSensorPageQry qry) {
return alarmRecordService.listBySensorDevice(qry);
}
@ApiOperation("报警详情")
@GetMapping("/{id}")
@PreAuthorize("@pms.hasAnyPermission('iotalarm-alarmrecord-info')")
// @PreAuthorize("@pms.hasAnyPermission('iotalarm-alarmrecord-info')")
public SingleResponse<AlarmRecordCO> info(@PathVariable("id") Long id) {
return alarmRecordService.info(id);
}

View File

@ -30,42 +30,42 @@ public class DeviceRegionController {
@ApiOperation("分页列表")
@PostMapping("/list")
@PreAuthorize("@pms.hasAnyPermission('iotalarm-deviceregion-list')")
// @PreAuthorize("@pms.hasAnyPermission('iotalarm-deviceregion-list')")
public PageResponse<DeviceRegionCO> list(@RequestBody DeviceRegionPageQry qry) {
return deviceRegionService.listPage(qry);
}
@ApiOperation("新增或修改")
@PostMapping("/saveOrUpdate")
@PreAuthorize("@pms.hasAnyPermission('iotalarm-deviceregion-add')")
// @PreAuthorize("@pms.hasAnyPermission('iotalarm-deviceregion-add')")
public SingleResponse<String> saveOrUpdate(@Validated @RequestBody DeviceRegionAddCmd cmd) {
return deviceRegionService.saveOrUpdate(cmd);
}
@ApiOperation("绑定传感器")
@PostMapping("/bindSensor")
@PreAuthorize("@pms.hasAnyPermission('iotalarm-deviceregion-edit')")
// @PreAuthorize("@pms.hasAnyPermission('iotalarm-deviceregion-edit')")
public SingleResponse bindSensor(@Validated @RequestBody BindSensorCmd cmd) {
return deviceRegionService.bindSensor(cmd);
}
@ApiOperation("解绑传感器")
@PostMapping("/unbindSensor")
@PreAuthorize("@pms.hasAnyPermission('iotalarm-deviceregion-edit')")
// @PreAuthorize("@pms.hasAnyPermission('iotalarm-deviceregion-edit')")
public SingleResponse unbindSensor(@Validated @RequestBody UnbindSensorCmd cmd) {
return deviceRegionService.unbindSensor(cmd);
}
@ApiOperation("负责人配置")
@PutMapping("/manager")
@PreAuthorize("@pms.hasAnyPermission('iotalarm-deviceregion-edit')")
// @PreAuthorize("@pms.hasAnyPermission('iotalarm-deviceregion-edit')")
public SingleResponse manager(@Validated @RequestBody ManagerCmd cmd) {
return deviceRegionService.manager(cmd);
}
@ApiOperation("删除")
@DeleteMapping("/{id}")
@PreAuthorize("@pms.hasAnyPermission('iotalarm-deviceregion-delete')")
// @PreAuthorize("@pms.hasAnyPermission('iotalarm-deviceregion-delete')")
public SingleResponse remove(@PathVariable("id") Long id) {
deviceRegionService.remove(id);
return SingleResponse.buildSuccess();
@ -73,8 +73,8 @@ public class DeviceRegionController {
@ApiOperation("详情")
@GetMapping("/{id}")
@PreAuthorize("@pms.hasAnyPermission('iotalarm-deviceregion-list')")
public SingleResponse<DeviceRegionCO> info(@PathVariable("id") Long id) {
return deviceRegionService.info(id);
// @PreAuthorize("@pms.hasAnyPermission('iotalarm-deviceregion-list')")
public SingleResponse<DeviceRegionCO> info(@PathVariable("id") String fireRegionId) {
return deviceRegionService.info(fireRegionId);
}
}

View File

@ -3,10 +3,7 @@ package com.zcloud.web;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.api.SensorDeviceServiceI;
import com.zcloud.dto.SensorDeviceAddCmd;
import com.zcloud.dto.SensorDevicePageQry;
import com.zcloud.dto.SensorDeviceThresholdCmd;
import com.zcloud.dto.SensorDeviceUpdateCmd;
import com.zcloud.dto.*;
import com.zcloud.dto.clientobject.SensorDeviceCO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -29,29 +26,41 @@ public class SensorDeviceController {
@ApiOperation("新增")
@PostMapping("/save")
@PreAuthorize("@pms.hasAnyPermission('iotalarm-sensordevice-add')")
// @PreAuthorize("@pms.hasAnyPermission('iotalarm-sensordevice-add')")
public SingleResponse<String> save(@Validated @RequestBody SensorDeviceAddCmd cmd) {
return sensorDeviceService.add(cmd);
}
@ApiOperation("分页列表")
@PostMapping("/list")
@PreAuthorize("@pms.hasAnyPermission('iotalarm-sensordevice-list')")
// @PreAuthorize("@pms.hasAnyPermission('iotalarm-sensordevice-list')")
public PageResponse<SensorDeviceCO> list(@RequestBody SensorDevicePageQry qry) {
return sensorDeviceService.listPage(qry);
}
@ApiOperation("修改")
@PutMapping("/edit")
@PreAuthorize("@pms.hasAnyPermission('iotalarm-sensordevice-edit')")
@PostMapping("/edit")
// @PreAuthorize("@pms.hasAnyPermission('iotalarm-sensordevice-edit')")
public SingleResponse edit(@Validated @RequestBody SensorDeviceUpdateCmd cmd) {
sensorDeviceService.edit(cmd);
return SingleResponse.buildSuccess();
}
@ApiOperation("定位")
@PostMapping("/location")
// @PreAuthorize("@pms.hasAnyPermission('iotalarm-sensordevice-edit')")
public SingleResponse location(@Validated @RequestBody SensorDeviceLocationCmd cmd) {
sensorDeviceService.location(cmd);
return SingleResponse.buildSuccess();
}
@ApiOperation("状态切换")
@PutMapping("/status")
@PreAuthorize("@pms.hasAnyPermission('iotalarm-sensordevice-edit')")
// @PreAuthorize("@pms.hasAnyPermission('iotalarm-sensordevice-edit')")
public SingleResponse updateStatus(@RequestParam Long id, @RequestParam String status) {
sensorDeviceService.updateStatus(id, status);
return SingleResponse.buildSuccess();
@ -59,15 +68,15 @@ public class SensorDeviceController {
@ApiOperation("阈值配置")
@PutMapping("/threshold")
@PreAuthorize("@pms.hasAnyPermission('iotalarm-sensordevice-edit')")
// @PreAuthorize("@pms.hasAnyPermission('iotalarm-sensordevice-edit')")
public SingleResponse updateThreshold(@Validated @RequestBody SensorDeviceThresholdCmd cmd) {
sensorDeviceService.updateThreshold(cmd);
return SingleResponse.buildSuccess();
}
@ApiOperation("删除")
@DeleteMapping("/{id}")
@PreAuthorize("@pms.hasAnyPermission('iotalarm-sensordevice-delete')")
@PostMapping("/{id}")
// @PreAuthorize("@pms.hasAnyPermission('iotalarm-sensordevice-delete')")
public SingleResponse remove(@PathVariable("id") Long id) {
sensorDeviceService.remove(id);
return SingleResponse.buildSuccess();

View File

@ -1,6 +1,8 @@
package com.zcloud.command;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.cola.dto.SingleResponse;
import com.alibaba.cola.exception.BizException;
import com.zcloud.domain.gateway.AlarmRecordGateway;
import com.zcloud.domain.gateway.AlarmDisposeLogGateway;
@ -20,6 +22,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
/**
* AlarmDisposeAssignExe -
@ -37,63 +40,44 @@ public class AlarmDisposeAssignExe {
private final AlarmTodoService alarmTodoService;
@Transactional(rollbackFor = Exception.class)
public void execute(AlarmDisposeAssignCmd cmd) {
// 查询报警记录
AlarmRecordE alarmRecord = alarmRecordGateway.getById(cmd.getId());
if (Tools.isEmpty(alarmRecord)) {
throw new BizException("报警记录不存在");
public SingleResponse execute(AlarmDisposeAssignCmd cmd) {
List<Long> ids = cmd.getIds();
if (Tools.isEmpty(ids)) {
throw new BizException("请选择要处置的报警记录");
}
// 检查状态:只有待研判(10)状态可以分配
if (alarmRecord.getStatus() != 10) {
throw new BizException("该报警已分配或已处置,无法再次分配");
// 获取当前时间的LocalDateTime "yyyy-MM-dd HH:mm:ss"
LocalDateTime assignTime = LocalDateTime.now();
for (Long id : ids) {
StringBuffer msg = new StringBuffer();
// 查询报警记录
AlarmRecordE alarmRecord = alarmRecordGateway.getById(id);
if (Tools.isEmpty(alarmRecord)) {
return SingleResponse.buildFailure("id:"+id+"报警记录不存在;");
}
// 检查状态:只有待研判(10)状态可以分配
if (alarmRecord.getStatus() != 10) {
return SingleResponse.buildFailure("报警编码为"+alarmRecord.getAlarmNo()+"报警记录状态不是待处置;");
}
// 更新报警记录状态和处置人
AlarmRecordE updateEntity = new AlarmRecordE();
BeanUtil.copyProperties(cmd, updateEntity);
updateEntity.setId( id);
updateEntity.setAssignTime(assignTime);
alarmRecordGateway.update(updateEntity);
}
// 更新报警记录状态和处置人
AlarmRecordE updateEntity = new AlarmRecordE();
BeanUtils.copyProperties(cmd, updateEntity);
updateEntity.setId(cmd.getId());
updateEntity.setStatus(20); // 待处置
updateEntity.setManagerId(cmd.getDisposeUserId());
updateEntity.setDisposeUserId(cmd.getDisposeUserId());
updateEntity.setAssignTime(LocalDateTime.now());
if (StrUtil.isNotBlank(cmd.getAlarmLevel())) {
updateEntity.setAlarmLevel(cmd.getAlarmLevel());
}
if (StrUtil.isNotBlank(cmd.getAlarmType())) {
updateEntity.setAlarmType(cmd.getAlarmType());
}
Boolean res = alarmRecordGateway.update(updateEntity);
if (!res) {
throw new BizException("分配失败");
}
// 记录处置日志
AlarmDisposeLogE log = new AlarmDisposeLogE();
log.setAlarmDisposalLogId(UuidUtil.get32UUID());
log.setAlarmId(cmd.getId());
log.setAlarmNo(alarmRecord.getAlarmNo());
log.setActionType("MANUAL_ASSIGN");
log.setBeforeStatus(10);
log.setAfterStatus(20);
log.setOperatorId(cmd.getDisposeUserId());
log.setActionDesc("手动分配处置");
log.setActionTime(LocalDateTime.now());
log.setTenantId(cmd.getTenantId());
log.setOrgId(cmd.getOrgId());
log.setDeleteEnum("FALSE");
alarmDisposeLogGateway.add(log);
// 发送报警处置推送消息给处置人
// 更新后的报警记录包含分配时间和处置说明
alarmMessageService.sendDisposePushMessage(updateEntity, cmd.getDisposeUserId());
// 新增处置人待办
alarmTodoService.addDisposeTodo(updateEntity, cmd.getDisposeUserId());
// 完成负责人待办(原来负责人是 alarmRecord.getManagerId()
alarmTodoService.completeTodo(cmd.getId());
return SingleResponse.buildSuccess();
//
// // 发送报警处置推送消息给处置人
// // 更新后的报警记录包含分配时间和处置说明
// alarmMessageService.sendDisposePushMessage(updateEntity, cmd.getDisposeUserId());
//
// // 新增处置人待办
// alarmTodoService.addDisposeTodo(updateEntity, cmd.getDisposeUserId());
//
// // 完成负责人待办(原来负责人是 alarmRecord.getManagerId()
// alarmTodoService.completeTodo(cmd.getId());
}
}

View File

@ -1,5 +1,6 @@
package com.zcloud.command;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.cola.exception.BizException;
import com.zcloud.domain.gateway.DeviceRegionGateway;
import com.zcloud.domain.gateway.RegionSensorRelGateway;
@ -8,12 +9,16 @@ import com.zcloud.domain.model.RegionSensorRelE;
import com.zcloud.dto.BindSensorCmd;
import com.zcloud.gbscommon.utils.Tools;
import com.zcloud.gbscommon.utils.UuidUtil;
import com.zcloud.persistence.dataobject.RegionSensorRelDO;
import com.zcloud.persistence.repository.RegionSensorRelRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* BindSensorExe -
* @Author wangyan
@ -26,33 +31,15 @@ public class BindSensorExe {
private final RegionSensorRelGateway regionSensorRelGateway;
private final DeviceRegionGateway deviceRegionGateway;
private final RegionSensorRelRepository regionSensorRelRepository;
@Transactional(rollbackFor = Exception.class)
public void execute(BindSensorCmd cmd) {
// 检查传感器是否已绑定到其他区域
Boolean isBound = regionSensorRelGateway.isSensorBound(cmd.getSensorDeviceId());
if (isBound) {
throw new BizException("该传感器已绑定到其他区域,请先解绑");
}
// 检查区域配置是否存在
DeviceRegionE region = deviceRegionGateway.getById(cmd.getRegionConfigId());
if (Tools.isEmpty(region)) {
throw new BizException("区域配置不存在");
}
// 删除旧数据
regionSensorRelGateway.removeByRegionId(cmd.getFireRegionId());
RegionSensorRelE entity = new RegionSensorRelE();
entity.setRegionConfigId(String.valueOf(cmd.getRegionConfigId()));
entity.setSensorDeviceId(cmd.getSensorDeviceId());
entity.setSensorCode(cmd.getSensorCode());
entity.setRegionSensorRelId(UuidUtil.get32UUID());
entity.setFireRegionId(cmd.getFireRegionId());
// 设置默认值
entity.setDeleteEnum("FALSE");
Long res = regionSensorRelGateway.add(entity);
if (Tools.isEmpty(res)) {
throw new BizException("绑定失败");
}
List<RegionSensorRelE> relList = entity.initList(cmd.getFireRegionId(), cmd.getDeviceIdList());
regionSensorRelRepository.saveBatch(BeanUtil.copyToList(relList, RegionSensorRelDO.class));
}
}
}

View File

@ -1,11 +1,18 @@
package com.zcloud.command;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.cola.exception.BizException;
import com.zcloud.domain.gateway.DeviceRegionGateway;
import com.zcloud.domain.gateway.RegionSensorRelGateway;
import com.zcloud.domain.model.DeviceRegionE;
import com.zcloud.dto.ManagerCmd;
import com.zcloud.gbscommon.utils.Tools;
import com.zcloud.gbscommon.utils.UuidUtil;
import com.zcloud.persistence.dataobject.DeviceRegionDO;
import com.zcloud.persistence.dataobject.UserDO;
import com.zcloud.persistence.repository.DeviceRegionRepository;
import com.zcloud.persistence.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
@ -22,21 +29,25 @@ import org.springframework.transaction.annotation.Transactional;
public class ManagerExe {
private final DeviceRegionGateway deviceRegionGateway;
private final UserRepository userRepository;
private final DeviceRegionRepository deviceRegionRepository;
@Transactional(rollbackFor = Exception.class)
public void execute(ManagerCmd cmd) {
DeviceRegionE existingRegion = deviceRegionGateway.getById(cmd.getId());
if (Tools.isEmpty(existingRegion)) {
throw new BizException("区域配置不存在");
}
Boolean res = deviceRegionGateway.updateManager(
cmd.getId(),
cmd.getManagerId(),
cmd.getDepartmentId()
);
if (!res) {
throw new BizException("负责人配置失败");
DeviceRegionE existingRegion = new DeviceRegionE();
BeanUtil.copyProperties(cmd, existingRegion);
UserDO userDO = userRepository.findById(cmd.getManagerId());
existingRegion.setManagerName(userDO.getName());
existingRegion.setManagerId(userDO.getId());
existingRegion.setDepartmentId(userDO.getDepartmentId());
DeviceRegionDO regionInfo = deviceRegionRepository.findRegionById(cmd.getFireRegionId());
existingRegion.setFireRegionCode(regionInfo.getFireRegionCode());
if (ObjectUtil.isEmpty(cmd.getRegionConfigId())){
existingRegion.setRegionConfigId(UuidUtil.get32UUID());
deviceRegionGateway.add(existingRegion);
} else {
deviceRegionRepository.updateByRegionConfigId(BeanUtil.copyProperties(existingRegion, DeviceRegionDO.class));
}
}
}

View File

@ -3,6 +3,7 @@ package com.zcloud.command;
import com.alibaba.cola.exception.BizException;
import com.zcloud.domain.gateway.SensorDeviceGateway;
import com.zcloud.domain.model.SensorDeviceE;
import com.zcloud.dto.SensorDeviceLocationCmd;
import com.zcloud.dto.SensorDeviceUpdateCmd;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
@ -26,11 +27,22 @@ public class SensorDeviceUpdateExe {
public boolean execute(SensorDeviceUpdateCmd cmd) {
SensorDeviceE entity = new SensorDeviceE();
BeanUtils.copyProperties(cmd, entity);
boolean res = sensorDeviceGateway.update(entity);
if (!res) {
throw new BizException("修改失败");
}
return true;
}
}
@Transactional(rollbackFor = Exception.class)
public boolean locationExecute(SensorDeviceLocationCmd cmd) {
SensorDeviceE entity = new SensorDeviceE();
BeanUtils.copyProperties(cmd, entity);
boolean res = sensorDeviceGateway.update(entity);
if (!res) {
throw new BizException("修改失败");
}
return true;
}
}

View File

@ -7,6 +7,7 @@ import com.alibaba.cola.dto.SingleResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.dto.AlarmRecordPageQry;
import com.zcloud.dto.AlarmRecordSensorPageQry;
import com.zcloud.dto.clientobject.AlarmRecordCO;
import com.zcloud.gbscommon.utils.PageQueryHelper;
import com.zcloud.persistence.dataobject.AlarmRecordDO;
@ -47,6 +48,14 @@ public class AlarmRecordQueryExe {
return PageResponse.of(alarmRecordCOs, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
}
public PageResponse<AlarmRecordCO> listBySensorDevice(AlarmRecordSensorPageQry qry) {
Map<String, Object> params = PageQueryHelper.toHashMap(qry);
params.put("tenantId", AuthContext.getTenantId());
PageResponse<AlarmRecordDO> pageResponse = alarmRecordRepository.listBySensorDevice(params);
List<AlarmRecordCO> alarmRecordCOs = BeanUtil.copyToList(pageResponse.getData(), AlarmRecordCO.class);
return PageResponse.of(alarmRecordCOs, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
}
public SingleResponse<AlarmRecordCO> getById(Long id) {
AlarmRecordDO d = alarmRecordRepository.detailView(id);
if (d == null || "TRUE".equals(d.getDeleteEnum())) {

View File

@ -47,7 +47,6 @@ public class AppAlarmDisposeQueryExe {
*/
public PageResponse<AlarmRecordCO> execute(AppAlarmDisposePageQry qry) {
Map<String, Object> params = PageQueryHelper.toHashMap(qry);
params.put("tenantId", AuthContext.getTenantId());
params.put("disposeUserId", AuthContext.getUserId());
PageResponse<AlarmRecordDO> pageResponse = alarmRecordRepository.appDisposeListPage(params);
List<AlarmRecordCO> alarmRecordCOS = alarmRecordCoConvertor.converDOsToCOs(pageResponse.getData());

View File

@ -53,16 +53,17 @@ public class DeviceRegionQueryExe {
return PageResponse.of(deviceRegionCOs, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
}
public SingleResponse<DeviceRegionCO> getById(Long id) {
DeviceRegionDO d = deviceRegionRepository.getById(id);
public SingleResponse<DeviceRegionCO> getById(String fireRegionId) {
DeviceRegionDO d = deviceRegionRepository.findRegionById(fireRegionId);
if (d == null || "TRUE".equals(d.getDeleteEnum())) {
return SingleResponse.buildFailure("记录不存在或已被删除");
}
List<RegionSensorRelDO> regionSensorRelList = regionSensorRelRepository.listByFireRegionId(fireRegionId);
DeviceRegionCO co = new DeviceRegionCO();
BeanUtils.copyProperties(d, co);
fillBindSensorInfo(Collections.singletonList(co), true);
fillDisplayFields(Collections.singletonList(co));
BeanUtil.copyProperties(d, co);
co.setBoundSensors(BeanUtil.copyToList(regionSensorRelList, SensorDeviceCO.class));
return SingleResponse.of(co);
}
@ -80,43 +81,43 @@ public class DeviceRegionQueryExe {
}
LambdaQueryWrapper<RegionSensorRelDO> relWrapper = new LambdaQueryWrapper<>();
relWrapper.in(RegionSensorRelDO::getRegionConfigId, regionIds)
.eq(RegionSensorRelDO::getDeleteEnum, "FALSE");
List<RegionSensorRelDO> relList = regionSensorRelRepository.list(relWrapper);
Map<String, List<RegionSensorRelDO>> relMap = relList.stream()
.collect(Collectors.groupingBy(RegionSensorRelDO::getRegionConfigId));
// relWrapper.in(RegionSensorRelDO::getRegionConfigId, regionIds)
// .eq(RegionSensorRelDO::getDeleteEnum, "FALSE");
// List<RegionSensorRelDO> relList = regionSensorRelRepository.list(relWrapper);
//
// Map<String, List<RegionSensorRelDO>> relMap = relList.stream()
// .collect(Collectors.groupingBy(RegionSensorRelDO::getRegionConfigId));
Map<Long, SensorDeviceCO> sensorMap = Collections.emptyMap();
if (includeBoundSensors && !relList.isEmpty()) {
Set<String> sensorIds = relList.stream()
.map(RegionSensorRelDO::getSensorDeviceId)
.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::getSensorDeviceId)
.map(sensorMap::get)
.filter(ObjectUtil::isNotEmpty)
.collect(Collectors.toList());
deviceRegionCO.setBoundSensors(boundSensors);
}
// if (includeBoundSensors && !relList.isEmpty()) {
// Set<String> sensorIds = relList.stream()
// .map(RegionSensorRelDO::getSensorDeviceId)
// .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::getSensorDeviceId)
// .map(sensorMap::get)
// .filter(ObjectUtil::isNotEmpty)
// .collect(Collectors.toList());
// deviceRegionCO.setBoundSensors(boundSensors);
// }
}
private void fillDisplayFields(List<DeviceRegionCO> deviceRegionCOs) {

View File

@ -1,6 +1,7 @@
package com.zcloud.service;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.api.AlarmDisposeServiceI;
import com.zcloud.command.AlarmDisposeAssignExe;
@ -39,8 +40,7 @@ public class AlarmDisposeServiceImpl implements AlarmDisposeServiceI {
@Override
public SingleResponse assign(AlarmDisposeAssignCmd cmd) {
alarmDisposeAssignExe.execute(cmd);
return SingleResponse.buildSuccess();
return alarmDisposeAssignExe.execute(cmd);
}
@Override

View File

@ -8,6 +8,7 @@ import com.zcloud.command.query.AlarmRecordQueryExe;
import com.zcloud.command.query.AppAlarmDisposeQueryExe;
import com.zcloud.command.query.AppAlarmRecordQueryExe;
import com.zcloud.dto.AlarmRecordPageQry;
import com.zcloud.dto.AlarmRecordSensorPageQry;
import com.zcloud.dto.AppAlarmDisposePageQry;
import com.zcloud.dto.AppAlarmRecordPageQry;
import com.zcloud.dto.clientobject.AlarmRecordCO;
@ -27,6 +28,11 @@ public class AlarmRecordServiceImpl implements AlarmRecordServiceI {
return alarmRecordQueryExe.execute(qry);
}
@Override
public PageResponse<AlarmRecordCO> listBySensorDevice(AlarmRecordSensorPageQry qry) {
return alarmRecordQueryExe.listBySensorDevice(qry);
}
@Override
public SingleResponse<AlarmRecordCO> info(Long id) {
return alarmRecordQueryExe.getById(id);

View File

@ -22,7 +22,7 @@ import org.springframework.stereotype.Service;
@Service
@AllArgsConstructor
public class DeviceRegionServiceImpl implements DeviceRegionServiceI {
private final DeviceRegionAddExe deviceRegionAddExe;
private final DeviceRegionUpdateExe deviceRegionUpdateExe;
private final DeviceRegionQueryExe deviceRegionQueryExe;
@ -71,7 +71,7 @@ public class DeviceRegionServiceImpl implements DeviceRegionServiceI {
}
@Override
public SingleResponse<DeviceRegionCO> info(Long id) {
return deviceRegionQueryExe.getById(id);
public SingleResponse<DeviceRegionCO> info(String fireRegionId) {
return deviceRegionQueryExe.getById(fireRegionId);
}
}

View File

@ -9,10 +9,7 @@ import com.zcloud.command.SensorDeviceThresholdExe;
import com.zcloud.command.SensorDeviceUpdateExe;
import com.zcloud.command.query.SensorDeviceQueryExe;
import com.zcloud.command.SensorDeviceAddExe;
import com.zcloud.dto.SensorDeviceAddCmd;
import com.zcloud.dto.SensorDevicePageQry;
import com.zcloud.dto.SensorDeviceThresholdCmd;
import com.zcloud.dto.SensorDeviceUpdateCmd;
import com.zcloud.dto.*;
import com.zcloud.dto.clientobject.SensorDeviceCO;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
@ -20,7 +17,7 @@ import org.springframework.stereotype.Service;
@Service
@AllArgsConstructor
public class SensorDeviceServiceImpl implements SensorDeviceServiceI {
private final SensorDeviceAddExe sensorDeviceAddExe;
private final SensorDeviceUpdateExe sensorDeviceUpdateExe;
private final SensorDeviceQueryExe sensorDeviceQueryExe;
@ -44,6 +41,11 @@ public class SensorDeviceServiceImpl implements SensorDeviceServiceI {
sensorDeviceUpdateExe.execute(cmd);
}
@Override
public void location(SensorDeviceLocationCmd cmd) {
sensorDeviceUpdateExe.locationExecute(cmd);
}
@Override
public void updateStatus(Long id, String status) {
sensorDeviceStatusExe.execute(id, status);
@ -63,4 +65,5 @@ public class SensorDeviceServiceImpl implements SensorDeviceServiceI {
public SingleResponse<SensorDeviceCO> info(Long id) {
return sensorDeviceQueryExe.getById(id);
}
}
}

View File

@ -3,6 +3,7 @@ package com.zcloud.api;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.dto.AlarmRecordPageQry;
import com.zcloud.dto.AlarmRecordSensorPageQry;
import com.zcloud.dto.AppAlarmDisposePageQry;
import com.zcloud.dto.AppAlarmRecordPageQry;
import com.zcloud.dto.clientobject.AlarmRecordCO;
@ -21,6 +22,8 @@ public interface AlarmRecordServiceI {
*/
PageResponse<AlarmRecordCO> list(AlarmRecordPageQry qry);
PageResponse<AlarmRecordCO> listBySensorDevice(AlarmRecordSensorPageQry qry);
/**
*
* @param id

View File

@ -63,5 +63,5 @@ public interface DeviceRegionServiceI {
* @param id
* @return
*/
SingleResponse<DeviceRegionCO> info(Long id);
SingleResponse<DeviceRegionCO> info(String fireRegionId);
}

View File

@ -2,10 +2,7 @@ package com.zcloud.api;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.dto.SensorDeviceAddCmd;
import com.zcloud.dto.SensorDevicePageQry;
import com.zcloud.dto.SensorDeviceUpdateCmd;
import com.zcloud.dto.SensorDeviceThresholdCmd;
import com.zcloud.dto.*;
import com.zcloud.dto.clientobject.SensorDeviceCO;
/**
@ -35,6 +32,12 @@ public interface SensorDeviceServiceI {
*/
void edit(SensorDeviceUpdateCmd cmd);
/**
*
* @param cmd
*/
void location(SensorDeviceLocationCmd cmd);
/**
*
* @param id
@ -60,4 +63,4 @@ public interface SensorDeviceServiceI {
* @return
*/
SingleResponse<SensorDeviceCO> info(Long id);
}
}

View File

@ -7,6 +7,8 @@ import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import java.util.List;
/**
* AlarmDisposeAssignCmd -
* @Author wangyan
@ -17,22 +19,24 @@ import lombok.AllArgsConstructor;
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class AlarmDisposeAssignCmd extends Command {
@ApiModelProperty(value = "报警主键ID", name = "id", required = true)
private Long id;
@ApiModelProperty(value = "报警主键IDs", name = "ids", required = true)
private List<Long> ids;
@ApiModelProperty(value = "处置人ID", name = "disposeUserId", required = true)
private Long disposeUserId;
@ApiModelProperty(value = "报警级别", name = "alarmLevel")
private String alarmLevel;
@ApiModelProperty(value = "报警确认", name = "status 确认报警-20 误报-40")
private Integer status;
@ApiModelProperty(value = "报警级别", name = "alarmLevel")
private String alarmLevelName;
@ApiModelProperty(value = "报警类型", name = "alarmType")
private String alarmType;
@ApiModelProperty(value = "租户ID", name = "tenantId")
private Long tenantId;
@ApiModelProperty(value = "组织ID", name = "orgId")
private Long orgId;
}
@ApiModelProperty(value = "报警类型", name = "alarmType")
private String alarmTypeName;
}

View File

@ -0,0 +1,21 @@
package com.zcloud.dto;
import com.alibaba.cola.dto.PageQuery;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* AlarmRecordSensorPageQry -
*/
@Data
public class AlarmRecordSensorPageQry extends PageQuery {
@ApiModelProperty(value = "设备业务ID")
private String sensorDeviceId;
@ApiModelProperty(value = "报警时间开始")
private String alarmTimeStart;
@ApiModelProperty(value = "报警时间结束")
private String alarmTimeEnd;
}

View File

@ -7,6 +7,10 @@ import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* BindSensorCmd -
* @Author wangyan
@ -18,21 +22,13 @@ import lombok.AllArgsConstructor;
@EqualsAndHashCode(callSuper = true)
public class BindSensorCmd extends Command {
@ApiModelProperty(value = "区域配置主键ID", name = "regionConfigId", required = true)
private Long regionConfigId;
@ApiModelProperty(value = "外部消防区域ID", name = "fireRegionId")
@NotEmpty(message = "外部消防区域ID不能为空")
private String fireRegionId;
@ApiModelProperty(value = "传感器设备ID", name = "sensorDeviceId", required = true)
private String sensorDeviceId;
@ApiModelProperty(value = "传感器编码快照", name = "sensorCode")
private String sensorCode;
@ApiModelProperty(value = "租户ID", name = "tenantId")
private Long tenantId;
@ApiModelProperty(value = "组织ID", name = "orgId")
private Long orgId;
}
@NotNull(message = "传感器设备ID不能为空")
private List<String> deviceIdList;
}

View File

@ -7,6 +7,9 @@ import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
/**
* ManagerCmd -
* @Author wangyan
@ -17,16 +20,12 @@ import lombok.AllArgsConstructor;
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class ManagerCmd extends Command {
@ApiModelProperty(value = "区域配置主键ID", name = "id", required = true)
private Long id;
@ApiModelProperty(value = "区域配置主键ID", name = "regionConfigId", required = true)
private String regionConfigId;
@ApiModelProperty(value = "消防区域ID", name = "fireRegionId", required = true)
@NotEmpty(message = "消防区域ID不能为空")
private String fireRegionId;
@ApiModelProperty(value = "负责人ID", name = "managerId", required = true)
@NotNull(message = "负责人ID不能为空")
private Long managerId;
@ApiModelProperty(value = "负责人姓名", name = "managerName")
private String managerName;
@ApiModelProperty(value = "负责部门ID", name = "departmentId")
private Long departmentId;
}

View File

@ -1,12 +1,17 @@
package com.zcloud.dto;
import com.alibaba.cola.dto.Command;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import javax.validation.constraints.NotEmpty;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* SensorDeviceAddCmd -
* @Author wangyan
@ -17,70 +22,42 @@ import lombok.AllArgsConstructor;
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class SensorDeviceAddCmd extends Command {
@ApiModelProperty(value = "传感器编码", name = "sensorCode", required = true)
@NotEmpty(message = "传感器编码不能为空")
private String sensorCode;
@ApiModelProperty(value = "传感器名称", name = "sensorName", required = true)
@NotEmpty(message = "传感器名称不能为空")
private String sensorName;
@ApiModelProperty(value = "传感器类型主键ID", name = "sensorTypeId", required = true)
@NotEmpty(message = "传感器类型主键ID不能为空")
private String sensorTypeId;
@ApiModelProperty(value = "传感器属性快照(NUMBER/SWITCH)", name = "sensorAttr", required = true)
@NotEmpty(message = "传感器属性快照不能为空")
private String sensorAttr;
@ApiModelProperty(value = "传感器状态", name = "sensorStatus")
@NotEmpty(message = "传感器状态不能为空")
private String sensorStatus;
@ApiModelProperty(value = "传感器状态名称", name = "sensorStatusName")
@NotEmpty(message = "传感器状态名称不能为空")
private String sensorStatusName;
@ApiModelProperty(value = "传感器状态名称", name = "sensorStatusName")
@NotEmpty(message = "传感器状态名称不能为空")
private String thresholdFlag;
@ApiModelProperty(value = "安装位置", name = "installPosition")
private String installPosition;
@ApiModelProperty(value = "经度", name = "longitude")
private String longitude;
@ApiModelProperty(value = "纬度", name = "latitude")
private String latitude;
@ApiModelProperty(value = "传感器状态", name = "sensorStatus")
private String sensorStatus;
@ApiModelProperty(value = "是否定位(0否1是)", name = "positioningFlag")
private Integer positioningFlag;
@ApiModelProperty(value = "报警开关(1开0关)", name = "alarmSwitch")
private Integer alarmSwitch;
@ApiModelProperty(value = "是否阈值设定(0否1是)", name = "thresholdFlag")
private Integer thresholdFlag;
@ApiModelProperty(value = "单位", name = "unitName")
private String unitName;
@ApiModelProperty(value = "量程下限", name = "rangeMin")
private String rangeMin;
@ApiModelProperty(value = "量程上限", name = "rangeMax")
private String rangeMax;
@ApiModelProperty(value = "低低报阈值", name = "thresholdLowLow")
private String thresholdLowLow;
@ApiModelProperty(value = "低报阈值", name = "thresholdLow")
private String thresholdLow;
@ApiModelProperty(value = "高报阈值", name = "thresholdHigh")
private String thresholdHigh;
@ApiModelProperty(value = "高高报阈值", name = "thresholdHighHigh")
private String thresholdHighHigh;
@ApiModelProperty(value = "连续报警确认次数(默认3次)", name = "continuousAlarmCount")
private Integer continuousAlarmCount;
@ApiModelProperty(value = "出厂日期", name = "factoryDate")
private String factoryDate;
@ApiModelProperty(value = "企业侧源编码", name = "enterpriseSourceCode")
private String enterpriseSourceCode;
@ApiModelProperty(value = "备注", name = "remarks")
private String remarks;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private LocalDate factoryDate;
}

View File

@ -0,0 +1,35 @@
package com.zcloud.dto;
import com.alibaba.cola.dto.Command;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.time.LocalDate;
/**
* SensorDeviceUpdateCmd -
* @Author wangyan
* @Date 2026-04-03 00:00:00
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class SensorDeviceLocationCmd extends Command {
@ApiModelProperty(value = "主键ID", name = "id", required = true)
@NotNull(message = "主键ID不能为空")
private Long id;
@ApiModelProperty(value = "经度", name = "longitude", required = true)
@NotEmpty(message = "经度不能为空")
private String longitude;
@ApiModelProperty(value = "纬度", name = "latitude", required = true)
@NotEmpty(message = "纬度不能为空")
private String latitude;
}

View File

@ -11,16 +11,16 @@ import lombok.Data;
*/
@Data
public class SensorDevicePageQry extends PageQuery {
@ApiModelProperty(value = "传感器名称")
private String sensorName;
@ApiModelProperty(value = "传感器类型ID")
private String sensorTypeId;
@ApiModelProperty(value = "传感器状态")
private String sensorStatus;
@ApiModelProperty(value = "是否阈值设定(0否1是)")
@ApiModelProperty(value = "是通过系统设定报警 1-是 0-否")
private Integer thresholdFlag;
}

View File

@ -1,12 +1,19 @@
package com.zcloud.dto;
import com.alibaba.cola.dto.Command;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* SensorDeviceUpdateCmd -
* @Author wangyan
@ -17,61 +24,59 @@ import lombok.AllArgsConstructor;
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class SensorDeviceUpdateCmd extends Command {
@ApiModelProperty(value = "主键ID", name = "id", required = true)
@NotNull(message = "主键ID不能为空")
private Long id;
@ApiModelProperty(value = "传感器编码", name = "sensorCode")
@ApiModelProperty(value = "传感器编码", name = "sensorCode", required = true)
private String sensorCode;
@ApiModelProperty(value = "传感器名称", name = "sensorName")
@ApiModelProperty(value = "传感器名称", name = "sensorName", required = true)
private String sensorName;
@ApiModelProperty(value = "传感器类型主键ID", name = "sensorTypeId")
@ApiModelProperty(value = "传感器类型主键ID", name = "sensorTypeId", required = true)
private String sensorTypeId;
@ApiModelProperty(value = "传感器属性快照(NUMBER/SWITCH)", name = "sensorAttr")
@ApiModelProperty(value = "传感器属性快照(NUMBER/SWITCH)", name = "sensorAttr", required = true)
private String sensorAttr;
@ApiModelProperty(value = "传感器状态", name = "sensorStatus")
private String sensorStatus;
@ApiModelProperty(value = "传感器状态名称", name = "sensorStatusName")
private String sensorStatusName;
@ApiModelProperty(value = "传感器状态名称", name = "sensorStatusName")
private String thresholdFlag;
@ApiModelProperty(value = "安装位置", name = "installPosition")
private String installPosition;
@ApiModelProperty(value = "经度", name = "longitude")
private String longitude;
@ApiModelProperty(value = "纬度", name = "latitude")
private String latitude;
@ApiModelProperty(value = "传感器状态", name = "sensorStatus")
private String sensorStatus;
@ApiModelProperty(value = "是否定位(0否1是)", name = "positioningFlag")
private Integer positioningFlag;
@ApiModelProperty(value = "报警开关(1开0关)", name = "alarmSwitch")
private Integer alarmSwitch;
@ApiModelProperty(value = "是否阈值设定(0否1是)", name = "thresholdFlag")
private Integer thresholdFlag;
@ApiModelProperty(value = "单位", name = "unitName")
private String unitName;
@ApiModelProperty(value = "量程下限", name = "rangeMin")
private String rangeMin;
@ApiModelProperty(value = "量程上限", name = "rangeMax")
private String rangeMax;
@ApiModelProperty(value = "连续报警确认次数(默认3次)", name = "continuousAlarmCount")
private Integer continuousAlarmCount;
@ApiModelProperty(value = "出厂日期", name = "factoryDate")
private String factoryDate;
@ApiModelProperty(value = "企业侧源编码", name = "enterpriseSourceCode")
private String enterpriseSourceCode;
@ApiModelProperty(value = "备注", name = "remarks")
private String remarks;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private LocalDate factoryDate;
@ApiModelProperty(value = "经度", name = "longitude", required = true)
private String longitude;
@ApiModelProperty(value = "纬度", name = "latitude", required = true)
private String latitude;
@ApiModelProperty(value = "报警开关", name = "alarmSwitch")
private Integer alarmSwitch;
@ApiModelProperty(value = "计量单位", name = "unitName")
private String unitName;
@ApiModelProperty(value = "量程下限", name = "rangeMin")
private BigDecimal rangeMin;
@ApiModelProperty(value = "量程上限", name = "rangeMax")
private BigDecimal rangeMax;
@ApiModelProperty(value = "低低报阈值", name = "thresholdLowLow")
private BigDecimal thresholdLowLow;
@ApiModelProperty(value = "低报阈值", name = "thresholdLow")
private BigDecimal thresholdLow;
@ApiModelProperty(value = "高报阈值", name = "thresholdHigh")
private BigDecimal thresholdHigh;
@ApiModelProperty(value = "高高报阈值", name = "thresholdHighHigh")
private BigDecimal thresholdHighHigh;
}

View File

@ -59,6 +59,13 @@ public class AlarmRecordCO extends ClientObject {
@ApiModelProperty(value = "当前负责人姓名")
private String managerName;
@ApiModelProperty(value = "纬度")
private String latitude;
@ApiModelProperty(value = "经度")
private String longitude;
@ApiModelProperty(value = "报警级别")
private String alarmLevel;
@ -133,7 +140,12 @@ public class AlarmRecordCO extends ClientObject {
private BigDecimal thresholdHigh;
@ApiModelProperty(value = "高高报阈值")
private BigDecimal thresholdHighHigh;
@ApiModelProperty(value = "传感器属性")
private String sensorAttr;
@ApiModelProperty(value = "传感器类型ID")
private String sensorTypeId;
@ApiModelProperty(value = "传感器类型名称")
private String sensorTypeName;
@ApiModelProperty(value = "备注")
private String remarks;

View File

@ -1,6 +1,7 @@
package com.zcloud.dto.clientobject;
import com.alibaba.cola.dto.ClientObject;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -15,28 +16,28 @@ import java.util.List;
*/
@Data
public class DeviceRegionCO extends ClientObject {
@ApiModelProperty(value = "主键ID")
private Long id;
@ApiModelProperty(value = "业务ID(32位)")
private String regionConfigId;
@ApiModelProperty(value = "外部消防区域主键")
private Long fireRegionId;
private String fireRegionId;
@ApiModelProperty(value = "外部消防区域名称")
private String fireRegionName;
@ApiModelProperty(value = "外部消防区域编码")
private String fireRegionCode;
@ApiModelProperty(value = "负责部门ID")
private Long departmentId;
@ApiModelProperty(value = "负责部门名称")
private String departmentName;
@ApiModelProperty(value = "负责人ID")
private Long managerId;
@ -48,36 +49,36 @@ public class DeviceRegionCO extends ClientObject {
@ApiModelProperty(value = "已绑定传感器列表")
private List<SensorDeviceCO> boundSensors;
@ApiModelProperty(value = "状态 1启用0停用")
private Integer status;
@ApiModelProperty(value = "备注")
private String remarks;
@ApiModelProperty(value = "创建人ID")
private Long createId;
@ApiModelProperty(value = "创建人姓名")
private String createName;
@ApiModelProperty(value = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@ApiModelProperty(value = "更新人ID")
private Long updateId;
@ApiModelProperty(value = "更新人姓名")
private String updateName;
@ApiModelProperty(value = "更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
@ApiModelProperty(value = "租户ID")
private Long tenantId;
@ApiModelProperty(value = "组织ID")
private Long orgId;
}

View File

@ -5,6 +5,8 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
/**
@ -14,28 +16,28 @@ import java.util.Date;
*/
@Data
public class SensorDeviceCO extends ClientObject {
@ApiModelProperty(value = "主键ID")
private Long id;
@ApiModelProperty(value = "传感器设备业务ID")
private String sensorDeviceId;
@ApiModelProperty(value = "传感器编码")
private String sensorCode;
@ApiModelProperty(value = "传感器名称")
private String sensorName;
@ApiModelProperty(value = "传感器类型主键ID")
private String sensorTypeId;
@ApiModelProperty(value = "传感器类型名称")
private String sensorTypeName;
@ApiModelProperty(value = "传感器属性快照(NUMBER/SWITCH)")
private String sensorAttr;
@ApiModelProperty(value = "安装位置")
private String installPosition;
@ -44,75 +46,78 @@ public class SensorDeviceCO extends ClientObject {
@ApiModelProperty(value = "纬度")
private String latitude;
@ApiModelProperty(value = "传感器状态")
private String sensorStatus;
@ApiModelProperty(value = "传感器状态名称")
private String sensorStatusName;
@ApiModelProperty(value = "是否定位(0否1是)")
private Integer positioningFlag;
@ApiModelProperty(value = "报警开关(1开0关)")
private Integer alarmSwitch;
@ApiModelProperty(value = "是否阈值设定(0否1是)")
@ApiModelProperty(value = "是通过系统设定报警 1-是 0-否")
private Integer thresholdFlag;
@ApiModelProperty(value = "单位")
private String unitName;
@ApiModelProperty(value = "量程下限")
private String rangeMin;
@ApiModelProperty(value = "量程上限")
private String rangeMax;
@ApiModelProperty(value = "低低报阈值")
private String thresholdLowLow;
@ApiModelProperty(value = "低报阈值")
private String thresholdLow;
@ApiModelProperty(value = "高报阈值")
private String thresholdHigh;
@ApiModelProperty(value = "高高报阈值")
private String thresholdHighHigh;
@ApiModelProperty(value = "连续报警确认次数")
private Integer continuousAlarmCount;
@ApiModelProperty(value = "出厂日期")
private String factoryDate;
private LocalDate factoryDate;
@ApiModelProperty(value = "企业侧源编码")
private String enterpriseSourceCode;
@ApiModelProperty(value = "备注")
private String remarks;
@ApiModelProperty(value = "创建人ID")
private Long createId;
@ApiModelProperty(value = "创建人姓名")
private String createName;
@ApiModelProperty(value = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@ApiModelProperty(value = "更新人ID")
private Long updateId;
@ApiModelProperty(value = "更新人姓名")
private String updateName;
@ApiModelProperty(value = "更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
@ApiModelProperty(value = "租户ID")
private Long tenantId;
@ApiModelProperty(value = "组织ID")
private Long orgId;
}

View File

@ -28,4 +28,9 @@ public interface RegionSensorRelGateway {
*
*/
Boolean isSensorBound(String sensorDeviceId);
}
/**
* ID
*/
void removeByRegionId(String regionId);
}

View File

@ -1,6 +1,7 @@
package com.zcloud.domain.model;
import com.jjb.saas.framework.domain.model.BaseE;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -71,6 +72,16 @@ public class AlarmRecordE extends BaseE {
*/
private String alarmType;
/**
*
*/
private String alarmLevelName;
/**
*
*/
private String alarmTypeName;
/**
* HIGH/HIGH_HIGH/LOW/LOW_LOW
*/
@ -105,7 +116,9 @@ public class AlarmRecordE extends BaseE {
* 10/20/30/40
*/
private Integer status;
private String latitude;
private String longitude;
/**
*
*/

View File

@ -12,12 +12,12 @@ import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = true)
public class DeviceRegionE extends BaseE {
/**
* ID(32)
*/
private String regionConfigId;
/**
*
*/
@ -27,17 +27,17 @@ public class DeviceRegionE extends BaseE {
*
*/
private String fireRegionName;
/**
*
*/
private String fireRegionCode;
/**
* ID
*/
private Long departmentId;
/**
* ID
*/
@ -47,29 +47,10 @@ public class DeviceRegionE extends BaseE {
*
*/
private String managerName;
/**
* 10
*/
private Integer status;
/**
*
*/
private String remarks;
/**
*
*/
private String deleteEnum;
/**
* ID
*/
private Long tenantId;
/**
* ID
*/
private Long orgId;
}

View File

@ -1,9 +1,13 @@
package com.zcloud.domain.model;
import com.jjb.saas.framework.domain.model.BaseE;
import com.zcloud.gbscommon.utils.UuidUtil;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.ArrayList;
import java.util.List;
/**
* RegionSensorRelE -
* @Author wangyan
@ -12,16 +16,12 @@ import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = true)
public class RegionSensorRelE extends BaseE {
/**
* ID(32)
*/
private String regionSensorRelId;
/**
* ID
*/
private String regionConfigId;
/**
* ID
@ -32,24 +32,32 @@ public class RegionSensorRelE extends BaseE {
* ID
*/
private String sensorDeviceId;
/**
*
*/
private String sensorCode;
/**
*
*/
private String deleteEnum;
/**
* ID
*/
private Long tenantId;
/**
* ID
*/
private Long orgId;
}
public List<RegionSensorRelE> initList(String fireRegionId, List<String> deviceIdList){
List<RegionSensorRelE> list = new ArrayList<>();
for (String deviceId : deviceIdList) {
RegionSensorRelE regionSensorRelE = new RegionSensorRelE();
regionSensorRelE.setSensorDeviceId(deviceId);
regionSensorRelE.setFireRegionId(fireRegionId);
regionSensorRelE.setRegionSensorRelId(UuidUtil.get32UUID());
list.add(regionSensorRelE);
}
return list;
}
}

View File

@ -4,6 +4,9 @@ import com.jjb.saas.framework.domain.model.BaseE;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* SensorDeviceE -
* @Author wangyan
@ -12,32 +15,32 @@ import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = true)
public class SensorDeviceE extends BaseE {
/**
* ID (32UUID)
*/
private String sensorDeviceId;
/**
*
*/
private String sensorCode;
/**
*
*/
private String sensorName;
/**
* ID
*/
private String sensorTypeId;
/**
* (NUMBER/SWITCH)
*/
private String sensorAttr;
/**
*
*/
@ -52,92 +55,96 @@ public class SensorDeviceE extends BaseE {
*
*/
private String latitude;
/**
*
*/
private String sensorStatus;
/**
*
*/
private String sensorStatusName;
/**
* (01)
*/
private Integer positioningFlag;
/**
* (10)
*/
private Integer alarmSwitch;
/**
* (01)
* 1- 0-
*/
private Integer thresholdFlag;
/**
*
*/
private String unitName;
/**
*
*/
private String rangeMin;
/**
*
*/
private String rangeMax;
/**
*
*/
private String thresholdLowLow;
/**
*
*/
private String thresholdLow;
/**
*
*/
private String thresholdHigh;
/**
*
*/
private String thresholdHighHigh;
/**
* 3
*/
private Integer continuousAlarmCount;
/**
*
*/
private String factoryDate;
private LocalDate factoryDate;
/**
*
*/
private String enterpriseSourceCode;
/**
*
*/
private String remarks;
/**
*
*/
private String deleteEnum;
/**
* ID
*/
private Long tenantId;
/**
* ID
*/

View File

@ -1,5 +1,6 @@
package com.zcloud.gatewayimpl;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.zcloud.domain.gateway.RegionSensorRelGateway;
import com.zcloud.domain.model.RegionSensorRelE;
import com.zcloud.persistence.dataobject.RegionSensorRelDO;
@ -17,7 +18,7 @@ import org.springframework.stereotype.Service;
@Service
@AllArgsConstructor
public class RegionSensorRelGatewayImpl implements RegionSensorRelGateway {
private final RegionSensorRelRepository regionSensorRelRepository;
@Override
@ -59,4 +60,13 @@ public class RegionSensorRelGatewayImpl implements RegionSensorRelGateway {
long count = regionSensorRelRepository.count(wrapper);
return count > 0;
}
}
@Override
public void removeByRegionId(String regionId) {
UpdateWrapper<RegionSensorRelDO> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("fire_region_id", regionId);
updateWrapper.eq("delete_enum", "FALSE");
updateWrapper.set("delete_enum", "TRUE");
regionSensorRelRepository.update(updateWrapper);
}
}

View File

@ -78,7 +78,11 @@ public class AlarmRecordDO extends BaseDO {
@ApiModelProperty(value = "阈值类型 HIGH/HIGH_HIGH/LOW/LOW_LOW")
private String thresholdType;
@ApiModelProperty(value = "纬度")
private String latitude;
@ApiModelProperty(value = "经度")
private String longitude;
@ApiModelProperty(value = "告警值")
private BigDecimal currentValue;
@ -144,7 +148,15 @@ public class AlarmRecordDO extends BaseDO {
@ApiModelProperty(value = "高高报阈值")
@TableField(exist = false)
private BigDecimal thresholdHighHigh;
@ApiModelProperty(value = "传感器属性")
@TableField(exist = false)
private String sensorAttr;
@ApiModelProperty(value = "传感器类型ID")
@TableField(exist = false)
private String sensorTypeId;
@ApiModelProperty(value = "传感器类型名称")
@TableField(exist = false)
private String sensorTypeName;

View File

@ -21,7 +21,7 @@ public class DeviceRegionDO extends BaseDO {
private String regionConfigId;
@ApiModelProperty(value = "外部消防区域主键")
private Long fireRegionId;
private String fireRegionId;
@TableField(exist = false)
@ApiModelProperty(value = "外部消防区域名称")

View File

@ -1,5 +1,6 @@
package com.zcloud.persistence.dataobject;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.jjb.saas.framework.repository.basedo.BaseDO;
import io.swagger.annotations.ApiModelProperty;
@ -19,8 +20,6 @@ public class RegionSensorRelDO extends BaseDO {
@ApiModelProperty(value = "业务ID(32位)")
private String regionSensorRelId;
@ApiModelProperty(value = "区域配置主键ID")
private String regionConfigId;
@ApiModelProperty(value = "外部消防区域ID")
private String fireRegionId;
@ -28,7 +27,34 @@ public class RegionSensorRelDO extends BaseDO {
@ApiModelProperty(value = "传感器设备ID")
private String sensorDeviceId;
@ApiModelProperty(value = "传感器编码快照")
// asd.sensor_device_name AS sensor_name,
// asd.sensor_device_code AS sensor_code,
// asd.sensor_attr AS sensor_attr,
// ast.type_name AS sensor_type_name,
// asd.sensor_status_name as sensor_status_name,
// case when asd.longitude is not null then '是' else '否' end as location_flag
@ApiModelProperty(value = "传感器名称")
@TableField(exist = false)
private String sensorName;
@ApiModelProperty(value = "传感器编号")
@TableField(exist = false)
private String sensorCode;
@ApiModelProperty(value = "传感器属性")
@TableField(exist = false)
private String sensorAttr;
@ApiModelProperty(value = "传感器属性名称")
@TableField(exist = false)
private String sensorAttrName;
@ApiModelProperty(value = "传感器类型名称")
@TableField(exist = false)
private String sensorTypeName;
@ApiModelProperty(value = "传感器状态名称")
@TableField(exist = false)
private String sensorStatusName;
@ApiModelProperty(value = "是否定位")
@TableField(exist = false)
private String locationFlag;
}

View File

@ -8,6 +8,8 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* SensorDeviceDO -
@ -50,13 +52,16 @@ public class SensorDeviceDO extends BaseDO {
@ApiModelProperty(value = "传感器状态")
private String sensorStatus;
@ApiModelProperty(value = "传感器状态名称")
private String sensorStatusName;
@ApiModelProperty(value = "是否定位(0否1是)")
private Integer positioningFlag;
@ApiModelProperty(value = "报警开关(1开0关)")
private Integer alarmSwitch;
@ApiModelProperty(value = "是否阈值设定(0否1是)")
@ApiModelProperty(value = "是通过系统设定报警 1-是 0-否")
private Integer thresholdFlag;
@ApiModelProperty(value = "单位")
@ -84,7 +89,7 @@ public class SensorDeviceDO extends BaseDO {
private Integer continuousAlarmCount;
@ApiModelProperty(value = "出厂日期")
private String factoryDate;
private LocalDate factoryDate;
@ApiModelProperty(value = "企业侧源编码")
private String enterpriseSourceCode;

View File

@ -1,5 +1,6 @@
package com.zcloud.persistence.dataobject;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.jjb.saas.framework.repository.basedo.BaseDO;
import io.swagger.annotations.ApiModelProperty;
@ -30,4 +31,7 @@ public class UserDO extends BaseDO {
@ApiModelProperty(value = "部门ID")
private Long departmentId;
@ApiModelProperty(value = "部门名称")
@TableField(exist = false)
private String departmentName;
}

View File

@ -18,6 +18,8 @@ public interface AlarmRecordMapper extends BaseMapper<AlarmRecordDO> {
IPage<AlarmRecordDO> listPage(IPage<AlarmRecordDO> page, @Param("params") Map<String, Object> params);
IPage<AlarmRecordDO> listBySensorDevice(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);

View File

@ -17,4 +17,6 @@ import java.util.Map;
public interface DeviceRegionMapper extends BaseMapper<DeviceRegionDO> {
IPage<DeviceRegionDO> listPage(IPage<DeviceRegionDO> page, @Param("params") Map<String, Object> params);
DeviceRegionDO findRegionById(String fireRegionId);
}

View File

@ -4,10 +4,14 @@ import com.zcloud.persistence.dataobject.RegionSensorRelDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* RegionSensorRelMapper - Mapper
* @Author wangyan
* @Date 2026-04-03 00:00:00
*/
@Mapper
public interface RegionSensorRelMapper extends BaseMapper<RegionSensorRelDO> {}
public interface RegionSensorRelMapper extends BaseMapper<RegionSensorRelDO> {
List<RegionSensorRelDO> listByFireRegionId(String regionId);
}

View File

@ -10,4 +10,6 @@ import org.apache.ibatis.annotations.Mapper;
* @Date 2026-04-03 00:00:00
*/
@Mapper
public interface UserMapper extends BaseMapper<UserDO> {}
public interface UserMapper extends BaseMapper<UserDO> {
UserDO findById(Long id);
}

View File

@ -15,6 +15,8 @@ public interface AlarmRecordRepository extends BaseRepository<AlarmRecordDO> {
PageResponse<AlarmRecordDO> listPage(Map<String, Object> params);
PageResponse<AlarmRecordDO> listBySensorDevice(Map<String, Object> params);
PageResponse<AlarmRecordDO> disposeListPage(Map<String, Object> params);
PageResponse<AlarmRecordDO> appListPage(Map<String, Object> params);

View File

@ -14,4 +14,8 @@ import java.util.Map;
public interface DeviceRegionRepository extends BaseRepository<DeviceRegionDO> {
PageResponse<DeviceRegionDO> listPage(Map<String, Object> params);
DeviceRegionDO findRegionById(String fireRegionId);
void updateByRegionConfigId(DeviceRegionDO deviceRegionDO);
}

View File

@ -3,9 +3,14 @@ package com.zcloud.persistence.repository;
import com.zcloud.persistence.dataobject.RegionSensorRelDO;
import com.jjb.saas.framework.repository.repo.BaseRepository;
import java.util.List;
/**
* RegionSensorRelRepository -
* @Author wangyan
* @Date 2026-04-03 00:00:00
*/
public interface RegionSensorRelRepository extends BaseRepository<RegionSensorRelDO> {}
public interface RegionSensorRelRepository extends BaseRepository<RegionSensorRelDO> {
List<RegionSensorRelDO> listByFireRegionId(String regionId);
}

View File

@ -8,4 +8,6 @@ import com.zcloud.persistence.dataobject.UserDO;
* @Author wangyan
* @Date 2026-04-03 00:00:00
*/
public interface UserRepository extends BaseRepository<UserDO> {}
public interface UserRepository extends BaseRepository<UserDO> {
UserDO findById(Long id);
}

View File

@ -31,6 +31,13 @@ public class AlarmRecordRepositoryImpl extends BaseRepositoryImpl<AlarmRecordMap
return PageHelper.pageToResponse(result, result.getRecords());
}
@Override
public PageResponse<AlarmRecordDO> listBySensorDevice(Map<String, Object> params) {
IPage<AlarmRecordDO> page = new Query<AlarmRecordDO>().getPage(params);
IPage<AlarmRecordDO> result = alarmRecordMapper.listBySensorDevice(page, params);
return PageHelper.pageToResponse(result, result.getRecords());
}
@Override
public PageResponse<AlarmRecordDO> disposeListPage(Map<String, Object> params) {
IPage<AlarmRecordDO> page = new Query<AlarmRecordDO>().getPage(params);

View File

@ -1,6 +1,7 @@
package com.zcloud.persistence.repository.impl;
import com.alibaba.cola.dto.PageResponse;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jjb.saas.framework.repository.common.PageHelper;
import com.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl;
@ -30,4 +31,17 @@ public class DeviceRegionRepositoryImpl extends BaseRepositoryImpl<DeviceRegionM
IPage<DeviceRegionDO> result = deviceRegionMapper.listPage(page, params);
return PageHelper.pageToResponse(result, result.getRecords());
}
@Override
public DeviceRegionDO findRegionById(String fireRegionId) {
return deviceRegionMapper.findRegionById(fireRegionId);
}
@Override
public void updateByRegionConfigId(DeviceRegionDO deviceRegionDO) {
UpdateWrapper<DeviceRegionDO> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("region_config_id", deviceRegionDO.getRegionConfigId());
updateWrapper.eq("delete_enum", "FALSE");
deviceRegionMapper.update(deviceRegionDO, updateWrapper);
}
}

View File

@ -7,6 +7,8 @@ import com.zcloud.persistence.repository.RegionSensorRelRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* RegionSensorRelRepositoryImpl -
* @Author wangyan
@ -14,4 +16,11 @@ import org.springframework.stereotype.Repository;
*/
@Repository
@RequiredArgsConstructor
public class RegionSensorRelRepositoryImpl extends BaseRepositoryImpl<RegionSensorRelMapper, RegionSensorRelDO> implements RegionSensorRelRepository {}
public class RegionSensorRelRepositoryImpl extends BaseRepositoryImpl<RegionSensorRelMapper, RegionSensorRelDO> implements RegionSensorRelRepository {
private final RegionSensorRelMapper regionSensorRelMapper;
@Override
public List<RegionSensorRelDO> listByFireRegionId(String regionId) {
return regionSensorRelMapper.listByFireRegionId(regionId);
}
}

View File

@ -14,4 +14,10 @@ import org.springframework.stereotype.Repository;
*/
@Repository
@RequiredArgsConstructor
public class UserRepositoryImpl extends BaseRepositoryImpl<UserMapper, UserDO> implements UserRepository {}
public class UserRepositoryImpl extends BaseRepositoryImpl<UserMapper, UserDO> implements UserRepository {
private final UserMapper userMapper;
@Override
public UserDO findById(Long id) {
return userMapper.findById(id);
}
}

View File

@ -19,12 +19,18 @@
LEFT JOIN department dep ON ar.department_id = dep.id AND dep.delete_enum = 'FALSE'
LEFT JOIN user mgr ON ar.manager_id = mgr.id AND mgr.delete_enum = 'FALSE'
LEFT JOIN iot_alarm_sensor_device sd ON ar.sensor_device_id = sd.sensor_device_id AND sd.delete_enum = 'FALSE'
LEFT JOIN user u ON ar.dispose_user_id = u.id
</sql>
<select id="listPage" resultType="com.zcloud.persistence.dataobject.AlarmRecordDO">
SELECT
<include refid="alarmRecordBaseColumns"/>
<include refid="alarmRecordBaseColumns"/>,
sd.unit_name,
sd.threshold_high_high,
sd.threshold_high,
sd.threshold_low_low,
sd.threshold_low
<include refid="alarmRecordBaseJoins"/>
<where>
ar.delete_enum = 'FALSE'
@ -68,6 +74,36 @@
ORDER BY CASE WHEN ar.status IN (10, 20) THEN 0 ELSE 1 END, ar.alarm_time DESC
</select>
<select id="listBySensorDevice" resultType="com.zcloud.persistence.dataobject.AlarmRecordDO">
SELECT
<include refid="alarmRecordBaseColumns"/>,
sd.unit_name,
sd.threshold_high_high,
sd.threshold_high,
sd.threshold_low_low,
sd.threshold_low
<include refid="alarmRecordBaseJoins"/>
<where>
ar.delete_enum = 'FALSE'
<if test="params.tenantId != null">
AND ar.tenant_id = #{params.tenantId}
</if>
<if test="params.orgId != null">
AND ar.org_id = #{params.orgId}
</if>
<if test="params.sensorDeviceId != null and params.sensorDeviceId != ''">
AND ar.sensor_device_id = #{params.sensorDeviceId}
</if>
<if test="params.alarmTimeStart != null and params.alarmTimeStart != ''">
AND ar.alarm_time <![CDATA[>=]]> #{params.alarmTimeStart}
</if>
<if test="params.alarmTimeEnd != null and params.alarmTimeEnd != ''">
AND ar.alarm_time <![CDATA[<=]]> #{params.alarmTimeEnd}
</if>
</where>
ORDER BY ar.alarm_time DESC
</select>
<select id="disposeListPage" resultType="com.zcloud.persistence.dataobject.AlarmRecordDO">
SELECT
<include refid="alarmRecordBaseColumns"/>
@ -208,8 +244,12 @@
sd.threshold_low_low,
sd.threshold_low,
sd.threshold_high,
sd.threshold_high_high
sd.threshold_high_high,
sd.sensor_attr,
ast.sensor_type_id,
ast.type_name AS sensor_type_name
<include refid="alarmRecordBaseJoins"/>
LEFT JOIN iot_alarm_sensor_type ast ON ast.sensor_type_id = sd.sensor_type_id
<where>
ar.id = #{id}
AND ar.delete_enum = 'FALSE'

View File

@ -62,4 +62,21 @@
</where>
ORDER BY fr.create_time DESC
</select>
<select id="findRegionById" resultType="com.zcloud.persistence.dataobject.DeviceRegionDO">
select
arc.*,
fr.fire_region_code AS fireRegionCode,
fr.fire_region_name AS fireRegionName,
u.name AS managerName,
d.name AS departmentName
from
fire_region fr
left join iot_alarm_region_config arc on arc.fire_region_id = fr.fire_region_id and arc.delete_enum = 'FALSE'
left join user u on arc.manager_id = u.id
left join department d on u.department_id = d.id
where fr.fire_region_id = #{fire_region_id}
and fr.delete_enum = 'FALSE'
</select>
</mapper>

View File

@ -0,0 +1,24 @@
<?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="com.zcloud.persistence.mapper.RegionSensorRelMapper">
<select id="listByFireRegionId" resultType="com.zcloud.persistence.dataobject.RegionSensorRelDO">
select
arsr.*,
asd.sensor_name AS sensor_name,
asd.sensor_name AS sensor_code,
asd.sensor_attr AS sensor_attr,
case asd.sensor_attr when 'NUMBER' then '数值类' when 'SWITCH' then '开关类' else '未知' end as sensor_attr_name,
ast.type_name AS sensor_type_name,
asd.sensor_status_name as sensor_status_name,
case when asd.longitude is not null then '是' else '否' end as location_flag
from iot_alarm_region_sensor_rel arsr
left join iot_alarm_sensor_device asd on asd.sensor_device_id = arsr.sensor_device_id
left join iot_alarm_sensor_type ast on ast.sensor_type_id = asd.sensor_type_id
where arsr.delete_enum = 'FALSE'
and arsr.fire_region_id = #{regionId}
</select>
</mapper>

View File

@ -0,0 +1,16 @@
<?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="com.zcloud.persistence.mapper.UserMapper">
<select id="findById" resultType="com.zcloud.persistence.dataobject.UserDO">
select
u.*,
d.name as departmentName
from user u
left join department d on u.department_id = d.id
where u.id = #{id}
</select>
</mapper>