| | |
| | | //避免代下发的工单直接变成下发 |
| | | if (!databaseWorkOrder.getStatus().equals(WorkOrderStatusEnum.WAIT_DISTRIBUTE)) { |
| | | databaseWorkOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED); |
| | | // 同时新增一个运维处理信息,表明此工单被调整 |
| | | WorkOrderYwConditionRecord ywRecord = new WorkOrderYwConditionRecord(); |
| | | ywRecord.setWorkOrderNo(databaseWorkOrder.getWorkOrderNo()); |
| | | ywRecord.setCommitUser(1); |
| | | ywRecord.setYwCondition("故障类型更新,工单状态调整为待处理"); |
| | | ywRecord.setCreateTime(new Date()); |
| | | ywRecord.setSysMsg(Boolean.TRUE); |
| | | willAddMsg.add(ywRecord); |
| | | } |
| | | databaseWorkOrder.setUpdateTime(now); |
| | | willUpdateStatusWorkOrderList.add(databaseWorkOrder); |
| | | updateNum++; |
| | | // 同时新增一个运维处理信息,表明此工单被调整 |
| | | WorkOrderYwConditionRecord ywRecord = new WorkOrderYwConditionRecord(); |
| | | ywRecord.setWorkOrderNo(databaseWorkOrder.getWorkOrderNo()); |
| | | ywRecord.setCommitUser(1); |
| | | ywRecord.setYwCondition("故障类型更新,工单状态调整为待处理"); |
| | | ywRecord.setCreateTime(new Date()); |
| | | ywRecord.setSysMsg(Boolean.TRUE); |
| | | willAddMsg.add(ywRecord); |
| | | } |
| | | } else { |
| | | workOrder.setCreateTime(new Date()); |
| | |
| | | */ |
| | | @Override |
| | | public Result add(WorkOrderForm form) { |
| | | //TODO:同个国标工单增加故障类型 |
| | | //检查白名单 |
| | | List<WorkOrder> data = new ArrayList<>(); |
| | | WorkOrder workOrder = WorkOrderForm.getEntityByForm(form, null); |
| | | data.add(workOrder); |
| | | //校验白名单并排除在白名单的故障类型 |
| | | data = checkWhite(data); |
| | | if (CollectionUtils.isEmpty(data)) { |
| | | return Result.error("该设备的故障类型在白名单中,不能添加工单"); |
| | | } |
| | | WorkOrder entity = data.get(0); |
| | | |
| | | //查redis今日工单数量 |
| | | int workOrderNum = 0; |
| | | //UUID作为value,保证上锁的线程自己解锁 |
| | | String requestId = IdUtils.fastSimpleUUID(); |
| | | boolean result = redisCache.acquireLock(RedisConstant.WORKORDER_NUM_LOCK, requestId, 10000); |
| | | if (result) { |
| | | //查今日工单量 |
| | | Object redisNum = redisCache.getCacheObject(RedisConstant.WORKORDER_NUM); |
| | | workOrderNum = redisNum == null ? 0 : (Integer) redisNum; |
| | | workOrderNum++; |
| | | redisCache.setCacheObject(RedisConstant.WORKORDER_NUM, workOrderNum); |
| | | redisCache.releaseLock(RedisConstant.WORKORDER_NUM_LOCK, requestId); |
| | | } else { |
| | | return Result.error("工单正在添加,请稍后再试"); |
| | | } |
| | | |
| | | entity.setCreateTime(DateUtils.getNowDate()); |
| | | entity.setStatus(WorkOrderStatusEnum.WAIT_DISTRIBUTE); |
| | | String serialNumber = entity.getSerialNumber(); |
| | | Date now = new Date(); |
| | | entity.setCreateTime(now); |
| | | entity.setUpdateTime(now); |
| | | entity.setWorkOrderNo(IdUtils.workOrderNO(now, String.format("%05d", workOrderNum))); |
| | | entity.setErrorType(String.join(",", form.getErrorType())); |
| | | List<WorkOrderErrorType> workOrderErrorTypes = form.getErrorType().stream().map(errorType -> new WorkOrderErrorType(entity.getWorkOrderNo(), errorType)).toList(); |
| | | workOrderErrorTypeService.getBaseMapper().insertWorkOrderErrorTypeList(workOrderErrorTypes); |
| | | if (baseMapper.insert(entity) > 0) { |
| | | List<WorkOrder> inDatabaseWorkOrderList = baseMapper.getNotFinishedWorkOrders(Arrays.asList(serialNumber)); |
| | | inDatabaseWorkOrderList.stream().forEach(item -> { |
| | | if (StringUtils.hasText(item.getErrorType())) { |
| | | item.setErrorTypeList(List.of(item.getErrorType().split(","))); |
| | | } else { |
| | | item.setErrorTypeList(new ArrayList<>(1)); |
| | | } |
| | | }); |
| | | // 因故障类型不一致而要更新状态的工单 |
| | | List<WorkOrder> willUpdateStatusWorkOrderList = new ArrayList<>(48); |
| | | // 更改工单类型而要增加的系统运维处理信息 |
| | | List<WorkOrderYwConditionRecord> willAddMsg = new ArrayList<>(48); |
| | | // 即将要添加的错误类型 |
| | | List<WorkOrderErrorType> willAddErrorType = new ArrayList<>(96); |
| | | if(!CollectionUtils.isEmpty(inDatabaseWorkOrderList)){ |
| | | WorkOrder workOrderInDB = inDatabaseWorkOrderList.get(0); |
| | | List<String> errorNameList = workOrderInDB.getErrorTypeList(); |
| | | List<String> errorTypes = entity.getErrorTypeList(); |
| | | if(errorNameList.containsAll(errorTypes)){ |
| | | return Result.error("已有同种故障类型工单"); |
| | | }else { |
| | | for (String errorType : errorTypes) { |
| | | if(!errorNameList.contains(errorType)){ |
| | | // 错误类型不一样,就新增一个错误类型,并且重置工单状态为待处理 |
| | | WorkOrderErrorType workOrderErrorType = new WorkOrderErrorType(); |
| | | workOrderErrorType.setWorkOrderNo(workOrderInDB.getWorkOrderNo()); |
| | | workOrderErrorType.setCreateTime(now); |
| | | workOrderErrorType.setUpdateTime(now); |
| | | workOrderErrorType.setErrorName(errorType); |
| | | willAddErrorType.add(workOrderErrorType); |
| | | } |
| | | } |
| | | //避免代下发的工单直接变成下发 |
| | | if (!workOrderInDB.getStatus().equals(WorkOrderStatusEnum.WAIT_DISTRIBUTE)) { |
| | | workOrderInDB.setStatus(WorkOrderStatusEnum.DISTRIBUTED); |
| | | // 同时新增一个运维处理信息,表明此工单被调整 |
| | | WorkOrderYwConditionRecord ywRecord = new WorkOrderYwConditionRecord(); |
| | | ywRecord.setWorkOrderNo(workOrderInDB.getWorkOrderNo()); |
| | | ywRecord.setCommitUser(1); |
| | | ywRecord.setYwCondition("故障类型更新,工单状态调整为待处理"); |
| | | ywRecord.setCreateTime(new Date()); |
| | | ywRecord.setSysMsg(Boolean.TRUE); |
| | | willAddMsg.add(ywRecord); |
| | | } |
| | | workOrderInDB.setUpdateTime(now); |
| | | willUpdateStatusWorkOrderList.add(workOrderInDB); |
| | | //修改故障类型 |
| | | if (willAddErrorType.size() > 0) { |
| | | workOrderErrorTypeService.getBaseMapper().addMany(willAddErrorType); |
| | | } |
| | | //增加运维情况 |
| | | if (willAddMsg.size() > 0) { |
| | | workOrderYwConditionRecordMapper.insertMany(willAddMsg); |
| | | } |
| | | //更改工单状态 |
| | | if (willUpdateStatusWorkOrderList.size() > 0) { |
| | | this.baseMapper.updateMany(willUpdateStatusWorkOrderList); |
| | | } |
| | | } |
| | | return Result.ok("添加成功"); |
| | | }else { |
| | | //数据库没有正在进行的工单 |
| | | //查redis今日工单数量 |
| | | int workOrderNum = 0; |
| | | //UUID作为value,保证上锁的线程自己解锁 |
| | | String requestId = IdUtils.fastSimpleUUID(); |
| | | boolean result = redisCache.acquireLock(RedisConstant.WORKORDER_NUM_LOCK, requestId, 10000); |
| | | if (result) { |
| | | //查今日工单量 |
| | | Object redisNum = redisCache.getCacheObject(RedisConstant.WORKORDER_NUM); |
| | | workOrderNum = redisNum == null ? 0 : (Integer) redisNum; |
| | | workOrderNum++; |
| | | redisCache.setCacheObject(RedisConstant.WORKORDER_NUM, workOrderNum); |
| | | redisCache.releaseLock(RedisConstant.WORKORDER_NUM_LOCK, requestId); |
| | | } else { |
| | | return Result.error("工单正在添加,请稍后再试"); |
| | | } |
| | | entity.setCreateTime(DateUtils.getNowDate()); |
| | | entity.setStatus(WorkOrderStatusEnum.WAIT_DISTRIBUTE); |
| | | entity.setCreateTime(now); |
| | | entity.setUpdateTime(now); |
| | | entity.setWorkOrderNo(IdUtils.workOrderNO(now, String.format("%05d", workOrderNum))); |
| | | entity.setErrorType(String.join(",", form.getErrorType())); |
| | | List<WorkOrderErrorType> workOrderErrorTypes = form.getErrorType().stream().map(errorType -> new WorkOrderErrorType(entity.getWorkOrderNo(), errorType)).toList(); |
| | | workOrderErrorTypeService.getBaseMapper().insertWorkOrderErrorTypeList(workOrderErrorTypes); |
| | | if (baseMapper.insert(entity) > 0) { |
| | | return Result.ok("添加成功"); |
| | | }else { |
| | | return Result.error("添加失败"); |
| | | } |
| | | } |
| | | return Result.error("添加失败"); |
| | | } |
| | | |
| | | |