报警查询与处置相关接口

master
aosodo_4812 2026-09-02 17:35:53 +08:00
parent 257d6f4415
commit a0d2ac0215
22 changed files with 507 additions and 0 deletions

View File

@ -26,5 +26,9 @@
<groupId>com.zcloud.gbs.edgeguard</groupId>
<artifactId>web-client</artifactId>
</dependency>
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,21 @@
package com.zcloud.gbs.edgeguard.job;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.zcloud.gbs.edgeguard.command.AlarmHiddenStatusSyncExe;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
@Component
@RequiredArgsConstructor
public class AlarmHiddenStatusSyncJob {
private static final int BATCH_SIZE = 200;
private final AlarmHiddenStatusSyncExe syncExe;
@XxlJob("edgeguardAlarmHiddenStatusSyncJob")
public ReturnT<String> execute(String param) {
int count = syncExe.syncPending(BATCH_SIZE);
return new ReturnT<>(ReturnT.SUCCESS_CODE, "同步报警隐患状态数量: " + count);
}
}

View File

@ -0,0 +1,45 @@
package com.zcloud.gbs.edgeguard.web;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.gbs.edgeguard.api.AlarmServiceI;
import com.zcloud.gbs.edgeguard.dto.AlarmDisposeCmd;
import com.zcloud.gbs.edgeguard.dto.AlarmPageQry;
import com.zcloud.gbs.edgeguard.dto.clientobject.AlarmCo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "报警查询与处置")
@RestController
@RequestMapping("/edgeguard/alarms")
@RequiredArgsConstructor
public class AlarmController {
private final AlarmServiceI service;
@ApiOperation("报警分页")
@PostMapping("/page")
public PageResponse<AlarmCo> page(@Validated @RequestBody AlarmPageQry qry) {
return service.page(qry);
}
@ApiOperation("报警详情")
@GetMapping("/{id}")
public SingleResponse<AlarmCo> detail(@PathVariable Long id) {
return service.detail(id);
}
@ApiOperation("提交报警处置")
@PostMapping("/{id}/disposal")
public Response dispose(@PathVariable Long id, @Validated @RequestBody AlarmDisposeCmd cmd) {
return service.dispose(id, cmd);
}
}

View File

@ -0,0 +1,81 @@
package com.zcloud.gbs.edgeguard.command;
import com.alibaba.cola.exception.BizException;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.gbs.edgeguard.domain.gateway.AlarmDisposalGateway;
import com.zcloud.gbs.edgeguard.domain.gateway.AlarmGateway;
import com.zcloud.gbs.edgeguard.domain.gateway.HiddenGateway;
import com.zcloud.gbs.edgeguard.domain.model.AlarmDisposalE;
import com.zcloud.gbs.edgeguard.domain.model.AlarmE;
import com.zcloud.gbs.edgeguard.dto.AlarmDisposeCmd;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
@Component
@RequiredArgsConstructor
public class AlarmDisposeExe {
private final AlarmGateway alarmGateway;
private final AlarmDisposalGateway disposalGateway;
private final HiddenGateway hiddenGateway;
@Transactional(rollbackFor = Exception.class)
public void execute(Long alarmId, AlarmDisposeCmd cmd) {
AlarmE alarm = alarmGateway.getById(alarmId);
if (alarm == null) {
throw new BizException("报警不存在");
}
if ("DISPOSED".equals(alarm.getDisposalStatus())) {
throw new BizException("报警已处置");
}
validate(cmd);
Long handlerUserId = AuthContext.getUserId();
String handlerName = AuthContext.getCurrentUser().getName();
String hiddenId = null;
if (Integer.valueOf(1).equals(cmd.getIsHiddenHazard())) {
try {
hiddenId = hiddenGateway.createFromAlarm(alarm, handlerUserId, handlerName);
} catch (Exception exception) {
throw new BizException("创建隐患失败: " + exception.getMessage());
}
}
AlarmDisposalE disposal = new AlarmDisposalE();
disposal.setAlarmId(alarmId);
disposal.setIsFalseAlarm(cmd.getIsFalseAlarm());
disposal.setIsHiddenHazard(cmd.getIsHiddenHazard());
disposal.setDisposalResultCode(cmd.getDisposalResultCode());
disposal.setDisposalResultName(cmd.getDisposalResultName());
disposal.setDisposalDescription(cmd.getDisposalDescription());
disposal.setHiddenId(hiddenId);
if (hiddenId != null) {
disposal.setHiddenStatus(100);
disposal.setHiddenStatusName("待确认");
disposal.setHiddenSyncTime(new Date());
}
disposal.setHandlerUserId(handlerUserId);
disposal.setDisposedTime(new Date());
alarm.setDisposalStatus(hiddenId == null ? "DISPOSED" : "HIDDEN_HANDLING");
if (!disposalGateway.add(disposal) || !alarmGateway.update(alarm)) {
throw new BizException("保存报警处置失败");
}
}
private void validate(AlarmDisposeCmd cmd) {
Integer falseAlarm = cmd.getIsFalseAlarm();
if (falseAlarm == null || (falseAlarm != 0 && falseAlarm != 1)) {
throw new BizException("是否误报参数错误");
}
if (falseAlarm == 0 && cmd.getIsHiddenHazard() == null) {
throw new BizException("非误报时必须选择是否隐患");
}
if (falseAlarm == 0 && Integer.valueOf(0).equals(cmd.getIsHiddenHazard())
&& (cmd.getDisposalResultCode() == null || cmd.getDisposalResultCode().trim().isEmpty())) {
throw new BizException("非隐患必须填写处置结果");
}
}
}

View File

@ -0,0 +1,77 @@
package com.zcloud.gbs.edgeguard.command;
import com.zcloud.gbs.edgeguard.domain.gateway.AlarmDisposalGateway;
import com.zcloud.gbs.edgeguard.domain.gateway.AlarmGateway;
import com.zcloud.gbs.edgeguard.domain.gateway.HiddenGateway;
import com.zcloud.gbs.edgeguard.domain.model.AlarmDisposalE;
import com.zcloud.gbs.edgeguard.domain.model.AlarmE;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
@Component
@RequiredArgsConstructor
@Slf4j
public class AlarmHiddenStatusSyncExe {
private static final int HIDDEN_ACCEPTED = 301;
private static final int HIDDEN_ARCHIVED = 400;
private final AlarmGateway alarmGateway;
private final AlarmDisposalGateway disposalGateway;
private final HiddenGateway hiddenGateway;
public void sync(AlarmE alarm) {
if (alarm == null || !"HIDDEN_HANDLING".equals(alarm.getDisposalStatus())) {
return;
}
AlarmDisposalE disposal = disposalGateway.getByAlarmId(alarm.getId());
if (disposal == null || disposal.getHiddenId() == null) {
return;
}
Integer status;
try {
status = hiddenGateway.queryStatus(disposal.getHiddenId(), alarm.getAlarmNo());
} catch (Exception exception) {
log.warn("同步报警隐患状态失败, alarmId={}, hiddenId={}",
alarm.getId(), disposal.getHiddenId(), exception);
return;
}
if (status == null) {
return;
}
disposal.setHiddenStatus(status);
disposal.setHiddenStatusName(statusName(status));
disposal.setHiddenSyncTime(new Date());
disposalGateway.update(disposal);
if (status == HIDDEN_ACCEPTED || status == HIDDEN_ARCHIVED) {
alarm.setDisposalStatus("DISPOSED");
alarmGateway.update(alarm);
}
}
public int syncPending(int limit) {
List<AlarmE> alarms = alarmGateway.listByDisposalStatus("HIDDEN_HANDLING", limit);
for (AlarmE alarm : alarms) {
sync(alarm);
}
return alarms.size();
}
private String statusName(Integer status) {
switch (status) {
case 100: return "待确认";
case 110: return "待核实";
case 120: return "待审核";
case 200: return "待整改";
case 201: return "确认打回";
case 202: return "特殊处置";
case 300: return "待验收";
case 301: return "已验收";
case 400: return "已归档";
default: return "处理中";
}
}
}

View File

@ -0,0 +1,20 @@
package com.zcloud.gbs.edgeguard.command.query;
import com.alibaba.cola.dto.PageResponse;
import com.zcloud.gbs.edgeguard.command.RegionAccessService;
import com.zcloud.gbs.edgeguard.command.AlarmHiddenStatusSyncExe;
import com.zcloud.gbs.edgeguard.domain.gateway.*;
import com.zcloud.gbs.edgeguard.domain.model.*;
import com.zcloud.gbs.edgeguard.dto.AlarmPageQry;
import com.zcloud.gbs.edgeguard.dto.clientobject.*;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import java.util.*;
@Component @RequiredArgsConstructor
public class AlarmQueryExe {
private final AlarmGateway alarms; private final AlarmDisposalGateway disposals; private final RegionAccessService access;
private final AlarmHiddenStatusSyncExe hiddenStatusSyncExe;
public PageResponse<AlarmCo> page(AlarmPageQry q){ if(q.getCorpId()!=null)access.requireAccessibleCorp(q.getCorpId()); if(q.getRegionId()!=null)access.requireAccessibleRegion(q.getRegionId()); int i=q.getPageIndex()<=0?1:q.getPageIndex(),s=q.getPageSize()<=0?10:Math.min(q.getPageSize(),200); List<AlarmCo> out=new ArrayList<>(); for(AlarmE a:alarms.page(q.getAlarmNo(),q.getCorpId(),q.getRegionId(),q.getDisposalStatus(),q.getAlarmTimeStart(),q.getAlarmTimeEnd(),i,s))out.add(co(a,false)); return PageResponse.of(out,(int)alarms.count(q.getAlarmNo(),q.getCorpId(),q.getRegionId(),q.getDisposalStatus(),q.getAlarmTimeStart(),q.getAlarmTimeEnd()),s,i); }
public AlarmCo detail(Long id){ AlarmE a=alarms.getById(id); if(a==null)return null; hiddenStatusSyncExe.sync(a); return co(a,true); }
private AlarmCo co(AlarmE a,boolean detail){AlarmCo c=new AlarmCo();BeanUtils.copyProperties(a,c);if(detail){AlarmDisposalE d=disposals.getByAlarmId(a.getId());if(d!=null){AlarmDisposalCo x=new AlarmDisposalCo();BeanUtils.copyProperties(d,x);c.setDisposal(x);}}return c;}
}

View File

@ -0,0 +1,37 @@
package com.zcloud.gbs.edgeguard.service;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.gbs.edgeguard.api.AlarmServiceI;
import com.zcloud.gbs.edgeguard.command.AlarmDisposeExe;
import com.zcloud.gbs.edgeguard.command.query.AlarmQueryExe;
import com.zcloud.gbs.edgeguard.dto.AlarmDisposeCmd;
import com.zcloud.gbs.edgeguard.dto.AlarmPageQry;
import com.zcloud.gbs.edgeguard.dto.clientobject.AlarmCo;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class AlarmServiceImpl implements AlarmServiceI {
private final AlarmQueryExe queryExe;
private final AlarmDisposeExe disposeExe;
@Override
public PageResponse<AlarmCo> page(AlarmPageQry qry) {
return queryExe.page(qry);
}
@Override
public SingleResponse<AlarmCo> detail(Long id) {
AlarmCo alarm = queryExe.detail(id);
return alarm == null ? SingleResponse.buildFailure("报警不存在") : SingleResponse.of(alarm);
}
@Override
public Response dispose(Long id, AlarmDisposeCmd cmd) {
disposeExe.execute(id, cmd);
return Response.buildSuccess();
}
}

View File

@ -0,0 +1,12 @@
package com.zcloud.gbs.edgeguard.api;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.gbs.edgeguard.dto.AlarmDisposeCmd;
import com.zcloud.gbs.edgeguard.dto.AlarmPageQry;
import com.zcloud.gbs.edgeguard.dto.clientobject.AlarmCo;
public interface AlarmServiceI {
PageResponse<AlarmCo> page(AlarmPageQry qry);
SingleResponse<AlarmCo> detail(Long id);
Response dispose(Long id, AlarmDisposeCmd cmd);
}

View File

@ -0,0 +1,18 @@
package com.zcloud.gbs.edgeguard.dto;
import com.alibaba.cola.dto.Command;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
@Data
@EqualsAndHashCode(callSuper = true)
public class AlarmDisposeCmd extends Command {
@NotNull(message = "是否误报不能为空")
private Integer isFalseAlarm;
private Integer isHiddenHazard;
private String disposalResultCode;
private String disposalResultName;
private String disposalDescription;
}

View File

@ -0,0 +1,14 @@
package com.zcloud.gbs.edgeguard.dto;
import com.alibaba.cola.dto.PageQuery;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
@Data @EqualsAndHashCode(callSuper = true)
public class AlarmPageQry extends PageQuery {
private String alarmNo;
private Long corpId;
private Long regionId;
private String disposalStatus;
private Date alarmTimeStart;
private Date alarmTimeEnd;
}

View File

@ -0,0 +1,12 @@
package com.zcloud.gbs.edgeguard.dto.clientobject;
import com.alibaba.cola.dto.ClientObject;
import lombok.Data;
import java.util.Date;
@Data
public class AlarmCo extends ClientObject {
private Long id; private String alarmNo; private String sourceSystem; private Date alarmTime;
private Date receivedTime; private String alarmAddress; private Long corpId; private String corpNameSnapshot;
private Long regionId; private String regionCode; private String regionNameSnapshot; private String regionPathSnapshot;
private String cameraSource; private String cameraId; private String cameraNameSnapshot; private String alarmImageUrl;
private String disposalStatus; private AlarmDisposalCo disposal;
}

View File

@ -0,0 +1,12 @@
package com.zcloud.gbs.edgeguard.dto.clientobject;
import com.alibaba.cola.dto.ClientObject;
import lombok.Data;
import java.util.Date;
@Data
public class AlarmDisposalCo extends ClientObject {
private Long id; private Long alarmId; private Integer isFalseAlarm; private Integer isHiddenHazard;
private String disposalResultCode; private String disposalResultName; private String disposalDescription;
private String hiddenId; private Integer hiddenStatus; private String hiddenStatusName; private Date hiddenSyncTime;
private Long handlerUserId; private String handlerUserName;
private Long handlerDeptId; private String handlerDeptName; private Date disposedTime;
}

View File

@ -6,4 +6,5 @@ public interface AlarmDisposalGateway {
Boolean add(AlarmDisposalE disposal);
Boolean update(AlarmDisposalE disposal);
AlarmDisposalE getById(Long id);
AlarmDisposalE getByAlarmId(Long alarmId);
}

View File

@ -1,9 +1,16 @@
package com.zcloud.gbs.edgeguard.domain.gateway;
import com.zcloud.gbs.edgeguard.domain.model.AlarmE;
import java.util.List;
public interface AlarmGateway {
Boolean add(AlarmE alarm);
Boolean update(AlarmE alarm);
AlarmE getById(Long id);
List<AlarmE> page(String alarmNo, Long corpId, Long regionId, String disposalStatus,
java.util.Date alarmTimeStart, java.util.Date alarmTimeEnd,
int pageIndex, int pageSize);
long count(String alarmNo, Long corpId, Long regionId, String disposalStatus,
java.util.Date alarmTimeStart, java.util.Date alarmTimeEnd);
List<AlarmE> listByDisposalStatus(String disposalStatus, int limit);
}

View File

@ -0,0 +1,9 @@
package com.zcloud.gbs.edgeguard.domain.gateway;
import com.zcloud.gbs.edgeguard.domain.model.AlarmE;
public interface HiddenGateway {
String createFromAlarm(AlarmE alarm, Long handlerUserId, String handlerName);
Integer queryStatus(String hiddenId, String alarmNo);
}

View File

@ -20,6 +20,9 @@ public class AlarmDisposalE extends BaseE {
private String disposalResultName;
private String disposalDescription;
private String hiddenId;
private Integer hiddenStatus;
private String hiddenStatusName;
private Date hiddenSyncTime;
private Long handlerUserId;
private String handlerUserName;
private Long handlerDeptId;

View File

@ -28,6 +28,11 @@ public class AlarmDisposalGatewayImpl implements AlarmDisposalGateway {
return toEntity(repository.getById(id));
}
@Override
public AlarmDisposalE getByAlarmId(Long alarmId) {
return toEntity(repository.getByAlarmId(alarmId));
}
private AlarmDisposalDO toDO(AlarmDisposalE source) {
AlarmDisposalDO target = new AlarmDisposalDO();
BeanUtils.copyProperties(source, target);

View File

@ -7,6 +7,12 @@ import com.zcloud.gbs.edgeguard.persistence.repository.AlarmRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
@ -28,6 +34,42 @@ public class AlarmGatewayImpl implements AlarmGateway {
return toEntity(repository.getById(id));
}
@Override
public List<AlarmE> page(String alarmNo, Long corpId, Long regionId, String disposalStatus,
Date start, Date end, int pageIndex, int pageSize) {
Page<AlarmDO> page = repository.page(new Page<>(pageIndex, pageSize), wrapper(alarmNo, corpId, regionId, disposalStatus, start, end));
List<AlarmE> result = new ArrayList<>();
for (AlarmDO row : page.getRecords()) result.add(toEntity(row));
return result;
}
@Override
public long count(String alarmNo, Long corpId, Long regionId, String disposalStatus,
Date start, Date end) {
return repository.count(wrapper(alarmNo, corpId, regionId, disposalStatus, start, end));
}
@Override
public List<AlarmE> listByDisposalStatus(String disposalStatus, int limit) {
LambdaQueryWrapper<AlarmDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(AlarmDO::getDisposalStatus, disposalStatus)
.orderByAsc(AlarmDO::getId)
.last("LIMIT " + Math.max(1, Math.min(limit, 500)));
return repository.list(wrapper).stream().map(this::toEntity).collect(Collectors.toList());
}
private LambdaQueryWrapper<AlarmDO> wrapper(String alarmNo, Long corpId, Long regionId,
String disposalStatus, Date start, Date end) {
return new LambdaQueryWrapper<AlarmDO>()
.like(alarmNo != null && !alarmNo.trim().isEmpty(), AlarmDO::getAlarmNo, alarmNo)
.eq(corpId != null, AlarmDO::getCorpId, corpId)
.eq(regionId != null, AlarmDO::getRegionId, regionId)
.eq(disposalStatus != null && !disposalStatus.trim().isEmpty(), AlarmDO::getDisposalStatus, disposalStatus)
.ge(start != null, AlarmDO::getAlarmTime, start)
.le(end != null, AlarmDO::getAlarmTime, end)
.orderByDesc(AlarmDO::getAlarmTime).orderByDesc(AlarmDO::getId);
}
private AlarmDO toDO(AlarmE source) {
AlarmDO target = new AlarmDO();
BeanUtils.copyProperties(source, target);

View File

@ -0,0 +1,77 @@
package com.zcloud.gbs.edgeguard.gatewayimpl;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.gbscommon.zcloudhidden.face.ZcloudHiddenFacade;
import com.zcloud.gbscommon.zcloudhidden.request.HiddenAddCmd;
import com.zcloud.gbscommon.zcloudhidden.request.HiddenImgAddCmd;
import com.zcloud.gbscommon.zcloudhidden.request.HiddenStatisticsListQry;
import com.zcloud.gbscommon.zcloudhidden.response.HiddenListCO;
import com.alibaba.cola.dto.PageResponse;
import com.zcloud.gbs.edgeguard.domain.gateway.HiddenGateway;
import com.zcloud.gbs.edgeguard.domain.model.AlarmE;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.UUID;
import java.util.Collections;
@Component
public class HiddenGatewayImpl implements HiddenGateway {
@DubboReference(check = false)
private ZcloudHiddenFacade hiddenFacade;
@Override
public String createFromAlarm(AlarmE alarm, Long handlerUserId, String handlerName) {
HiddenAddCmd cmd = new HiddenAddCmd();
cmd.setHiddenId(UUID.randomUUID().toString());
cmd.setSource(1);
cmd.setForeignKey(alarm.getAlarmNo());
cmd.setHiddenDesc("边缘人脸识别区域报警");
cmd.setHiddenPart(alarm.getAlarmAddress());
cmd.setHiddenLevel("hiddenLevel1004");
cmd.setHiddenLevelName("一般隐患");
cmd.setHiddenType("alarm");
cmd.setHiddenTypeName("报警隐患");
cmd.setPositionDesc(alarm.getRegionPathSnapshot());
cmd.setHiddenFindWay("1");
cmd.setIsAi(0);
cmd.setCorpId(alarm.getCorpId());
cmd.setCorpName(alarm.getCorpNameSnapshot());
cmd.setCreatorId(handlerUserId);
cmd.setCreatorName(handlerName);
cmd.setConfirmUserId(handlerUserId);
cmd.setConfirmUserName(handlerName);
cmd.setHiddenFindTime(new Date());
cmd.setRectificationType(2);
cmd.setHiddenJson("{\"confirm\":\"1\",\"rectificationType\":2}");
if (alarm.getAlarmImageUrl() != null && !alarm.getAlarmImageUrl().trim().isEmpty()) {
HiddenImgAddCmd image = new HiddenImgAddCmd();
image.setCorpId(alarm.getCorpId());
image.setHiddenId(cmd.getHiddenId());
image.setUrl(alarm.getAlarmImageUrl());
cmd.setHiddenImgAddCmds(Collections.singletonList(image));
}
SingleResponse<?> response = hiddenFacade.addHidden(cmd);
if (response == null || !response.isSuccess()) {
throw new IllegalStateException(response == null ? "创建隐患失败" : response.getErrMessage());
}
return cmd.getHiddenId();
}
@Override
public Integer queryStatus(String hiddenId, String alarmNo) {
HiddenStatisticsListQry qry = new HiddenStatisticsListQry();
qry.setForeignKey(alarmNo);
PageResponse<HiddenListCO> response = hiddenFacade.listByForeignKey(qry);
if (response == null || !response.isSuccess() || response.getData() == null
|| response.getData().isEmpty()) {
return null;
}
return response.getData().stream()
.filter(hidden -> hiddenId.equals(hidden.getHiddenId()))
.map(HiddenListCO::getState)
.findFirst()
.orElse(null);
}
}

View File

@ -18,6 +18,9 @@ public class AlarmDisposalDO extends BaseDO {
private String disposalResultName;
private String disposalDescription;
private String hiddenId;
private Integer hiddenStatus;
private String hiddenStatusName;
private Date hiddenSyncTime;
private Long handlerUserId;
private String handlerUserName;
private Long handlerDeptId;

View File

@ -4,4 +4,7 @@ import com.jjb.saas.framework.repository.repo.BaseRepository;
import com.zcloud.gbs.edgeguard.persistence.dataobject.AlarmDisposalDO;
public interface AlarmDisposalRepository extends BaseRepository<AlarmDisposalDO> {
default AlarmDisposalDO getByAlarmId(Long alarmId) {
return lambdaQuery().eq(AlarmDisposalDO::getAlarmId, alarmId).one();
}
}

View File

@ -129,6 +129,9 @@ CREATE TABLE `edgeguard_alarm_disposal` (
`disposal_result_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '处置结果名称快照',
`disposal_description` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '处置说明',
`hidden_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '关联隐患id仅判定为隐患时有值',
`hidden_status` int DEFAULT NULL COMMENT '隐患处理状态码',
`hidden_status_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '隐患处理状态名称',
`hidden_sync_time` datetime DEFAULT NULL COMMENT '隐患状态最后同步时间',
`handler_user_id` bigint NOT NULL COMMENT '处置人用户id',
`handler_user_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '处置人姓名快照',
`handler_dept_id` bigint DEFAULT NULL COMMENT '处置部门id',
@ -149,6 +152,7 @@ CREATE TABLE `edgeguard_alarm_disposal` (
PRIMARY KEY (`id`),
UNIQUE KEY `uk_disposal_alarm` (`alarm_id`),
KEY `idx_disposal_hidden` (`hidden_id`),
KEY `idx_disposal_hidden_status` (`tenant_id`, `hidden_status`, `hidden_sync_time`),
KEY `idx_disposal_handler` (`tenant_id`, `handler_user_id`, `disposed_time`),
KEY `idx_disposal_result` (`tenant_id`, `is_false_alarm`, `is_hidden_hazard`, `disposed_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='报警处置结论表';