龚焕茏
2024-04-30 36e5600e3497d97b42376c5f096d85891f1ad94b
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
@@ -20,8 +20,7 @@
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;
@@ -113,12 +112,12 @@
        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("操作成功");
    }
@@ -131,6 +130,7 @@
        }
        // 工单状态
        workOrder.setStatus(WorkOrderStatusEnum.YW_HANDLE);
        workOrder.setYwHandleTime(LocalDateTime.now());
        baseMapper.updateById(workOrder);
        // 添加一条运维情况记录
        WorkOrderYwConditionRecord workOrderYwConditionRecord = new WorkOrderYwConditionRecord();
@@ -213,60 +213,15 @@
     */
    @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());
        List<WorkOrderVO> page = baseMapper.distributePage(query);
        return Result.ok().data(page).total(page.size());
    }
    @Override
@@ -309,48 +264,51 @@
            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();
        }
@@ -380,11 +338,11 @@
     * 添加工单下发记录
     * @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()
        );
    }