#
vincentlu
2026-04-07 30c540d35e476f9dc1c7149a4e52088c7f375f60
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/CodeGapServiceImpl.java
@@ -7,13 +7,16 @@
import com.zy.acs.manager.core.service.MapService;
import com.zy.acs.manager.manager.entity.Code;
import com.zy.acs.manager.manager.entity.CodeGap;
import com.zy.acs.manager.manager.entity.Route;
import com.zy.acs.manager.manager.mapper.CodeGapMapper;
import com.zy.acs.manager.manager.service.CodeGapService;
import com.zy.acs.manager.manager.service.RouteService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@@ -26,6 +29,8 @@
    @Autowired
    private MapService mapService;
    @Autowired
    private RouteService routeService;
    @PostConstruct
    public void init() {
@@ -95,6 +100,51 @@
        return 0.0;
    }
    @Override
    public void removeCodeGapIfUnused(Long code0, Long code1) {
        if (code0 == null || code1 == null) {
            return;
        }
        long count = routeService.count(new LambdaQueryWrapper<Route>()
                .eq(Route::getStartCode, code0)
                .eq(Route::getEndCode, code1))
                + routeService.count(new LambdaQueryWrapper<Route>()
                .eq(Route::getStartCode, code1)
                .eq(Route::getEndCode, code0));
        if (count > 0) {
            return;
        }
        CodeGap codeGap = findByCodeOfBoth(code0, code1);
        if (codeGap != null && !this.removeById(codeGap.getId())) {
            throw new CoolException("Delete Fail");
        }
    }
    @Override
    public boolean save(CodeGap entity) {
        boolean result = super.save(entity);
        if (result) {
            String gapKey = generateGapKey(entity.getCode0(), entity.getCode1());
            if (!Cools.isEmpty(gapKey)) {
                GAP_DISTANCE_CACHE.put(gapKey, entity);
            }
        }
        return result;
    }
    @Override
    public boolean removeById(Serializable id) {
        CodeGap codeGap = this.getById(id);
        boolean result = super.removeById(id);
        if (result && codeGap != null) {
            String gapKey = generateGapKey(codeGap.getCode0(), codeGap.getCode1());
            if (!Cools.isEmpty(gapKey)) {
                GAP_DISTANCE_CACHE.remove(gapKey);
            }
        }
        return result;
    }
    private static String generateGapKey(Long code0, Long code1) {
        if (Cools.isEmpty(code0, code1)) {
            return null;