From 2e8c7daea664e626936cf99234551ba54d99b937 Mon Sep 17 00:00:00 2001 From: aosodo_4812 Date: Wed, 2 Sep 2026 17:46:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A5=E8=AD=A6=E7=BB=9F=E8=AE=A1=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/AlarmStatisticController.java | 38 +++++++++ .../command/query/AlarmStatisticQueryExe.java | 81 +++++++++++++++++++ .../service/AlarmStatisticServiceImpl.java | 27 +++++++ .../edgeguard/api/AlarmStatisticServiceI.java | 13 +++ .../edgeguard/dto/AlarmCorpStatisticQry.java | 15 ++++ .../dto/AlarmRegionStatisticQry.java | 18 +++++ .../clientobject/AlarmCorpStatisticCo.java | 14 ++++ .../clientobject/AlarmRegionStatisticCo.java | 16 ++++ .../domain/gateway/AlarmStatisticGateway.java | 18 +++++ .../domain/model/AlarmStatisticE.java | 15 ++++ .../AlarmStatisticGatewayImpl.java | 38 +++++++++ .../persistence/mapper/AlarmMapper.java | 25 ++++++ .../src/main/resources/mapper/AlarmMapper.xml | 65 +++++++++++++++ 13 files changed, 383 insertions(+) create mode 100644 web-adapter/src/main/java/com/zcloud/gbs/edgeguard/web/AlarmStatisticController.java create mode 100644 web-app/src/main/java/com/zcloud/gbs/edgeguard/command/query/AlarmStatisticQueryExe.java create mode 100644 web-app/src/main/java/com/zcloud/gbs/edgeguard/service/AlarmStatisticServiceImpl.java create mode 100644 web-client/src/main/java/com/zcloud/gbs/edgeguard/api/AlarmStatisticServiceI.java create mode 100644 web-client/src/main/java/com/zcloud/gbs/edgeguard/dto/AlarmCorpStatisticQry.java create mode 100644 web-client/src/main/java/com/zcloud/gbs/edgeguard/dto/AlarmRegionStatisticQry.java create mode 100644 web-client/src/main/java/com/zcloud/gbs/edgeguard/dto/clientobject/AlarmCorpStatisticCo.java create mode 100644 web-client/src/main/java/com/zcloud/gbs/edgeguard/dto/clientobject/AlarmRegionStatisticCo.java create mode 100644 web-domain/src/main/java/com/zcloud/gbs/edgeguard/domain/gateway/AlarmStatisticGateway.java create mode 100644 web-domain/src/main/java/com/zcloud/gbs/edgeguard/domain/model/AlarmStatisticE.java create mode 100644 web-infrastructure/src/main/java/com/zcloud/gbs/edgeguard/gatewayimpl/AlarmStatisticGatewayImpl.java diff --git a/web-adapter/src/main/java/com/zcloud/gbs/edgeguard/web/AlarmStatisticController.java b/web-adapter/src/main/java/com/zcloud/gbs/edgeguard/web/AlarmStatisticController.java new file mode 100644 index 0000000..e27672e --- /dev/null +++ b/web-adapter/src/main/java/com/zcloud/gbs/edgeguard/web/AlarmStatisticController.java @@ -0,0 +1,38 @@ +package com.zcloud.gbs.edgeguard.web; + +import com.alibaba.cola.dto.PageResponse; +import com.zcloud.gbs.edgeguard.api.AlarmStatisticServiceI; +import com.zcloud.gbs.edgeguard.dto.AlarmCorpStatisticQry; +import com.zcloud.gbs.edgeguard.dto.AlarmRegionStatisticQry; +import com.zcloud.gbs.edgeguard.dto.clientobject.AlarmCorpStatisticCo; +import com.zcloud.gbs.edgeguard.dto.clientobject.AlarmRegionStatisticCo; +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.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/alarm-statistics") +@RequiredArgsConstructor +public class AlarmStatisticController { + private final AlarmStatisticServiceI statisticService; + + @ApiOperation("按企业统计报警") + @PostMapping("/corporations") + public PageResponse corporations( + @Validated @RequestBody AlarmCorpStatisticQry qry) { + return statisticService.corporations(qry); + } + + @ApiOperation("按区域统计报警") + @PostMapping("/regions") + public PageResponse regions( + @Validated @RequestBody AlarmRegionStatisticQry qry) { + return statisticService.regions(qry); + } +} diff --git a/web-app/src/main/java/com/zcloud/gbs/edgeguard/command/query/AlarmStatisticQueryExe.java b/web-app/src/main/java/com/zcloud/gbs/edgeguard/command/query/AlarmStatisticQueryExe.java new file mode 100644 index 0000000..0e8d7cf --- /dev/null +++ b/web-app/src/main/java/com/zcloud/gbs/edgeguard/command/query/AlarmStatisticQueryExe.java @@ -0,0 +1,81 @@ +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.domain.gateway.AlarmStatisticGateway; +import com.zcloud.gbs.edgeguard.domain.model.AlarmStatisticE; +import com.zcloud.gbs.edgeguard.domain.model.CorpE; +import com.zcloud.gbs.edgeguard.dto.AlarmCorpStatisticQry; +import com.zcloud.gbs.edgeguard.dto.AlarmRegionStatisticQry; +import com.zcloud.gbs.edgeguard.dto.clientobject.AlarmCorpStatisticCo; +import com.zcloud.gbs.edgeguard.dto.clientobject.AlarmRegionStatisticCo; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Component; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Component +@RequiredArgsConstructor +public class AlarmStatisticQueryExe { + private final AlarmStatisticGateway statisticGateway; + private final RegionAccessService accessService; + + public PageResponse corporations(AlarmCorpStatisticQry qry) { + List accessibleCorps = accessService.accessibleCorps(); + if (qry.getCorpId() != null) { + CorpE corp = accessService.requireAccessibleCorp(qry.getCorpId()); + accessibleCorps = Collections.singletonList(corp); + } + if (accessibleCorps.isEmpty()) { + return PageResponse.of(Collections.emptyList(), 0, pageSize(qry.getPageSize()), pageIndex(qry.getPageIndex())); + } + Map corpMap = accessibleCorps.stream() + .collect(Collectors.toMap(CorpE::getId, Function.identity())); + List corpIds = accessibleCorps.stream().map(CorpE::getId).collect(Collectors.toList()); + int pageIndex = pageIndex(qry.getPageIndex()); + int pageSize = pageSize(qry.getPageSize()); + List records = statisticGateway.pageByCorp( + corpIds, qry.getAlarmTimeStart(), qry.getAlarmTimeEnd(), (pageIndex - 1) * pageSize, pageSize) + .stream().map(row -> toCorpCo(row, corpMap.get(row.getCorpId()))).collect(Collectors.toList()); + long total = statisticGateway.countCorp(corpIds, qry.getAlarmTimeStart(), qry.getAlarmTimeEnd()); + return PageResponse.of(records, Math.toIntExact(total), pageSize, pageIndex); + } + + public PageResponse regions(AlarmRegionStatisticQry qry) { + accessService.requireAccessibleCorp(qry.getCorpId()); + int pageIndex = pageIndex(qry.getPageIndex()); + int pageSize = pageSize(qry.getPageSize()); + List records = statisticGateway.pageByRegion( + qry.getCorpId(), qry.getRegionName(), qry.getAlarmTimeStart(), qry.getAlarmTimeEnd(), + (pageIndex - 1) * pageSize, pageSize) + .stream().map(this::toRegionCo).collect(Collectors.toList()); + long total = statisticGateway.countRegion(qry.getCorpId(), qry.getRegionName()); + return PageResponse.of(records, Math.toIntExact(total), pageSize, pageIndex); + } + + private AlarmCorpStatisticCo toCorpCo(AlarmStatisticE source, CorpE corp) { + AlarmCorpStatisticCo target = new AlarmCorpStatisticCo(); + BeanUtils.copyProperties(source, target); + target.setCorpName(corp == null ? null : corp.getCorpName()); + return target; + } + + private AlarmRegionStatisticCo toRegionCo(AlarmStatisticE source) { + AlarmRegionStatisticCo target = new AlarmRegionStatisticCo(); + BeanUtils.copyProperties(source, target); + return target; + } + + private int pageIndex(int pageIndex) { + return pageIndex <= 0 ? 1 : pageIndex; + } + + private int pageSize(int pageSize) { + return pageSize <= 0 ? 10 : Math.min(pageSize, 200); + } +} diff --git a/web-app/src/main/java/com/zcloud/gbs/edgeguard/service/AlarmStatisticServiceImpl.java b/web-app/src/main/java/com/zcloud/gbs/edgeguard/service/AlarmStatisticServiceImpl.java new file mode 100644 index 0000000..19b45a2 --- /dev/null +++ b/web-app/src/main/java/com/zcloud/gbs/edgeguard/service/AlarmStatisticServiceImpl.java @@ -0,0 +1,27 @@ +package com.zcloud.gbs.edgeguard.service; + +import com.alibaba.cola.dto.PageResponse; +import com.zcloud.gbs.edgeguard.api.AlarmStatisticServiceI; +import com.zcloud.gbs.edgeguard.command.query.AlarmStatisticQueryExe; +import com.zcloud.gbs.edgeguard.dto.AlarmCorpStatisticQry; +import com.zcloud.gbs.edgeguard.dto.AlarmRegionStatisticQry; +import com.zcloud.gbs.edgeguard.dto.clientobject.AlarmCorpStatisticCo; +import com.zcloud.gbs.edgeguard.dto.clientobject.AlarmRegionStatisticCo; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class AlarmStatisticServiceImpl implements AlarmStatisticServiceI { + private final AlarmStatisticQueryExe queryExe; + + @Override + public PageResponse corporations(AlarmCorpStatisticQry qry) { + return queryExe.corporations(qry); + } + + @Override + public PageResponse regions(AlarmRegionStatisticQry qry) { + return queryExe.regions(qry); + } +} diff --git a/web-client/src/main/java/com/zcloud/gbs/edgeguard/api/AlarmStatisticServiceI.java b/web-client/src/main/java/com/zcloud/gbs/edgeguard/api/AlarmStatisticServiceI.java new file mode 100644 index 0000000..88be143 --- /dev/null +++ b/web-client/src/main/java/com/zcloud/gbs/edgeguard/api/AlarmStatisticServiceI.java @@ -0,0 +1,13 @@ +package com.zcloud.gbs.edgeguard.api; + +import com.alibaba.cola.dto.PageResponse; +import com.zcloud.gbs.edgeguard.dto.AlarmCorpStatisticQry; +import com.zcloud.gbs.edgeguard.dto.AlarmRegionStatisticQry; +import com.zcloud.gbs.edgeguard.dto.clientobject.AlarmCorpStatisticCo; +import com.zcloud.gbs.edgeguard.dto.clientobject.AlarmRegionStatisticCo; + +public interface AlarmStatisticServiceI { + PageResponse corporations(AlarmCorpStatisticQry qry); + + PageResponse regions(AlarmRegionStatisticQry qry); +} diff --git a/web-client/src/main/java/com/zcloud/gbs/edgeguard/dto/AlarmCorpStatisticQry.java b/web-client/src/main/java/com/zcloud/gbs/edgeguard/dto/AlarmCorpStatisticQry.java new file mode 100644 index 0000000..d80318f --- /dev/null +++ b/web-client/src/main/java/com/zcloud/gbs/edgeguard/dto/AlarmCorpStatisticQry.java @@ -0,0 +1,15 @@ +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 AlarmCorpStatisticQry extends PageQuery { + private Long corpId; + private Date alarmTimeStart; + private Date alarmTimeEnd; +} diff --git a/web-client/src/main/java/com/zcloud/gbs/edgeguard/dto/AlarmRegionStatisticQry.java b/web-client/src/main/java/com/zcloud/gbs/edgeguard/dto/AlarmRegionStatisticQry.java new file mode 100644 index 0000000..6e88c6e --- /dev/null +++ b/web-client/src/main/java/com/zcloud/gbs/edgeguard/dto/AlarmRegionStatisticQry.java @@ -0,0 +1,18 @@ +package com.zcloud.gbs.edgeguard.dto; + +import com.alibaba.cola.dto.PageQuery; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotNull; +import java.util.Date; + +@Data +@EqualsAndHashCode(callSuper = true) +public class AlarmRegionStatisticQry extends PageQuery { + @NotNull(message = "企业ID不能为空") + private Long corpId; + private String regionName; + private Date alarmTimeStart; + private Date alarmTimeEnd; +} diff --git a/web-client/src/main/java/com/zcloud/gbs/edgeguard/dto/clientobject/AlarmCorpStatisticCo.java b/web-client/src/main/java/com/zcloud/gbs/edgeguard/dto/clientobject/AlarmCorpStatisticCo.java new file mode 100644 index 0000000..c5096a9 --- /dev/null +++ b/web-client/src/main/java/com/zcloud/gbs/edgeguard/dto/clientobject/AlarmCorpStatisticCo.java @@ -0,0 +1,14 @@ +package com.zcloud.gbs.edgeguard.dto.clientobject; + +import com.alibaba.cola.dto.ClientObject; +import lombok.Data; + +@Data +public class AlarmCorpStatisticCo extends ClientObject { + private Long corpId; + private String corpName; + private Long totalCount; + private Long pendingCount; + private Long hiddenHandlingCount; + private Long disposedCount; +} diff --git a/web-client/src/main/java/com/zcloud/gbs/edgeguard/dto/clientobject/AlarmRegionStatisticCo.java b/web-client/src/main/java/com/zcloud/gbs/edgeguard/dto/clientobject/AlarmRegionStatisticCo.java new file mode 100644 index 0000000..baa6fbb --- /dev/null +++ b/web-client/src/main/java/com/zcloud/gbs/edgeguard/dto/clientobject/AlarmRegionStatisticCo.java @@ -0,0 +1,16 @@ +package com.zcloud.gbs.edgeguard.dto.clientobject; + +import com.alibaba.cola.dto.ClientObject; +import lombok.Data; + +@Data +public class AlarmRegionStatisticCo extends ClientObject { + private Long regionId; + private String regionCode; + private String regionName; + private Long corpId; + private Long totalCount; + private Long pendingCount; + private Long hiddenHandlingCount; + private Long disposedCount; +} diff --git a/web-domain/src/main/java/com/zcloud/gbs/edgeguard/domain/gateway/AlarmStatisticGateway.java b/web-domain/src/main/java/com/zcloud/gbs/edgeguard/domain/gateway/AlarmStatisticGateway.java new file mode 100644 index 0000000..fb5c6e5 --- /dev/null +++ b/web-domain/src/main/java/com/zcloud/gbs/edgeguard/domain/gateway/AlarmStatisticGateway.java @@ -0,0 +1,18 @@ +package com.zcloud.gbs.edgeguard.domain.gateway; + +import com.zcloud.gbs.edgeguard.domain.model.AlarmStatisticE; + +import java.util.Date; +import java.util.Collection; +import java.util.List; + +public interface AlarmStatisticGateway { + List pageByCorp(Collection corpIds, Date start, Date end, int offset, int pageSize); + + long countCorp(Collection corpIds, Date start, Date end); + + List pageByRegion(Long corpId, String regionName, Date start, Date end, + int offset, int pageSize); + + long countRegion(Long corpId, String regionName); +} diff --git a/web-domain/src/main/java/com/zcloud/gbs/edgeguard/domain/model/AlarmStatisticE.java b/web-domain/src/main/java/com/zcloud/gbs/edgeguard/domain/model/AlarmStatisticE.java new file mode 100644 index 0000000..e2c6ae0 --- /dev/null +++ b/web-domain/src/main/java/com/zcloud/gbs/edgeguard/domain/model/AlarmStatisticE.java @@ -0,0 +1,15 @@ +package com.zcloud.gbs.edgeguard.domain.model; + +import lombok.Data; + +@Data +public class AlarmStatisticE { + private Long corpId; + private Long regionId; + private String regionCode; + private String regionName; + private Long totalCount; + private Long pendingCount; + private Long hiddenHandlingCount; + private Long disposedCount; +} diff --git a/web-infrastructure/src/main/java/com/zcloud/gbs/edgeguard/gatewayimpl/AlarmStatisticGatewayImpl.java b/web-infrastructure/src/main/java/com/zcloud/gbs/edgeguard/gatewayimpl/AlarmStatisticGatewayImpl.java new file mode 100644 index 0000000..1d269da --- /dev/null +++ b/web-infrastructure/src/main/java/com/zcloud/gbs/edgeguard/gatewayimpl/AlarmStatisticGatewayImpl.java @@ -0,0 +1,38 @@ +package com.zcloud.gbs.edgeguard.gatewayimpl; + +import com.zcloud.gbs.edgeguard.domain.gateway.AlarmStatisticGateway; +import com.zcloud.gbs.edgeguard.domain.model.AlarmStatisticE; +import com.zcloud.gbs.edgeguard.persistence.mapper.AlarmMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.Collection; +import java.util.List; + +@Service +@RequiredArgsConstructor +public class AlarmStatisticGatewayImpl implements AlarmStatisticGateway { + private final AlarmMapper alarmMapper; + + @Override + public List pageByCorp(Collection corpIds, Date start, Date end, int offset, int pageSize) { + return alarmMapper.pageStatisticByCorp(corpIds, start, end, offset, pageSize); + } + + @Override + public long countCorp(Collection corpIds, Date start, Date end) { + return alarmMapper.countStatisticCorp(corpIds, start, end); + } + + @Override + public List pageByRegion(Long corpId, String regionName, Date start, Date end, + int offset, int pageSize) { + return alarmMapper.pageStatisticByRegion(corpId, regionName, start, end, offset, pageSize); + } + + @Override + public long countRegion(Long corpId, String regionName) { + return alarmMapper.countStatisticRegion(corpId, regionName); + } +} diff --git a/web-infrastructure/src/main/java/com/zcloud/gbs/edgeguard/persistence/mapper/AlarmMapper.java b/web-infrastructure/src/main/java/com/zcloud/gbs/edgeguard/persistence/mapper/AlarmMapper.java index db78a91..a412438 100644 --- a/web-infrastructure/src/main/java/com/zcloud/gbs/edgeguard/persistence/mapper/AlarmMapper.java +++ b/web-infrastructure/src/main/java/com/zcloud/gbs/edgeguard/persistence/mapper/AlarmMapper.java @@ -2,6 +2,31 @@ package com.zcloud.gbs.edgeguard.persistence.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.zcloud.gbs.edgeguard.persistence.dataobject.AlarmDO; +import com.zcloud.gbs.edgeguard.domain.model.AlarmStatisticE; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.Collection; +import java.util.List; public interface AlarmMapper extends BaseMapper { + List pageStatisticByCorp(@Param("corpIds") Collection corpIds, + @Param("start") Date start, + @Param("end") Date end, + @Param("offset") int offset, + @Param("pageSize") int pageSize); + + long countStatisticCorp(@Param("corpIds") Collection corpIds, + @Param("start") Date start, + @Param("end") Date end); + + List pageStatisticByRegion(@Param("corpId") Long corpId, + @Param("regionName") String regionName, + @Param("start") Date start, + @Param("end") Date end, + @Param("offset") int offset, + @Param("pageSize") int pageSize); + + long countStatisticRegion(@Param("corpId") Long corpId, + @Param("regionName") String regionName); } diff --git a/web-infrastructure/src/main/resources/mapper/AlarmMapper.xml b/web-infrastructure/src/main/resources/mapper/AlarmMapper.xml index ad0fb25..d1a1923 100644 --- a/web-infrastructure/src/main/resources/mapper/AlarmMapper.xml +++ b/web-infrastructure/src/main/resources/mapper/AlarmMapper.xml @@ -1,4 +1,69 @@ + + AND alarm_time =]]> #{start} + AND alarm_time #{end} + + + + + + + + +