| | |
| | | package com.ycl.platform.service.impl; |
| | | |
| | | 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.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ycl.exception.ServiceException; |
| | | import com.ycl.platform.domain.entity.*; |
| | | import com.ycl.platform.domain.form.*; |
| | | import com.ycl.platform.domain.query.DistributeWorkOrderQuery; |
| | | import com.ycl.platform.domain.query.WorkOrderQuery; |
| | | import com.ycl.platform.domain.vo.DistributeWorkOrderVO; |
| | | import com.ycl.platform.domain.vo.WorkOrderVO; |
| | | import com.ycl.platform.mapper.*; |
| | | import com.ycl.platform.service.NotifyService; |
| | | import com.ycl.platform.service.WorkOrderService; |
| | | import com.ycl.system.Result; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ycl.platform.domain.vo.WorkOrderVO; |
| | | import com.ycl.platform.domain.query.WorkOrderQuery; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.time.ZoneId; |
| | | import java.time.temporal.ChronoUnit; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.ycl.system.model.LoginUser; |
| | | import com.ycl.system.page.PageUtil; |
| | | import com.ycl.utils.DateUtils; |
| | | import com.ycl.utils.SecurityUtils; |
| | | import enumeration.general.FastDistributeTypeEnum; |
| | | import com.ycl.utils.redis.RedisCache; |
| | | import enumeration.general.NotifyTypeEnum; |
| | | import enumeration.general.WorkOrderStatusEnum; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.apache.commons.lang3.ArrayUtils; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.Assert; |
| | | import java.util.ArrayList; |
| | | import java.util.Objects; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.util.StringUtils; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.time.ZoneId; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | import java.util.concurrent.TimeUnit; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 工单 服务实现类 |
| | |
| | | private final WorkOrderAuditingRecordMapper workOrderAuditingRecordMapper; |
| | | private final WorkOrderYwConditionRecordMapper workOrderYwConditionRecordMapper; |
| | | private final NotifyService notifyService; |
| | | private final WorkOrderDistributeRecordMapper workOrderDistributeRecordMapper; |
| | | |
| | | private final String DISTRIBUTE_LOCK_KEY = "distributeLock"; |
| | | |
| | | @Autowired |
| | | private RedisCache redisCache; |
| | | |
| | | /** |
| | | * 添加 |
| | |
| | | break; |
| | | } |
| | | |
| | | // 查询符合条件的工单 |
| | | List<Integer> ids = new LambdaQueryChainWrapper<>(baseMapper) |
| | | .eq(WorkOrder::getStatus, WorkOrderStatusEnum.WAIT_DISTRIBUTE) |
| | | .eq(Objects.nonNull(data.getUnitId()), WorkOrder::getUnitId, data.getUnitId()) |
| | |
| | | |
| | | if (ids.isEmpty()) { |
| | | return Result.error("没有符合条件的工单"); |
| | | } else { |
| | | } |
| | | if (!getDistributeLock()) { |
| | | return Result.error("工单下发中,请稍后重试"); |
| | | } |
| | | try { |
| | | new LambdaUpdateChainWrapper<>(baseMapper) |
| | | .set(WorkOrder::getStatus, WorkOrderStatusEnum.DISTRIBUTED) |
| | | .in(WorkOrder::getId, ids) |
| | | .update(); |
| | | } |
| | | addDistributeRecord(ids); |
| | | return Result.ok("成功下发" + ids.size() + "条工单"); |
| | | } catch (Exception e) { |
| | | return Result.ok("操作失败"); |
| | | } finally { |
| | | distributeUnLock(); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public Result selectedIdsDistribute(List<Integer> ids, Integer unitId) { |
| | | if (!getDistributeLock()) { |
| | | return Result.error("工单下发中,请稍后重试"); |
| | | } |
| | | try { |
| | | if (ids.isEmpty()) { |
| | | ids = new LambdaQueryChainWrapper<>(baseMapper) |
| | | .eq(WorkOrder::getStatus, WorkOrderStatusEnum.WAIT_DISTRIBUTE) |
| | | .eq(Objects.nonNull(unitId), WorkOrder::getUnitId, unitId) |
| | | .select(WorkOrder::getId) |
| | | .list() |
| | | .stream() |
| | | .map(WorkOrder::getId) |
| | | .collect(Collectors.toList()); |
| | | } |
| | | new LambdaUpdateChainWrapper<>(baseMapper) |
| | | .set(WorkOrder::getStatus, WorkOrderStatusEnum.DISTRIBUTED) |
| | | .in(ArrayUtils.isNotEmpty(ids.toArray()), WorkOrder::getId, ids) |
| | | .in(WorkOrder::getId, ids) |
| | | .eq(WorkOrder::getStatus, WorkOrderStatusEnum.WAIT_DISTRIBUTE) |
| | | .eq(Objects.nonNull(unitId), WorkOrder::getUnitId, unitId) |
| | | .update(); |
| | | addDistributeRecord(ids); |
| | | return Result.ok("操作成功"); |
| | | } catch (Exception e) { |
| | | return Result.ok("操作失败"); |
| | | } finally { |
| | | distributeUnLock(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 申请工单下发锁 |
| | | * @return 工单下发锁申请结果 |
| | | */ |
| | | public synchronized Boolean getDistributeLock() { |
| | | if (Objects.isNull(redisCache.getCacheObject(DISTRIBUTE_LOCK_KEY))) { |
| | | redisCache.setCacheObject(DISTRIBUTE_LOCK_KEY, "1"); |
| | | return true; |
| | | } else { |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 工单下发锁释放 |
| | | */ |
| | | public synchronized void distributeUnLock() { |
| | | redisCache.deleteObject(DISTRIBUTE_LOCK_KEY); |
| | | } |
| | | |
| | | /** |
| | | * 添加工单下发记录 |
| | | * @param ids 工单id |
| | | */ |
| | | private void addDistributeRecord(List<Integer> ids) { |
| | | LoginUser loginUser = SecurityUtils.getLoginUser(); |
| | | workOrderDistributeRecordMapper.insertBatch( |
| | | ids.stream() |
| | | .map(id -> new WorkOrderDistributeRecord(id, loginUser.getUserId())) |
| | | .toList() |
| | | ); |
| | | } |
| | | |
| | | /** |