| | |
| | | package org.sxkj.fw.area.service.impl; |
| | | |
| | | import org.springblade.core.secure.utils.AuthUtil; |
| | | import org.springblade.core.tool.utils.Func; |
| | | import org.springblade.core.tool.utils.StringUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.sxkj.common.utils.HeaderUtils; |
| | |
| | | import com.baomidou.mybatisplus.core.conditions.Wrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import org.springblade.core.mp.base.BaseServiceImpl; |
| | | import org.sxkj.system.cache.SysCache; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.util.ArrayList; |
| | |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | import java.util.Date; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 防控场景表 服务实现类 |
| | |
| | | |
| | | @Override |
| | | public IPage<FwDefenseSceneVO> selectFwDefenseScenePage(IPage<FwDefenseSceneVO> page, FwDefenseSceneVO fwDefenseScene) { |
| | | if (!AuthUtil.isAdministrator()) { |
| | | List<Long> deptList = SysCache.getDeptChildIds(Long.valueOf(AuthUtil.getDeptId())); |
| | | fwDefenseScene.setDeptList(deptList); |
| | | } |
| | | IPage<FwDefenseSceneVO> result = page.setRecords(baseMapper.selectFwDefenseScenePage(page, fwDefenseScene)); |
| | | List<FwDefenseSceneVO> records = result.getRecords(); |
| | | if (records == null || records.isEmpty()) { |
| | |
| | | if (area == null || area.getId() == null) { |
| | | continue; |
| | | } |
| | | areaSizeMap.put(area.getId(), area.getAreaSize()); |
| | | // areaSizeMap.put(area.getId(), area.getAreaSize()); |
| | | List<Long> areaDeviceIds = parseIdList(area.getDeviceIds()); |
| | | areaDeviceMap.put(area.getId(), areaDeviceIds); |
| | | deviceIdSet.addAll(areaDeviceIds); |
| | |
| | | for (FwDefenseSceneVO record : records) { |
| | | List<Long> areaIds = parseIdList(record.getAreaDivideIds()); |
| | | record.setAreaCount(areaIds.size()); |
| | | record.setDefenseArea(sumDefenseArea(areaIds, areaSizeMap)); |
| | | |
| | | Set<Long> deviceIds = new HashSet<>(); |
| | | for (Long areaId : areaIds) { |
| | |
| | | } |
| | | |
| | | @Override |
| | | public List<FwDefenseSceneVO> selectFwDefenseSceneList(Integer filterSelected, Long areaId) { |
| | | return baseMapper.selectFwDefenseSceneList(filterSelected, areaId); |
| | | public List<FwDefenseSceneVO> selectFwDefenseSceneList(Integer filterSelected, Long zoneId, Long areaId, Integer unbound, Long sceneManageId) { |
| | | List<Long> deptList = new ArrayList<>(); |
| | | if (!AuthUtil.isAdministrator()) { |
| | | deptList = SysCache.getDeptChildIds(Long.valueOf(AuthUtil.getDeptId())); |
| | | } |
| | | return baseMapper.selectFwDefenseSceneList(filterSelected, zoneId, areaId, unbound, sceneManageId, deptList); |
| | | } |
| | | |
| | | private List<Long> parseIdList(String ids) { |
| | |
| | | return idList; |
| | | } |
| | | |
| | | private Integer sumDefenseArea(List<Long> areaIds, Map<Long, BigDecimal> areaSizeMap) { |
| | | if (areaIds == null || areaIds.isEmpty()) { |
| | | return 0; |
| | | } |
| | | BigDecimal total = BigDecimal.ZERO; |
| | | for (Long areaId : areaIds) { |
| | | BigDecimal areaSize = areaSizeMap.get(areaId); |
| | | if (areaSize != null) { |
| | | total = total.add(areaSize); |
| | | } |
| | | } |
| | | if (BigDecimal.ZERO.compareTo(total) == 0) { |
| | | return 0; |
| | | } |
| | | BigDecimal totalArea = total.multiply(AREA_SIZE_FACTOR); |
| | | return totalArea.setScale(0, RoundingMode.HALF_UP).intValue(); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public List<FwDefenseSceneExcel> exportFwDefenseScene(Wrapper<FwDefenseSceneEntity> queryWrapper) { |
| | | List<FwDefenseSceneExcel> fwDefenseSceneList = baseMapper.exportFwDefenseScene(queryWrapper); |
| | | //fwDefenseSceneList.forEach(fwDefenseScene -> { |
| | | // fwDefenseScene.setTypeName(DictCache.getValue(DictEnum.YES_NO, FwDefenseScene.getType())); |
| | | //}); |
| | | return fwDefenseSceneList; |
| | | } |
| | | |
| | |
| | | } else { |
| | | fillUpdateFields(fwDefenseScene); |
| | | } |
| | | String areaDivideIds = fwDefenseScene.getAreaDivideIds(); |
| | | |
| | | // 处理区域划分的新增和删除 |
| | | if (fwDefenseScene.getId() != null) { |
| | | // 更新操作,需要比较旧的areaDivideIds |
| | | FwDefenseSceneEntity oldEntity = baseMapper.selectById(fwDefenseScene.getId()); |
| | | if (oldEntity != null) { |
| | | String oldAreaDivideIds = oldEntity.getAreaDivideIds(); |
| | | |
| | | // 解析新旧区域划分ID列表 |
| | | Set<Long> oldAreaIds = parseAreaDivideIds(oldAreaDivideIds); |
| | | Set<Long> newAreaIds = parseAreaDivideIds(areaDivideIds); |
| | | |
| | | // 找出新增的区域划分ID |
| | | Set<Long> addedAreaIds = new HashSet<>(); |
| | | for (Long id : newAreaIds) { |
| | | if (!oldAreaIds.contains(id)) { |
| | | addedAreaIds.add(id); |
| | | } |
| | | } |
| | | |
| | | // 找出删除的区域划分ID |
| | | Set<Long> removedAreaIds = new HashSet<>(); |
| | | for (Long id : oldAreaIds) { |
| | | if (!newAreaIds.contains(id)) { |
| | | removedAreaIds.add(id); |
| | | } |
| | | } |
| | | |
| | | // 处理删除的区域划分对应的设备(禁用) |
| | | if (!removedAreaIds.isEmpty()) { |
| | | List<FwAreaDivideEntity> removedAreas = fwAreaDivideService.listByIds(new ArrayList<>(removedAreaIds)); |
| | | List<Long> removedDeviceIds = removedAreas.stream() |
| | | .map(item -> Func.toLongList(item.getDeviceIds())) |
| | | .flatMap(List::stream) |
| | | .collect(Collectors.toList()); |
| | | if (!removedDeviceIds.isEmpty()) { |
| | | // 禁用设备 |
| | | disableDevices(removedDeviceIds); |
| | | } |
| | | } |
| | | |
| | | // 处理新增的区域划分对应的设备(启用) |
| | | if (!addedAreaIds.isEmpty()) { |
| | | List<FwAreaDivideEntity> addedAreas = fwAreaDivideService.listByIds(new ArrayList<>(addedAreaIds)); |
| | | List<Long> addedDeviceIds = addedAreas.stream() |
| | | .map(item -> Func.toLongList(item.getDeviceIds())) |
| | | .flatMap(List::stream) |
| | | .collect(Collectors.toList()); |
| | | if (!addedDeviceIds.isEmpty()) { |
| | | // 启用设备 |
| | | enableDevices(addedDeviceIds); |
| | | } |
| | | } |
| | | } |
| | | } else { |
| | | // 新增操作,所有区域划分都是新增的,启用对应设备 |
| | | List<FwAreaDivideEntity> fwAreaDivideEntities = fwAreaDivideService.listByIds(Func.toLongList(areaDivideIds)); |
| | | List<Long> addedDeviceIds = fwAreaDivideEntities.stream() |
| | | .map(item -> Func.toLongList(item.getDeviceIds())) |
| | | .flatMap(List::stream) |
| | | .collect(Collectors.toList()); |
| | | if (!addedDeviceIds.isEmpty()) { |
| | | // 启用设备 |
| | | enableDevices(addedDeviceIds); |
| | | } |
| | | } |
| | | |
| | | return super.saveOrUpdate(fwDefenseScene); |
| | | } |
| | | |
| | | /** |
| | | * 解析区域划分ID字符串为集合 |
| | | * @param areaDivideIds 区域划分ID字符串,逗号分隔 |
| | | * @return 区域划分ID集合 |
| | | */ |
| | | private Set<Long> parseAreaDivideIds(String areaDivideIds) { |
| | | Set<Long> areaIdSet = new HashSet<>(); |
| | | if (StringUtil.isNotBlank(areaDivideIds)) { |
| | | List<Long> ids = Func.toLongList(areaDivideIds); |
| | | areaIdSet.addAll(ids); |
| | | } |
| | | return areaIdSet; |
| | | } |
| | | |
| | | /** |
| | | * 启用设备 |
| | | * @param deviceIds 设备ID列表 |
| | | */ |
| | | private void enableDevices(List<Long> deviceIds) { |
| | | if (deviceIds != null && !deviceIds.isEmpty()) { |
| | | // 实现设备启用逻辑 |
| | | // 这里假设FwDeviceEntity有enabled字段,1表示启用,0表示禁用 |
| | | for (Long deviceId : deviceIds) { |
| | | FwDeviceEntity device = new FwDeviceEntity(); |
| | | device.setId(deviceId); |
| | | device.setIsEnabled(true); |
| | | fwDeviceService.updateById(device); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 禁用设备 |
| | | * @param deviceIds 设备ID列表 |
| | | */ |
| | | private void disableDevices(List<Long> deviceIds) { |
| | | if (deviceIds != null && !deviceIds.isEmpty()) { |
| | | // 实现设备禁用逻辑 |
| | | // 这里假设FwDeviceEntity有enabled字段,1表示启用,0表示禁用 |
| | | for (Long deviceId : deviceIds) { |
| | | FwDeviceEntity device = new FwDeviceEntity(); |
| | | device.setId(deviceId); |
| | | device.setIsEnabled(false); |
| | | fwDeviceService.updateById(device); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 逻辑删除防控场景,并处理关联设备的禁用 |
| | | * @param ids 防控场景ID列表 |
| | | * @return 是否删除成功 |
| | | */ |
| | | @Override |
| | | public boolean deleteLogic(List<Long> ids) { |
| | | if (ids == null || ids.isEmpty()) { |
| | | return false; |
| | | } |
| | | |
| | | // 先获取要删除的防控场景 |
| | | List<FwDefenseSceneEntity> scenes = listByIds(ids); |
| | | if (scenes == null || scenes.isEmpty()) { |
| | | return false; |
| | | } |
| | | |
| | | // 收集所有相关的区域划分ID |
| | | Set<Long> areaDivideIds = new HashSet<>(); |
| | | for (FwDefenseSceneEntity scene : scenes) { |
| | | if (scene != null && StringUtil.isNotBlank(scene.getAreaDivideIds())) { |
| | | areaDivideIds.addAll(Func.toLongList(scene.getAreaDivideIds())); |
| | | } |
| | | } |
| | | |
| | | // 收集所有相关的设备ID |
| | | List<Long> deviceIds = new ArrayList<>(); |
| | | if (!areaDivideIds.isEmpty()) { |
| | | List<FwAreaDivideEntity> areas = fwAreaDivideService.listByIds(new ArrayList<>(areaDivideIds)); |
| | | deviceIds = areas.stream() |
| | | .map(item -> Func.toLongList(item.getDeviceIds())) |
| | | .flatMap(List::stream) |
| | | .collect(Collectors.toList()); |
| | | } |
| | | |
| | | // 禁用相关设备 |
| | | if (!deviceIds.isEmpty()) { |
| | | disableDevices(deviceIds); |
| | | } |
| | | |
| | | // 执行逻辑删除 |
| | | return super.deleteLogic(ids); |
| | | } |
| | | |
| | | private void fillCreateFields(FwDefenseSceneEntity fwDefenseScene) { |
| | | Long userId = AuthUtil.getUserId(); |
| | | String deptIdStr = AuthUtil.getDeptId(); |