package com.ard.route.service.impl; import java.util.List; import com.alibaba.fastjson2.JSON; import com.ard.common.core.domain.entity.SysUser; import com.ard.common.utils.DateUtils; import com.ard.common.utils.SecurityUtils; import com.ard.common.utils.uuid.IdUtils; import com.ard.route.domain.route.ArdRouteMission; import com.ard.route.domain.route.ArdRoutePoint; import com.ard.route.domain.route.UpdateMission; import com.ard.route.mapper.ArdRoutePointMapper; import com.ard.route.websocket.utils.MiWebSocketUtils; import com.ard.system.mapper.SysUserMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import com.ard.route.mapper.ArdRouteMissionMapper; import com.ard.route.service.IArdRouteMissionService; /** * 航线任务Service业务层处理 * * @author xia * @date 2026-01-20 */ @Service @Slf4j public class ArdRouteMissionServiceImpl implements IArdRouteMissionService { @Autowired private ArdRouteMissionMapper ardRouteMissionMapper; @Autowired private ArdRoutePointMapper ardRoutePointMapper; @Autowired private SysUserMapper sysUserMapper; /** * 查询航线任务 * * @param id 航线任务主键 * @return 航线任务 */ @Override public ArdRouteMission selectArdRouteMissionById(String id) { ArdRouteMission ardRouteMission = ardRouteMissionMapper.selectArdRouteMissionById(id); ardRouteMission.setMissionDetailList(getMissionDetailList(id)); return ardRouteMission; } /** * 查询航线任务列表 * * @param ardRouteMission 航线任务 * @return 航线任务 */ @Override public List selectArdRouteMissionList(ArdRouteMission ardRouteMission) { List list = ardRouteMissionMapper.selectArdRouteMissionList(ardRouteMission); for (ArdRouteMission routeMission : list) { routeMission.setMissionDetailList(getMissionDetailList(routeMission.getId())); } return list; } private List getMissionDetailList(String missionId) { return ardRoutePointMapper.selectArdRoutePointByMissionId(missionId); } /** * 新增航线任务 * * @param ardRouteMission 航线任务 * @return 结果 */ @Override public int insertArdRouteMission(ArdRouteMission ardRouteMission) { ardRouteMission.setId(IdUtils.simpleUUID()); ardRouteMission.setExecuteStatus("0"); ardRouteMission.setIsRead("0"); ardRouteMission.setCreateTime(DateUtils.getNowDate()); ardRouteMission.setIssuerTime(DateUtils.getNowDate()); ardRouteMission.setIssuerName(getUserName(ardRouteMission.getIssuerId())); dataProcessingRoutePoint(ardRouteMission.getMissionDetailList(),ardRouteMission.getId()); try { log.debug("给用户{}定时推送,航线任务信息", ardRouteMission.getIssuerName()); MiWebSocketUtils.sendMessage(ardRouteMission.getIssuerId(),JSON.toJSONString(ardRouteMission)); } catch (Exception e) { log.error("Error sending message to session {}", ardRouteMission.getIssuerName(), e); } return ardRouteMissionMapper.insertArdRouteMission(ardRouteMission); } // /** // * 定时任务,定时发送新增航线任务消息 // */ // @Scheduled(fixedRate = 2000) // public void sendMissionMessage() { // ArdRouteMission ardRouteMission = new ArdRouteMission(); // ardRouteMission.setIsRead("0"); // // 获取所有未读的消息给 // List routeMissionLs = ardRouteMissionMapper.selectArdRouteMissionList(ardRouteMission); // for (ArdRouteMission routeMissionL : routeMissionLs) { // if (routeMissionL.getIssuerId() != null){ // List missionDetailList = ardRoutePointMapper.selectArdRoutePointByMissionId(routeMissionL.getId()); // routeMissionL.setMissionDetailList(missionDetailList); // MiWebSocketUtils.sendMessage(routeMissionL.getIssuerId(),JSON.toJSONString(routeMissionL)); // } // } // } /** * 修改航线任务 * * @param ardRouteMission 航线任务 * @return 结果 */ @Override public int updateArdRouteMission(ArdRouteMission ardRouteMission) { ardRouteMission.setUpdateTime(DateUtils.getNowDate()); ardRouteMission.setIssuerName(getUserName(ardRouteMission.getIssuerId())); // 删除航线任务航点 ardRoutePointMapper.deleteArdRoutePointByMissionId(ardRouteMission.getId()); // 重新插入航线任务航点 dataProcessingRoutePoint(ardRouteMission.getMissionDetailList(),ardRouteMission.getId()); return ardRouteMissionMapper.updateArdRouteMission(ardRouteMission); } // 获取用户名称 private String getUserName(Long userId) { SysUser sysUser = sysUserMapper.selectUserById(userId); return sysUser.getUserName(); } /** * 航线任务航点对象数据加工 */ private void dataProcessingRoutePoint(List missionDetailList,String missionId){ for (ArdRoutePoint missionDetail : missionDetailList) { missionDetail.setMissionId(missionId); } ardRoutePointMapper.insertArdRoutePointS(missionDetailList); } /** * 批量删除航线任务 * * @param ids 需要删除的航线任务主键 * @return 结果 */ @Override public int deleteArdRouteMissionByIds(String[] ids) { // 删除航线任务航点 ardRoutePointMapper.deleteArdRoutePointByMissionId(ids[0]); return ardRouteMissionMapper.deleteArdRouteMissionByIds(ids); } /** * 删除航线任务信息 * * @param id 航线任务主键 * @return 结果 */ @Override public int deleteArdRouteMissionById(String id) { ardRoutePointMapper.deleteArdRoutePointByMissionId(id); return ardRouteMissionMapper.deleteArdRouteMissionById(id); } /** * 修改航线任务状态 * * @param id 航线任务主键 * @param status 状态类型 * @return 结果 */ @Override public int updateArdRouteMissionStatus(String id, String status) { ArdRouteMission ardRouteMission = new ArdRouteMission(); ardRouteMission.setId(id); ardRouteMission.setExecuteStatus(status); ardRouteMission.setExecuteName(SecurityUtils.getUsername()); ardRouteMission.setExecuteTime(DateUtils.getNowDate()); ardRouteMission.setUpdateTime(DateUtils.getNowDate()); return ardRouteMissionMapper.updateArdRouteMission(ardRouteMission); } /** * 批量修改航线任务已读状态 * * @param updateMission 批量修改已读类型实体 * @return 结果 */ @Override public int updateIsRead(UpdateMission updateMission) { if (updateMission == null || updateMission.getIds() == null || updateMission.getIds().length == 0) { return 0; } String[] ids = updateMission.getIds(); String isRead = updateMission.getIsRead(); return ardRouteMissionMapper.updateIsRead(ids, isRead); } }