Commit 87f1686d authored by suhuiguang's avatar suhuiguang

1.检验检测概览接口

parent ee41c37f
package com.yeejoin.amos.boot.module.jyjc.api.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author Administrator
*/
@Data
@ApiModel
public class InspectTimeCountDto {
@ApiModelProperty(value = "检验类型")
private String bizType;
@ApiModelProperty(value = "设备种类code")
private String equList;
@ApiModelProperty(value = "设备类别code")
private String equCategory;
@ApiModelProperty(value = "设备品种code")
private String equipDefine;
@ApiModelProperty(value = "次数")
private Integer num;
@ApiModelProperty(value = "区域信息省#市#区,按照#分割")
private String areaCode;
}
package com.yeejoin.amos.boot.module.jyjc.api.mapper; package com.yeejoin.amos.boot.module.jyjc.api.mapper;
import com.yeejoin.amos.boot.module.jyjc.api.dto.InspectTimeCountDto;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionApplicationEquip; import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionApplicationEquip;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.boot.module.jyjc.api.model.DPFilterParamDto;
import java.util.List;
/** /**
* Mapper 接口 * Mapper 接口
...@@ -11,4 +15,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; ...@@ -11,4 +15,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/ */
public interface JyjcInspectionApplicationEquipMapper extends BaseMapper<JyjcInspectionApplicationEquip> { public interface JyjcInspectionApplicationEquipMapper extends BaseMapper<JyjcInspectionApplicationEquip> {
public void deleteByApplicationSeq(Long applicationSeq); public void deleteByApplicationSeq(Long applicationSeq);
/**
* 检验检测次数统计维度按照设备种类、检验类型进行统计
* @param dpFilterParamDto g过滤条件
* @return 统计列表
*/
List<InspectTimeCountDto> countInspectTimeCountByTypeAndEquList(DPFilterParamDto dpFilterParamDto);
} }
package com.yeejoin.amos.boot.module.jyjc.api.model;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* 大屏筛选过滤对象
*
* @author Administrator
*/
@Data
public class DPFilterParamDto {
/**
* 区域
*/
@NotBlank(message = "区域编码不能为空!")
private String cityCode;
/**
* 数据统计的开始日期
*/
private String beginDate;
/**
* 数据统计的结束日期
*/
private String endDate;
}
...@@ -12,4 +12,39 @@ ...@@ -12,4 +12,39 @@
</delete> </delete>
<select id="countInspectTimeCountByTypeAndEquList"
resultType="com.yeejoin.amos.boot.module.jyjc.api.dto.InspectTimeCountDto">
select
c.biz_type,
c.equ_list,
c.equ_category,
c.equ_define,
count(1) as num
from
(SELECT
ae.equ_list,
ae.equ_category,
ae.equ_define,
a.biz_type,
concat(u.PROVINCE,'#', u.CITY,'#', u.COUNTY) as areaCode
FROM
"tz_jyjc_inspection_application_equip" ae,
tz_jyjc_inspection_application a,
"idx_biz_jg_use_info" u
where
ae.equip_unicode = u."RECORD"
and a.sequence_nbr = ae.application_seq
and (a.application_date between #{beginDate} and #{endDate})
and a.status='6616'
and u."PROVINCE" <![CDATA[<>]]> ''
and u."CITY" <![CDATA[<>]]> ''
and u."COUNTY" <![CDATA[<>]]> ''
) c
where
c.areaCode like concat('%',#{cityCode}, '%')
group by c.biz_type,
c.equ_list,
c.equ_category,
c.equ_define
</select>
</mapper> </mapper>
package com.yeejoin.amos.boot.module.jyjc.biz.controller;
import com.yeejoin.amos.boot.module.jyjc.api.model.DPFilterParamDto;
import com.yeejoin.amos.boot.module.jyjc.biz.service.DPStatisticsServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
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;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import java.util.List;
import java.util.Map;
/**
* 大屏统计controller
*
* @author Administrator
*/
@RestController
@RequestMapping("/db/statistics")
@Api(tags = "大屏统计")
public class DPStatisticsController {
private DPStatisticsServiceImpl statisticsService;
public DPStatisticsController(DPStatisticsServiceImpl statisticsService) {
this.statisticsService = statisticsService;
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "POST", value = "检验检测次数统计", notes = "按照维度设备种类、检验类型进行统计")
@PostMapping(value = "/inspectTime/count/byEquListAndInspectType")
public ResponseModel<Map<String, Object>> inspectTimeCountByTypeAndEquList(@Validated @RequestBody DPFilterParamDto dpFilterParamDto, BindingResult result) {
List<FieldError> fieldErrors = result.getFieldErrors();
if(!fieldErrors.isEmpty()){
throw new BadRequest(fieldErrors.get(0).getDefaultMessage());
}
return ResponseHelper.buildResponse(statisticsService.inspectTimeCountByTypeAndEquList(dpFilterParamDto));
}
}
package com.yeejoin.amos.boot.module.jyjc.biz.service;
import cn.hutool.core.date.DateUtil;
import com.yeejoin.amos.boot.module.jyjc.api.dto.InspectTimeCountDto;
import com.yeejoin.amos.boot.module.jyjc.api.enums.BizTypeEnum;
import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcInspectionApplicationEquipMapper;
import com.yeejoin.amos.boot.module.jyjc.api.model.DPFilterParamDto;
import com.yeejoin.amos.boot.module.ymt.api.dto.EquipmentCategoryDto;
import com.yeejoin.amos.boot.module.ymt.api.mapper.EquipmentCategoryMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
/**
* 大屏统计实现类
*
* @author Administrator
*/
@Service
public class DPStatisticsServiceImpl {
/**
* 压力容器设备种类
*/
private final static String EQU_LIST_CYLINDER = "2000";
/**
* 气瓶设备类别
*/
private final static String EQU_CATEGORY_CYLINDER = "2300";
private EquipmentCategoryMapper equipmentCategoryMapper;
private JyjcInspectionApplicationEquipMapper inspectionApplicationEquipMapper;
public DPStatisticsServiceImpl(EquipmentCategoryMapper equipmentCategoryMapper, JyjcInspectionApplicationEquipMapper inspectionApplicationEquipMapper) {
this.equipmentCategoryMapper = equipmentCategoryMapper;
this.inspectionApplicationEquipMapper = inspectionApplicationEquipMapper;
}
public Map<String, Object> inspectTimeCountByTypeAndEquList(DPFilterParamDto dpFilterParamDto) {
// 1.查询条件构造未上送时间时,默认查询数据为近一个月数据
this.setDefaultFilter(dpFilterParamDto);
// 2.按照前端约定格式返回数据
Map<String, Object> result = new HashMap<>();
//2.1 图列数据构造
List<BizTypeEnum> bizTypeEnums = getBizTypeList();
result.put("legendData", this.getLegendData(bizTypeEnums));
// 8大类设备种类
List<EquipmentCategoryDto> equipmentCategoryDtos = equipmentCategoryMapper.selectClassify();
//2.2 x轴数据构造
result.put("xdata", this.getXData(equipmentCategoryDtos));
//2.3 y轴数据构造
this.buildYData(result, bizTypeEnums, dpFilterParamDto, equipmentCategoryDtos);
return result;
}
private void buildYData(Map<String, Object> result, List<BizTypeEnum> bizTypeEnums, DPFilterParamDto dpFilterParamDto, List<EquipmentCategoryDto> equipmentCategoryDtos) {
// 待统计的数据本来sql可以单独统计,但是要求气瓶单独从压力容器里拎出来,与八大类同级,故java处理
List<InspectTimeCountDto> inspectTimeCountDtos = inspectionApplicationEquipMapper.countInspectTimeCountByTypeAndEquList(dpFilterParamDto);
bizTypeEnums.forEach(bizTypeEnum -> {
result.put(bizTypeEnum.getCode(), this.countNumByBizTypeAndEquList(equipmentCategoryDtos, bizTypeEnum.getCode(), inspectTimeCountDtos));
});
}
private List<Integer> countNumByBizTypeAndEquList(List<EquipmentCategoryDto> equipmentCategoryDtos, String bizType, List<InspectTimeCountDto> inspectTimeCountDtos) {
List<Integer> item = new ArrayList<>();
// 8大类数据统计数量
equipmentCategoryDtos.forEach(equipmentCategoryDto -> {
int num = 0;
// 压力容器要去掉气瓶2300,气瓶单独统计
if (EQU_LIST_CYLINDER.equals(equipmentCategoryDto.getCode())) {
num = inspectTimeCountDtos.stream().filter(c -> c.getBizType().equals(bizType) && c.getEquList().equals(equipmentCategoryDto.getCode()) && !EQU_CATEGORY_CYLINDER.equals(c.getEquCategory())).mapToInt(InspectTimeCountDto::getNum).sum();
} else {
num = inspectTimeCountDtos.stream().filter(c -> c.getBizType().equals(bizType) && c.getEquList().equals(equipmentCategoryDto.getCode())).mapToInt(InspectTimeCountDto::getNum).sum();
}
item.add(num);
});
// 再增加气瓶(设备类别2300)专项
int num = inspectTimeCountDtos.stream().filter(c -> c.getBizType().equals(bizType) && EQU_CATEGORY_CYLINDER.equals(c.getEquCategory())).mapToInt(InspectTimeCountDto::getNum).sum();
item.add(num);
return item;
}
private List<String> getXData(List<EquipmentCategoryDto> equipmentCategoryDtos) {
// 8大类 + 气瓶 注意数据顺序和要和这个x轴一致
List<String> names = equipmentCategoryDtos.stream().map(EquipmentCategoryDto::getName).collect(Collectors.toList());
names.add("气瓶");
return names;
}
private List<BizTypeEnum> getBizTypeList() {
return Arrays.asList(BizTypeEnum.FIRST_INSPECTION, BizTypeEnum.SUPERVISE, BizTypeEnum.DETECTION);
}
private List<String> getLegendData(List<BizTypeEnum> bizTypeEnums) {
return bizTypeEnums.stream().map(BizTypeEnum::getName).collect(Collectors.toList());
}
private void setDefaultFilter(DPFilterParamDto dpFilterParamDto) {
if (StringUtils.isEmpty(dpFilterParamDto.getBeginDate())) {
dpFilterParamDto.setBeginDate(DateUtil.lastMonth().toDateStr());
}
if (StringUtils.isEmpty(dpFilterParamDto.getEndDate())) {
dpFilterParamDto.setEndDate(DateUtil.today());
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment