吉安感知网项目-后端
linwei
2026-02-11 dbc7e62be76ff48b26461ffaef9c3fc87be018cb
drone-service/drone-fw/src/main/java/org/sxkj/fw/cockpit/service/impl/CockpitServiceImpl.java
@@ -3,15 +3,22 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
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;
import org.sxkj.fw.detection.service.IFwEffectEvalService;
@@ -31,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 {
@@ -52,6 +63,8 @@
   @Resource
   private IFwDefenseSceneManageService iFwDefenseSceneManageService;
   @Resource
   private IFwDefenseSceneService iFwDefenseSceneService;
   @Override
   public IPage<FwDroneAlarmRecordVO> selectFwDroneAlarmRecordPage(IPage<FwDroneAlarmRecordVO> page, FwDroneAlarmRecordDTO fwDroneAlarmRecord) {
@@ -70,7 +83,6 @@
   @Override
   public List<DeviceStatisticsVO> statisticalDeviceType() {
      // List<Long> deptList = SysCache.getDeptChildIds(Long.valueOf(AuthUtil.getDeptId()));
      Dept dept = SysCache.getDept(Long.valueOf(AuthUtil.getDeptId()));
      Region byCode = RegionCache.getByCode(dept.getAreaCode());
      return fwDeviceService.statisticalDeviceType(HeaderUtils.formatAreaCode(byCode.getCode()), AuthUtil.getDeptId());
@@ -117,7 +129,6 @@
   @Override
   public AlarmStatisticsVO statisticsAlarmsAndDeviceRecords() {
      // List<Long> deptList = SysCache.getDeptChildIds(Long.valueOf(AuthUtil.getDeptId()));
      Dept dept = SysCache.getDept(Long.valueOf(AuthUtil.getDeptId()));
      Region byCode = RegionCache.getByCode(dept.getAreaCode());
      String regionCode = HeaderUtils.formatAreaCode(byCode.getCode());
@@ -154,6 +165,61 @@
      return iFwDefenseSceneManageService.selectFwDefenseSceneManageList(filterTime);
   }
   @Override
   public SceneManageStatisticsVO statisticsSceneManageAndArea(Date filterTime) {
      List<FwDefenseSceneManageVO> sceneManageList = iFwDefenseSceneManageService.selectFwDefenseSceneManageCockpitList(buildFwBaseInfo(), filterTime);
      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;
   }
   /**
    *
    * @param filterSelected
@@ -165,6 +231,45 @@
    */
   @Override
   public List<FwAreaDivideVO> selectFwAreaDivideList(Integer filterSelected, Long sceneId, String areaTypeKeys, Integer isSetSceneManage, LocalDateTime flyTime) {
      return iFwAreaDivideService.selectFwAreaDivideList(filterSelected, sceneId, areaTypeKeys, isSetSceneManage, flyTime);
      FwAreaDivideListParam fwAreaDivideListParam = new FwAreaDivideListParam();
      fwAreaDivideListParam.setFilterSelected(filterSelected);
      fwAreaDivideListParam.setSceneId(sceneId);
      fwAreaDivideListParam.setAreaTypeKeys(areaTypeKeys);
      fwAreaDivideListParam.setIsSetSceneManage(isSetSceneManage);
      fwAreaDivideListParam.setFlyTime(flyTime);
      // 解析区域类型键值列表
      fwAreaDivideListParam.setAreaTypeKeyList(Func.toStrList(areaTypeKeys));
      Dept dept = SysCache.getDept(Long.valueOf(AuthUtil.getDeptId()));
      Region byCode = RegionCache.getByCode(dept.getAreaCode());
      fwAreaDivideListParam.setCurrentDeptId(AuthUtil.getDeptId());
      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();
   }
}