#
luxiaotao1123
2024-12-18 93d8a38f9fd0746b9ce6ac7541bf2b8b48f7c63c
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/LaneService.java
@@ -1,15 +1,20 @@
package com.zy.acs.manager.core.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.acs.common.constant.RedisConstant;
import com.zy.acs.common.utils.GsonUtils;
import com.zy.acs.common.utils.RedisSupport;
import com.zy.acs.framework.common.Cools;
import com.zy.acs.framework.common.SnowflakeIdWorker;
import com.zy.acs.manager.core.domain.Lane;
import com.zy.acs.manager.core.service.astart.MapDataDispatcher;
import com.zy.acs.manager.manager.entity.Code;
import com.zy.acs.manager.manager.enums.StatusType;
import com.zy.acs.manager.manager.service.CodeService;
import com.zy.acs.manager.manager.service.RouteService;
import com.zy.acs.manager.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.time.StopWatch;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -26,11 +31,13 @@
@Service
public class LaneService {
    private boolean initialized = Boolean.FALSE;
    private final RedisSupport redis = RedisSupport.defaultRedisSupport;
    private final List<Lane> lanes = new ArrayList<>();
    private List<Lane> lanes = new ArrayList<>();
    private final Map<String, List<String>> adjacencyCodeMap = new HashMap<>();
    private boolean initialized = Boolean.FALSE;
    @Autowired
    private CodeService codeService;
@@ -45,22 +52,44 @@
        return this.initialized;
    }
    public List<String> getLanePoints(String codeData) {
    public Lane search(String codeData) {
        if (Cools.isEmpty(codeData) || !this.initialized) {
            return null;
        }
        for (Lane lane : this.lanes) {
            if (lane.getCodes().contains(codeData)) {
                return lane.getCodes();
                return lane;
            }
        }
        return null;
    }
    @PostConstruct
    public synchronized void init() {
    public void init() {
        Integer lev = MapDataDispatcher.MAP_DEFAULT_LEV;
        String laneDataStr = redis.getValue(RedisConstant.MAP_LANE_DATA, String.valueOf(lev));
        if (!Cools.isEmpty(laneDataStr)) {
            this.lanes = GsonUtils.fromJsonToList(laneDataStr, Lane.class);
        } else {
            StopWatch stopWatch = new StopWatch();
            stopWatch.start();
            this.initLaneData();
            stopWatch.stop();
            log.info("the rcs system calculated lane data which has spend {} millisecond......", stopWatch.getTime());
            redis.setValue(RedisConstant.MAP_LANE_DATA, String.valueOf(lev), GsonUtils.toJson(this.lanes));
        }
//        System.out.println(GsonUtils.toJson(this.lanes));
    }
    private void initLaneData() {
        log.info("the rcs system is starting to initialize lane data...");
        List<Code> codeList = codeService.list(new LambdaQueryWrapper<Code>().eq(Code::getStatus, 1));
        List<Code> codeList = codeService.list(new LambdaQueryWrapper<Code>().eq(Code::getStatus, StatusType.ENABLE.val));
        this.fillAdjacencyCodeMap(codeList);
@@ -68,7 +97,7 @@
        this.mergeDeadEndLane();
        this.deadInteractionPoint();
        this.deleteInteractionPoint();
        this.filterLanesWithFewPoints();
@@ -76,8 +105,6 @@
        this.initialized = Boolean.TRUE;
        log.info("the lane data initialization has been completed in rcs system.");
        System.out.println(GsonUtils.toJson(this.lanes));
    }
    private void fillAdjacencyCodeMap(List<Code> codeList) {
@@ -262,7 +289,7 @@
        }
    }
    private void deadInteractionPoint() {
    private void deleteInteractionPoint() {
        for (Lane lane : this.lanes) {
            lane.removeInteraction(this.adjacencyCodeMap);
        }