| | |
| | | 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.MissionNot; |
| | | 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.getUsername; |
| | | import static com.ard.common.utils.SecurityUtils.getUserId; |
| | | |
| | | |
| | | /** |
| | | * 航线任务Service业务层处理 |
| | |
| | | * @date 2026-01-20 |
| | | */ |
| | | @Service |
| | | @Slf4j |
| | | public class ArdRouteMissionServiceImpl implements IArdRouteMissionService { |
| | | |
| | | @Autowired |
| | |
| | | |
| | | @Autowired |
| | | private ArdRoutePointMapper ardRoutePointMapper; |
| | | |
| | | @Autowired |
| | | private SysUserMapper sysUserMapper; |
| | | |
| | | /** |
| | | * 查询航线任务 |
| | |
| | | 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); |
| | | } |
| | | |
| | |
| | | */ |
| | | @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(); |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | @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() + "】,无法执行操作!"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | @Override |
| | | public int deleteArdRouteMissionById(String id) { |
| | | ArdRouteMission ardRouteMission = ardRouteMissionMapper.selectArdRouteMissionById(id); |
| | | if (ardRouteMission != null){ |
| | | validateForCreate(ardRouteMission,"1"); |
| | | } |
| | | ardRoutePointMapper.deleteArdRoutePointByMissionId(id); |
| | | return ardRouteMissionMapper.deleteArdRouteMissionById(id); |
| | | } |
| | |
| | | ArdRouteMission ardRouteMission = new ArdRouteMission(); |
| | | ardRouteMission.setId(id); |
| | | ardRouteMission.setExecuteStatus(status); |
| | | ardRouteMission.setExecuteBy(getUsername()); |
| | | 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 id ID |
| | | * @return 结果 |
| | | */ |
| | | @Override |
| | | public MissionNot selectRouteMissionNot(String id) { |
| | | // 1. 初始化返回对象,默认允许操作 |
| | | MissionNot missionNot = new MissionNot(); |
| | | missionNot.setIsNot(true); |
| | | |
| | | // 2. 根据ID查询航线任务 |
| | | ArdRouteMission mission = ardRouteMissionMapper.selectArdRouteMissionById(id); |
| | | |
| | | // 3. 空值快速返回(任务不存在则无需校验,直接允许操作) |
| | | if (mission == null) { |
| | | return missionNot; |
| | | } |
| | | |
| | | // 4. 校验任务创建者是否为当前用户 |
| | | // 增加空指针防护:避免issuerId为null导致空指针异常 |
| | | if (mission.getIssuerId() == null || !mission.getIssuerId().equals(getUserId())) { |
| | | String errorMsg = String.format("创建航线,只能创建下发自己的航线任务信息【%s】,无法执行操作!", |
| | | mission.getMissionName()); |
| | | missionNot.setInformation(errorMsg); |
| | | missionNot.setIsNot(false); |
| | | } |
| | | |
| | | // 5. 统一返回结果 |
| | | return missionNot; |
| | | } |
| | | |
| | | } |