下发字段更新为北斗号

This commit is contained in:
chenlinghy 2023-08-29 22:40:58 +08:00
parent cce43b7c4c
commit 7a5dc118f3
6 changed files with 47 additions and 16 deletions

View File

@ -1,6 +1,7 @@
package com.zjyr.beidouservice.mapper; package com.zjyr.beidouservice.mapper;
import com.zjyr.beidouservice.pojo.dataobject.AlarmDeviceTaskDO; import com.zjyr.beidouservice.pojo.dataobject.AlarmDeviceTaskDO;
import com.zjyr.beidouservice.pojo.dto.task.AlarmDeviceTaskDTO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -23,7 +24,7 @@ public interface AlarmDeviceTaskMapper {
* @param status status * @param status status
* @return the alarm task list * @return the alarm task list
*/ */
List<AlarmDeviceTaskDO> getAlarmTaskByStatus(@Param("status") Integer status); List<AlarmDeviceTaskDTO> getAlarmTaskByStatus(@Param("status") Integer status);
void batchUpdate(@Param("list") List<AlarmDeviceTaskDO> deviceTaskList); void batchUpdate(@Param("list") List<AlarmDeviceTaskDO> deviceTaskList);

View File

@ -28,5 +28,8 @@ public class DeviceInfoDTO {
* 执行任务设备 * 执行任务设备
*/ */
private List<Integer> deviceIds; private List<Integer> deviceIds;
/**
* 北斗 id 列表
*/
private List<Integer> beidouIds;
} }

View File

@ -0,0 +1,14 @@
package com.zjyr.beidouservice.pojo.dto.task;
import com.zjyr.beidouservice.pojo.dataobject.AlarmDeviceTaskDO;
import lombok.Data;
@Data
public class AlarmDeviceTaskDTO extends AlarmDeviceTaskDO {
/**
* 设备的北斗 id
*/
private Integer beidouId;
}

View File

@ -119,7 +119,7 @@ public class AlarmTaskServiceImpl implements AlarmTaskService {
alarmTaskReqDTO.getSendTime(), alarmTaskReqDTO.getSendTime(),
deviceInfo.getCityCodes(), deviceInfo.getCityCodes(),
deviceInfo.getCountyCodes(), deviceInfo.getCountyCodes(),
deviceInfo.getDeviceIds() deviceInfo.getBeidouIds()
); );
return MyResp.success("执行任务成功"); return MyResp.success("执行任务成功");
@ -304,6 +304,7 @@ public class AlarmTaskServiceImpl implements AlarmTaskService {
List<Integer> cityCodes = new ArrayList<>(); List<Integer> cityCodes = new ArrayList<>();
List<Integer> countyCodes = null; List<Integer> countyCodes = null;
List<Integer> deviceIds = null; List<Integer> deviceIds = null;
List<Integer> beidouIds = null;
//cityCode不为null,默认为杭州市-所属区域为杭州市所有区域 //cityCode不为null,默认为杭州市-所属区域为杭州市所有区域
if (Objects.nonNull(alarmTaskReqDTO.getCityCode())) { if (Objects.nonNull(alarmTaskReqDTO.getCityCode())) {
@ -340,12 +341,17 @@ public class AlarmTaskServiceImpl implements AlarmTaskService {
//todo 根据deviceId获取区信息 //todo 根据deviceId获取区信息
deviceIds = Arrays.stream(alarmTaskReqDTO.getDeviceIds().split(",")).map(Integer::parseInt).toList(); deviceIds = Arrays.stream(alarmTaskReqDTO.getDeviceIds().split(",")).map(Integer::parseInt).toList();
} }
if (deviceIds != null && !deviceIds.isEmpty()) {
List<DeviceDO> deviceDOList = deviceMapper.selectDeviceByDeviceIds(deviceIds);
beidouIds = deviceDOList.stream().map(DeviceDO::getBeidouId).collect(Collectors.toList());
}
//默认浙江省杭州市 //默认浙江省杭州市
deviceInfo.setProvinceCode(province); deviceInfo.setProvinceCode(province);
deviceInfo.setCityCodes(cityCodes); deviceInfo.setCityCodes(cityCodes);
deviceInfo.setCountyCodes(countyCodes); deviceInfo.setCountyCodes(countyCodes);
deviceInfo.setDeviceIds(deviceIds); deviceInfo.setDeviceIds(deviceIds);
deviceInfo.setBeidouIds(beidouIds);
return deviceInfo; return deviceInfo;
} }

View File

@ -3,6 +3,7 @@ package com.zjyr.beidouservice.task;
import com.zjyr.beidouservice.common.impl.TaskStatusName; import com.zjyr.beidouservice.common.impl.TaskStatusName;
import com.zjyr.beidouservice.mapper.AlarmDeviceTaskMapper; import com.zjyr.beidouservice.mapper.AlarmDeviceTaskMapper;
import com.zjyr.beidouservice.pojo.dataobject.AlarmDeviceTaskDO; import com.zjyr.beidouservice.pojo.dataobject.AlarmDeviceTaskDO;
import com.zjyr.beidouservice.pojo.dto.task.AlarmDeviceTaskDTO;
import com.zjyr.beidouservice.pojo.po.AlarmTaskResult; import com.zjyr.beidouservice.pojo.po.AlarmTaskResult;
import com.zjyr.beidouservice.service.DeviceService; import com.zjyr.beidouservice.service.DeviceService;
import com.zjyr.beidouservice.service.SensorTaskService; import com.zjyr.beidouservice.service.SensorTaskService;
@ -43,20 +44,20 @@ public class AlarmStatusTask {
@Scheduled(cron = "0 */1 * * * ?") @Scheduled(cron = "0 */1 * * * ?")
public void updateAlarmStatusTask() { public void updateAlarmStatusTask() {
//获取所有执行中的任务 //获取所有执行中的任务
List<AlarmDeviceTaskDO> deviceTaskList = alarmDeviceTaskMapper.getAlarmTaskByStatus(TaskStatusName.TASK_EXECUTING.getValue()); List<AlarmDeviceTaskDTO> deviceTaskList = alarmDeviceTaskMapper.getAlarmTaskByStatus(TaskStatusName.TASK_EXECUTING.getValue());
if (deviceTaskList.isEmpty()) { if (deviceTaskList.isEmpty()) {
return; return;
} }
// 输出聚合结果 // 输出聚合结果
Map<Long, List<AlarmDeviceTaskDO>> aggregationMap = deviceTaskList.stream().collect(Collectors.groupingBy(AlarmDeviceTaskDO::getTaskId)); Map<Long, List<AlarmDeviceTaskDTO>> aggregationMap = deviceTaskList.stream().collect(Collectors.groupingBy(AlarmDeviceTaskDTO::getTaskId));
Map<Long, Date> taskDOMap = deviceTaskList.stream().collect(Collectors.toMap(AlarmDeviceTaskDO::getTaskId, AlarmDeviceTaskDO::getSendTime, (d1, d2) -> d1)); Map<Long, Date> taskDOMap = deviceTaskList.stream().collect(Collectors.toMap(AlarmDeviceTaskDO::getTaskId, AlarmDeviceTaskDO::getSendTime, (d1, d2) -> d1));
for (Map.Entry<Long, List<AlarmDeviceTaskDO>> entry : aggregationMap.entrySet()) { for (Map.Entry<Long, List<AlarmDeviceTaskDTO>> entry : aggregationMap.entrySet()) {
Long taskId = entry.getKey(); Long taskId = entry.getKey();
List<AlarmDeviceTaskDO> deviceList = entry.getValue(); List<AlarmDeviceTaskDTO> deviceList = entry.getValue();
List<Integer> sensorIds = deviceList.stream().map(AlarmDeviceTaskDO::getDeviceId).collect(Collectors.toList()); List<Integer> sensorIds = deviceList.stream().map(AlarmDeviceTaskDTO::getBeidouId).collect(Collectors.toList());
//根据taskId获取sendTime //根据taskId获取sendTime
Date sendTime = taskDOMap.get(taskId); Date sendTime = taskDOMap.get(taskId);
List<AlarmTaskResult> sensorTaskResultList = sensorTaskService.getSensorTaskResult(taskId.intValue(), sendTime.getTime() + 5 * 60 * 1000, sensorIds); List<AlarmTaskResult> sensorTaskResultList = sensorTaskService.getSensorTaskResult(taskId.intValue(), sendTime.getTime() + 5 * 60 * 1000, sensorIds);
@ -68,7 +69,8 @@ public class AlarmStatusTask {
)); ));
deviceList.forEach(alarmDeviceTaskDO -> { deviceList.forEach(alarmDeviceTaskDO -> {
String uk = String.format("%s-%s-%s", alarmDeviceTaskDO.getTaskId(), alarmDeviceTaskDO.getDeviceId(), alarmDeviceTaskDO.getControlChannel()); String uk = String.format("%s-%s-%s", alarmDeviceTaskDO.getTaskId(), alarmDeviceTaskDO.getBeidouId(), alarmDeviceTaskDO.getControlChannel());
log.info("uk:[{}]", uk);
if (!sensorResultMap.containsKey(uk)) { if (!sensorResultMap.containsKey(uk)) {
return; return;
} }
@ -78,9 +80,11 @@ public class AlarmStatusTask {
}); });
} }
List<AlarmDeviceTaskDO> taskDOList = deviceTaskList.stream().map(s -> (AlarmDeviceTaskDO)s).toList();
// 结果入库 // 结果入库
alarmDeviceTaskMapper.batchUpdate(deviceTaskList); alarmDeviceTaskMapper.batchUpdate(taskDOList);
// 刷新设备状态 // 刷新设备状态
deviceService.refreshDeviceAlarmStatus(deviceTaskList); deviceService.refreshDeviceAlarmStatus(taskDOList);
} }
} }

View File

@ -10,6 +10,9 @@
<result property="status" column="status" jdbcType="INTEGER"/> <result property="status" column="status" jdbcType="INTEGER"/>
<result property="reportTime" column="report_time" jdbcType="TIMESTAMP"/> <result property="reportTime" column="report_time" jdbcType="TIMESTAMP"/>
</resultMap> </resultMap>
<resultMap id="alarm_device_task_dto" type="com.zjyr.beidouservice.pojo.dto.task.AlarmDeviceTaskDTO" extends="alarm_device_task">
<result property="beidouId" column="beidou_id" jdbcType="INTEGER"/>
</resultMap>
<insert id="addAlarmDevTaskInfoList" useGeneratedKeys="true" keyProperty="id" <insert id="addAlarmDevTaskInfoList" useGeneratedKeys="true" keyProperty="id"
@ -21,11 +24,11 @@
</foreach> </foreach>
</insert> </insert>
<select id="getAlarmTaskByStatus" resultType="com.zjyr.beidouservice.pojo.dataobject.AlarmDeviceTaskDO" <select id="getAlarmTaskByStatus"
parameterType="java.lang.Integer" resultMap="alarm_device_task"> parameterType="java.lang.Integer" resultMap="alarm_device_task_dto">
select * select adt.*, d.beidou_id
from alarm_device_task from alarm_device_task adt join device d on adt.device_id = d.device_id
where status = #{status} where adt.status = #{status}
</select> </select>
<update id="batchUpdate"> <update id="batchUpdate">