package com.ruoyi.system.service.impl; import java.math.BigDecimal; import java.util.Date; import java.util.List; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.system.mapper.VehicleAbnormalAlertMapper; import com.ruoyi.system.domain.VehicleAbnormalAlert; import com.ruoyi.system.service.IVehicleAbnormalAlertService; /** * 车辆异常告警Service业务层处理 * * @author ruoyi */ @Service public class VehicleAbnormalAlertServiceImpl implements IVehicleAbnormalAlertService { @Autowired private VehicleAbnormalAlertMapper vehicleAbnormalAlertMapper; /** * 查询车辆异常告警 * * @param alertId 车辆异常告警主键 * @return 车辆异常告警 */ @Override public VehicleAbnormalAlert selectVehicleAbnormalAlertByAlertId(Long alertId) { return vehicleAbnormalAlertMapper.selectVehicleAbnormalAlertByAlertId(alertId); } /** * 查询车辆异常告警列表 * * @param vehicleAbnormalAlert 车辆异常告警 * @return 车辆异常告警 */ @Override public List selectVehicleAbnormalAlertList(VehicleAbnormalAlert vehicleAbnormalAlert) { return vehicleAbnormalAlertMapper.selectVehicleAbnormalAlertList(vehicleAbnormalAlert); } /** * 新增车辆异常告警 * * @param vehicleAbnormalAlert 车辆异常告警 * @return 结果 */ @Override public int insertVehicleAbnormalAlert(VehicleAbnormalAlert vehicleAbnormalAlert) { vehicleAbnormalAlert.setCreateTime(DateUtils.getNowDate()); return vehicleAbnormalAlertMapper.insertVehicleAbnormalAlert(vehicleAbnormalAlert); } /** * 修改车辆异常告警 * * @param vehicleAbnormalAlert 车辆异常告警 * @return 结果 */ @Override public int updateVehicleAbnormalAlert(VehicleAbnormalAlert vehicleAbnormalAlert) { vehicleAbnormalAlert.setUpdateTime(DateUtils.getNowDate()); return vehicleAbnormalAlertMapper.updateVehicleAbnormalAlert(vehicleAbnormalAlert); } /** * 批量删除车辆异常告警 * * @param alertIds 需要删除的车辆异常告警主键 * @return 结果 */ @Override public int deleteVehicleAbnormalAlertByAlertIds(Long[] alertIds) { return vehicleAbnormalAlertMapper.deleteVehicleAbnormalAlertByAlertIds(alertIds); } /** * 删除车辆异常告警信息 * * @param alertId 车辆异常告警主键 * @return 结果 */ @Override public int deleteVehicleAbnormalAlertByAlertId(Long alertId) { return vehicleAbnormalAlertMapper.deleteVehicleAbnormalAlertByAlertId(alertId); } /** * 处理告警 * * @param alertId 告警ID * @param handlerId 处理人ID * @param handlerName 处理人姓名 * @param handleRemark 处理备注 * @return 结果 */ @Override public int handleAlert(Long alertId, Long handlerId, String handlerName, String handleRemark) { VehicleAbnormalAlert alert = new VehicleAbnormalAlert(); alert.setAlertId(alertId); alert.setStatus("1"); // 已处理 alert.setHandlerId(handlerId); alert.setHandlerName(handlerName); alert.setHandleTime(new Date()); alert.setHandleRemark(handleRemark); return updateVehicleAbnormalAlert(alert); } /** * 批量处理告警 * * @param alertIds 告警ID列表 * @param handlerId 处理人ID * @param handlerName 处理人姓名 * @param handleRemark 处理备注 * @return 结果 */ @Override public int batchHandleAlert(Long[] alertIds, Long handlerId, String handlerName, String handleRemark) { return vehicleAbnormalAlertMapper.batchHandleAlert(alertIds, handlerId, handlerName, handleRemark); } /** * 检查并创建车辆异常告警 * * @param vehicleId 车辆ID * @param vehicleNo 车牌号 * @param mileage 运行公里数 * @param startTime 开始时间 * @param endTime 结束时间 * @param deptId 部门ID * @param deptName 部门名称 * @return 是否创建成功 */ @Override public boolean checkAndCreateAlert(Long vehicleId, String vehicleNo, BigDecimal mileage, Date startTime, Date endTime, Long deptId, String deptName) { try { // 获取当日告警次数 Date today = DateUtils.parseDate(DateUtils.getDate()); int todayCount = vehicleAbnormalAlertMapper.selectDailyAlertCount(vehicleId, today); // 创建告警记录 VehicleAbnormalAlert alert = new VehicleAbnormalAlert(); alert.setVehicleId(vehicleId); alert.setVehicleNo(vehicleNo); alert.setAlertDate(today); alert.setAlertTime(new Date()); alert.setMileage(mileage); alert.setAlertType("NO_TASK_MILEAGE"); alert.setAlertReason(String.format("车辆在无任务状态下运行了 %.2f 公里", mileage)); alert.setStartTime(startTime); alert.setEndTime(endTime); alert.setAlertCount(todayCount + 1); alert.setStatus("0"); // 未处理 alert.setNotifyStatus("0"); // 未发送 alert.setDeptId(deptId); alert.setDeptName(deptName); int result = insertVehicleAbnormalAlert(alert); return result > 0; } catch (Exception e) { throw new RuntimeException("创建告警记录失败: " + e.getMessage(), e); } } }