Xiajijian
2026-03-16 0ab71d4f9154dc2a0306ea57ec08659f4e28e449
ard-route/src/main/java/com/ard/route/service/impl/ArdRouteMissionServiceImpl.java
@@ -3,18 +3,24 @@
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.getUserId;
/**
@@ -32,6 +38,9 @@
    @Autowired
    private ArdRoutePointMapper ardRoutePointMapper;
    @Autowired
    private SysUserMapper sysUserMapper;
    /**
     * 查询航线任务
@@ -77,11 +86,12 @@
        ardRouteMission.setExecuteStatus("0");
        ardRouteMission.setIsRead("0");
        ardRouteMission.setCreateTime(DateUtils.getNowDate());
        ardRouteMission.setIssuerTime(DateUtils.getNowDate());
        ardRouteMission.setIssuerName(getUserName(ardRouteMission.getIssuerId()));
        dataProcessingRoutePoint(ardRouteMission.getMissionDetailList(),ardRouteMission.getId());
        Long userId = ardRouteMission.getIssuerId().longValue();
        try {
            log.debug("给用户{}定时推送,航线任务信息", ardRouteMission.getIssuerName());
            MiWebSocketUtils.sendMessage(userId,JSON.toJSONString(ardRouteMission));
            MiWebSocketUtils.sendMessage(ardRouteMission.getIssuerId(),JSON.toJSONString(ardRouteMission));
        } catch (Exception e) {
            log.error("Error sending message to session {}", ardRouteMission.getIssuerName(), e);
        }
@@ -96,12 +106,20 @@
     */
    @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();
    }
    /**
@@ -122,9 +140,25 @@
     */
    @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() + "】,无法执行操作!");
            }
        }
    }
    /**
@@ -135,6 +169,10 @@
     */
    @Override
    public int deleteArdRouteMissionById(String id) {
        ArdRouteMission ardRouteMission = ardRouteMissionMapper.selectArdRouteMissionById(id);
        if (ardRouteMission != null){
            validateForCreate(ardRouteMission,"1");
        }
        ardRoutePointMapper.deleteArdRoutePointByMissionId(id);
        return ardRouteMissionMapper.deleteArdRouteMissionById(id);
    }
@@ -160,13 +198,50 @@
    /**
     * 批量修改航线任务已读状态
     *
     * @param ids 主键集合
     * @param isRead 已读状态
     * @param updateMission 批量修改已读类型实体
     * @return 结果
     */
    @Override
    public int updateIsRead(String[] ids, String isRead) {
        return ardRouteMissionMapper.updateIsRead(ids,isRead);
    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;
    }
}