fast()指标预警,滑窗规则设定

car-ser
王熙朝 2024-06-28 16:03:12 +08:00
parent 8ec657dd1a
commit 8f305f5ddc
14 changed files with 546 additions and 28 deletions

View File

@ -0,0 +1,61 @@
package com.business.common.dev;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DataSpecificationDev {
/**
*
*/
private Long id;
/**
*
*/
private String vin;
/**
*
*/
private String dataCode;
/**
*
*/
private String label;
/**
*
*/
private String standardData;
/**
*id
*/
private Long dateTypeId;
/**
* id
*/
private Long radiusId;
/**
*
*/
private String radius;
/**
*
*/
private String radiusName;
/**
* id
*/
private Long lengthId;
/**
*
*/
private String lengthName;
/**
*
*/
private String length;
}

View File

@ -0,0 +1,45 @@
package com.business.common.domain.event;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DataSpecification {
/**
*
*/
private Long id;
/**
*
*/
private String vin;
/**
*
*/
private String dataCode;
/**
*
*/
private String label;
/**
*
*/
private String standardData;
/**
*id
*/
private Long dateTypeId;
/**
* id
*/
private Long radiusId;
/**
* id
*/
private Long lengthId;
}

View File

@ -0,0 +1,25 @@
package com.business.common.domain.event;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DateType {
/**
*
*/
private Long dateTypeId;
/**
*
*/
private String dataCode;
/**
*
*/
private String label;
}

View File

@ -11,6 +11,7 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
public class Length {
private Long lengthId;
/**
*
*/

View File

@ -10,6 +10,7 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
public class Radius {
private Long radiusId;
/**
*
*/

View File

@ -1,6 +1,7 @@
package com.muyu.goods.controller;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import com.business.common.dev.LongitudeAndLatitude;
@ -148,7 +149,7 @@ public class CarController extends BaseController
* @return
*/
@PostMapping("read")
public Result<VehicleInfo> read() {
public Result<Map<String,String>> read() {
return success(carService.read());
}

View File

@ -1,11 +1,13 @@
package com.muyu.goods.controller;
import com.business.common.dev.DataFormatDev;
import com.business.common.dev.DataSpecificationDev;
import com.business.common.domain.DataFormat;
import com.business.common.domain.event.Window;
import com.business.common.domain.event.*;
import com.dtflys.forest.annotation.Post;
import com.muyu.common.core.domain.Result;
import com.muyu.common.core.web.controller.BaseController;
import com.muyu.common.log.annotation.Log;
import com.muyu.common.security.utils.SecurityUtils;
import com.muyu.common.system.domain.LoginUser;
import com.muyu.goods.Domain.WindowDonain;
@ -24,8 +26,8 @@ public class ForewarnController extends BaseController {
@Autowired
private IForewarnService forewarnService;
@PostMapping("list")
public Result<List<Window>> list() {
@PostMapping("listDataSpecificationDev")
public Result<List<DataSpecificationDev>> list() {
return success(forewarnService.list());
}
//全部报文
@ -48,4 +50,102 @@ public class ForewarnController extends BaseController {
public Result deleteDataFormatById(@PathVariable String vin) {
return success(forewarnService.deleteDataFormatById(vin));
}
/**
* redis
* @return
*/
@PostMapping("redisDataDormById")
public Result redisDataDormById() {
return success(forewarnService.redisDataDormById());
}
/**
*
* @return
*/
@PostMapping("listLength")
public Result<List<Length>> listLength() {
return success(forewarnService.listLength());
}
/**
*
* @return
*/
@PostMapping("listRadius")
public Result<List<Radius>> listRadius() {
return success(forewarnService.listRadius());
}
/**
*
* @param vin
* @return
*/
@PostMapping("selectDataSpecificationDev")
public Result<List<DataSpecificationDev>> selectDataSpecificationDev(@RequestParam String vin) {
return success(forewarnService.selectDataSpecificationDev(vin));
}
/**
*
* @param dataSpecification
* @return
*/
@PostMapping("indexDataSpecification")
public Result indexDataSpecification(@RequestBody DataSpecification dataSpecification,@RequestParam String vin) {
return success(forewarnService.indexDataSpecification(dataSpecification,vin));
}
/**
*
* @param id
* @return
*/
@PostMapping("selectDataSpecificationById/{id}")
public Result<DataSpecification> selectDataSpecificationById(@PathVariable Long id) {
return success(forewarnService.selectDataSpecificationById(id));
}
/**
*
* @param dataSpecification
* @return
*/
@PostMapping("updataDataSpecification")
public Result updataDataSpecification(@RequestBody DataSpecification dataSpecification) {
return success(forewarnService.updataDataSpecification(dataSpecification));
}
/**
*
* @param id
* @return
*/
@PostMapping("deleteDataSpecification")
public Result deleteDataSpecification(@RequestParam Long id){
return success(forewarnService.deleteDataSpecification(id));
}
/**
*
* @param vin
* @return
*/
@PostMapping("listDateType")
public Result<List<DateType>> listDateType(@RequestParam String vin) {
return success(forewarnService.listDateType(vin));
}
/**
*
* @param
* @return
*/
@PostMapping("selectDateType")
public Result<List<DateType>> selectDateType() {
return success(forewarnService.selectDateType());
}
}

View File

@ -25,4 +25,8 @@ public class Producer {
String jsonString = JSONObject.toJSONString(faultInfo);
rabbitTemplate.convertAndSend("fault.message","end",jsonString);
}
public void redis_cache(String vin) {
rabbitTemplate.convertAndSend("data_format_renewal",vin);
}
}

View File

@ -1,14 +1,15 @@
package com.muyu.goods.mapper;
import com.business.common.dev.DataFormatDev;
import com.business.common.dev.DataSpecificationDev;
import com.business.common.domain.DataFormat;
import com.business.common.domain.event.Window;
import com.business.common.domain.event.*;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface ForewarnMapper {
List<Window> list();
List<DataSpecificationDev> list();
List<DataFormatDev> listDataFormat();
@ -17,4 +18,21 @@ public interface ForewarnMapper {
Integer deleteDataFormatById(@Param("vin") String vin);
List<DataFormat> selectDataFormatById(@Param("vin") String vin);
List<Length> listLength();
List<Radius> listRadius();
List<DataSpecificationDev> selectDataSpecificationDev();
int indexDataSpecification(DataSpecification dataSpecification);
int updataDataSpecification(DataSpecification dataSpecification);
Integer deleteDataSpecification(@Param("id") Long id);
List<DateType> listDateType();
DataSpecification selectDataSpecificationById(@Param("id") Long id);
}

View File

@ -5,6 +5,7 @@ import com.business.common.domain.Car;
import com.business.common.domain.VehicleInfo;
import java.util.List;
import java.util.Map;
/**
* Service
@ -69,7 +70,7 @@ public interface ICarService
Car query(Long carId);
VehicleInfo read();
Map<String,String> read();
void open();

View File

@ -1,13 +1,15 @@
package com.muyu.goods.service;
import com.business.common.dev.DataFormatDev;
import com.business.common.dev.DataSpecificationDev;
import com.business.common.domain.DataFormat;
import com.business.common.domain.event.Window;
import com.business.common.domain.event.*;
import com.muyu.common.core.domain.Result;
import java.util.List;
public interface IForewarnService {
List<Window> list();
List<DataSpecificationDev> list();
/**
*
@ -34,4 +36,61 @@ public interface IForewarnService {
*/
Integer deleteDataFormatById(String vin);
/**
* redis
* @return
*/
String redisDataDormById();
/**
*
* @return
*/
List<Length> listLength();
/**
*
* @return
*/
List<Radius> listRadius();
/**
*
* @param vin
* @return
*/
List<DataSpecificationDev> selectDataSpecificationDev(String vin);
/**
*
* @param dataSpecification
* @return
*/
Integer indexDataSpecification(DataSpecification dataSpecification,String vin);
/**
*
* @param dataSpecification
* @return
*/
Integer updataDataSpecification(DataSpecification dataSpecification);
/**
*
* @param id
* @return
*/
Integer deleteDataSpecification(Long id);
/**
*
* @param vin
* @return
*/
List<DateType> listDateType(String vin);
List<DateType> selectDateType();
DataSpecification selectDataSpecificationById(Long id);
}

View File

@ -1,6 +1,8 @@
package com.muyu.goods.service.impl;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@ -21,6 +23,8 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import static com.fasterxml.jackson.databind.type.LogicalType.Map;
/**
* Service
*
@ -157,7 +161,7 @@ public class CarServiceImpl implements ICarService
private Timer timer;
@Override
public VehicleInfo read() {
public Map<String,String> read() {
String rightPopAndLeftPush = null;
try {
rightPopAndLeftPush = redisTemplate.opsForList().leftPop("event_handler:realtime_data:JAV0VJUJYOTOK9KSY"
@ -170,8 +174,7 @@ public class CarServiceImpl implements ICarService
}
if (rightPopAndLeftPush != null){
String parse = JSON.parse(rightPopAndLeftPush).toString();
VehicleInfo vehicleInfo = JSON.parseObject(parse, VehicleInfo.class);
return vehicleInfo;
return JSON.parseObject(parse, java.util.Map.class);
}else{
return null;
}

View File

@ -1,12 +1,16 @@
package com.muyu.goods.service.impl;
import com.business.common.dev.DataFormatDev;
import com.business.common.dev.DataSpecificationDev;
import com.business.common.domain.DataFormat;
import com.business.common.domain.event.Window;
import com.business.common.domain.event.*;
import com.muyu.common.core.domain.Result;
import com.muyu.common.security.utils.SecurityUtils;
import com.muyu.goods.incident.mq.Producer;
import com.muyu.goods.mapper.ForewarnMapper;
import com.muyu.goods.service.IForewarnService;
import org.apache.kafka.common.protocol.types.Field;
import org.apache.xmlbeans.GDateSpecification;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
@ -24,9 +28,11 @@ public class ForewarnService implements IForewarnService {
private ForewarnMapper forewarnMapper;
@Autowired
private RedisTemplate<String,String> redisTemplate;
@Autowired
private Producer producer;
@Override
public List<Window> list() {
public List<DataSpecificationDev> list() {
return forewarnMapper.list();
}
@ -86,8 +92,16 @@ public class ForewarnService implements IForewarnService {
list.add(dataFormatDev);
}
//再添加新报文
return forewarnMapper.indexDataFormat(list);
int i = forewarnMapper.indexDataFormat(list);
if (i > 0){
listDataFormat();
Boolean b = redisTemplate.opsForHash().hasKey("load_center:go_live", vin);
if (b){
System.out.println(vin);
producer.redis_cache(vin);
}
}
return i;
}
/**
@ -99,5 +113,130 @@ public class ForewarnService implements IForewarnService {
return forewarnMapper.deleteDataFormatById(vin);
}
@Override
public String redisDataDormById() {
List<DataSpecificationDev> dataSpecificationDevs = selectDataSpecificationDev(null);
//进行分组
Map<String, String> map = new HashMap<>();
Map<String, String> map2 = new HashMap<>();
Map<String, List<DataSpecificationDev>> collect = dataSpecificationDevs.stream().collect(Collectors.groupingBy(DataSpecificationDev::getVin));
// 给每组数据改成字符串格式
collect.forEach((a,b) -> {
String name = "";
String code = "";
//编辑字符串
for (DataSpecificationDev dataSpecificationDev : b) {
name += dataSpecificationDev.getDataCode() + "-" + dataSpecificationDev.getLabel() + "-"
+ dataSpecificationDev.getRadius() + "-" + dataSpecificationDev.getLength() + "-" + dataSpecificationDev.getStandardData() + ",";
code += dataSpecificationDev.getDataCode() + ",";
}
name = name.substring(0,name.length()-1);
code = code.substring(0,code.length()-1);
//存入map中
map.put(a,name);
map2.put(a,code);
});
//map数据导入redis
map.forEach((key,val) -> {
redisTemplate.opsForHash().put("event_handler:indicator_warning:execute_info:",key,val);
});
map2.forEach((key,val) -> {
redisTemplate.opsForHash().put("event_handler:indicator_warning:warning_data:",key,val);
});
return dataSpecificationDevs.toString();
}
/**
*
* @return
*/
@Override
public List<Length> listLength() {
return forewarnMapper.listLength();
}
/**
*
* @return
*/
@Override
public List<Radius> listRadius() {
return forewarnMapper.listRadius();
}
@Override
public List<DataSpecificationDev> selectDataSpecificationDev(String vin) {
List<DataSpecificationDev> list = forewarnMapper.selectDataSpecificationDev();
if (vin!=null){
List<DataSpecificationDev> collect = list.stream().filter(dataSpecificationDev -> dataSpecificationDev.getVin().equals(vin)).collect(Collectors.toList());
return collect;
}
return list;
}
/**
*
* @param dataSpecification
* @return
*/
@Override
public Integer indexDataSpecification(DataSpecification dataSpecification, String vin) {
DateType dateType1 = selectDateType().stream().filter(dateType -> dataSpecification.getDateTypeId() == dateType.getDateTypeId()).collect(Collectors.toList()).get(0);
dataSpecification.setDataCode(dateType1.getDataCode());
dataSpecification.setLabel(dateType1.getLabel());
dataSpecification.setVin(vin);
int i = forewarnMapper.indexDataSpecification(dataSpecification);
return i;
}
/**
*
* @param dataSpecification
* @return
*/
@Override
public Integer updataDataSpecification(DataSpecification dataSpecification) {
int i = forewarnMapper.updataDataSpecification(dataSpecification);
return i;
}
/**
*
* @param id
* @return
*/
@Override
public Integer deleteDataSpecification(Long id) {
return forewarnMapper.deleteDataSpecification(id);
}
@Override
public List<DateType> listDateType(String vin) {
List<DateType> dateTypeList = selectDateType();
List<DataFormat> dataFormats = selectDataFormatById(vin);
//取重复的值
//创建一个集合类
List<String> dataCode = dataFormats.stream().map(DataFormat::getDataCode).collect(Collectors.toList());
//开始区分
List<DateType> dateTypes = dateTypeList.stream().filter(dateType -> dataCode.contains(dateType.getDataCode())).collect(Collectors.toList());
//取没有重复值
List<DataSpecificationDev> dataSpecificationDevs = selectDataSpecificationDev(vin);
//拉取集合类
List<String> collect = dataSpecificationDevs.stream().map(DataSpecificationDev::getDataCode).collect(Collectors.toList());
//过滤提取没有重复的值
List<DateType> typeList = dateTypes.stream().filter(dateType -> !collect.contains(dateType.getDataCode())).collect(Collectors.toList());
return typeList;
}
@Override
public List<DateType> selectDateType() {
return forewarnMapper.listDateType();
}
@Override
public DataSpecification selectDataSpecificationById(Long id) {
return forewarnMapper.selectDataSpecificationById(id);
}
}

View File

@ -4,14 +4,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.muyu.goods.mapper.ForewarnMapper">
<resultMap type="com.business.common.domain.event.Window" id="WindowResult">
<resultMap type="com.business.common.dev.DataSpecificationDev" id="DataSpecificationDevResult">
<result property="id" column="id" />
<result property="vin" column="vin" />
<result property="point" column="point" />
<result property="standard" column="standard" />
<result property="windowStartTime" column="window_start_time" />
<result property="windowEndTime" column="window_end_time" />
<result property="result" column="result" />
<result property="dataCode" column="data_code" />
<result property="label" column="label" />
<result property="standardData" column="standard_data" />
<result property="dateTypeId" column="date_type_id" />
<result property="radiusId" column="radius_id" />
<result property="lengthId" column="length_id" />
</resultMap>
<resultMap id="RadiusResult" type="com.business.common.domain.event.Radius">
@ -31,8 +32,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="end" column="end"></result>
</resultMap>
<sql id="selectWindowVo">
select id, vin, point, standard, window_start_time, window_end_time, result from window
<sql id="selectDataSpecificationVo">
select d.id,d.vin,d.data_code,d.label,d.standard_data,d.date_type_id,d.radius_id,d.length_id,
r.radius_name, r.radius, l.length_name, l.length
from data_specification d left join radius r on d.radius_id = r.radius_id
left join length l on l.length_id = d.length_id
</sql>
<sql id="selectDataFormat">
select data_code, label, start,end from data_format
@ -41,17 +45,52 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
insert into data_format
values
<foreach collection="dataFormat" item="list" separator=",">
(#{list.vin},#{list.dataCode},#{list.label},#{list.start},#{list.end})
(0,#{list.vin},#{list.dataCode},#{list.label},#{list.start},#{list.end})
</foreach>
</insert>
<insert id="indexDataSpecification" useGeneratedKeys="true" keyProperty="id">
insert into data_specification
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="vin != null">vin,</if>
<if test="dataCode != null">data_code,</if>
<if test="label != null">label,</if>
<if test="standardData != null">standard_data,</if>
<if test="dateTypeId != null">date_type_id,</if>
<if test="radiusId != null">radius_id,</if>
<if test="lengthId != null">length_id,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="vin != null">#{vin},</if>
<if test="dataCode != null">#{dataCode},</if>
<if test="label != null">#{label},</if>
<if test="standardData != null">#{standardData},</if>
<if test="dateTypeId != null">#{dateTypeId},</if>
<if test="radiusId != null">#{radiusId},</if>
<if test="lengthId != null">#{lengthId},</if>
</trim>
</insert>
<update id="updataDataSpecification">
update data_specification
<trim prefix="SET" suffixOverrides=",">
<if test="dataCode != null">data_code = #{dataCode},</if>
<if test="label != null">label = #{label},</if>
<if test="standardData != null">standard_data = #{standardData},</if>
<if test="dateTypeId != null">date_type_id = #{dateTypeId},</if>
<if test="radiusId != null">radius_id = #{radiusId},</if>
<if test="lengthId != null">length_id = #{lengthId},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteDataFormatById">
delete
from data_format
where vin = #{vin};
</delete>
<select id="list" resultType="com.business.common.domain.event.Window">
<include refid="selectWindowVo"></include>
</select>
<delete id="deleteDataSpecification">
delete
from data_specification
where id = #{id};
</delete>
<select id="listDataFormat" resultType="com.business.common.dev.DataFormatDev">
select * from data_format
</select>
@ -59,6 +98,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectDataFormat"></include>
where vin = #{vin}
</select>
<select id="list" resultType="com.business.common.dev.DataSpecificationDev">
<include refid="selectDataSpecificationVo"></include>
</select>
<select id="listLength" resultType="com.business.common.domain.event.Length">
select *
from length
</select>
<select id="listRadius" resultType="com.business.common.domain.event.Radius">
select *
from radius
</select>
<select id="selectDataSpecificationDev" resultType="com.business.common.dev.DataSpecificationDev">
<include refid="selectDataSpecificationVo"></include>
</select>
<select id="listDateType" resultType="com.business.common.domain.event.DateType">
select *
from date_type
</select>
<select id="selectDataSpecificationById" resultType="com.business.common.domain.event.DataSpecification">
select * from data_specification where id = #{id};
</select>
</mapper>