Commit 624f6ff8 authored by suhuiguang's avatar suhuiguang

1.大屏-安全追溯-设备大屏-安全追溯-同设备近30天按问题次数滚动

parent 82b8a984
package com.yeejoin.amos.boot.module.cylinder.api.dto;
import lombok.Data;
/**
* @author Administrator
*/
@Data
public class EquipQuestionNumCountDto {
/**
* 设备id
*/
private String sourceId;
private String useOrgCode;
private String supervisoryCode;
private String useUnitName;
private String cityName;
private String equList;
private Long total;
private Long finished;
}
......@@ -38,4 +38,13 @@ public enum EquipmentClassifityEnum {
}
}
public static String getNameByCode(String code){
for (EquipmentClassifityEnum value : EquipmentClassifityEnum.values()) {
if (value.getCode().equals(code)){
return value.getName();
}
}
return "";
}
}
package com.yeejoin.amos.boot.module.cylinder.api.mapper;
import com.yeejoin.amos.boot.module.common.api.dto.DPFilterParamDto;
import com.yeejoin.amos.boot.module.cylinder.api.dto.EquipQuestionNumCountDto;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
......@@ -31,4 +33,6 @@ public interface DPStatisticsMapper {
List<Map<String, Object>> issueProblemLevelCount(@Param("orgCode") String orgCode, @Param("time") String time);
List<Map<String, Object>> issueCompanyTop(@Param("orgCode") String orgCode, @Param("time") String time);
List<EquipQuestionNumCountDto> queryEquipQuestionList(@Param("orgCode")String orgCode, @Param("dto") DPFilterParamDto dpFilterParamDto);
}
......@@ -149,6 +149,55 @@
COUNT DESC
LIMIT 10
</select>
<select id="queryEquipQuestionList" resultType="com.yeejoin.amos.boot.module.cylinder.api.dto.EquipQuestionNumCountDto">
select
bb."USE_ORG_CODE",
cc."SUPERVISORY_CODE",
dd."USE_UNIT_NAME",
aa.finished,
aa.source_id,
aa.total,
dd."CITY_NAME",
bb."EQU_LIST"
from
(
select
a.total,
a.source_id,
ifnull(b.total,0) as finished
from
(
SELECT
count(1) as total,
source_id
FROM
"tzs_safety_problem_tracing"
WHERE
source_type_code = '3'
and governing_body_org_code like concat(#{orgCode}, '%')
and cast(problem_time AS DATE) between #{dto.beginDate} and #{dto.endDate}
GROUP BY source_id ORDER BY total desc) a
left join (
SELECT
count(1) as total,
source_id
FROM
"tzs_safety_problem_tracing"
WHERE
source_type_code = '3'
and problem_status_code ='1'
and governing_body_org_code like concat(#{orgCode}, '%')
and cast(problem_time AS DATE) between #{dto.beginDate} and #{dto.endDate}
GROUP BY source_id ORDER BY total desc) b on a.source_id = b.source_id
) aa,
idx_biz_jg_register_info bb,
idx_biz_jg_other_info cc,
idx_biz_jg_use_info dd
where
aa.source_id=bb."RECORD"
and aa.source_id=cc."RECORD"
and aa.source_id=dd."RECORD"
</select>
</mapper>
......@@ -4,15 +4,21 @@ package com.yeejoin.amos.boot.module.cylinder.flc.biz.controller;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.common.api.dto.DPFilterParamDto;
import com.yeejoin.amos.boot.module.cylinder.api.dto.CylinderFillingMessageModel;
import com.yeejoin.amos.boot.module.cylinder.flc.biz.service.impl.CylinderAreaDataServiceImpl;
import com.yeejoin.amos.boot.module.cylinder.flc.biz.service.impl.DPStatisticsServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
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;
......@@ -26,6 +32,8 @@ public class CylinderStatisticsController {
@Autowired
private CylinderAreaDataServiceImpl service;
@Autowired
private DPStatisticsServiceImpl statisticsService;
/**
* 预警预报统计
......@@ -217,5 +225,16 @@ public class CylinderStatisticsController {
}
List<Map<String, Object>> result = service.issueCompanyTop(regionCode.toString());
return ResponseHelper.buildResponse(result);
};
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "POST", value = "大屏-安全追溯-同设备近30天按问题次数滚动", notes = "大屏-安全追溯-同设备近30天按问题次数滚动")
@PostMapping(value = "/aqzs/equip-question/list")
public ResponseModel<List<Map<String, Object>>> getEquipQuestionList(@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.getEquipQuestionList(dpFilterParamDto));
}
}
package com.yeejoin.amos.boot.module.cylinder.flc.biz.service.impl;
import cn.hutool.core.date.DateUtil;
import com.yeejoin.amos.boot.module.common.api.dto.DPFilterParamDto;
import com.yeejoin.amos.boot.module.cylinder.api.dto.EquipQuestionNumCountDto;
import com.yeejoin.amos.boot.module.cylinder.api.enums.EquipmentClassifityEnum;
import com.yeejoin.amos.boot.module.cylinder.api.mapper.DPStatisticsMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.NumberFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
@Service
public class DPStatisticsServiceImpl {
private static Map<String, String> regionCodeOrgCodeMap = new ConcurrentHashMap<>();
private DPStatisticsMapper statisticsMapper;
public DPStatisticsServiceImpl(DPStatisticsMapper statisticsMapper) {
this.statisticsMapper = statisticsMapper;
}
public List<Map<String, Object>> getEquipQuestionList(DPFilterParamDto dpFilterParamDto) {
this.setDefaultFilter(dpFilterParamDto);
String orgCode = this.getAndSetOrgCode(dpFilterParamDto.getCityCode());
List<EquipQuestionNumCountDto> equipQuestionNumCountDtos = statisticsMapper.queryEquipQuestionList(orgCode, dpFilterParamDto);
return this.calPercentFinishedAndCast2Map(equipQuestionNumCountDtos);
}
private List<Map<String, Object>> calPercentFinishedAndCast2Map(List<EquipQuestionNumCountDto> equipQuestionNumCountDtos) {
return equipQuestionNumCountDtos.stream().map(e -> {
Map<String, Object> item = new HashMap<>();
// 设备id
item.put("key", e.getSourceId());
// 区域名称
item.put("regionName", e.getCityName());
// 设备种类
item.put("deviceCategoryName", EquipmentClassifityEnum.getNameByCode(e.getEquList()));
// 监管码/使用登记证编号
item.put("code", this.buildCodeWithSplit(e.getSupervisoryCode(), e.getUseOrgCode()));
// 使用单位
item.put("useUnitName", e.getUseUnitName());
// 问题次数
item.put("issuesNumber", e.getTotal());
// 闭环率
item.put("closedLoopRate", this.calClosedLoopRate(e.getTotal(), e.getFinished()));
return item;
}).collect(Collectors.toList());
}
private String calClosedLoopRate(Long total, Long finished) {
if (total == 0) {
return "0";
}
BigDecimal totalBig = new BigDecimal(total.toString());
BigDecimal finishedBig = new BigDecimal(finished.toString());
BigDecimal result = finishedBig.divide(totalBig, 2, RoundingMode.HALF_UP);
NumberFormat nt = NumberFormat.getPercentInstance();
nt.setMinimumFractionDigits(0);
return nt.format(result);
}
private String buildCodeWithSplit(String supervisoryCode, String useOrgCode) {
if (StringUtils.isNotEmpty(supervisoryCode) && StringUtils.isNotEmpty(useOrgCode)) {
return String.format("%s/%s", supervisoryCode, useOrgCode);
}
if (StringUtils.isNotEmpty(supervisoryCode)) {
return supervisoryCode;
}
if (StringUtils.isNotEmpty(useOrgCode)) {
return useOrgCode;
}
return "";
}
private void setDefaultFilter(DPFilterParamDto dpFilterParamDto) {
if (StringUtils.isEmpty(dpFilterParamDto.getBeginDate())) {
dpFilterParamDto.setBeginDate(DateUtil.lastMonth().toDateStr());
}
if (StringUtils.isEmpty(dpFilterParamDto.getEndDate())) {
dpFilterParamDto.setEndDate(DateUtil.today());
}
}
private String getAndSetOrgCode(String region) {
String orgCode = regionCodeOrgCodeMap.get(region);
if (orgCode == null) {
orgCode = statisticsMapper.getOrgCodeByCompanyCode(region);
if (orgCode != null) {
regionCodeOrgCodeMap.put(region, orgCode);
}
}
return orgCode;
}
}
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