| | |
| | | import com.xiaopeng.maintenance.service.XpTaskService; |
| | | import com.xiaopeng.maintenance.utils.UUIDUtil; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.redisson.api.RLock; |
| | | import org.redisson.api.RedissonClient; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | import java.time.LocalTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.*; |
| | | import java.util.concurrent.TimeUnit; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | |
| | | */ |
| | | @Service |
| | | public class XpTaskServiceImpl extends ServiceImpl<XpTaskMapper, XpTask> implements XpTaskService { |
| | | |
| | | @Autowired |
| | | private RedissonClient redissonClient; |
| | | @Autowired |
| | | private XpErrorTypeMapper errorTypeMapper; |
| | | /** |
| | | * 常规任务类型映射 |
| | | */ |
| | | private static final Map<String, String> TASK_TYPE_MAP = new java.util.HashMap<>(); |
| | | |
| | | static { |
| | | TASK_TYPE_MAP.put("1", "车辆检查"); |
| | | TASK_TYPE_MAP.put("2", "车辆充电"); |
| | |
| | | private XpVehiclePreparationMapper vehiclePreparationMapper; |
| | | @Autowired |
| | | private XpVehicleDetectionMapper vehicleDetectionMapper; |
| | | @Autowired |
| | | private XpErrorTypeMapper errorTypeMapper; |
| | | |
| | | @Autowired |
| | | private XpVehicleCleanMapper vehicleCleanMapper; |
| | | @Autowired |
| | |
| | | private XpVehicleClient xpVehicleClient; |
| | | @Autowired |
| | | private XpTaskRuleMapper xpTaskRuleMapper; |
| | | |
| | | @Override |
| | | public PageInfo<WorkBenchVO> workbench(WorkBenchQuery query) { |
| | | PageInfo<WorkBenchVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); |
| | |
| | | } |
| | | |
| | | task.setHandleTime(LocalDateTime.now()); |
| | | task.setHandleUserId(xpOperationsUser.getId()); |
| | | task.setHandleUserId(xpOperationsUser.getId().toString()); |
| | | task.setStatus(2); |
| | | // 存储事故处理日志 |
| | | XpTaskHandleDetail xpTaskHandleDetail = new XpTaskHandleDetail(); |
| | |
| | | res.setTaskImage(task.getTaskImage()); |
| | | res.setHandleUserId(task.getHandleUserId()); |
| | | res.setHandleTime(task.getHandleTime()); |
| | | if (Objects.nonNull(task.getHandleUserId())) { |
| | | XpOperationsUser data = xpOperationUserClient.queryById(task.getHandleUserId()).getData(); |
| | | if (Objects.nonNull(task.getHandleUserId()) && task.getHandleUserId().split(",").length == 1) { |
| | | XpOperationsUser data = xpOperationUserClient.queryById(Long.valueOf(task.getHandleUserId())).getData(); |
| | | if (Objects.nonNull(data)) { |
| | | res.setHandleUserName(data.getNickName()); |
| | | } |
| | |
| | | @Override |
| | | public R<com.xiaopeng.maintenance.vo.TaskPreparationDetailVO> preparationDetail(Long id) { |
| | | com.xiaopeng.maintenance.vo.TaskPreparationDetailVO res = new com.xiaopeng.maintenance.vo.TaskPreparationDetailVO(); |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | XpTask task = this.getById(id); |
| | |
| | | } |
| | | |
| | | @Override |
| | | public R confirmArrive(Long id) { |
| | | XpTask task = this.getById(id); |
| | | if (task!=null){ |
| | | task.setStatus(1); |
| | | this.updateById(task); |
| | | public R confirmArrive(Long id, Long userId) { |
| | | RLock lock = redissonClient.getLock("TASK_CONFIRM_" + id); |
| | | |
| | | try { |
| | | // 尝试获取锁,最多等待3秒 |
| | | boolean isLocked = lock.tryLock(3, 10, TimeUnit.SECONDS); |
| | | if (!isLocked) { |
| | | return R.fail("系统繁忙,请稍后重试"); |
| | | } |
| | | |
| | | // 查询任务 |
| | | XpTask task = this.getById(id); |
| | | if (task == null) { |
| | | return R.fail("任务不存在"); |
| | | } |
| | | |
| | | // 检查任务状态 |
| | | if (task.getStatus() != 0) { |
| | | return R.fail("任务已被处理"); |
| | | } |
| | | |
| | | // 更新任务 |
| | | task.setStatus(1); |
| | | task.setHandleUserId(userId.toString()); |
| | | |
| | | this.updateById(task); |
| | | return R.ok(); |
| | | |
| | | } catch (InterruptedException e) { |
| | | Thread.currentThread().interrupt(); |
| | | return R.fail("操作被中断"); |
| | | } finally { |
| | | // 确保锁被释放 |
| | | if (lock.isHeldByCurrentThread()) { |
| | | lock.unlock(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | |
| | | public PageInfo<TaskManagementPageListVO> pageListManagement(TaskManagementPageListQuery query) { |
| | | PageInfo<TaskManagementPageListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); |
| | | List<TaskManagementPageListVO> list = this.baseMapper.pageListManagement(pageInfo, query); |
| | | for (TaskManagementPageListVO taskManagementPageListVO : list) { |
| | | if (taskManagementPageListVO.getTaskCategory() == 1) { |
| | | switch (taskManagementPageListVO.getTaskTypeId()) { |
| | | case "1": |
| | | taskManagementPageListVO.setTaskTypeName("车辆检查"); |
| | | break; |
| | | case "2": |
| | | taskManagementPageListVO.setTaskTypeName("车辆充电"); |
| | | break; |
| | | case "3": |
| | | taskManagementPageListVO.setTaskTypeName("车辆整备"); |
| | | break; |
| | | case "4": |
| | | taskManagementPageListVO.setTaskTypeName("整备洗车"); |
| | | break; |
| | | case "5": |
| | | taskManagementPageListVO.setTaskTypeName("车辆维修"); |
| | | break; |
| | | case "6": |
| | | taskManagementPageListVO.setTaskTypeName("车辆保养"); |
| | | break; |
| | | case "7": |
| | | taskManagementPageListVO.setTaskTypeName("车辆保险到期"); |
| | | break; |
| | | case "8": |
| | | taskManagementPageListVO.setTaskTypeName("车辆年检到期"); |
| | | break; |
| | | case "9": |
| | | taskManagementPageListVO.setTaskTypeName("车辆运营资质到期"); |
| | | break; |
| | | default: |
| | | taskManagementPageListVO.setTaskTypeName(""); |
| | | break; |
| | | } |
| | | }else{ |
| | | StringBuilder taskTypeName = new StringBuilder(); |
| | | String[] typeIds = taskManagementPageListVO.getTaskTypeId().split(","); |
| | | List<XpErrorType> xpErrorTypes = errorTypeMapper.selectList(new LambdaQueryWrapper<XpErrorType>() |
| | | .in(XpErrorType::getId, Arrays.asList(typeIds)).orderByAsc(XpErrorType::getParentId)); |
| | | List<XpErrorType> parents = new ArrayList<>(); |
| | | for (XpErrorType xpErrorType : xpErrorTypes) { |
| | | if (xpErrorType.getParentId() == 0) { |
| | | parents.add(xpErrorType); |
| | | } |
| | | } |
| | | for (XpErrorType parent : parents) { |
| | | List<XpErrorType> children = xpErrorTypes.stream().filter(e -> e.getParentId().equals(parent.getId())).collect(Collectors.toList()); |
| | | taskTypeName.append(parent.getErrorName()).append(">"); |
| | | for (XpErrorType child : children) { |
| | | taskTypeName.append(child.getErrorName()).append(";"); |
| | | } |
| | | } |
| | | |
| | | taskManagementPageListVO.setTaskTypeName(taskTypeName.substring(0, taskTypeName.length() - 1)); |
| | | } |
| | | } |
| | | pageInfo.setRecords(list); |
| | | return pageInfo; |
| | | } |
| | | |
| | | @Override |
| | | public List<TaskManagementPageListVO> exportList(TaskManagementPageListQuery query) { |
| | | List<TaskManagementPageListVO> list = this.baseMapper.exportList(query); |
| | |
| | | public R assigneeTask(Long id, Long handlerUserId,Long assigneeUserId) { |
| | | XpTask task = this.getById(id); |
| | | task.setAssigneeTime(LocalDateTime.now()); |
| | | task.setHandleUserId(handlerUserId); |
| | | task.setHandleUserId(handlerUserId.toString()); |
| | | task.setVehicleId(null); |
| | | task.setAssigneeUserId(assigneeUserId); |
| | | this.updateById(task); |
| | | return R.ok(); |
| | |
| | | res.setHandleUserId(task.getHandleUserId()); |
| | | XpOperationsUser operationsUser = xpOperationUserClient.queryById(xpTaskHandleDetailRoutine.getOperationsUserId()).getData(); |
| | | if (operationsUser != null){ |
| | | res.setHandleUserId(operationsUser.getId()); |
| | | res.setHandleUserId(operationsUser.getId().toString()); |
| | | res.setHandleUserName(operationsUser.getNickName()); |
| | | } |
| | | } |
| | |
| | | res.setReportUserPhone(sysUser.getPhoneNumber()); |
| | | res.setReportUserAvatar(sysUser.getAvatar()); |
| | | } |
| | | XpOperationsUser operationsUser = xpOperationUserClient.queryById(task.getHandleUserId()).getData(); |
| | | if (task.getHandleUserId().split(",").length == 1) { |
| | | XpOperationsUser operationsUser = xpOperationUserClient.queryById(Long.valueOf(task.getHandleUserId())).getData(); |
| | | if (operationsUser != null){ |
| | | res.setHandleUserId(operationsUser.getId()); |
| | | res.setHandleUserName(operationsUser.getNickName()); |
| | | res.setHandleUserPhone(operationsUser.getPhoneNumber()); |
| | | res.setHandleUserAvatar(operationsUser.getAvatar()); |
| | | } |
| | | } |
| | | XpTaskHandleDetail xpTaskHandleDetail = xpTaskHandleDetailMapper.selectOne(new LambdaQueryWrapper<XpTaskHandleDetail>() |
| | | .eq(XpTaskHandleDetail::getTaskId, id)); |
| | |
| | | } |
| | | return R.ok(managementDetailVO); |
| | | } |
| | | |
| | | |
| | | |
| | | } |