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.stereotype.Service; import com.ard.route.mapper.ArdRouteMissionMapper; import com.ard.route.service.IArdRouteMissionService; import static com.ard.common.utils.SecurityUtils.getUserId; /** * 航线任务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); } /** * 修改航线任务 * * @param ardRouteMission 航线任务 * @return 结果 */ @Override public int updateArdRouteMission(ArdRouteMission ardRouteMission) { validateForCreate(ardRouteMission,"2"); 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) { // 删除航线任务时只能删除自己的航线任务 for (String id : ids) { ArdRouteMission ardRouteMission = ardRouteMissionMapper.selectArdRouteMissionById(id); validateForCreate(ardRouteMission,"1"); } // 删除航线任务航点 ardRoutePointMapper.deleteArdRoutePointByMissionId(ids[0]); return ardRouteMissionMapper.deleteArdRouteMissionByIds(ids); } // 验证,只有当前用户是下发人才能删除修改 private void validateForCreate(ArdRouteMission mission,String type) { if (!mission.getIssuerId().equals(getUserId())){ if ("1".equals(type)){ throw new RuntimeException("只能删除下发自己的航线任务信息【" + mission.getMissionName() + "】,无法执行操作!"); }else if ("2".equals(type)){ throw new RuntimeException("只能修改下发自己的航线任务信息【" + mission.getMissionName() + "】,无法执行操作!"); } } } /** * 删除航线任务信息 * * @param id 航线任务主键 * @return 结果 */ @Override public int deleteArdRouteMissionById(String id) { ArdRouteMission ardRouteMission = ardRouteMissionMapper.selectArdRouteMissionById(id); if (ardRouteMission != null){ validateForCreate(ardRouteMission,"1"); } 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); } /** * 校验航线任务是否可以创建航线 * * @param missionId 航线任务ID * @return 结果 */ @Override public Boolean selectRouteMissionNot(String missionId) { ArdRouteMission mission = ardRouteMissionMapper.selectArdRouteMissionById(missionId); if (mission != null){ throw new RuntimeException("创建航线,只能创建下发自己的航线任务信息【" + mission.getMissionName() + "】,无法执行操作!"); } return true; } }