| | |
| | | package com.ycl.platform.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; |
| | | import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; |
| | |
| | | import com.ycl.platform.domain.vo.WorkOrderVO; |
| | | import com.ycl.platform.mapper.*; |
| | | import com.ycl.platform.service.NotifyService; |
| | | import com.ycl.platform.service.WorkOrderAuditingRecordService; |
| | | import com.ycl.platform.service.WorkOrderService; |
| | | import com.ycl.system.Result; |
| | | import com.ycl.system.model.LoginUser; |
| | |
| | | import com.ycl.utils.DateUtils; |
| | | import com.ycl.utils.SecurityUtils; |
| | | import com.ycl.utils.redis.RedisCache; |
| | | import enumeration.general.NotifyTypeEnum; |
| | | import enumeration.general.WorkOrderStatusEnum; |
| | | import enumeration.general.*; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.apache.commons.lang3.ArrayUtils; |
| | | import org.springframework.beans.BeanUtils; |
| | |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.time.ZoneId; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | import java.util.concurrent.TimeUnit; |
| | |
| | | private final YwUnitMapper ywUnitMapper; |
| | | private final YwPeopleMapper ywPeopleMapper; |
| | | private final WorkOrderAuditingRecordMapper workOrderAuditingRecordMapper; |
| | | private final WorkOrderAuditingRecordService workOrderAuditingRecordService; |
| | | private final WorkOrderYwConditionRecordMapper workOrderYwConditionRecordMapper; |
| | | private final NotifyService notifyService; |
| | | private final WorkOrderDistributeRecordMapper workOrderDistributeRecordMapper; |
| | |
| | | workOrderAuditingRecord.setRemark(form.getAuditingRemark()); |
| | | workOrderAuditingRecordMapper.insert(workOrderAuditingRecord); |
| | | // 添加新通知 |
| | | try { |
| | | Notify notify = new Notify(NotifyTypeEnum.WORK_ORDER, form.getAuditingResult().getDesc(), workOrder.getYwPeopleId(), "0", "0", workOrder.getId()); |
| | | notifyService.save(notify); |
| | | } catch (Exception e) { |
| | | return Result.error("审核成功,通知运维人员失败"); |
| | | Notify notify = Notify.genEntityByUnit(NotifyTypeEnum.WORK_ORDER, |
| | | form.getAuditingResult().getDesc(), |
| | | workOrder.getUnitId(), |
| | | UrgentLevelEnum.WARNING, |
| | | workOrder.getWorkOrderNo()); |
| | | notifyService.save(notify); |
| | | return Result.ok("操作成功"); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Result batchAuditing(WorkOrderBatchAuditingForm form) { |
| | | // 工单状态 |
| | | LambdaUpdateWrapper<WorkOrder> lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); |
| | | lambdaUpdateWrapper.in(WorkOrder::getId, form.getIds()); |
| | | lambdaUpdateWrapper.set(WorkOrder::getStatus, form.getAuditingResult()); |
| | | baseMapper.update(lambdaUpdateWrapper); |
| | | // 添加多条审核记录 |
| | | List<WorkOrderAuditingRecord> workOrderAuditingRecords = new ArrayList<>(); |
| | | for (Integer id : form.getIds()) { |
| | | WorkOrderAuditingRecord workOrderAuditingRecord = new WorkOrderAuditingRecord(); |
| | | workOrderAuditingRecord.setWorkOrderId(id); |
| | | workOrderAuditingRecord.setAuditingUser(SecurityUtils.getLoginUser().getUserId().intValue()); |
| | | workOrderAuditingRecord.setResult(form.getAuditingResult().getDesc()); |
| | | workOrderAuditingRecord.setRemark(form.getAuditingRemark()); |
| | | workOrderAuditingRecords.add(workOrderAuditingRecord); |
| | | } |
| | | workOrderAuditingRecordService.saveBatch(workOrderAuditingRecords); |
| | | // 添加新通知 |
| | | List<WorkOrder> list = new LambdaQueryChainWrapper<>(baseMapper).in(WorkOrder::getId, form.getIds()).select(WorkOrder::getUnitId, WorkOrder::getWorkOrderNo).list(); |
| | | List<Notify> notifies = new ArrayList<>(); |
| | | for (WorkOrder workOrder : list) { |
| | | Notify notify = Notify.genEntityByUnit(NotifyTypeEnum.WORK_ORDER, |
| | | form.getAuditingResult().getDesc(), |
| | | workOrder.getUnitId(), |
| | | UrgentLevelEnum.WARNING, |
| | | workOrder.getWorkOrderNo()); |
| | | notifies.add(notify); |
| | | } |
| | | notifyService.saveBatch(notifies); |
| | | return Result.ok("操作成功"); |
| | | } |
| | | |
| | |
| | | } |
| | | // 工单状态 |
| | | workOrder.setStatus(WorkOrderStatusEnum.YW_HANDLE); |
| | | workOrder.setYwHandleTime(LocalDateTime.now()); |
| | | baseMapper.updateById(workOrder); |
| | | // 添加一条运维情况记录 |
| | | WorkOrderYwConditionRecord workOrderYwConditionRecord = new WorkOrderYwConditionRecord(); |
| | |
| | | new LambdaQueryChainWrapper<>(workOrderYwConditionRecordMapper) |
| | | .eq(WorkOrderYwConditionRecord::getWorkOrderId, id) |
| | | .orderByAsc(WorkOrderYwConditionRecord::getCreateTime) |
| | | .last("limit 1") |
| | | .one()); |
| | | .list()); |
| | | } |
| | | |
| | | @Override |
| | |
| | | */ |
| | | @Override |
| | | public Result page(WorkOrderQuery query) { |
| | | IPage<WorkOrder> page = new LambdaQueryChainWrapper<>(baseMapper) |
| | | .eq(StringUtils.hasText(query.getWorkOrderNo()), WorkOrder::getWorkOrderNo, query.getWorkOrderNo()) |
| | | .eq(StringUtils.hasText(query.getStatus().getValue()), WorkOrder::getStatus, query.getStatus()) |
| | | .eq(StringUtils.hasText(query.getErrorType()), WorkOrder::getErrorType, query.getErrorType()) |
| | | .between(Objects.nonNull(query.getStart()) && Objects.nonNull(query.getEnd()), |
| | | WorkOrder::getYwHandleTime, |
| | | DateUtils.getDayStart(query.getStart()), |
| | | DateUtils.getDayEnd(query.getEnd())) |
| | | .orderByDesc(WorkOrder::getCreateTime) |
| | | .page(PageUtil.getPage(query, WorkOrder.class)); |
| | | |
| | | List<WorkOrderVO> vos = page.getRecords().stream() |
| | | .map( |
| | | entity -> { |
| | | WorkOrderVO vo = WorkOrderVO.getVoByEntity(entity, null); |
| | | YwUnit unit = ywUnitMapper.selectById(vo.getUnitId()); |
| | | if (Objects.nonNull(unit)) { |
| | | vo.setUnitName(unit.getUnitName()); |
| | | } |
| | | YwPeople ywPeople = ywPeopleMapper.selectById(vo.getYwPeopleId()); |
| | | if (Objects.nonNull(ywPeople)) { |
| | | vo.setYwPeopleName(ywPeople.getYwPersonName()); |
| | | } |
| | | return vo; |
| | | } |
| | | ) |
| | | .collect(Collectors.toList()); |
| | | return Result.ok().data(vos).total(page.getTotal()); |
| | | IPage<WorkOrderVO> page = PageUtil.getPage(query, WorkOrderVO.class); |
| | | baseMapper.page(page, query); |
| | | return Result.ok().data(page.getRecords()).total(page.getTotal()); |
| | | } |
| | | |
| | | @Override |
| | | public Result distributePage(DistributeWorkOrderQuery query) { |
| | | IPage<WorkOrder> page = new LambdaQueryChainWrapper<>(baseMapper) |
| | | .eq(Objects.nonNull(query.getUnitId()), WorkOrder::getUnitId, query.getUnitId()) |
| | | .eq(WorkOrder::getStatus, WorkOrderStatusEnum.WAIT_DISTRIBUTE) |
| | | .orderByDesc(WorkOrder::getCreateTime) |
| | | .page(PageUtil.getPage(query, WorkOrder.class)); |
| | | List<WorkOrderVO> vos = page.getRecords().stream() |
| | | .map( |
| | | entity -> { |
| | | WorkOrderVO vo = WorkOrderVO.getVoByEntity(entity, null); |
| | | YwUnit unit = ywUnitMapper.selectById(vo.getUnitId()); |
| | | if (Objects.nonNull(unit)) { |
| | | vo.setUnitName(unit.getUnitName()); |
| | | } |
| | | YwPeople ywPeople = ywPeopleMapper.selectById(vo.getYwPeopleId()); |
| | | if (Objects.nonNull(ywPeople)) { |
| | | vo.setYwPeopleName(ywPeople.getYwPersonName()); |
| | | } |
| | | return vo; |
| | | } |
| | | ) |
| | | .collect(Collectors.toList()); |
| | | return Result.ok().data(vos).total(page.getTotal()); |
| | | IPage<WorkOrderVO> page = PageUtil.getPage(query, WorkOrderVO.class); |
| | | baseMapper.distributePage(page, query); |
| | | return Result.ok().data(page).total(page.getTotal()); |
| | | } |
| | | |
| | | @Override |
| | |
| | | return Result.error("没有符合条件的工单"); |
| | | } |
| | | if (!getDistributeLock()) { |
| | | return Result.error("工单下发中,请稍后重试"); |
| | | return Result.error("此刻有人下发中,为避免冲突,请稍后重试"); |
| | | } |
| | | try { |
| | | new LambdaUpdateChainWrapper<>(baseMapper) |
| | | .set(WorkOrder::getStatus, WorkOrderStatusEnum.DISTRIBUTED) |
| | | .in(WorkOrder::getId, ids) |
| | | .update(); |
| | | addDistributeRecord(ids); |
| | | addDistributeRecord(ids, WorkOrderDistributeWayEnum.FAST_DISTRIBUTE); |
| | | return Result.ok("成功下发" + ids.size() + "条工单"); |
| | | } catch (Exception e) { |
| | | return Result.ok("操作失败"); |
| | | return Result.error("操作失败"); |
| | | } finally { |
| | | distributeUnLock(); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public Result selectedIdsDistribute(List<Integer> ids, Integer unitId) { |
| | | public Result selectedIdsDistribute(DistributeWorkOrderQuery query) { |
| | | WorkOrderDistributeWayEnum distributeWayEnum = WorkOrderDistributeWayEnum.SELECTED_DISTRIBUTE; |
| | | if (!getDistributeLock()) { |
| | | return Result.error("工单下发中,请稍后重试"); |
| | | return Result.error("此刻有人下发中,为避免冲突,请稍后重试"); |
| | | } |
| | | try { |
| | | if (ids.isEmpty()) { |
| | | ids = new LambdaQueryChainWrapper<>(baseMapper) |
| | | if (query.getIds().isEmpty()) { |
| | | query.setIds(new LambdaQueryChainWrapper<>(baseMapper) |
| | | .eq(WorkOrder::getStatus, WorkOrderStatusEnum.WAIT_DISTRIBUTE) |
| | | .eq(Objects.nonNull(unitId), WorkOrder::getUnitId, unitId) |
| | | .eq(Objects.nonNull(query.getUnitId()), WorkOrder::getUnitId, query.getUnitId()) |
| | | .select(WorkOrder::getId) |
| | | .list() |
| | | .stream() |
| | | .map(WorkOrder::getId) |
| | | .collect(Collectors.toList()); |
| | | .collect(Collectors.toList())); |
| | | distributeWayEnum = WorkOrderDistributeWayEnum.ALL_DISTRIBUTE; |
| | | } |
| | | if (query.getIds().isEmpty()) { |
| | | return Result.error("没有工单待下发"); |
| | | } |
| | | new LambdaUpdateChainWrapper<>(baseMapper) |
| | | .set(WorkOrder::getStatus, WorkOrderStatusEnum.DISTRIBUTED) |
| | | .in(WorkOrder::getId, ids) |
| | | .eq(WorkOrder::getStatus, WorkOrderStatusEnum.WAIT_DISTRIBUTE) |
| | | .eq(Objects.nonNull(unitId), WorkOrder::getUnitId, unitId) |
| | | .in(WorkOrder::getId, query.getIds()) |
| | | .update(); |
| | | addDistributeRecord(ids); |
| | | return Result.ok("操作成功"); |
| | | addDistributeRecord(query.getIds(), distributeWayEnum); |
| | | return Result.ok("成功下发" + query.getIds().size() + "条工单"); |
| | | } catch (Exception e) { |
| | | return Result.ok("操作失败"); |
| | | return Result.error("操作失败"); |
| | | } finally { |
| | | distributeUnLock(); |
| | | } |
| | |
| | | * 添加工单下发记录 |
| | | * @param ids 工单id |
| | | */ |
| | | private void addDistributeRecord(List<Integer> ids) { |
| | | private void addDistributeRecord(List<Integer> ids, WorkOrderDistributeWayEnum distributeWay) { |
| | | LoginUser loginUser = SecurityUtils.getLoginUser(); |
| | | workOrderDistributeRecordMapper.insertBatch( |
| | | ids.stream() |
| | | .map(id -> new WorkOrderDistributeRecord(id, loginUser.getUserId())) |
| | | .map(id -> new WorkOrderDistributeRecord(id, loginUser.getUserId(), distributeWay)) |
| | | .toList() |
| | | ); |
| | | } |