package com.ycl.platform.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.platform.domain.entity.WorkOrder; import com.ycl.platform.domain.entity.YwThreshold; import com.ycl.platform.domain.result.HK.VehicleDeviceInspectionResult; import com.ycl.platform.mapper.WorkOrderMapper; import com.ycl.platform.mapper.YwThresholdMapper; import com.ycl.platform.service.IYwThresholdService; import constant.CompareConstant; import constant.YwThreadConstants; import enumeration.general.BusinessTypeEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import utils.DateUtils; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 运维阈值Service业务层处理 * * @author gonghl * @date 2024-07-19 */ @Service public class YwThresholdServiceImpl extends ServiceImpl implements IYwThresholdService { @Autowired private YwThresholdMapper ywThresholdMapper; /** * 查询运维阈值 * * @param id 运维阈值主键 * @return 运维阈值 */ @Override public YwThreshold selectYwThresholdById(Long id) { return ywThresholdMapper.selectYwThresholdById(id); } /** * 查询运维阈值列表 * * @param ywThreshold 运维阈值 * @return 运维阈值 */ @Override public Map> selectYwThresholdList(YwThreshold ywThreshold) { List ywThresholds = ywThresholdMapper.selectYwThresholdList(ywThreshold); Map> map = ywThresholds.stream().collect(Collectors.groupingBy(YwThreshold::getMonitorType)); return map; } /** * 新增运维阈值 * * @param ywThreshold 运维阈值 * @return 结果 */ @Override public int insertYwThreshold(YwThreshold ywThreshold) { ywThreshold.setCreateTime(DateUtils.getNowDate()); return ywThresholdMapper.insertYwThreshold(ywThreshold); } /** * 修改运维阈值 * * @param list 运维阈值 * @return 结果 */ @Override public Boolean updateYwThreshold(List list) { list.forEach(item -> item.setCreateTime(new Date())); return updateBatchById(list); } /** * 批量删除运维阈值 * * @param ids 需要删除的运维阈值主键 * @return 结果 */ @Override public int deleteYwThresholdByIds(Long[] ids) { return ywThresholdMapper.deleteYwThresholdByIds(ids); } /** * 删除运维阈值信息 * * @param id 运维阈值主键 * @return 结果 */ @Override public int deleteYwThresholdById(Long id) { return ywThresholdMapper.deleteYwThresholdById(id); } @Override public void faceCheck(List list) { } @Override public void videoCheck(List list) { } /** * 判断车辆阈值是否满足下发条件 * * @param list */ @Override public void carCheck(List list) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("monitor_type", BusinessTypeEnum.CAR.name()); List ywThresholds = ywThresholdMapper.selectList(wrapper); Map map = new HashMap<>(); for (YwThreshold ywThreshold : ywThresholds) { String key = ywThreshold.getKey(); map.put(key, ywThreshold); } //时钟准确率阈值 Float clockPercent = Float.valueOf(map.get(YwThreadConstants.Car_ClockPercent).getValue()); Float clockPercentAuto = Float.valueOf(map.get(YwThreadConstants.Car_ClockPercent).getValueAuto()); //数据及时率阈值 Float timelyPercent = Float.valueOf(map.get(YwThreadConstants.Car_TimelyPercent).getValue()); Float timelyPercentAuto = Float.valueOf(map.get(YwThreadConstants.Car_TimelyPercent).getValueAuto()); //持续无数据天数阈值 Integer continueNoDataCount = Integer.valueOf(map.get(YwThreadConstants.Car_ContinueNoDataCount).getValue()); Integer continueNoDataCountAuto = Integer.valueOf(map.get(YwThreadConstants.Car_ContinueNoDataCount).getValueAuto()); //不唯一数据量阈值 Integer nouniqueCount = Integer.valueOf(map.get(YwThreadConstants.Car_NouniqueCount).getValue()); Integer nouniqueCountAuto = Integer.valueOf(map.get(YwThreadConstants.Car_NouniqueCount).getValueAuto()); //白天未识别量阈值 Integer dayNoNumberCount = Integer.valueOf(map.get(YwThreadConstants.Car_DayNoNumberCount).getValue()); Integer dayNoNumberCountAuto = Integer.valueOf(map.get(YwThreadConstants.Car_DayNoNumberCount).getValueAuto()); //车辆六项属性不完整量阈值 Integer noIntegrityCount = Integer.valueOf(map.get(YwThreadConstants.Car_NoIntegrityCount).getValue()); Integer noIntegrityCountAuto = Integer.valueOf(map.get(YwThreadConstants.Car_NoIntegrityCount).getValueAuto()); //处理接口数据 for (VehicleDeviceInspectionResult result : list) { if (result == null) { log.error("车辆对象数据为空"); continue; } //检查持续无数据天数 Integer continueNoDataCountResult = result.getContinueNoDataCount(); check(continueNoDataCount, continueNoDataCountAuto, result, continueNoDataCountResult, "车辆持续无数据天数为空", CompareConstant.MoreThanEq); //检查时钟准确率 Float clockPercentResult = result.getSnapClock().getClockPercent(); check(clockPercent, clockPercentAuto, result, clockPercentResult, "车辆时钟准确率为空", CompareConstant.LessThanEq); //检查数据及时率 Float timelyPercentResult = result.getSnapTimely().getTimelyPercent(); check(timelyPercent, timelyPercentAuto, result, timelyPercentResult, "车辆数据及时率为空", CompareConstant.LessThanEq); //检查不唯一数据量 Integer nouniqueCountResult = result.getSnapUnique().getNouniqueCount(); check(nouniqueCount, nouniqueCountAuto, result, nouniqueCountResult, "车辆不唯一数据量为空", CompareConstant.MoreThanEq); //检查白天未识别量 Integer dayNoNumberCountResult = result.getSnapPlate().getDayNoNumberCount(); check(dayNoNumberCount, dayNoNumberCountAuto, result, dayNoNumberCountResult, "车辆白天未识别量为空", CompareConstant.MoreThanEq); //车辆六项属性不完整量 Integer noIntegrityCountResult = result.getIntegrity().getNoIntegrityCount(); check(noIntegrityCount, noIntegrityCountAuto, result, noIntegrityCountResult, "车辆六项属性不完整量为空", CompareConstant.MoreThanEq); } } private void check(Integer threshold, Integer thresholdAuto, VehicleDeviceInspectionResult result, Integer thresholdResult, String message, String command) { if (thresholdResult != null) { //大于类型 if (CompareConstant.MoreThanEq.equals(command)) { if (thresholdResult >= thresholdAuto) { //TODO:自动下发工单 } else if (thresholdResult >= threshold) { //TODO:进入下发工单页面 } } else if (CompareConstant.LessThanEq.equals(command)) { //小于类型 if (thresholdResult <= thresholdAuto) { //TODO:自动下发工单 } else if (thresholdResult <= threshold) { //TODO:进入下发工单页面 } } } else { log.error(message + result); } } private void check(Float threshold, Float thresholdAuto, VehicleDeviceInspectionResult result, Float thresholdResult, String message, String command) { if (thresholdResult != null) { //大于类型 if (CompareConstant.MoreThanEq.equals(command)) { if (thresholdResult >= thresholdAuto) { //TODO:自动下发工单 } else if (thresholdResult >= threshold) { //TODO:进入下发工单页面 } } else if (CompareConstant.LessThanEq.equals(command)) { //小于类型 if (thresholdResult <= thresholdAuto) { //TODO:自动下发工单 } else if (thresholdResult <= threshold) { //TODO:进入下发工单页面 } } } else { log.error(message + result); } } }