吉安感知网项目-后端
linwei
2026-02-09 2e98f7678b2dab62f15ff1d0807281f7c9a3d075
Merge remote-tracking branch 'origin/master'
5 files modified
1 files added
183 ■■■■■ changed files
drone-service/drone-fw/src/main/java/org/sxkj/fw/area/mapper/FwDefenseSceneManageMapper.xml 21 ●●●●● patch | view | raw | blame | history
drone-service/drone-fw/src/main/java/org/sxkj/fw/area/vo/FwDefenseSceneManageVO.java 15 ●●●●● patch | view | raw | blame | history
drone-service/drone-fw/src/main/java/org/sxkj/fw/cockpit/controller/CockpitController.java 12 ●●●●● patch | view | raw | blame | history
drone-service/drone-fw/src/main/java/org/sxkj/fw/cockpit/service/ICockpitService.java 8 ●●●●● patch | view | raw | blame | history
drone-service/drone-fw/src/main/java/org/sxkj/fw/cockpit/service/impl/CockpitServiceImpl.java 99 ●●●●● patch | view | raw | blame | history
drone-service/drone-fw/src/main/java/org/sxkj/fw/cockpit/vo/SceneManageStatisticsVO.java 28 ●●●●● patch | view | raw | blame | history
drone-service/drone-fw/src/main/java/org/sxkj/fw/area/mapper/FwDefenseSceneManageMapper.xml
@@ -15,6 +15,9 @@
        <result column="effective_date_start" property="effectiveDateStart"/>
        <result column="effective_date_end" property="effectiveDateEnd"/>
        <result column="area_code" property="areaCode"/>
        <result column="scene_type" property="sceneType"/>
        <result column="area_count" property="areaCount"/>
        <result column="device_count" property="deviceCount"/>
    </resultMap>
@@ -51,7 +54,23 @@
    <select id="selectFwDefenseSceneManageList" resultMap="fwDefenseSceneManageResultMap">
        select
            dsm.*,
            ds.scene_name as defense_scene_name
        ds.scene_name as defense_scene_name,
        ds.scene_type as scene_type,
        case
        when ds.area_divide_ids is null or ds.area_divide_ids = '' then 0
        else length(ds.area_divide_ids) - length(replace(ds.area_divide_ids, ',', '')) + 1
        end as area_count,
        (
        select ifnull(sum(
        case
        when ad.device_ids is null or ad.device_ids = '' then 0
        else length(ad.device_ids) - length(replace(ad.device_ids, ',', '')) + 1
        end
        ), 0)
        from ja_fw_area_divide ad
        where ad.is_deleted = 0
        and find_in_set(ad.id, ds.area_divide_ids) > 0
        ) as device_count
        from ja_fw_defense_scene_manage dsm
        left join ja_fw_defense_scene ds on ds.id = dsm.defense_scene_id and ds.is_deleted = 0
        <where>
drone-service/drone-fw/src/main/java/org/sxkj/fw/area/vo/FwDefenseSceneManageVO.java
@@ -53,6 +53,11 @@
    @ApiModelProperty(value = "场景配置名称")
    private String defenseSceneName;
    /**
     * 场景类型:核心区/学校等
     */
    @ApiModelProperty(value = "场景类型:核心区/学校等")
    private String sceneType;
    /**
     * 场景名称
     */
    @ApiModelProperty(value = "场景名称")
@@ -92,5 +97,15 @@
     */
    @ApiModelProperty(value = "区域编码")
    private String areaCode;
    /**
     * 区域数量
     */
    @ApiModelProperty(value = "区域数量")
    private Integer areaCount;
    /**
     * 设备数量
     */
    @ApiModelProperty(value = "设备数量")
    private Integer deviceCount;
}
drone-service/drone-fw/src/main/java/org/sxkj/fw/cockpit/controller/CockpitController.java
@@ -14,6 +14,7 @@
import org.sxkj.fw.cockpit.service.ICockpitService;
import org.sxkj.fw.cockpit.vo.AlarmStatisticsVO;
import org.sxkj.fw.cockpit.vo.DeviceStatisticsVO;
import org.sxkj.fw.cockpit.vo.SceneManageStatisticsVO;
import org.sxkj.fw.detection.param.FwEffectEvalParam;
import org.sxkj.fw.device.dto.FwDeviceDTO;
import org.sxkj.fw.device.vo.CockpitFwDeviceVO;
@@ -99,6 +100,17 @@
    }
    /**
     * 场景管理与区域数量统计
     */
    @GetMapping("/sceneManageStatistics")
    @ApiOperationSupport(order = 6)
    @ApiOperation(value = "场景管理统计", notes = "返回场景管理数量与区域数量")
    public R<SceneManageStatisticsVO> getSceneManageStatistics() {
        SceneManageStatisticsVO statistics = cockpitService.statisticsSceneManageAndArea();
        return R.data(statistics);
    }
    /**
     * 信号干扰,诱导驱离
     */
    @PostMapping("/interferenceAndExpulsion")
drone-service/drone-fw/src/main/java/org/sxkj/fw/cockpit/service/ICockpitService.java
@@ -5,6 +5,7 @@
import org.sxkj.fw.area.vo.FwDefenseSceneManageVO;
import org.sxkj.fw.cockpit.vo.AlarmStatisticsVO;
import org.sxkj.fw.cockpit.vo.DeviceStatisticsVO;
import org.sxkj.fw.cockpit.vo.SceneManageStatisticsVO;
import org.sxkj.fw.detection.param.FwEffectEvalParam;
import org.sxkj.fw.device.dto.FwDeviceDTO;
import org.sxkj.fw.device.vo.CockpitFwDeviceVO;
@@ -76,4 +77,11 @@
     * @return
     */
    List<FwDefenseSceneManageVO> selectFwDefenseSceneManageList(Date filterTime);
    /**
     * 场景管理与区域数量统计
     *
     * @return
     */
    SceneManageStatisticsVO statisticsSceneManageAndArea();
}
drone-service/drone-fw/src/main/java/org/sxkj/fw/cockpit/service/impl/CockpitServiceImpl.java
@@ -4,16 +4,20 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.StringUtil;
import org.springframework.stereotype.Service;
import org.sxkj.common.utils.HeaderUtils;
import org.sxkj.fw.area.entity.FwDefenseSceneEntity;
import org.sxkj.fw.area.param.FwAreaDivideListParam;
import org.sxkj.fw.area.service.IFwAreaDivideService;
import org.sxkj.fw.area.service.IFwDefenseSceneService;
import org.sxkj.fw.area.service.IFwDefenseSceneManageService;
import org.sxkj.fw.area.vo.FwAreaDivideVO;
import org.sxkj.fw.area.vo.FwDefenseSceneManageVO;
import org.sxkj.fw.cockpit.service.ICockpitService;
import org.sxkj.fw.cockpit.vo.AlarmStatisticsVO;
import org.sxkj.fw.cockpit.vo.DeviceStatisticsVO;
import org.sxkj.fw.cockpit.vo.SceneManageStatisticsVO;
import org.sxkj.fw.common.FwBaseInfo;
import org.sxkj.fw.detection.entity.FwEffectEvalEntity;
import org.sxkj.fw.detection.param.FwEffectEvalParam;
@@ -34,8 +38,12 @@
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
@Service
public class CockpitServiceImpl implements ICockpitService {
@@ -55,6 +63,8 @@
    @Resource
    private IFwDefenseSceneManageService iFwDefenseSceneManageService;
    @Resource
    private IFwDefenseSceneService iFwDefenseSceneService;
    @Override
    public IPage<FwDroneAlarmRecordVO> selectFwDroneAlarmRecordPage(IPage<FwDroneAlarmRecordVO> page, FwDroneAlarmRecordDTO fwDroneAlarmRecord) {
@@ -152,12 +162,62 @@
     */
    @Override
    public List<FwDefenseSceneManageVO> selectFwDefenseSceneManageList(Date filterTime) {
        FwBaseInfo fwBaseInfo = new FwBaseInfo();
        Dept dept = SysCache.getDept(Long.valueOf(AuthUtil.getDeptId()));
        Region byCode = RegionCache.getByCode(dept.getAreaCode());
        fwBaseInfo.setCurrentDeptId(AuthUtil.getDeptId());
        fwBaseInfo.setRegionCode(HeaderUtils.formatAreaCode(byCode.getCode()));
        return iFwDefenseSceneManageService.selectFwDefenseSceneManageCockpitList(fwBaseInfo);
        return iFwDefenseSceneManageService.selectFwDefenseSceneManageList(filterTime);
    }
    @Override
    public SceneManageStatisticsVO statisticsSceneManageAndArea() {
        List<FwDefenseSceneManageVO> sceneManageList = iFwDefenseSceneManageService.selectFwDefenseSceneManageCockpitList(buildFwBaseInfo());
        SceneManageStatisticsVO statisticsVO = new SceneManageStatisticsVO();
        if (sceneManageList == null || sceneManageList.isEmpty()) {
            statisticsVO.setSceneManageCount(0);
            statisticsVO.setAreaCount(0);
            return statisticsVO;
        }
        Map<Long, Long> sceneManageSceneMap = new HashMap<>();
        for (FwDefenseSceneManageVO sceneManage : sceneManageList) {
            if (sceneManage == null || sceneManage.getId() == null) {
                continue;
            }
            sceneManageSceneMap.putIfAbsent(sceneManage.getId(), sceneManage.getDefenseSceneId());
        }
        statisticsVO.setSceneManageCount(sceneManageSceneMap.size());
        Set<Long> defenseSceneIds = new HashSet<>();
        for (Long defenseSceneId : sceneManageSceneMap.values()) {
            if (defenseSceneId != null) {
                defenseSceneIds.add(defenseSceneId);
            }
        }
        if (defenseSceneIds.isEmpty()) {
            statisticsVO.setAreaCount(0);
            return statisticsVO;
        }
        List<FwDefenseSceneEntity> defenseScenes = iFwDefenseSceneService.listByIds(defenseSceneIds);
        Map<Long, Integer> sceneAreaCountMap = new HashMap<>();
        if (defenseScenes != null && !defenseScenes.isEmpty()) {
            for (FwDefenseSceneEntity scene : defenseScenes) {
                if (scene == null || scene.getId() == null) {
                    continue;
                }
                sceneAreaCountMap.put(scene.getId(), countAreaDivide(scene.getAreaDivideIds()));
            }
        }
        int totalAreaCount = 0;
        for (Long defenseSceneId : sceneManageSceneMap.values()) {
            if (defenseSceneId == null) {
                continue;
            }
            Integer areaCount = sceneAreaCountMap.get(defenseSceneId);
            if (areaCount != null) {
                totalAreaCount += areaCount;
            }
        }
        statisticsVO.setAreaCount(totalAreaCount);
        return statisticsVO;
    }
    /**
@@ -185,4 +245,31 @@
        fwAreaDivideListParam.setRegionCode(HeaderUtils.formatAreaCode(byCode.getCode()));
        return iFwAreaDivideService.selectFwAreaDivideList(fwAreaDivideListParam);
    }
    /**
     * 构建当前部门与区域信息
     *
     * @return 基础信息
     */
    private FwBaseInfo buildFwBaseInfo() {
        FwBaseInfo fwBaseInfo = new FwBaseInfo();
        Dept dept = SysCache.getDept(Long.valueOf(AuthUtil.getDeptId()));
        Region byCode = RegionCache.getByCode(dept.getAreaCode());
        fwBaseInfo.setCurrentDeptId(AuthUtil.getDeptId());
        fwBaseInfo.setRegionCode(HeaderUtils.formatAreaCode(byCode.getCode()));
        return fwBaseInfo;
    }
    /**
     * 统计逗号分隔区域ID的数量
     *
     * @param areaDivideIds 区域ID字符串
     * @return 区域数量
     */
    private int countAreaDivide(String areaDivideIds) {
        if (StringUtil.isBlank(areaDivideIds)) {
            return 0;
        }
        return Func.toLongList(areaDivideIds).size();
    }
}
drone-service/drone-fw/src/main/java/org/sxkj/fw/cockpit/vo/SceneManageStatisticsVO.java
New file
@@ -0,0 +1,28 @@
package org.sxkj.fw.cockpit.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * 场景管理统计视图对象
 *
 * @author lw
 * @since 2026-02-06
 */
@Data
public class SceneManageStatisticsVO implements Serializable {
    /**
     * 场景管理数量
     */
    @ApiModelProperty(value = "场景管理数量")
    private Integer sceneManageCount;
    /**
     * 区域数量
     */
    @ApiModelProperty(value = "区域数量")
    private Integer areaCount;
}