package com.ssi.dcvp; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ssi.entity.DataQualityInspection; import com.ssi.entity.VmsDataSpace; import com.ssi.entity.VmsVehicle; import com.ssi.mapper.DataQualityInspectionMapper; import com.ssi.mapper.VmsDataSpaceMapper; import com.ssi.response.SSIPage; import com.ssi.response.SSIResponse; import com.ssi.service.VmsVehicleService; import com.ssi.utils.DateUtils; import io.netty.util.internal.MathUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; import org.apache.commons.math3.util.MathUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; import org.springframework.util.MimeTypeUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.client.RestTemplate; import java.math.BigDecimal; import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.*; import java.util.stream.Collectors; /** * @author 李恒 */ @Api @RestController @RequestMapping("/dcvp") public class DcvpController { @Autowired private VmsVehicleService vmsVehicleService; @Autowired private DcvpService dcvpService; @Autowired private DataQualityInspectionMapper dataQualityInspectionMapper; @Autowired private RestTemplate restTemplate; @Autowired private VmsDataSpaceMapper vmsDataSpaceMapper; @Value("${ThirdLogin-Url}") private String thirdLoginUrl; @Value("${spring.data.elasticsearch.hosts}") private String esHosts; /** * 车辆基本数据拉取 */ @ApiOperation(value = "车辆基本数据拉取", response = SSIResponse.class, produces = MimeTypeUtils.APPLICATION_JSON_VALUE) @PostMapping("/vehicleBase") public DcvpResponse list(@RequestBody Map params) { params.put("vehicleStatus", 0); SSIPage ssiPage = vmsVehicleService.queryPage(params); List list = (List) ssiPage.getList(); if (!CollectionUtils.isEmpty(list)) { List dcvpVehicleList = list.stream().map(vmsVehicle -> { if (vmsVehicle == null) { return null; } return new DcvpVehicle(vmsVehicle); }).collect(Collectors.toList()); ssiPage.setList(dcvpVehicleList); } return new DcvpResponse(SSIResponse.ok(ssiPage)); } /** * 车辆实时状态拉取 */ @PostMapping("/vehicleRealStatus") @ApiOperation(value = "车辆实时状态拉取", response = SSIResponse.class, produces = MimeTypeUtils.APPLICATION_JSON_VALUE) public DcvpResponse vehicleRealStatus(@RequestBody Map params) { params.put("vehicleStatus", 0); SSIPage ssiPage = vmsVehicleService.queryPage(params); List list = (List) ssiPage.getList(); List dcvpVehicleStatuses = dcvpService.vehicleRealStatus(list); ssiPage.setList(dcvpVehicleStatuses); return new DcvpResponse(SSIResponse.ok(ssiPage)); } /** * 数据质量统计数拉取 */ @PostMapping("/dataQualityCount") @ApiOperation(value = "数据质量统计数拉取", response = SSIResponse.class, produces = MimeTypeUtils.APPLICATION_JSON_VALUE) public DcvpResponse dataQualityCount(Date queryDate) { if (queryDate == null) { Instant yesterday = new Date().toInstant().minus(1, ChronoUnit.DAYS); queryDate = new Date(yesterday.toEpochMilli()); } String format = DateUtils.format(queryDate, "yyyyMMdd"); long value = Long.parseLong(format); DataQualityInspection dataQualityInspection = dataQualityInspectionMapper.selectOne( new LambdaQueryWrapper() .eq(DataQualityInspection::getStatDay, value)); return new DcvpResponse(SSIResponse.ok(dataQualityInspection)); } /** * 登录转发 */ @PostMapping("/login") @ApiOperation(value = "登录转发", response = SSIResponse.class, produces = MimeTypeUtils.APPLICATION_JSON_VALUE) public JSONObject login(@RequestBody HashMap params) { JSONObject res = restTemplate.postForObject(thirdLoginUrl, params, JSONObject.class); return res; } /** * 数据磁盘占用统计 */ @PostMapping("/dataSpaceConsumed") @ApiOperation(value = "数据磁盘占用统计", response = SSIResponse.class, produces = MimeTypeUtils.APPLICATION_JSON_VALUE) public DcvpResponse dataSpaceConsumed() { Date now = new Date(); Date day1 = org.apache.commons.lang3.time.DateUtils.addDays(now, -1); String yyyyMM = DateUtils.format(day1, "yyyyMM"); Date day2 = org.apache.commons.lang3.time.DateUtils.addDays(now, -2); String esHost = esHosts.split(",")[0]; String index = "vms_igv_vehicle_" + yyyyMM; String esUrl = "http://" + esHost + "/_cat/indices/" + index; String res = restTemplate.getForObject(esUrl, String.class); double esSize = 0.0; if (StringUtils.isNotBlank(res)) { String[] split = res.split(" "); String size = split[8]; if (size.endsWith("gb")) { esSize = Double.valueOf(size.replaceAll("gb", "")); } if (size.endsWith("mb")) { esSize = Double.valueOf(size.replaceAll("mb", "")) / 1024.0; } else if (size.endsWith("kb")) { esSize = Double.valueOf(size.replaceAll("kb", "")) / 1024.0 / 1024.0; } } VmsDataSpace day2Space = vmsDataSpaceMapper.selectOne(new LambdaQueryWrapper() .eq(VmsDataSpace::getDataDate, DateUtils.format(day2, "yyyyMMdd"))); Map resMap = new HashMap(); if (index.equals(day2Space.getDataIndex())) { resMap.put("esSpace", new BigDecimal(esSize - day2Space.getDataSpace().doubleValue()) .setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); } else { resMap.put("esSpace", new BigDecimal(esSize) .setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); } VmsDataSpace day1Space = vmsDataSpaceMapper.selectOne(new LambdaQueryWrapper() .eq(VmsDataSpace::getDataDate, DateUtils.format(day1, "yyyyMMdd"))); if (day1Space == null) { VmsDataSpace space = new VmsDataSpace(); space.setDataDate(day1); space.setDataSpace(esSize); space.setDataIndex(index); vmsDataSpaceMapper.insert(space); } resMap.put("hiveSpace", 0); resMap.put("statDay", DateUtils.format(day1, "yyyyMMdd")); DcvpResponse dcvpResponse = new DcvpResponse(); dcvpResponse.setCode(1); dcvpResponse.setData(resMap); return dcvpResponse; } }