Compare commits

...

2 Commits

15 changed files with 692 additions and 0 deletions

View File

@ -0,0 +1,57 @@
package com.zcloud.zcGbsServicer.web;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.zcGbsServicer.api.AlarmRecordServiceI;
import com.zcloud.zcGbsServicer.dto.AlarmRecordAddCmd;
import com.zcloud.zcGbsServicer.dto.AlarmRecordClearCmd;
import com.zcloud.zcGbsServicer.dto.AlarmRecordHandleCmd;
import com.zcloud.zcGbsServicer.dto.AlarmRecordPageQry;
import com.zcloud.zcGbsServicer.dto.clientobject.AlarmRecordCO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@Api(tags = "消防报警记录")
@RestController
@AllArgsConstructor
@RequestMapping("/${application.gateway}/alarmRecord")
public class AlarmRecordController {
private final AlarmRecordServiceI alarmRecordService;
@ApiOperation("分页查询")
@PostMapping("/list")
public PageResponse<AlarmRecordCO> list(@RequestBody AlarmRecordPageQry qry) {
return alarmRecordService.listPage(qry);
}
@ApiOperation("新增")
@PostMapping("/save")
public SingleResponse<AlarmRecordCO> save(@Validated @RequestBody AlarmRecordAddCmd cmd) {
return alarmRecordService.add(cmd);
}
@ApiOperation("详情")
@GetMapping("/{id}")
public SingleResponse<AlarmRecordCO> get(@PathVariable Long id) {
return SingleResponse.of(alarmRecordService.get(id));
}
@ApiOperation("处置")
@PostMapping("/handle")
public Response handle(@Validated @RequestBody AlarmRecordHandleCmd cmd) {
alarmRecordService.handle(cmd);
return Response.buildSuccess();
}
@ApiOperation("消警")
@PostMapping("/clear")
public Response clear(@Validated @RequestBody AlarmRecordClearCmd cmd) {
alarmRecordService.clear(cmd);
return Response.buildSuccess();
}
}

View File

@ -0,0 +1,15 @@
package com.zcloud.zcGbsServicer.command.convertor;
import com.zcloud.zcGbsServicer.dto.clientobject.AlarmRecordCO;
import com.zcloud.zcGbsServicer.persistence.dataobject.FireAlarmInfoDO;
import org.mapstruct.Mapper;
import java.util.List;
@Mapper(componentModel = "spring")
public interface AlarmRecordCoConvertor {
List<AlarmRecordCO> converDOsToCOs(List<FireAlarmInfoDO> fireAlarmInfoDOs);
AlarmRecordCO converDOToCO(FireAlarmInfoDO fireAlarmInfoDO);
}

View File

@ -0,0 +1,244 @@
package com.zcloud.zcGbsServicer.service;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.SingleResponse;
import com.alibaba.cola.exception.BizException;
import com.zcloud.zcGbsServicer.api.AlarmRecordServiceI;
import com.zcloud.zcGbsServicer.command.convertor.AlarmRecordCoConvertor;
import com.zcloud.zcGbsServicer.dto.AlarmRecordAddCmd;
import com.zcloud.zcGbsServicer.dto.AlarmRecordClearCmd;
import com.zcloud.zcGbsServicer.dto.AlarmRecordHandleCmd;
import com.zcloud.zcGbsServicer.dto.AlarmRecordPageQry;
import com.zcloud.zcGbsServicer.dto.clientobject.AlarmRecordCO;
import com.zcloud.zcGbsServicer.persistence.dataobject.FireAlarmInfoDO;
import com.zcloud.zcGbsServicer.persistence.dataobject.FireBrigadeDO;
import com.zcloud.zcGbsServicer.persistence.repository.FireAlarmInfoRepository;
import com.zcloud.zcGbsServicer.persistence.repository.FireBrigadeRepository;
import com.zcloud.zcGbsServicer.persistence.repository.FireBrigadeUserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class AlarmRecordServiceImpl extends FireAlarmServiceSupport implements AlarmRecordServiceI {
private static final int ALARM_MODE_PHONE = 1;
private static final int ALARM_MODE_APP = 2;
private static final int ALARM_STATUS_ALARMING = 1;
private static final int ALARM_STATUS_DISPOSING = 2;
private static final int ALARM_STATUS_CLEARED = 3;
private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
private final FireAlarmInfoRepository fireAlarmInfoRepository;
private final FireBrigadeRepository fireBrigadeRepository;
private final FireBrigadeUserRepository fireBrigadeUserRepository;
private final AlarmRecordCoConvertor alarmRecordCoConvertor;
@Override
public PageResponse<AlarmRecordCO> listPage(AlarmRecordPageQry qry) {
Map<String, Object> params = new HashMap<>();
params.put("pageIndex", qry.getPageIndex());
params.put("pageSize", qry.getPageSize());
params.put("fireBrigadeName", qry.getTeam());
params.put("alarmStatus", parseStatus(qry.getStatus()));
PageResponse<FireAlarmInfoDO> page = fireAlarmInfoRepository.listPage(params);
return PageResponse.of(page.getData().stream().map(this::buildCO).collect(Collectors.toList()),
page.getTotalCount(), page.getPageSize(), page.getPageIndex());
}
@Override
@Transactional(rollbackFor = Exception.class)
public SingleResponse<AlarmRecordCO> add(AlarmRecordAddCmd cmd) {
if (!isValidLongitude(cmd.getLng()) || !isValidLatitude(cmd.getLat())) {
throw new BizException("经纬度超出范围");
}
FireAlarmInfoDO record = new FireAlarmInfoDO();
record.setId(nextId());
record.setFireAlarmInfoId(nextBizId());
fillCreateAudit(record);
record.setAlarmMode(ALARM_MODE_PHONE);
record.setAlarmUserId(cmd.getAlarmUserId());
record.setAlarmUserName(cmd.getReporter());
record.setAlarmPhone(cmd.getAlarmPhone());
record.setCorpinfoId(cmd.getCorpinfoId());
record.setCorpinfoName(cmd.getUnit());
record.setFireLocation(cmd.getLocation());
record.setLocationAddress(StrUtil.isBlank(cmd.getLocationAddress()) ? cmd.getLocation() : cmd.getLocationAddress());
record.setLongitude(BigDecimal.valueOf(cmd.getLng()));
record.setLatitude(BigDecimal.valueOf(cmd.getLat()));
record.setAlarmStatus(ALARM_STATUS_ALARMING);
record.setRecordTime(LocalDateTime.now());
record.setMeetingNoticeStatus("INIT");
fireAlarmInfoRepository.save(record);
return SingleResponse.of(buildCO(record));
}
@Override
public AlarmRecordCO get(Long id) {
FireAlarmInfoDO record = fireAlarmInfoRepository.getById(id);
if (record == null) {
throw new BizException("消防报警记录不存在");
}
return buildCO(record);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void handle(AlarmRecordHandleCmd cmd) {
FireAlarmInfoDO record = fireAlarmInfoRepository.getById(cmd.getId());
if (record == null) {
throw new BizException("消防报警记录不存在");
}
if (!Integer.valueOf(ALARM_STATUS_ALARMING).equals(record.getAlarmStatus())) {
throw new BizException("仅报警中的记录可处置");
}
fillBrigade(record, cmd.getFireBrigadeId(), cmd.getFireBrigadeName());
record.setHandleUserId(currentUserId());
record.setHandleUserName(currentUserName());
record.setHandleTime(LocalDateTime.now());
record.setAlarmStatus(ALARM_STATUS_DISPOSING);
fillUpdateAudit(record);
fireAlarmInfoRepository.updateById(record);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void clear(AlarmRecordClearCmd cmd) {
FireAlarmInfoDO record = fireAlarmInfoRepository.getById(cmd.getId());
if (record == null) {
throw new BizException("消防报警记录不存在");
}
if (!Integer.valueOf(ALARM_STATUS_DISPOSING).equals(record.getAlarmStatus())) {
throw new BizException("仅处置中的记录可消警");
}
if (!canClearByCurrentUser(record)) {
throw new BizException("仅当前处置消防队成员可消警");
}
record.setClearReason(cmd.getDesc());
record.setClearId(currentUserId());
record.setClearName(currentUserName());
record.setClearTime(LocalDateTime.now());
record.setAlarmStatus(ALARM_STATUS_CLEARED);
fillUpdateAudit(record);
fireAlarmInfoRepository.updateById(record);
}
private void fillBrigade(FireAlarmInfoDO record, Long fireBrigadePkId, String fireBrigadeName) {
if (fireBrigadePkId == null) {
throw new BizException("请选择处置消防队伍");
}
FireBrigadeDO brigade = fireBrigadeRepository.getById(fireBrigadePkId);
if (brigade == null) {
throw new BizException("处置消防队伍不存在");
}
record.setFireBrigadeId(brigade.getFireBrigadeId());
record.setFireBrigadeName(StrUtil.isNotBlank(brigade.getBrigadeName()) ? brigade.getBrigadeName() : fireBrigadeName);
}
private AlarmRecordCO buildCO(FireAlarmInfoDO record) {
AlarmRecordCO co = alarmRecordCoConvertor.converDOToCO(record);
co.setAlarmUserId(record.getAlarmUserId());
co.setSourceCode(record.getAlarmMode() == null ? null : String.valueOf(record.getAlarmMode()));
co.setSource(sourceName(record.getAlarmMode()));
co.setFireBrigadeId(resolveFireBrigadePkId(record.getFireBrigadeId()));
co.setRecordTime(formatTime(record.getRecordTime()));
co.setStatusCode(record.getAlarmStatus() == null ? null : String.valueOf(record.getAlarmStatus()));
co.setStatus(statusName(record.getAlarmStatus()));
co.setHandleUserId(record.getHandleUserId());
co.setHandleUserName(record.getHandleUserName());
co.setHandleTime(formatTime(record.getHandleTime()));
co.setClearId(record.getClearId());
co.setClearName(record.getClearName());
co.setClearTime(formatTime(record.getClearTime()));
co.setPhotos(Collections.emptyList());
return co;
}
private Integer parseStatus(String status) {
if (StrUtil.isBlank(status)) {
return null;
}
try {
return Integer.valueOf(status.trim());
}
catch (Exception ignored) {
if ("报警中".equals(status)) {
return ALARM_STATUS_ALARMING;
}
if ("处置中".equals(status)) {
return ALARM_STATUS_DISPOSING;
}
if ("已消警".equals(status)) {
return ALARM_STATUS_CLEARED;
}
return null;
}
}
private String sourceName(Integer alarmMode) {
if (Integer.valueOf(ALARM_MODE_APP).equals(alarmMode)) {
return "APP报警";
}
return "电话接报";
}
private String statusName(Integer alarmStatus) {
if (Integer.valueOf(ALARM_STATUS_ALARMING).equals(alarmStatus)) {
return "报警中";
}
if (Integer.valueOf(ALARM_STATUS_DISPOSING).equals(alarmStatus)) {
return "处置中";
}
if (Integer.valueOf(ALARM_STATUS_CLEARED).equals(alarmStatus)) {
return "已消警";
}
return null;
}
private String formatTime(LocalDateTime time) {
return time == null ? null : TIME_FORMATTER.format(time);
}
private Long resolveFireBrigadePkId(String fireBrigadeBizId) {
if (StrUtil.isBlank(fireBrigadeBizId)) {
return null;
}
FireBrigadeDO brigade = fireBrigadeRepository.getByFireBrigadeId(fireBrigadeBizId);
return brigade == null ? null : brigade.getId();
}
private boolean canClearByCurrentUser(FireAlarmInfoDO record) {
if (record.getFireBrigadeId() == null || currentUserId() == null) {
return false;
}
return fireBrigadeUserRepository.existsRelation(record.getFireBrigadeId(), currentUserId(), null);
}
private boolean isValidLongitude(Double lng) {
return lng != null && lng >= -180D && lng <= 180D;
}
private boolean isValidLatitude(Double lat) {
return lat != null && lat >= -90D && lat <= 90D;
}
private long nextId() {
return IdUtil.getSnowflake(1, 1).nextId();
}
private String nextBizId() {
return UUID.randomUUID().toString().replace("-", "");
}
}

View File

@ -0,0 +1,43 @@
package com.zcloud.zcGbsServicer.service;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.jjb.saas.framework.repository.basedo.BaseDO;
import java.time.LocalDateTime;
abstract class FireAlarmServiceSupport {
protected Long currentTenantId() {
return AuthContext.getTenantId();
}
protected Long currentUserId() {
return AuthContext.getUserId();
}
protected String currentUserName() {
SSOUser user = AuthContext.getCurrentUser();
return user == null ? null : user.getName();
}
protected void fillCreateAudit(BaseDO dataObject) {
LocalDateTime now = LocalDateTime.now();
dataObject.setTenantId(currentTenantId());
dataObject.setOrgId(currentTenantId());
dataObject.setDeleteEnum("FALSE");
dataObject.setVersion(0);
dataObject.setCreateId(currentUserId());
dataObject.setCreateName(currentUserName());
dataObject.setCreateTime(now);
dataObject.setUpdateId(currentUserId());
dataObject.setUpdateName(currentUserName());
dataObject.setUpdateTime(now);
}
protected void fillUpdateAudit(BaseDO dataObject) {
dataObject.setUpdateId(currentUserId());
dataObject.setUpdateName(currentUserName());
dataObject.setUpdateTime(LocalDateTime.now());
}
}

View File

@ -0,0 +1,22 @@
package com.zcloud.zcGbsServicer.api;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.zcGbsServicer.dto.AlarmRecordAddCmd;
import com.zcloud.zcGbsServicer.dto.AlarmRecordClearCmd;
import com.zcloud.zcGbsServicer.dto.AlarmRecordHandleCmd;
import com.zcloud.zcGbsServicer.dto.AlarmRecordPageQry;
import com.zcloud.zcGbsServicer.dto.clientobject.AlarmRecordCO;
public interface AlarmRecordServiceI {
PageResponse<AlarmRecordCO> listPage(AlarmRecordPageQry qry);
SingleResponse<AlarmRecordCO> add(AlarmRecordAddCmd cmd);
AlarmRecordCO get(Long id);
void handle(AlarmRecordHandleCmd cmd);
void clear(AlarmRecordClearCmd cmd);
}

View File

@ -0,0 +1,44 @@
package com.zcloud.zcGbsServicer.dto;
import com.alibaba.cola.dto.Command;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Data
public class AlarmRecordAddCmd extends Command {
@ApiModelProperty("报警人用户ID")
private Long alarmUserId;
@NotBlank
@ApiModelProperty("报警人")
private String reporter;
@ApiModelProperty("报警人电话")
private String alarmPhone;
@ApiModelProperty("所属单位ID")
private Long corpinfoId;
@NotBlank
@ApiModelProperty("火警位置")
private String location;
@NotBlank
@ApiModelProperty("所属单位")
private String unit;
@ApiModelProperty("定位地址")
private String locationAddress;
@NotNull
@ApiModelProperty("经度")
private Double lng;
@NotNull
@ApiModelProperty("纬度")
private Double lat;
}

View File

@ -0,0 +1,30 @@
package com.zcloud.zcGbsServicer.dto;
import com.alibaba.cola.dto.Command;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
public class AlarmRecordClearCmd extends Command {
@NotNull
@ApiModelProperty("报警记录ID")
private Long id;
@ApiModelProperty("消防队伍ID")
private Long fireBrigadeId;
@ApiModelProperty("消防队伍名称")
private String fireBrigadeName;
@NotBlank
@ApiModelProperty("处置说明")
private String desc;
@ApiModelProperty("现场照片")
private List<String> photos;
}

View File

@ -0,0 +1,21 @@
package com.zcloud.zcGbsServicer.dto;
import com.alibaba.cola.dto.Command;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
@Data
public class AlarmRecordHandleCmd extends Command {
@NotNull
@ApiModelProperty("报警记录ID")
private Long id;
@ApiModelProperty("消防队伍ID")
private Long fireBrigadeId;
@ApiModelProperty("消防队伍名称")
private String fireBrigadeName;
}

View File

@ -0,0 +1,15 @@
package com.zcloud.zcGbsServicer.dto;
import com.alibaba.cola.dto.PageQuery;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class AlarmRecordPageQry extends PageQuery {
@ApiModelProperty("处置队伍名称")
private String team;
@ApiModelProperty("报警状态")
private String status;
}

View File

@ -0,0 +1,62 @@
package com.zcloud.zcGbsServicer.dto.clientobject;
import com.alibaba.cola.dto.ClientObject;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class AlarmRecordCO extends ClientObject {
private Long id;
private String fireAlarmInfoId;
private String sourceCode;
private String source;
private Long alarmUserId;
@JsonProperty("reporter")
private String alarmUserName;
@JsonProperty("unit")
private String corpinfoName;
@JsonProperty("location")
private String fireLocation;
private String locationAddress;
@JsonProperty("lng")
private BigDecimal longitude;
@JsonProperty("lat")
private BigDecimal latitude;
private Long fireBrigadeId;
@JsonProperty("team")
private String fireBrigadeName;
@JsonProperty("time")
private String recordTime;
private String statusCode;
private String status;
private Long handleUserId;
private String handleUserName;
private String handleTime;
@JsonProperty("clearUserId")
private Long clearId;
@JsonProperty("clearUserName")
private String clearName;
private String clearTime;
@JsonProperty("desc")
private String clearReason;
private List<String> photos;
}

View File

@ -0,0 +1,55 @@
package com.zcloud.zcGbsServicer.persistence.dataobject;
import com.baomidou.mybatisplus.annotation.TableName;
import com.jjb.saas.framework.repository.basedo.BaseDO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("fire_alarm_info")
public class FireAlarmInfoDO extends BaseDO {
private String fireAlarmInfoId;
private Integer alarmMode;
private Long alarmUserId;
private String alarmUserName;
private String alarmPhone;
private Long corpinfoId;
private String corpinfoName;
private String fireLocation;
private String locationAddress;
private BigDecimal longitude;
private BigDecimal latitude;
private String fireBrigadeId;
private String fireBrigadeName;
private Integer alarmStatus;
private LocalDateTime recordTime;
private Long handleUserId;
private String handleUserName;
private LocalDateTime handleTime;
private LocalDateTime clearTime;
private Long clearId;
private String clearName;
private String clearReason;
private String meetingRoomId;
private String meetingRoomName;
private Long meetingApplyUserId;
private String meetingApplyUserName;
private String meetingApplyThirdUserId;
private String meetingApplyThirdUserName;
private String meetingNoticeStatus;
private LocalDateTime meetingNoticeTime;
private Integer meetingAuthStatus;
private Integer meetingApproveStatus;
private Long meetingApproveId;
private String meetingApproveName;
private LocalDateTime meetingApproveTime;
private Integer meetingJoinStatus;
private LocalDateTime meetingJoinTime;
private LocalDateTime meetingLeaveTime;
private String meetingResultMsg;
}

View File

@ -0,0 +1,16 @@
package com.zcloud.zcGbsServicer.persistence.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zcloud.zcGbsServicer.persistence.dataobject.FireAlarmInfoDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface FireAlarmInfoMapper extends BaseMapper<FireAlarmInfoDO> {
IPage<FireAlarmInfoDO> selectPageSql(IPage<FireAlarmInfoDO> page,
@Param("tenantId") Long tenantId,
@Param("fireBrigadeName") String fireBrigadeName,
@Param("alarmStatus") Integer alarmStatus);
}

View File

@ -0,0 +1,12 @@
package com.zcloud.zcGbsServicer.persistence.repository;
import com.alibaba.cola.dto.PageResponse;
import com.jjb.saas.framework.repository.repo.BaseRepository;
import com.zcloud.zcGbsServicer.persistence.dataobject.FireAlarmInfoDO;
import java.util.Map;
public interface FireAlarmInfoRepository extends BaseRepository<FireAlarmInfoDO> {
PageResponse<FireAlarmInfoDO> listPage(Map<String, Object> params);
}

View File

@ -0,0 +1,31 @@
package com.zcloud.zcGbsServicer.persistence.repository.impl;
import com.alibaba.cola.dto.PageResponse;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.jjb.saas.framework.repository.common.PageHelper;
import com.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl;
import com.zcloud.gbscommon.utils.Query;
import com.zcloud.zcGbsServicer.persistence.dataobject.FireAlarmInfoDO;
import com.zcloud.zcGbsServicer.persistence.mapper.FireAlarmInfoMapper;
import com.zcloud.zcGbsServicer.persistence.repository.FireAlarmInfoRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.Map;
@Service
@RequiredArgsConstructor
public class FireAlarmInfoRepositoryImpl extends BaseRepositoryImpl<FireAlarmInfoMapper, FireAlarmInfoDO> implements FireAlarmInfoRepository {
private final FireAlarmInfoMapper fireAlarmInfoMapper;
@Override
public PageResponse<FireAlarmInfoDO> listPage(Map<String, Object> params) {
IPage<FireAlarmInfoDO> page = new Query<FireAlarmInfoDO>().getPage(params);
String fireBrigadeName = params == null ? null : (String) params.get("fireBrigadeName");
Integer alarmStatus = params == null ? null : (Integer) params.get("alarmStatus");
IPage<FireAlarmInfoDO> result = fireAlarmInfoMapper.selectPageSql(page, AuthContext.getTenantId(), fireBrigadeName, alarmStatus);
return PageHelper.pageToResponse(result, result.getRecords());
}
}

View File

@ -0,0 +1,25 @@
<?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.zcGbsServicer.persistence.mapper.FireAlarmInfoMapper">
<select id="selectPageSql" resultType="com.zcloud.zcGbsServicer.persistence.dataobject.FireAlarmInfoDO">
SELECT *
FROM fire_alarm_info
<where>
delete_enum = 'FALSE'
<if test="tenantId != null">
AND tenant_id = #{tenantId}
</if>
<if test="fireBrigadeName != null and fireBrigadeName != ''">
AND fire_brigade_name LIKE CONCAT('%', #{fireBrigadeName}, '%')
</if>
<if test="alarmStatus != null">
AND alarm_status = #{alarmStatus}
</if>
</where>
ORDER BY record_time DESC, create_time DESC
</select>
</mapper>