Commit 9a73b17d authored by tianyiming's avatar tianyiming

气瓶下钻页面功能实现

parent d6978261
...@@ -83,4 +83,11 @@ public class DPFilterParamForDetailDto { ...@@ -83,4 +83,11 @@ public class DPFilterParamForDetailDto {
*/ */
private String alertTypeCode; private String alertTypeCode;
/**
* 气瓶充装异常情况(0:正常,1:异常)
*/
private String anomalyType;
private String cylinderVariety;
} }
...@@ -7,9 +7,9 @@ import lombok.Getter; ...@@ -7,9 +7,9 @@ import lombok.Getter;
@AllArgsConstructor @AllArgsConstructor
public enum CylinderTypeEnum { public enum CylinderTypeEnum {
CYLINDER("瓶", "2300"), CYLINDER("瓶", "2300"),
SEAMLESS_CYLINDER("无缝气瓶(车用)", "2310"), SEAMLESS_CYLINDER("无缝气瓶", "2310"),
WELDED_CYLINDER("焊接气瓶(车用)", "2320"), WELDED_CYLINDER("焊接气瓶", "2320"),
SPECIAL_CYLINDER("特种气瓶(车用)", "23T0"); SPECIAL_CYLINDER("特种气瓶", "23T0");
private final String name; private final String name;
private final String code; private final String code;
......
package com.yeejoin.amos.boot.module.statistics.api.dto;
import lombok.Data;
import java.util.List;
/**
* @author Administrator
*/
@Data
public class SubTreeDto {
private String value;
private String title;
private List<SubTreeDto> children;
}
package com.yeejoin.amos.boot.module.statistics.api.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.HashMap;
import java.util.Map;
@Getter
@AllArgsConstructor
public enum AnomalyTypeEnum {
NORMAL("正常", "0"),
ABNORMAL("异常", "1");
private String name;
private String code;
public static Map<String,String> getName=new HashMap<>();
public static Map<String,String> getCode=new HashMap<>();
static {
for (AnomalyTypeEnum e : AnomalyTypeEnum.values()) {
getCode.put(e.name, e.code);
getName.put(e.code, e.name);
}
}
public static AnomalyTypeEnum getEnumByStatus(String code) {
for (AnomalyTypeEnum c : AnomalyTypeEnum.values()) {
if (c.getCode().equals(code)){
return c;
}
}
return null;
}
}
package com.yeejoin.amos.boot.module.statistics.api.mapper; package com.yeejoin.amos.boot.module.statistics.api.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yeejoin.amos.boot.module.ymt.api.dto.TzBaseEnterpriseInfoDto;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -33,4 +35,8 @@ public interface CylinderStatisticsMapper { ...@@ -33,4 +35,8 @@ public interface CylinderStatisticsMapper {
Long countDischargeVolumeCount(@Param("orgCode") String orgCode); Long countDischargeVolumeCount(@Param("orgCode") String orgCode);
Long countEnterpriseUsed(@Param("orgCode") String orgCode); Long countEnterpriseUsed(@Param("orgCode") String orgCode);
IPage<TzBaseEnterpriseInfoDto> getStationRateSubPage(IPage<TzBaseEnterpriseInfoDto> page,
@Param("companyName") String companyName,
@Param("orgCode") String orgCode);
} }
...@@ -73,6 +73,23 @@ ...@@ -73,6 +73,23 @@
WHERE WHERE
E.supervise_org_code LIKE concat ( #{orgCode}, '%' ) E.supervise_org_code LIKE concat ( #{orgCode}, '%' )
</select> </select>
<select id="getStationRateSubPage"
resultType="com.yeejoin.amos.boot.module.ymt.api.dto.TzBaseEnterpriseInfoDto">
SELECT
*,
CONCAT(province,'/',city,'/',district) AS region,
CONCAT(street,'/',address) AS full_address
FROM
tz_base_enterprise_info
where
is_delete = '0'
AND unit_type LIKE '%充装单位%'
AND supervise_org_code LIKE CONCAT(#{orgCode},'%')
<if test="companyName != null and companyName != '' ">
AND use_unit LIKE CONCAT('%',#{companyName},'%')
</if>
order by rec_date desc
</select>
</mapper> </mapper>
package com.yeejoin.amos.boot.module.statistcs.biz.controller; package com.yeejoin.amos.boot.module.statistcs.biz.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.controller.BaseController; import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import com.yeejoin.amos.boot.module.common.api.dto.CylinderFillingRecordStatisticsDto; import com.yeejoin.amos.boot.module.common.api.dto.CylinderFillingRecordStatisticsDto;
import com.yeejoin.amos.boot.module.common.api.dto.DPFilterParamDto; import com.yeejoin.amos.boot.module.common.api.dto.DPFilterParamDto;
import com.yeejoin.amos.boot.module.common.api.dto.DPFilterParamForDetailDto;
import com.yeejoin.amos.boot.module.statistcs.biz.service.impl.CylinderDPStatisticsServiceImpl; import com.yeejoin.amos.boot.module.statistcs.biz.service.impl.CylinderDPStatisticsServiceImpl;
import com.yeejoin.amos.boot.module.statistics.api.dto.SubTreeDto;
import com.yeejoin.amos.boot.module.ymt.api.dto.EquipmentCategoryDto;
import com.yeejoin.amos.boot.module.ymt.api.dto.TzBaseEnterpriseInfoDto;
import com.yeejoin.amos.boot.module.ymt.api.entity.ESCylinderFillingRecordDto;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
...@@ -107,4 +114,73 @@ public class CylinderDPStatisticsController extends BaseController { ...@@ -107,4 +114,73 @@ public class CylinderDPStatisticsController extends BaseController {
return ResponseHelper.buildResponse(dpStatisticsService.stationRate(dpFilterParamDto)); return ResponseHelper.buildResponse(dpStatisticsService.stationRate(dpFilterParamDto));
} }
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "区域安全指数排名下钻树节点")
@GetMapping(value = "/securityIndexSubTree")
public ResponseModel<List<EquipmentCategoryDto>> securityIndexSubTree() {
return ResponseHelper.buildResponse(dpStatisticsService.securityIndexSubTree());
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "POST", value = "区域安全指数排名下钻柱状图")
@PostMapping(value = "/securityIndexSubChart")
public ResponseModel<Map<String, Object>> securityIndexSubChart(@RequestBody DPFilterParamDto dpFilterParamDto) {
return ResponseHelper.buildResponse(dpStatisticsService.securityIndexSubChart(dpFilterParamDto));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "充装量/卸液量下钻树节点")
@GetMapping(value = "/getFillingSubTree")
public ResponseModel<SubTreeDto> getFillingSubTree() {
return ResponseHelper.buildResponse(dpStatisticsService.getFillingSubTree());
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "POST", value = "充装量/卸液量下钻柱状图")
@PostMapping(value = "/getFillingSubChart")
public ResponseModel<Map<String, Object>> getFillingSubChart(@RequestBody DPFilterParamForDetailDto dpFilterParamForDetailDto) {
return ResponseHelper.buildResponse(dpStatisticsService.getFillingSubChart(dpFilterParamForDetailDto));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "POST", value = "充装量/卸液量下钻列表")
@PostMapping(value = "/getFillingSubPage")
public ResponseModel<Page<ESCylinderFillingRecordDto>> getFillingSubPage(@RequestBody DPFilterParamForDetailDto dpFilterParamForDetailDto) {
return ResponseHelper.buildResponse(dpStatisticsService.getFillingSubPage(dpFilterParamForDetailDto));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "充装量/卸液量下钻气瓶充装异常情况下拉")
@GetMapping(value = "/getFillingSubAnomalyType")
public ResponseModel<Object> getFillingSubAnomalyType() {
return ResponseHelper.buildResponse(dpStatisticsService.getFillingSubAnomalyType());
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "区域气站对接率下钻树节点")
@GetMapping(value = "/getStationRateSubTree")
public ResponseModel<SubTreeDto> getStationRateSubTree() {
return ResponseHelper.buildResponse(dpStatisticsService.getStationRateSubTree());
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "POST", value = "区域气站对接率下钻图")
@PostMapping(value = "/getStationRateSubChart")
public ResponseModel<Map<String, Object>> getStationRateSubChart(@RequestBody DPFilterParamForDetailDto dpFilterParamForDetailDto) {
return ResponseHelper.buildResponse(dpStatisticsService.getStationRateSubChart(dpFilterParamForDetailDto));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "POST", value = "区域气站对接率下钻图")
@PostMapping(value = "/getStationRateSubPage")
public ResponseModel<IPage<TzBaseEnterpriseInfoDto>> getStationRateSubPage(@RequestBody DPFilterParamForDetailDto dpFilterParamForDetailDto) {
return ResponseHelper.buildResponse(dpStatisticsService.getStationRateSubPage(dpFilterParamForDetailDto));
}
} }
...@@ -205,7 +205,7 @@ public class AQZSDPStatisticsServiceImpl { ...@@ -205,7 +205,7 @@ public class AQZSDPStatisticsServiceImpl {
return result; return result;
} }
private String castScore2Percent(String score) { public String castScore2Percent(String score) {
BigDecimal big = new BigDecimal(score); BigDecimal big = new BigDecimal(score);
BigDecimal percent = big.divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP); BigDecimal percent = big.divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
return percent.toPlainString(); return percent.toPlainString();
...@@ -251,6 +251,31 @@ public class AQZSDPStatisticsServiceImpl { ...@@ -251,6 +251,31 @@ public class AQZSDPStatisticsServiceImpl {
Map<String, SecurityIndexCountItemDto> regionCodeSecurityIndexMap = getSecurityIndexCountItemDtoMap(regionModels); Map<String, SecurityIndexCountItemDto> regionCodeSecurityIndexMap = getSecurityIndexCountItemDtoMap(regionModels);
List<Map<String, String>> data = new ArrayList<>(); List<Map<String, String>> data = new ArrayList<>();
List<Map<String, String>> finalData = data; List<Map<String, String>> finalData = data;
this.getCitySecurityIndex(finalData, regionCodeSecurityIndexMap);
data = finalData.stream()
.filter(map -> map.containsKey("value"))
.sorted(Comparator.comparingDouble(map -> {
// 检查并解析值,如果失败则返回Double.MIN_VALUE(或根据需要处理)
try {
return Double.parseDouble(map.get("value"));
} catch (NumberFormatException e) {
// 处理无法解析为double的情况,这里返回Double.MIN_VALUE表示最小
// 或者可以抛出自定义异常,记录日志等
return Double.MIN_VALUE;
}
}))
.collect(Collectors.toList());
Map<String, Object> result = new HashMap<>();
List<String> name = data.stream().map(map -> map.get("name")).collect(Collectors.toList());
Collections.reverse(name);
result.put("xdata", name);
List<String> value = data.stream().map(map -> map.get("value")).collect(Collectors.toList());
Collections.reverse(value);
result.put("ydata", value);
return result;
}
public void getCitySecurityIndex(List<Map<String, String>> finalData, Map<String, SecurityIndexCountItemDto> regionCodeSecurityIndexMap) {
/** /**
* 计算权重,总分100分: * 计算权重,总分100分:
* 检验超期率、检验合格率、充装检查率、充装检查合格率,占15% * 检验超期率、检验合格率、充装检查率、充装检查合格率,占15%
...@@ -261,6 +286,7 @@ public class AQZSDPStatisticsServiceImpl { ...@@ -261,6 +286,7 @@ public class AQZSDPStatisticsServiceImpl {
regionCodeSecurityIndexMap.forEach((k, v) -> { regionCodeSecurityIndexMap.forEach((k, v) -> {
Map<String, String> item = new HashMap<>(); Map<String, String> item = new HashMap<>();
item.put("name", v.getRegionName()); item.put("name", v.getRegionName());
item.put("regionCode", v.getRegionCode());
// 许可有效率的加权值 // 许可有效率的加权值
double xukeWeighted = Double.parseDouble(v.getXuke()) * weightTen; double xukeWeighted = Double.parseDouble(v.getXuke()) * weightTen;
// 使用登记办理率的加权值 // 使用登记办理率的加权值
...@@ -282,30 +308,10 @@ public class AQZSDPStatisticsServiceImpl { ...@@ -282,30 +308,10 @@ public class AQZSDPStatisticsServiceImpl {
item.put("value", String.format("%.2f", totalIndex)); item.put("value", String.format("%.2f", totalIndex));
finalData.add(item); finalData.add(item);
}); });
data = finalData.stream()
.filter(map -> map.containsKey("value"))
.sorted(Comparator.comparingDouble(map -> {
// 检查并解析值,如果失败则返回Double.MIN_VALUE(或根据需要处理)
try {
return Double.parseDouble(map.get("value"));
} catch (NumberFormatException e) {
// 处理无法解析为double的情况,这里返回Double.MIN_VALUE表示最小
// 或者可以抛出自定义异常,记录日志等
return Double.MIN_VALUE;
}
}))
.collect(Collectors.toList());
Map<String, Object> result = new HashMap<>();
List<String> name = data.stream().map(map -> map.get("name")).collect(Collectors.toList());
Collections.reverse(name);
result.put("xdata", name);
List<String> value = data.stream().map(map -> map.get("value")).collect(Collectors.toList());
Collections.reverse(value);
result.put("ydata", value);
return result;
} }
private Map<String, SecurityIndexCountItemDto> getSecurityIndexCountItemDtoMap(List<RegionModel> regionModels) {
public Map<String, SecurityIndexCountItemDto> getSecurityIndexCountItemDtoMap(List<RegionModel> regionModels) {
// 多线程处理后,顺序与regionModels的顺序不一致,故生成list // 多线程处理后,顺序与regionModels的顺序不一致,故生成list
List<SecurityIndexCountItemDto> countItemDtoList = getSecurityIndexCountDtoList(regionModels); List<SecurityIndexCountItemDto> countItemDtoList = getSecurityIndexCountDtoList(regionModels);
return countItemDtoList.stream().collect(Collectors.toMap(SecurityIndexCountItemDto::getRegionCode, Function.identity(), (k1, k2) -> k2)); return countItemDtoList.stream().collect(Collectors.toMap(SecurityIndexCountItemDto::getRegionCode, Function.identity(), (k1, k2) -> k2));
......
...@@ -89,7 +89,11 @@ public interface CylinderInfoMapper extends BaseMapper<CylinderInfo> { ...@@ -89,7 +89,11 @@ public interface CylinderInfoMapper extends BaseMapper<CylinderInfo> {
Integer getInfoTotal(); Integer getInfoTotal();
List<CylinderFillingRecordStatisticsDto> queryFillingRecordByOrgCode(@Param("orgCode") String orgCode, @Param("startTime") String startTime); List<CylinderFillingRecordStatisticsDto> queryFillingRecordByOrgCode(@Param("orgCode") String orgCode,
@Param("startTime") String startTime,
@Param("endTime") String endTime);
List<CylinderFillingRecordStatisticsDto> queryoffloadingByOrgCode(@Param("orgCode") String orgCode, @Param("startTime") String startTime); List<CylinderFillingRecordStatisticsDto> queryoffloadingByOrgCode(@Param("orgCode") String orgCode,
@Param("startTime") String startTime,
@Param("endTime") String endTime);
} }
...@@ -347,7 +347,10 @@ ...@@ -347,7 +347,10 @@
tz_base_enterprise_info i tz_base_enterprise_info i
WHERE WHERE
i.app_id = f.app_id i.app_id = f.app_id
AND f.filling_endtime >= concat(#{startTime}, ' 00:00:00') AND f.filling_endtime <![CDATA[>=]]> concat(#{startTime}, ' 00:00:00')
<if test="endTime != null and endTime != '' ">
AND f.filling_endtime <![CDATA[<=]]> concat(#{endTime}, ' 00:00:00')
</if>
AND i.org_code like concat(#{orgCode}, '%') AND i.org_code like concat(#{orgCode}, '%')
GROUP BY GROUP BY
filling_time filling_time
...@@ -358,13 +361,16 @@ ...@@ -358,13 +361,16 @@
<select id="queryoffloadingByOrgCode" resultType="com.yeejoin.amos.boot.module.common.api.dto.CylinderFillingRecordStatisticsDto"> <select id="queryoffloadingByOrgCode" resultType="com.yeejoin.amos.boot.module.common.api.dto.CylinderFillingRecordStatisticsDto">
SELECT SELECT
f.statistics_sync_date filling_time, f.statistics_sync_date filling_time,
SUM ( f.offloading_volume ) filling_quantity SUM ( f.offloading_volume ) offloading_volume
FROM FROM
tz_cylinder_offloading f, tz_cylinder_offloading f,
tz_base_enterprise_info i tz_base_enterprise_info i
WHERE WHERE
i.app_id = f.app_id i.app_id = f.app_id
AND f.statistics_sync_date >= #{startTime} AND f.statistics_sync_date <![CDATA[>=]]> #{startTime}
<if test="endTime != null and endTime != '' ">
AND f.statistics_sync_date <![CDATA[<=]]> #{endTime}
</if>
AND i.org_code like concat(#{orgCode}, '%') AND i.org_code like concat(#{orgCode}, '%')
GROUP BY GROUP BY
filling_time filling_time
......
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