| | |
| | | if (createVO.getTransferTime() != null) { |
| | | task.setPlannedStartTime(createVO.getTransferTime()); |
| | | } |
| | | if (createVO.getTransferDistance() != null) { |
| | | task.setEstimatedDistance(createVO.getTransferDistance()); |
| | | if (createVO.getDistance() != null) { |
| | | task.setEstimatedDistance(createVO.getDistance()); |
| | | } |
| | | if (createVO.getPlannedStartTime() != null) { |
| | | task.setPlannedStartTime(createVO.getPlannedStartTime()); |
| | |
| | | @Override |
| | | @Transactional |
| | | public int updateSysTask(TaskUpdateVO updateVO, Boolean updateFromLegacy) { |
| | | SysTask oldTask = sysTaskMapper.selectSysTaskByTaskId(updateVO.getTaskId()); |
| | | if (oldTask == null) { |
| | | SysTask task = sysTaskMapper.selectSysTaskByTaskId(updateVO.getTaskId()); |
| | | if (task == null) { |
| | | throw new RuntimeException("任务不存在"); |
| | | } |
| | | Long userId = SecurityUtils.getUserId(); |
| | | String userName = SecurityUtils.getUsername(); |
| | | |
| | | SysTask task = new SysTask(); |
| | | |
| | | task.setTaskId(updateVO.getTaskId()); |
| | | task.setTaskDescription(updateVO.getTaskDescription()); |
| | | task.setPlannedStartTime(updateVO.getPlannedStartTime()); |
| | |
| | | |
| | | |
| | | |
| | | // 设置通用地址和坐标信息 |
| | | task.setDepartureAddress(updateVO.getDepartureAddress()); |
| | | task.setDestinationAddress(updateVO.getDestinationAddress()); |
| | | task.setDepartureLongitude(updateVO.getDepartureLongitude()); |
| | | task.setDepartureLatitude(updateVO.getDepartureLatitude()); |
| | | task.setDestinationLongitude(updateVO.getDestinationLongitude()); |
| | | task.setDestinationLatitude(updateVO.getDestinationLatitude()); |
| | | |
| | | |
| | | // 设置预计距离 |
| | | if (updateVO.getEstimatedDistance() != null) { |
| | | task.setEstimatedDistance(updateVO.getEstimatedDistance()); |
| | | } else if (updateVO.getTransferDistance() != null) { |
| | | // 兼容急救转运字段 |
| | | task.setEstimatedDistance(updateVO.getTransferDistance()); |
| | | } else if (updateVO.getDistance() != null) { |
| | | // 兼容福祉车字段 |
| | | // 兼容急救转运字段 |
| | | task.setEstimatedDistance(updateVO.getDistance()); |
| | | } |
| | | |
| | | // 如果更新了部门ID |
| | | if (updateVO.getDeptId() != null) { |
| | | task.setDeptId(updateVO.getDeptId()); |
| | | }else{ |
| | | task.setDeptId(oldTask.getDeptId()); |
| | | } |
| | | |
| | | // 如果更新了任务编号 |
| | | if (updateVO.getTaskCode() != null) { |
| | | task.setTaskCode(updateVO.getTaskCode()); |
| | | } |
| | | Boolean hasSetDepartureFlag=false; |
| | | //设置总部推送 |
| | | task.setIsHeadPush(this.isTaskHeaderPush(oldTask.getCreatorId(), task.getDeptId())?"1":"0"); |
| | | task.setIsHeadPush(this.isTaskHeaderPush(task.getCreatorId(), task.getDeptId())?"1":"0"); |
| | | // 自动获取出发地GPS坐标(如果更新了地址但缺失坐标) |
| | | if (updateVO.getDepartureAddress() != null && |
| | | (updateVO.getDepartureLongitude() == null || updateVO.getDepartureLatitude() == null) && |
| | | mapService != null) { |
| | | if (!updateVO.getDepartureAddress().equals(oldTask.getDepartureAddress())) { |
| | | if (!updateVO.getDepartureAddress().equals(task.getDepartureAddress())) { |
| | | try { |
| | | Map<String, Double> coords = mapService.geocoding( |
| | | updateVO.getDepartureAddress(), |
| | |
| | | if (coords != null) { |
| | | task.setDepartureLongitude(BigDecimal.valueOf(coords.get("lng"))); |
| | | task.setDepartureLatitude(BigDecimal.valueOf(coords.get("lat"))); |
| | | hasSetDepartureFlag = true; |
| | | // log.info("出发地GPS坐标自动获取成功: {}, {}", coords.get("lng"), coords.get("lat")); |
| | | } |
| | | } catch (Exception e) { |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 设置通用地址和坐标信息 |
| | | task.setDepartureAddress(updateVO.getDepartureAddress()); |
| | | if(!hasSetDepartureFlag) { |
| | | |
| | | task.setDepartureLongitude(updateVO.getDepartureLongitude()); |
| | | task.setDepartureLatitude(updateVO.getDepartureLatitude()); |
| | | } |
| | | |
| | | Boolean hasSetDestinationFlag=false; |
| | | // 自动获取目的地GPS坐标(如果更新了地址但缺失坐标) |
| | | if (updateVO.getDestinationAddress() != null && |
| | | (updateVO.getDestinationLongitude() == null || updateVO.getDestinationLatitude() == null) && |
| | | mapService != null) { |
| | | if (!updateVO.getDestinationAddress().equals(oldTask.getDestinationAddress())) { |
| | | if (!updateVO.getDestinationAddress().equals(task.getDestinationAddress())) { |
| | | try { |
| | | Map<String, Double> coords = mapService.geocoding( |
| | | updateVO.getDestinationAddress(), |
| | |
| | | if (coords != null) { |
| | | task.setDestinationLongitude(BigDecimal.valueOf(coords.get("lng"))); |
| | | task.setDestinationLatitude(BigDecimal.valueOf(coords.get("lat"))); |
| | | hasSetDestinationFlag = true; |
| | | // log.info("目的地GPS坐标自动获取成功: {}, {}", coords.get("lng"), coords.get("lat")); |
| | | } |
| | | } catch (Exception e) { |
| | |
| | | } |
| | | } |
| | | } |
| | | task.setDestinationAddress(updateVO.getDestinationAddress()); |
| | | if(!hasSetDestinationFlag) { |
| | | task.setDestinationLongitude(updateVO.getDestinationLongitude()); |
| | | task.setDestinationLatitude(updateVO.getDestinationLatitude()); |
| | | } |
| | | |
| | | if(updateVO.getAssignees()!=null && !updateVO.getAssignees().isEmpty()){ |
| | | TaskCreateVO.AssigneeInfo assigneeInfo= updateVO.getAssignees().get(0); |
| | | task.setAssigneeId(assigneeInfo.getUserId()); |
| | |
| | | needResync = true; |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | // 更新执行人员(检测人员变更) |
| | | if (result > 0 && updateVO.getAssignees() != null) { |
| | | boolean assigneesChanged = sysTaskAssigneeService.updateTaskAssignees( |
| | |
| | | } |
| | | Long dispatchOrderId=0L; |
| | | // 更新急救转运扩展信息(检测地址和成交价变更) |
| | | if (result > 0 && "EMERGENCY_TRANSFER".equals(oldTask.getTaskType())) { |
| | | if (result > 0 && "EMERGENCY_TRANSFER".equals(task.getTaskType())) { |
| | | SysTaskEmergency oldEmergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(updateVO.getTaskId()); |
| | | sysEmergencyTaskService.updateEmergencyInfoFromUpdateVO(oldEmergency, updateVO, userName); |
| | | dispatchOrderId= oldEmergency.getLegacyDispatchOrdId(); |
| | | sysEmergencyTaskService.markNeedResyncIfNecessary(updateVO.getTaskId(), oldTask, updateVO, updateFromLegacy); |
| | | |
| | | markNeedSync(task,updateVO); |
| | | } |
| | | |
| | | // 更新福祉车扩展信息 |
| | | if (result > 0 && "WELFARE".equals(oldTask.getTaskType())) { |
| | | if (result > 0 && "WELFARE".equals(task.getTaskType())) { |
| | | if (updateVO.getPassenger() != null || updateVO.getStartAddress() != null || updateVO.getEndAddress() != null) { |
| | | sysWelfareTaskService.updateWelfareInfo(updateVO.getTaskId(), updateVO, userName); |
| | | } |
| | | } |
| | | |
| | | // 如果是急救转运任务且有变更,标记需要重新同步 |
| | | if (result > 0 && "EMERGENCY_TRANSFER".equals(oldTask.getTaskType()) && needResync && !updateFromLegacy) { |
| | | sysEmergencyTaskService.markNeedResyncIfNecessary(updateVO.getTaskId(), oldTask, updateVO, updateFromLegacy); |
| | | } |
| | | |
| | | |
| | | // 记录操作日志 |
| | | if (result > 0) { |
| | | recordTaskLog(updateVO.getTaskId(), "UPDATE", "更新任务", |
| | | buildTaskDescription(oldTask), buildTaskDescription(task), |
| | | buildTaskDescription(task), buildTaskDescription(task), |
| | | userId, userName); |
| | | } |
| | | |
| | | if(result > 0 && oldTask.getTaskStatus().equals(TaskStatus.PENDING.getCode()) |
| | | if(result > 0 && task.getTaskStatus().equals(TaskStatus.PENDING.getCode()) |
| | | && updateVO.getAssignees() != null |
| | | && !updateVO.getAssignees().isEmpty() |
| | | && LongUtil.isNotEmpty(dispatchOrderId)){ |
| | | |
| | | this.sendTaskAssigneeEvent(updateVO,oldTask,userId,userName); |
| | | this.sendTaskAssigneeEvent(updateVO,task,userId,userName); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | |
| | | |
| | | private void markNeedSync(SysTask sysTask,TaskUpdateVO updateVO){ |
| | | // 如果是急救转运任务且有变更,标记需要重新同步 |
| | | if ( "EMERGENCY_TRANSFER".equals(sysTask.getTaskType()) ) { |
| | | |
| | | sysEmergencyTaskService.markNeedResyncIfNecessary(updateVO.getTaskId(), sysTask, updateVO, true); |
| | | |
| | | eventPublisher.publishEvent(new TaskUpdateEvent(this,sysTask.getTaskId(), |
| | | sysTask.getTaskCode(),sysTask.getTaskType())); |
| | | } |
| | | } |
| | | /** |
| | | * 更新任务(用于旧系统同步) |
| | | * |
| | |
| | | } |
| | | taskEmergency.setUpdateTime(DateUtils.getNowDate()); |
| | | |
| | | Boolean hasEmergencyInfo = updateVO.getHospitalOut() != null || updateVO.getHospitalIn() != null || updateVO.getPatient() != null; |
| | | Boolean hasEmergencyInfo = updateVO.getHospitalOut() != null || updateVO.getHospitalIn() != null || updateVO.getPatient() != null |
| | | || updateVO.getPrice() != null || updateVO.getDistance() != null; |
| | | |
| | | |
| | | // 使用TaskCreateVO的字段来更新急救转运信息 |
| | |
| | | if (createVO.getTransferTime() != null) { |
| | | task.setPlannedStartTime(createVO.getTransferTime()); |
| | | } |
| | | if (createVO.getTransferDistance() != null) { |
| | | task.setEstimatedDistance(createVO.getTransferDistance()); |
| | | if (createVO.getDistance() != null) { |
| | | task.setEstimatedDistance(createVO.getDistance()); |
| | | } |
| | | |
| | | // 设置福祉车特定信息 |