feat(): 添加按公司统计事件和事故数量功能
parent
93845f208e
commit
b1be1b300a
|
|
@ -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<AccidentCorpCountStatCO> countByCorpinfoAndType(@RequestBody AccidentCountQry accidentCountQry) {
|
||||
return accidentService.countByCorpinfo(accidentCountQry);
|
||||
}
|
||||
|
||||
@ApiOperation("按照事故类型钻取统计个数")
|
||||
@PostMapping("/countByIncidentType")
|
||||
public MultiResponse<AccidentCountStatCO> countByCorpinfoIdAndIncidentType(@RequestBody AccidentCountQry accidentCountQry) {
|
||||
return accidentService.countByCorpinfoIdAndIncidentType(accidentCountQry);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<AccidentCorpCountStatCO> convertToCOList(List<AccidentCorpCountStat> stats);
|
||||
}
|
||||
|
|
@ -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<AccidentDO> accidentDOs = accidentRepository.listAll(params,menuPerms);
|
||||
return accidentCoConvertor.converDOsToCOs(accidentDOs);
|
||||
}
|
||||
/**
|
||||
* 按公司统计事件和事故数量
|
||||
* @param accidentCountQry 查询条件,包含公司ID列表
|
||||
* @return 统计结果列表
|
||||
*/
|
||||
public MultiResponse<AccidentCorpCountStatCO> countByCorpinfo(AccidentCountQry accidentCountQry) {
|
||||
List<AccidentCorpCountStat> resultList = accidentGateway.countByCorpinfo(accidentCountQry.getCorpinfoIds());
|
||||
List<AccidentCorpCountStatCO> coList = accidentCorpCountStatConvertor.convertToCOList(resultList);
|
||||
// 补全无数据的公司,事件和事故数量为0
|
||||
if (accidentCountQry.getCorpinfoIds() != null) {
|
||||
Set<Long> 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<AccidentCountStatCO> countByCorpinfoIdAndIncidentType(AccidentCountQry accidentCountQry) {
|
||||
List<com.zcloud.accident.domain.model.AccidentCountStat> 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<AccidentCountStatCO> coList = accidentCountStatConvertor.convertToCOList(resultList);
|
||||
return MultiResponse.of(coList);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<AccidentCorpCountStatCO> countByCorpinfo(AccidentCountQry accidentCountQry) {
|
||||
return accidentQueryExe.countByCorpinfo(accidentCountQry);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MultiResponse<AccidentCountStatCO> countByCorpinfoIdAndIncidentType(AccidentCountQry accidentCountQry) {
|
||||
return accidentQueryExe.countByCorpinfoIdAndIncidentType(accidentCountQry);
|
||||
|
|
|
|||
|
|
@ -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<AccidentCorpCountStatCO> countByCorpinfo(AccidentCountQry accidentCountQry);
|
||||
|
||||
/**
|
||||
* 按照corpinfoId和incidentType统计个数(钻取)
|
||||
* @param accidentCountQry 查询条件,包含公司ID列表
|
||||
* @return 统计结果列表
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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<AccidentCorpCountStat> countByCorpinfo(List<String> corpinfoIds);
|
||||
|
||||
/**
|
||||
* 按照corpinfoId和incidentType统计个数
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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<AccidentCorpCountStat> countByCorpinfo(List<String> corpinfoIds) {
|
||||
return accidentRepository.countByCorpinfo(corpinfoIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AccidentCountStat> countByCorpinfoIdAndIncidentType(List<String> corpinfoIds, Integer eqAccidentType) {
|
||||
return accidentRepository.countByCorpinfoIdAndIncidentType(corpinfoIds,eqAccidentType);
|
||||
|
|
|
|||
|
|
@ -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<AccidentDO> {
|
||||
|
||||
/**
|
||||
* 按公司统计事件和事故数量
|
||||
*
|
||||
* @param corpinfoIds 公司ID列表
|
||||
* @return 统计结果列表,包含corpinfoId、corpinfoName、eventCount和accidentCount字段
|
||||
*/
|
||||
List<AccidentCorpCountStat> countByCorpinfo(@Param("corpinfoIds") List<String> corpinfoIds);
|
||||
|
||||
/**
|
||||
* 按照corpinfoId和incidentType统计个数
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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<AccidentDO> {
|
|||
*/
|
||||
List<AccidentDO> listAll(Map<String,Object> params,String menuPerms);
|
||||
|
||||
/**
|
||||
* 按公司统计事件和事故数量
|
||||
*
|
||||
* @param corpinfoIds 公司ID列表
|
||||
* @return 统计结果列表,包含corpinfoId、corpinfoName、eventCount和accidentCount字段
|
||||
*/
|
||||
List<AccidentCorpCountStat> countByCorpinfo(@Param("corpinfoIds") List<String> corpinfoIds);
|
||||
|
||||
/**
|
||||
* 按照corpinfoId和incidentType统计个数
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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<AccidentMapper, A
|
|||
return accidentMapper.list(params, menuPerms);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AccidentCorpCountStat> countByCorpinfo(List<String> corpinfoIds) {
|
||||
return accidentMapper.countByCorpinfo(corpinfoIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AccidentCountStat> countByCorpinfoIdAndIncidentType(List<String> corpinfoIds, Integer eqAccidentType) {
|
||||
return accidentMapper.countByCorpinfoIdAndIncidentType(corpinfoIds, eqAccidentType);
|
||||
|
|
|
|||
|
|
@ -71,6 +71,24 @@
|
|||
order by create_time desc
|
||||
</select>
|
||||
|
||||
<select id="countByCorpinfo" resultType="com.zcloud.accident.domain.model.AccidentCorpCountStat">
|
||||
SELECT
|
||||
corpinfo_id,
|
||||
SUM(CASE WHEN type = 1 THEN 1 ELSE 0 END) as event_count,
|
||||
SUM(CASE WHEN type = 2 THEN 1 ELSE 0 END) as accident_count
|
||||
FROM accident
|
||||
<where>
|
||||
and delete_enum = 'FALSE'
|
||||
<if test="corpinfoIds != null and !corpinfoIds.isEmpty() and corpinfoIds.size()>0">
|
||||
AND corpinfo_id IN
|
||||
<foreach collection="corpinfoIds" item="item" open="(" separator="," close=")">
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
</where>
|
||||
GROUP BY corpinfo_id
|
||||
</select>
|
||||
|
||||
<select id="countByCorpinfoIdAndIncidentType" resultType="com.zcloud.accident.domain.model.AccidentCountStat">
|
||||
SELECT
|
||||
corpinfo_id,
|
||||
|
|
|
|||
Loading…
Reference in New Issue