wlzboy
2025-12-26 c10b1e130ccbc94e6481a43e8e2d35cfc8fcf83b
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java
@@ -252,24 +252,29 @@
     * @return 结果
     */
    @Override
    @Transactional
    public int insertSysTask(TaskCreateVO createVO) {
    // 获取当前用户名和用户ID
        String username = SecurityUtils.getUsername();
        Long userId = SecurityUtils.getUserId();
    // 校验用户ID是否为空或为0
        if(userId==null || userId==0){
            log.error("insertSysTask 用户ID为空 userName:{}",username);
            return 0;
        }
        SysTask task = new SysTask();
    // 创建新的任务对象
        task.setTaskCode(generateTaskCode());
        task.setTaskType(createVO.getTaskType());
        task.setTaskStatus(TaskStatus.PENDING.getCode());
        task.setTaskDescription(createVO.getTaskDescription());
        task.setPlannedStartTime(createVO.getPlannedStartTime());
        task.setPlannedEndTime(createVO.getPlannedEndTime());
        task.setAssigneeId(createVO.getAssigneeId());
    // 设置任务基本信息
        task.setTaskType(createVO.getTaskType()); // 生成任务编码
        task.setTaskStatus(TaskStatus.PENDING.getCode()); // 设置任务类型
        task.setTaskDescription(createVO.getTaskDescription()); // 设置任务状态为待处理
        task.setPlannedStartTime(createVO.getPlannedStartTime()); // 设置任务描述
        task.setPlannedEndTime(createVO.getPlannedEndTime()); // 设置计划开始时间
        task.setAssigneeId(createVO.getAssigneeId()); // 设置计划结束时间
 // 设置指派人ID
        task.setCreatorId(userId);
    // 设置创建人信息
        // 优先使用前端传入的部门ID,如果没有则使用当前用户的部门ID
        task.setDeptId(createVO.getDeptId() != null ? createVO.getDeptId() : SecurityUtils.getDeptId());
        task.setCreateBy(username);
@@ -388,8 +393,8 @@
        if (createVO.getTransferTime() != null) {
            task.setPlannedStartTime(createVO.getTransferTime());
        }
        if (createVO.getDistance() != null) {
            task.setEstimatedDistance(createVO.getDistance());
        if (createVO.getTransferDistance() != null) {
            task.setEstimatedDistance(createVO.getTransferDistance());
        }
        if (createVO.getPlannedStartTime() != null) {
            task.setPlannedStartTime(createVO.getPlannedStartTime());
@@ -400,9 +405,7 @@
        if (createVO.getEndAddress() != null) {
            task.setDestinationAddress(createVO.getEndAddress());
        }
        if (createVO.getDistance() != null) {
            task.setEstimatedDistance(createVO.getDistance());
        }
        // 自动填充缺失的GPS坐标
        autoFillMissingGpsCoordinates(task);
        
@@ -503,11 +506,8 @@
        
        // 设置预计距离
        if (updateVO.getEstimatedDistance() != null) {
            task.setEstimatedDistance(updateVO.getEstimatedDistance());
        } else if (updateVO.getDistance() != null) {
            // 兼容急救转运字段
            task.setEstimatedDistance(updateVO.getDistance());
        if (updateVO.getTransferDistance() != null) {
            task.setEstimatedDistance(updateVO.getTransferDistance());
        }
        
        // 如果更新了部门ID
@@ -812,7 +812,7 @@
            taskEmergency.setUpdateTime(DateUtils.getNowDate());
            Boolean hasEmergencyInfo = updateVO.getHospitalOut() != null || updateVO.getHospitalIn() != null || updateVO.getPatient() != null
                    || updateVO.getPrice() != null || updateVO.getDistance() != null;
                    || updateVO.getPrice() != null || updateVO.getTransferDistance() != null;
//            Boolean isHeadPush=isTaskHeaderPush(task.getCreatorId(),task.getDeptId());
//            updateVO.setFromHQ2_is(isHeadPush?"1":"0");
@@ -1013,6 +1013,71 @@
        }
        
        return result;
    }
    /**
     * 保存任务取消信息(仅限转运任务)
     *
     * @param taskId 任务ID
     * @param cancelReason 取消原因(数据字典task_cancel_reason的value)
     * @return 结果
     */
    @Override
    public int saveCancelInfo(Long taskId, String cancelReason) {
        // 获取任务信息
        SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId);
        if (task == null) {
            throw new RuntimeException("任务不存在");
        }
        // 只有转运任务才保存取消信息
        if (!"EMERGENCY_TRANSFER".equals(task.getTaskType())) {
            return 0;
        }
        // 获取转运任务扩展信息
        SysTaskEmergency emergency = sysEmergencyTaskService.selectSysTaskEmergencyByTaskId(taskId);
        if (emergency == null) {
            return 0;
        }
        // 设置取消信息
        emergency.setCancelReason(cancelReason);
        emergency.setCancelBy(SecurityUtils.getNickName());
        emergency.setCancelTime(DateUtils.getNowDate());
        emergency.setUpdateBy(SecurityUtils.getUsername());
        emergency.setUpdateTime(DateUtils.getNowDate());
        // 更新数据库
        return sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
    }
    @Override
    public int saveCancel(Long taskId, String cancelReason, String cancelBy,Date cancelTime) {
        SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId);
        if (task == null) {
            throw new RuntimeException("任务不存在");
        }
        // 只有转运任务才保存取消信息
        if (!"EMERGENCY_TRANSFER".equals(task.getTaskType())) {
            return 0;
        }
        // 获取转运任务扩展信息
        SysTaskEmergency emergency = sysEmergencyTaskService.selectSysTaskEmergencyByTaskId(taskId);
        if (emergency == null) {
            return 0;
        }
        // 设置取消信息
        emergency.setCancelReason(cancelReason);
        emergency.setCancelBy(cancelBy);
        emergency.setCancelTime(cancelTime);
        emergency.setUpdateTime(DateUtils.getNowDate());
        // 更新数据库
        return sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
    }
    /**
@@ -1420,8 +1485,8 @@
        if (createVO.getDestinationLatitude() != null) {
            task.setDestinationLatitude(createVO.getDestinationLatitude());
        }
        if (createVO.getEstimatedDistance() != null) {
            task.setEstimatedDistance(createVO.getEstimatedDistance());
        if (createVO.getTransferDistance() != null) {
            task.setEstimatedDistance(createVO.getTransferDistance());
        }
    }
@@ -1436,8 +1501,8 @@
        if (createVO.getTransferTime() != null) {
            task.setPlannedStartTime(createVO.getTransferTime());
        }
        if (createVO.getDistance() != null) {
            task.setEstimatedDistance(createVO.getDistance());
        if (createVO.getTransferDistance() != null) {
            task.setEstimatedDistance(createVO.getTransferDistance());
        }
        
        // 设置福祉车特定信息
@@ -1450,9 +1515,7 @@
        if (createVO.getEndAddress() != null) {
            task.setDestinationAddress(createVO.getEndAddress());
        }
        if (createVO.getDistance() != null) {
            task.setEstimatedDistance(createVO.getDistance());
        }
    }
    /**
@@ -1654,5 +1717,20 @@
    public AjaxResult cancelAssigneeReady(Long taskId, Long userId) {
        return sysTaskAssigneeService.cancelAssigneeReady(taskId, userId);
    }
    /**
     * 检查任务是否重复(根据联系人电话和创建日期)
     *
     * @param phone 联系人电话
     * @param createDate 任务创建日期(格式:YYYY-MM-DD)
     * @return true-存在重复,false-不重复
     */
    @Override
    public boolean checkTaskDuplicate(String phone, String createDate) {
        int count = sysTaskMapper.countTaskByPhoneAndDate(phone, createDate);
        return count > 0;
    }
   
}