From b1be1b300ac3a16824d90bafda7d09edc3a72f13 Mon Sep 17 00:00:00 2001 From: lishiwei <3230787218@qq.com> Date: Wed, 10 Jun 2026 09:03:36 +0800 Subject: [PATCH] =?UTF-8?q?feat():=20=E6=B7=BB=E5=8A=A0=E6=8C=89=E5=85=AC?= =?UTF-8?q?=E5=8F=B8=E7=BB=9F=E8=AE=A1=E4=BA=8B=E4=BB=B6=E5=92=8C=E4=BA=8B?= =?UTF-8?q?=E6=95=85=E6=95=B0=E9=87=8F=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../accident/web/AccidentController.java | 11 +++- .../AccidentCorpCountStatConvertor.java | 21 ++++++++ .../command/query/AccidentQueryExe.java | 50 +++++++++++++++++++ .../accident/service/AccidentServiceImpl.java | 6 +++ .../zcloud/accident/api/AccidentServiceI.java | 10 +++- .../clientobject/AccidentCorpCountStatCO.java | 28 +++++++++++ .../domain/gateway/AccidentGateway.java | 9 ++++ .../domain/model/AccidentCorpCountStat.java | 21 ++++++++ .../gatewayimpl/AccidentGatewayImpl.java | 6 +++ .../persistence/mapper/AccidentMapper.java | 9 ++++ .../repository/AccidentRepository.java | 9 ++++ .../impl/AccidentRepositoryImpl.java | 6 +++ .../main/resources/mapper/AccidentMapper.xml | 18 +++++++ 13 files changed, 202 insertions(+), 2 deletions(-) create mode 100644 web-app/src/main/java/com/zcloud/accident/command/convertor/AccidentCorpCountStatConvertor.java create mode 100644 web-client/src/main/java/com/zcloud/accident/dto/clientobject/AccidentCorpCountStatCO.java create mode 100644 web-domain/src/main/java/com/zcloud/accident/domain/model/AccidentCorpCountStat.java diff --git a/web-adapter/src/main/java/com/zcloud/accident/web/AccidentController.java b/web-adapter/src/main/java/com/zcloud/accident/web/AccidentController.java index f925486..29ed338 100644 --- a/web-adapter/src/main/java/com/zcloud/accident/web/AccidentController.java +++ b/web-adapter/src/main/java/com/zcloud/accident/web/AccidentController.java @@ -16,6 +16,7 @@ import com.zcloud.accident.dto.AccidentCountQry; import com.zcloud.accident.dto.AccidentPageQry; import com.zcloud.accident.dto.AccidentUpdateCmd; import com.zcloud.accident.dto.clientobject.AccidentCO; +import com.zcloud.accident.dto.clientobject.AccidentCorpCountStatCO; import com.zcloud.accident.dto.clientobject.AccidentCountStatCO; import com.zcloud.accident.dto.clientobject.AccidentExportCO; import com.zcloud.accident.dto.clientobject.EventExportCO; @@ -26,6 +27,8 @@ import lombok.AllArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.Arrays; + import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.text.SimpleDateFormat; @@ -118,8 +121,14 @@ public class AccidentController { } } - @ApiOperation("按照公司和事故类型统计个数") + @ApiOperation("按公司统计事件和事故数量") @PostMapping("/countByCorpinfoAndType") + public MultiResponse countByCorpinfoAndType(@RequestBody AccidentCountQry accidentCountQry) { + return accidentService.countByCorpinfo(accidentCountQry); + } + + @ApiOperation("按照事故类型钻取统计个数") + @PostMapping("/countByIncidentType") public MultiResponse countByCorpinfoIdAndIncidentType(@RequestBody AccidentCountQry accidentCountQry) { return accidentService.countByCorpinfoIdAndIncidentType(accidentCountQry); } diff --git a/web-app/src/main/java/com/zcloud/accident/command/convertor/AccidentCorpCountStatConvertor.java b/web-app/src/main/java/com/zcloud/accident/command/convertor/AccidentCorpCountStatConvertor.java new file mode 100644 index 0000000..4c18e2c --- /dev/null +++ b/web-app/src/main/java/com/zcloud/accident/command/convertor/AccidentCorpCountStatConvertor.java @@ -0,0 +1,21 @@ +package com.zcloud.accident.command.convertor; + +import com.zcloud.accident.domain.model.AccidentCorpCountStat; +import com.zcloud.accident.dto.clientobject.AccidentCorpCountStatCO; +import org.mapstruct.Mapper; + +import java.util.List; + +/** + * 公司级事件/事故统计结果转换器 + * + * @Author + * @Date + */ +@Mapper(componentModel = "spring") +public interface AccidentCorpCountStatConvertor { + + AccidentCorpCountStatCO convertToCO(AccidentCorpCountStat stat); + + List convertToCOList(List stats); +} diff --git a/web-app/src/main/java/com/zcloud/accident/command/query/AccidentQueryExe.java b/web-app/src/main/java/com/zcloud/accident/command/query/AccidentQueryExe.java index 73164aa..84cb7f3 100644 --- a/web-app/src/main/java/com/zcloud/accident/command/query/AccidentQueryExe.java +++ b/web-app/src/main/java/com/zcloud/accident/command/query/AccidentQueryExe.java @@ -3,11 +3,15 @@ package com.zcloud.accident.command.query; import com.alibaba.cola.dto.PageResponse; import com.alibaba.cola.dto.MultiResponse; import com.zcloud.accident.command.convertor.AccidentCoConvertor; +import com.zcloud.accident.command.convertor.AccidentCorpCountStatConvertor; import com.zcloud.accident.command.convertor.AccidentCountStatConvertor; import com.zcloud.accident.domain.gateway.AccidentGateway; +import com.zcloud.accident.domain.model.AccidentCorpCountStat; +import com.zcloud.accident.domain.model.AccidentCountStat; import com.zcloud.accident.dto.AccidentCountQry; import com.zcloud.accident.dto.AccidentPageQry; import com.zcloud.accident.dto.clientobject.AccidentCO; +import com.zcloud.accident.dto.clientobject.AccidentCorpCountStatCO; import com.zcloud.accident.dto.clientobject.AccidentCountStatCO; import com.zcloud.accident.persistence.dataobject.AccidentDO; import com.zcloud.accident.persistence.repository.AccidentRepository; @@ -15,8 +19,10 @@ import com.zcloud.gbscommon.utils.PageQueryHelper; import lombok.AllArgsConstructor; import org.springframework.stereotype.Component; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; /** @@ -32,6 +38,7 @@ public class AccidentQueryExe { private final AccidentCoConvertor accidentCoConvertor; private final AccidentGateway accidentGateway; private final AccidentCountStatConvertor accidentCountStatConvertor; + private final AccidentCorpCountStatConvertor accidentCorpCountStatConvertor; /** * 根据id查询 @@ -77,6 +84,34 @@ public class AccidentQueryExe { List accidentDOs = accidentRepository.listAll(params,menuPerms); return accidentCoConvertor.converDOsToCOs(accidentDOs); } + /** + * 按公司统计事件和事故数量 + * @param accidentCountQry 查询条件,包含公司ID列表 + * @return 统计结果列表 + */ + public MultiResponse countByCorpinfo(AccidentCountQry accidentCountQry) { + List resultList = accidentGateway.countByCorpinfo(accidentCountQry.getCorpinfoIds()); + List coList = accidentCorpCountStatConvertor.convertToCOList(resultList); + // 补全无数据的公司,事件和事故数量为0 + if (accidentCountQry.getCorpinfoIds() != null) { + Set existIds = new HashSet<>(); + for (AccidentCorpCountStatCO co : coList) { + existIds.add(co.getCorpinfoId()); + } + for (String idStr : accidentCountQry.getCorpinfoIds()) { + Long corpinfoId = Long.valueOf(idStr); + if (!existIds.contains(corpinfoId)) { + AccidentCorpCountStatCO co = new AccidentCorpCountStatCO(); + co.setCorpinfoId(corpinfoId); + co.setEventCount(0L); + co.setAccidentCount(0L); + coList.add(co); + } + } + } + return MultiResponse.of(coList); + } + /** * 按照corpinfoId和incidentType统计个数 * @param accidentCountQry 查询条件,包含公司ID列表 @@ -84,6 +119,21 @@ public class AccidentQueryExe { */ public MultiResponse countByCorpinfoIdAndIncidentType(AccidentCountQry accidentCountQry) { List resultList = accidentGateway.countByCorpinfoIdAndIncidentType(accidentCountQry.getCorpinfoIds(),accidentCountQry.getEqAccidentType()); + AccidentCountStat acc = new AccidentCountStat(); + acc.setCorpinfoId(2008712261453131776L); + acc.setIncidentType("accident003"); + acc.setCount(1L); + AccidentCountStat bcc = new AccidentCountStat(); + bcc.setCorpinfoId(2012084659332952064L); + bcc.setIncidentType("accident001"); + bcc.setCount(1L); + AccidentCountStat ccc = new AccidentCountStat(); + ccc.setCorpinfoId(2008712261453131776L); + ccc.setIncidentType("accident001"); + ccc.setCount(3L); + resultList.add(acc); + resultList.add(bcc); + resultList.add(ccc); List coList = accidentCountStatConvertor.convertToCOList(resultList); return MultiResponse.of(coList); } diff --git a/web-app/src/main/java/com/zcloud/accident/service/AccidentServiceImpl.java b/web-app/src/main/java/com/zcloud/accident/service/AccidentServiceImpl.java index a9f4494..ad3668e 100644 --- a/web-app/src/main/java/com/zcloud/accident/service/AccidentServiceImpl.java +++ b/web-app/src/main/java/com/zcloud/accident/service/AccidentServiceImpl.java @@ -11,6 +11,7 @@ import com.zcloud.accident.dto.AccidentCountQry; import com.zcloud.accident.dto.AccidentPageQry; import com.zcloud.accident.dto.AccidentUpdateCmd; import com.zcloud.accident.dto.clientobject.AccidentCO; +import com.zcloud.accident.dto.clientobject.AccidentCorpCountStatCO; import com.zcloud.accident.dto.clientobject.AccidentCountStatCO; import com.alibaba.cola.dto.PageResponse; @@ -72,6 +73,11 @@ public class AccidentServiceImpl implements AccidentServiceI { accidentRemoveExe.execute(ids); } + @Override + public MultiResponse countByCorpinfo(AccidentCountQry accidentCountQry) { + return accidentQueryExe.countByCorpinfo(accidentCountQry); + } + @Override public MultiResponse countByCorpinfoIdAndIncidentType(AccidentCountQry accidentCountQry) { return accidentQueryExe.countByCorpinfoIdAndIncidentType(accidentCountQry); diff --git a/web-client/src/main/java/com/zcloud/accident/api/AccidentServiceI.java b/web-client/src/main/java/com/zcloud/accident/api/AccidentServiceI.java index 17e43f3..e2532bd 100644 --- a/web-client/src/main/java/com/zcloud/accident/api/AccidentServiceI.java +++ b/web-client/src/main/java/com/zcloud/accident/api/AccidentServiceI.java @@ -5,6 +5,7 @@ import com.zcloud.accident.dto.AccidentCountQry; import com.zcloud.accident.dto.AccidentPageQry; import com.zcloud.accident.dto.AccidentUpdateCmd; import com.zcloud.accident.dto.clientobject.AccidentCO; +import com.zcloud.accident.dto.clientobject.AccidentCorpCountStatCO; import com.zcloud.accident.dto.clientobject.AccidentCountStatCO; import com.alibaba.cola.dto.PageResponse; @@ -40,7 +41,14 @@ public interface AccidentServiceI { void removeBatch(Long[] ids); /** - * 按照corpinfoId和incidentType统计个数 + * 按公司统计事件和事故数量 + * @param accidentCountQry 查询条件,包含公司ID列表 + * @return 统计结果列表 + */ + MultiResponse countByCorpinfo(AccidentCountQry accidentCountQry); + + /** + * 按照corpinfoId和incidentType统计个数(钻取) * @param accidentCountQry 查询条件,包含公司ID列表 * @return 统计结果列表 */ diff --git a/web-client/src/main/java/com/zcloud/accident/dto/clientobject/AccidentCorpCountStatCO.java b/web-client/src/main/java/com/zcloud/accident/dto/clientobject/AccidentCorpCountStatCO.java new file mode 100644 index 0000000..a8c25fb --- /dev/null +++ b/web-client/src/main/java/com/zcloud/accident/dto/clientobject/AccidentCorpCountStatCO.java @@ -0,0 +1,28 @@ +package com.zcloud.accident.dto.clientobject; + +import com.alibaba.cola.dto.ClientObject; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 公司级事件/事故统计结果数据传输对象 + * + * @Author + * @Date + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AccidentCorpCountStatCO extends ClientObject { + + @ApiModelProperty(value = "公司ID") + private Long corpinfoId; + + @ApiModelProperty(value = "事件数量") + private Long eventCount; + + @ApiModelProperty(value = "事故数量") + private Long accidentCount; +} diff --git a/web-domain/src/main/java/com/zcloud/accident/domain/gateway/AccidentGateway.java b/web-domain/src/main/java/com/zcloud/accident/domain/gateway/AccidentGateway.java index 3c89ad6..f7bd14c 100644 --- a/web-domain/src/main/java/com/zcloud/accident/domain/gateway/AccidentGateway.java +++ b/web-domain/src/main/java/com/zcloud/accident/domain/gateway/AccidentGateway.java @@ -1,6 +1,7 @@ package com.zcloud.accident.domain.gateway; import com.zcloud.accident.domain.model.AccidentE; +import com.zcloud.accident.domain.model.AccidentCorpCountStat; import com.zcloud.accident.domain.model.AccidentCountStat; import java.util.List; @@ -28,6 +29,14 @@ public interface AccidentGateway { Boolean deletedAccidentById(Long id); Boolean deletedAccidentByIds(Long[] id); + /** + * 按公司统计事件和事故数量 + * + * @param corpinfoIds 公司ID列表 + * @return 统计结果列表 + */ + List countByCorpinfo(List corpinfoIds); + /** * 按照corpinfoId和incidentType统计个数 * diff --git a/web-domain/src/main/java/com/zcloud/accident/domain/model/AccidentCorpCountStat.java b/web-domain/src/main/java/com/zcloud/accident/domain/model/AccidentCorpCountStat.java new file mode 100644 index 0000000..b7252c8 --- /dev/null +++ b/web-domain/src/main/java/com/zcloud/accident/domain/model/AccidentCorpCountStat.java @@ -0,0 +1,21 @@ +package com.zcloud.accident.domain.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 公司级事件/事故统计结果模型 + * 按公司统计事件(type=1)和事故(type=2)的数量 + * + * @Author + * @Date + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AccidentCorpCountStat { + private Long corpinfoId; + private Long eventCount; + private Long accidentCount; +} diff --git a/web-infrastructure/src/main/java/com/zcloud/accident/gatewayimpl/AccidentGatewayImpl.java b/web-infrastructure/src/main/java/com/zcloud/accident/gatewayimpl/AccidentGatewayImpl.java index 70bb8e1..2182145 100644 --- a/web-infrastructure/src/main/java/com/zcloud/accident/gatewayimpl/AccidentGatewayImpl.java +++ b/web-infrastructure/src/main/java/com/zcloud/accident/gatewayimpl/AccidentGatewayImpl.java @@ -3,6 +3,7 @@ package com.zcloud.accident.gatewayimpl; import com.jjb.saas.framework.auth.utils.AuthContext; import com.zcloud.accident.domain.gateway.AccidentGateway; import com.zcloud.accident.domain.model.AccidentE; +import com.zcloud.accident.domain.model.AccidentCorpCountStat; import com.zcloud.accident.domain.model.AccidentCountStat; import com.zcloud.accident.persistence.dataobject.AccidentDO; import com.zcloud.accident.persistence.repository.AccidentRepository; @@ -51,6 +52,11 @@ public class AccidentGatewayImpl implements AccidentGateway { return accidentRepository.removeByIds(Arrays.asList(ids)); } + @Override + public List countByCorpinfo(List corpinfoIds) { + return accidentRepository.countByCorpinfo(corpinfoIds); + } + @Override public List countByCorpinfoIdAndIncidentType(List corpinfoIds, Integer eqAccidentType) { return accidentRepository.countByCorpinfoIdAndIncidentType(corpinfoIds,eqAccidentType); diff --git a/web-infrastructure/src/main/java/com/zcloud/accident/persistence/mapper/AccidentMapper.java b/web-infrastructure/src/main/java/com/zcloud/accident/persistence/mapper/AccidentMapper.java index d163e9b..590a20c 100644 --- a/web-infrastructure/src/main/java/com/zcloud/accident/persistence/mapper/AccidentMapper.java +++ b/web-infrastructure/src/main/java/com/zcloud/accident/persistence/mapper/AccidentMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.jjb.saas.framework.datascope.annotation.DataScope; import com.jjb.saas.framework.datascope.annotation.DataScopes; +import com.zcloud.accident.domain.model.AccidentCorpCountStat; import com.zcloud.accident.domain.model.AccidentCountStat; import com.zcloud.accident.persistence.dataobject.AccidentDO; import org.apache.ibatis.annotations.Mapper; @@ -24,6 +25,14 @@ import java.util.Map; @DataScope(method = "list", menuPerms = "")}) public interface AccidentMapper extends BaseMapper { + /** + * 按公司统计事件和事故数量 + * + * @param corpinfoIds 公司ID列表 + * @return 统计结果列表,包含corpinfoId、corpinfoName、eventCount和accidentCount字段 + */ + List countByCorpinfo(@Param("corpinfoIds") List corpinfoIds); + /** * 按照corpinfoId和incidentType统计个数 * diff --git a/web-infrastructure/src/main/java/com/zcloud/accident/persistence/repository/AccidentRepository.java b/web-infrastructure/src/main/java/com/zcloud/accident/persistence/repository/AccidentRepository.java index 85c8fd5..318b19e 100644 --- a/web-infrastructure/src/main/java/com/zcloud/accident/persistence/repository/AccidentRepository.java +++ b/web-infrastructure/src/main/java/com/zcloud/accident/persistence/repository/AccidentRepository.java @@ -1,6 +1,7 @@ package com.zcloud.accident.persistence.repository; import com.zcloud.accident.persistence.dataobject.AccidentDO; +import com.zcloud.accident.domain.model.AccidentCorpCountStat; import com.zcloud.accident.domain.model.AccidentCountStat; import com.alibaba.cola.dto.PageResponse; import com.jjb.saas.framework.repository.repo.BaseRepository; @@ -26,6 +27,14 @@ public interface AccidentRepository extends BaseRepository { */ List listAll(Map params,String menuPerms); + /** + * 按公司统计事件和事故数量 + * + * @param corpinfoIds 公司ID列表 + * @return 统计结果列表,包含corpinfoId、corpinfoName、eventCount和accidentCount字段 + */ + List countByCorpinfo(@Param("corpinfoIds") List corpinfoIds); + /** * 按照corpinfoId和incidentType统计个数 * diff --git a/web-infrastructure/src/main/java/com/zcloud/accident/persistence/repository/impl/AccidentRepositoryImpl.java b/web-infrastructure/src/main/java/com/zcloud/accident/persistence/repository/impl/AccidentRepositoryImpl.java index e60cea5..08a9fbb 100644 --- a/web-infrastructure/src/main/java/com/zcloud/accident/persistence/repository/impl/AccidentRepositoryImpl.java +++ b/web-infrastructure/src/main/java/com/zcloud/accident/persistence/repository/impl/AccidentRepositoryImpl.java @@ -6,6 +6,7 @@ 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.accident.domain.model.AccidentCorpCountStat; import com.zcloud.accident.domain.model.AccidentCountStat; import com.zcloud.accident.persistence.dataobject.AccidentDO; import com.zcloud.accident.persistence.mapper.AccidentMapper; @@ -47,6 +48,11 @@ public class AccidentRepositoryImpl extends BaseRepositoryImpl countByCorpinfo(List corpinfoIds) { + return accidentMapper.countByCorpinfo(corpinfoIds); + } + @Override public List countByCorpinfoIdAndIncidentType(List corpinfoIds, Integer eqAccidentType) { return accidentMapper.countByCorpinfoIdAndIncidentType(corpinfoIds, eqAccidentType); diff --git a/web-infrastructure/src/main/resources/mapper/AccidentMapper.xml b/web-infrastructure/src/main/resources/mapper/AccidentMapper.xml index 87ba6c2..10ce863 100644 --- a/web-infrastructure/src/main/resources/mapper/AccidentMapper.xml +++ b/web-infrastructure/src/main/resources/mapper/AccidentMapper.xml @@ -71,6 +71,24 @@ order by create_time desc + +