报警查询与处置相关接口
parent
257d6f4415
commit
a0d2ac0215
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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("非隐患必须填写处置结果");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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 "处理中";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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;}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -6,4 +6,5 @@ public interface AlarmDisposalGateway {
|
|||
Boolean add(AlarmDisposalE disposal);
|
||||
Boolean update(AlarmDisposalE disposal);
|
||||
AlarmDisposalE getById(Long id);
|
||||
AlarmDisposalE getByAlarmId(Long alarmId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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='报警处置结论表';
|
||||
|
|
|
|||
Loading…
Reference in New Issue