xiangpei
2024-08-22 1901a22a3b2d7a2a076b69ecd78d24ec55d5a3e8
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
@@ -28,7 +28,10 @@
import com.ycl.platform.wvp.WVPResult;
import com.ycl.system.Result;
import com.ycl.system.domain.SysConfig;
import com.ycl.system.entity.SysDictData;
import com.ycl.system.mapper.SysConfigMapper;
import com.ycl.system.mapper.SysDictDataMapper;
import com.ycl.system.mapper.SysDictTypeMapper;
import com.ycl.system.model.LoginUser;
import com.ycl.system.page.PageUtil;
import com.ycl.utils.DateUtils;
@@ -59,6 +62,7 @@
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
@@ -79,10 +83,11 @@
    private final WorkOrderYwConditionRecordMapper workOrderYwConditionRecordMapper;
    private final NotifyService notifyService;
    private final WorkOrderDistributeRecordMapper workOrderDistributeRecordMapper;
    private final TMonitorMapper monitorMapper;
    private final WorkOrderErrorTypeMapper workOrderErrorTypeMapper;
    private final SysConfigMapper configMapper;
    private final ServerConfig serverConfig;
    private final ReportMapper reportMapper;
    private final SysDictDataMapper dictDataMapper;
    @Value("${rtsp.server:http://127.0.0.1:7788}")
    private String rtspServer;
@@ -117,16 +122,31 @@
        for (WorkOrder workOrder : workOrderList) {
            WorkOrder databaseWorkOrder = mapping.get(workOrder.getSerialNumber());
            if (Objects.nonNull(databaseWorkOrder)) {
                List<WorkOrderErrorType> workOrderErrorTypeList = new LambdaQueryChainWrapper<>(workOrderErrorTypeMapper)
                        .select(WorkOrderErrorType::getErrorName)
                        .eq(WorkOrderErrorType::getWorkOrderNo, workOrder.getWorkOrderNo())
                        .list();
                List<String> errorNameList = workOrderErrorTypeList.stream().map(WorkOrderErrorType::getErrorName).collect(Collectors.toList());
                String errorType = databaseWorkOrder.getErrorType();
                if (workOrder.getErrorType().equals(errorType)) {
                if (errorNameList.contains(errorType)) {
                    // 如果,国标码、故障类型都一样,则跳过不处理
                    continue;
                } else {
                    // 错误类型不一样,就更新错误类型,并且重置工单状态为待处理
                    errorType = errorType + "," + workOrder.getErrorType();
                    databaseWorkOrder.setErrorType(errorType);
                    databaseWorkOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED);
                    // 错误类型不一样,就新增一个错误类型,并且重置工单状态为待处理
                    List<SysDictData> errorTypeDictList = dictDataMapper.selectDictDataByType("error_type");
                    String finalErrorType = errorType;
                    List<SysDictData> targetErrorTypes = errorTypeDictList.stream().filter(item -> finalErrorType.equals(item.getDictValue())).collect(Collectors.toList());
                    if (! CollectionUtils.isEmpty(targetErrorTypes)) {
                        errorType = targetErrorTypes.get(0).getDictValue();
                    }
                    WorkOrderErrorType workOrderErrorType = new WorkOrderErrorType();
                    workOrderErrorType.setWorkOrderNo(databaseWorkOrder.getWorkOrderNo());
                    Date now = new Date();
                    workOrderErrorType.setCreateTime(now);
                    workOrderErrorType.setUpdateTime(now);
                    workOrderErrorTypeMapper.insert(workOrderErrorType);
                    databaseWorkOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED);
                    databaseWorkOrder.setUpdateTime(now);
                    baseMapper.updateById(databaseWorkOrder);
                    updateNum++;
@@ -141,11 +161,11 @@
            } else {
                workOrder.setCreateTime(new Date());
                workOrder.setUpdateTime(new Date());
                // 如果报备过,使用最新报备的错误类型
                Report report = reportMapper.checkPointReported(workOrder.getSerialNumber());
                if (Objects.nonNull(report)) {
                    workOrder.setErrorType(report.getErrorType());
                }
//                // 如果报备过,使用最新报备的错误类型
//                Report report = reportMapper.checkPointReported(workOrder.getSerialNumber());
//                if (Objects.nonNull(report)) {
//                    workOrder.setErrorType(report.getErrorType());
//                }
                waitAddList.add(workOrder);
            }
        }
@@ -214,6 +234,9 @@
        Date now = new Date();
        entity.setCreateTime(now);
        entity.setUpdateTime(now);
        entity.setErrorType(String.join(",", form.getErrorType()));
        List<WorkOrderErrorType> workOrderErrorTypes = form.getErrorType().stream().map(errorType -> new WorkOrderErrorType(entity.getWorkOrderNo(), errorType)).toList();
        workOrderErrorTypeMapper.insertWorkOrderErrorTypeList(workOrderErrorTypes);
        if(baseMapper.insert(entity) > 0) {
            return Result.ok("添加成功");
        }
@@ -398,6 +421,7 @@
    public Result page(WorkOrderQuery query) {
        IPage<WorkOrderVO> page = PageUtil.getPage(query, WorkOrderVO.class);
        baseMapper.page(page, query);
        page.getRecords().forEach(item -> item.setErrorType(ErrorTypeEnum.getEnumValue(item.getErrorType())));
        return Result.ok().data(page.getRecords()).total(page.getTotal());
    }
@@ -405,6 +429,7 @@
    public Result distributePage(DistributeWorkOrderQuery query) {
        IPage<WorkOrderVO> page = PageUtil.getPage(query, WorkOrderVO.class);
        baseMapper.distributePage(page, query);
        page.getRecords().forEach(item -> item.setErrorType(ErrorTypeEnum.getEnumValue(item.getErrorType())));
        return Result.ok().data(page).total(page.getTotal());
    }
@@ -500,7 +525,7 @@
     */
    public synchronized Boolean getDistributeLock() {
        if (Objects.isNull(redisCache.getCacheObject(DISTRIBUTE_LOCK_KEY))) {
            redisCache.setCacheObject(DISTRIBUTE_LOCK_KEY, "1");
            redisCache.setCacheObject(DISTRIBUTE_LOCK_KEY, "1", 30, TimeUnit.SECONDS);
            return true;
        } else {
            return false;