| | |
| | | */ |
| | | package org.sxkj.fw.device.service.impl; |
| | | |
| | | import org.sxkj.fw.device.entity.FwDeviceEntity; |
| | | import org.sxkj.fw.device.vo.FwDeviceVO; |
| | | import org.sxkj.fw.device.excel.FwDeviceExcel; |
| | | import org.sxkj.fw.device.mapper.FwDeviceMapper; |
| | | import org.sxkj.fw.device.service.IFwDeviceService; |
| | | import org.springframework.stereotype.Service; |
| | | import com.baomidou.mybatisplus.core.conditions.Wrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import org.springblade.core.mp.base.BaseServiceImpl; |
| | | import org.springblade.core.mp.support.Condition; |
| | | import org.springblade.core.mp.support.Query; |
| | | import org.springblade.core.secure.utils.AuthUtil; |
| | | import org.springblade.core.tool.utils.StringUtil; |
| | | import org.springframework.stereotype.Service; |
| | | import org.sxkj.fw.area.service.IFwAreaDivideService; |
| | | import org.sxkj.fw.cockpit.vo.AlarmStatisticsVO; |
| | | import org.sxkj.fw.cockpit.vo.DeviceStatisticsVO; |
| | | import org.sxkj.fw.common.GenericConverter; |
| | | import org.sxkj.fw.device.dto.FwDeviceDTO; |
| | | import org.sxkj.fw.device.dto.FwDevicePolygonQueryDTO; |
| | | import org.sxkj.fw.device.entity.FwDeviceEntity; |
| | | import org.sxkj.fw.device.excel.FwDeviceExcel; |
| | | import org.sxkj.fw.device.mapper.FwDeviceMapper; |
| | | import org.sxkj.fw.device.param.FwDevicePageParam; |
| | | import org.sxkj.fw.device.service.IFwDeviceService; |
| | | import org.sxkj.fw.device.vo.CockpitFwDeviceVO; |
| | | import org.sxkj.fw.device.vo.DeviceTypeStatisticsVO; |
| | | import org.sxkj.fw.device.vo.FwDeviceVO; |
| | | import org.sxkj.fw.device.wrapper.FwDeviceWrapper; |
| | | import org.sxkj.system.cache.RegionCache; |
| | | import org.sxkj.system.cache.SysCache; |
| | | import org.sxkj.system.entity.Region; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 反无设备表 服务实现类 |
| | | * 设备表 服务实现类 |
| | | * |
| | | * @author AIX |
| | | * @since 2026-01-06 |
| | | * @author aix |
| | | * @since 2026-01-08 |
| | | */ |
| | | @Service |
| | | public class FwDeviceServiceImpl extends BaseServiceImpl<FwDeviceMapper, FwDeviceEntity> implements IFwDeviceService { |
| | | |
| | | @Resource |
| | | private IFwAreaDivideService fwAreaDivideService; |
| | | |
| | | @Override |
| | | public IPage<FwDeviceVO> selectFwDevicePage(IPage<FwDeviceVO> page, FwDeviceVO fwDevice) { |
| | | public IPage<FwDeviceEntity> selectFwDevicePage(IPage<FwDeviceEntity> page, FwDeviceDTO fwDevice) { |
| | | return page.setRecords(baseMapper.selectFwDevicePage(page, fwDevice)); |
| | | } |
| | | |
| | | @Override |
| | | public IPage<FwDeviceVO> selectFwDevicePageVo(FwDevicePageParam fwDevice, Query query) { |
| | | FwDeviceDTO fwDeviceDTO = GenericConverter.convert(fwDevice, FwDeviceDTO.class); |
| | | // 按当前部门及下级部门范围过滤数据 |
| | | if (!AuthUtil.isAdministrator()) { |
| | | List<Long> deptList = SysCache.getDeptChildIds(Long.valueOf(AuthUtil.getDeptId())); |
| | | fwDeviceDTO.setDeptList(deptList); |
| | | } |
| | | fwDeviceDTO.setCurrentDeptId(AuthUtil.getDeptId()); |
| | | // 按区域范围过滤数据 |
| | | IPage<FwDeviceEntity> pages = selectFwDevicePage(Condition.getPage(query), fwDeviceDTO); |
| | | IPage<FwDeviceVO> result = FwDeviceWrapper.build().pageVO(pages); |
| | | List<FwDeviceVO> records = result.getRecords(); |
| | | if (records != null && !records.isEmpty()) { |
| | | List<Long> deviceIds = records.stream() |
| | | .map(FwDeviceVO::getId) |
| | | .filter(id -> id != null) |
| | | .collect(Collectors.toList()); |
| | | // 批量补充设备关联场景名称 |
| | | Map<Long, String> sceneNameMap = selectSceneNameByDeviceIds(deviceIds); |
| | | for (FwDeviceVO record : records) { |
| | | String sceneName = sceneNameMap.get(record.getId()); |
| | | record.setSceneName(StringUtil.isBlank(sceneName) ? "/" : sceneName); |
| | | } |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | @Override |
| | | public List<FwDeviceEntity> selectFwDeviceList(Integer isAreaSelect, Long areaId, List<Long> areaIds, Integer status, Integer isTrack) { |
| | | return baseMapper.selectFwDeviceList(isAreaSelect, areaId, areaIds, status, isTrack); |
| | | } |
| | | |
| | | @Override |
| | | public List<FwDeviceEntity> selectFwDeviceListByPolygons(FwDevicePolygonQueryDTO query) { |
| | | return baseMapper.selectFwDeviceListByPolygons(query); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public List<FwDeviceExcel> exportFwDevice(Wrapper<FwDeviceEntity> queryWrapper) { |
| | | List<FwDeviceExcel> fwDeviceList = baseMapper.exportFwDevice(queryWrapper); |
| | | //fwDeviceList.forEach(fwDevice -> { |
| | | // fwDeviceList.forEach(fwDevice -> { |
| | | // fwDevice.setTypeName(DictCache.getValue(DictEnum.YES_NO, FwDevice.getType())); |
| | | //}); |
| | | return fwDeviceList; |
| | | } |
| | | |
| | | /** |
| | | * 获取设备列表 |
| | | * |
| | | * @param page |
| | | * @param fwDevice |
| | | * @return |
| | | */ |
| | | @Override |
| | | public IPage<CockpitFwDeviceVO> selectCockpitDevicePage(IPage<CockpitFwDeviceVO> page, FwDeviceDTO fwDevice) { |
| | | List<CockpitFwDeviceVO> cockpitFwDeviceVOS = baseMapper.selectCockpitDevicePage(page, fwDevice); |
| | | return page.setRecords(cockpitFwDeviceVOS); |
| | | } |
| | | |
| | | /** |
| | | * 设备类型统计 |
| | | * |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<DeviceStatisticsVO> statisticalDeviceType(String regionCode, String currentDeptId) { |
| | | return baseMapper.statisticalDeviceType(regionCode, currentDeptId); |
| | | } |
| | | |
| | | /** |
| | | * 设备统计 - 按类型统计 |
| | | * |
| | | * @return 统计数据 |
| | | */ |
| | | @Override |
| | | public List<DeviceTypeStatisticsVO> getDeviceTypeStatistics() { |
| | | // 统计范围限定在当前部门及下级部门 |
| | | List<Long> deptList = new ArrayList<>(); |
| | | if (!AuthUtil.isAdministrator()) { |
| | | deptList = SysCache.getDeptChildIds(Long.valueOf(AuthUtil.getDeptId())); |
| | | } |
| | | List<DeviceTypeStatisticsVO> deviceTypeStatistics = baseMapper.getDeviceTypeStatistics(deptList, AuthUtil.getDeptId()); |
| | | return deviceTypeStatistics; |
| | | } |
| | | |
| | | @Override |
| | | public List<DeviceStatisticsVO> getDeviceOutStatistics(String effectiveRangeKmIsNotNull) { |
| | | // 统计范围限定在当前部门及下级部门 |
| | | List<Long> deptList = new ArrayList<>(); |
| | | if (!AuthUtil.isAdministrator()) { |
| | | deptList = SysCache.getDeptChildIds(Long.valueOf(AuthUtil.getDeptId())); |
| | | } |
| | | return baseMapper.getDeviceOutStatistics(effectiveRangeKmIsNotNull, deptList, AuthUtil.getDeptId()); |
| | | } |
| | | |
| | | @Override |
| | | public List<DeviceStatisticsVO> getDeviceManufacturerStatistics() { |
| | | // 统计范围限定在当前部门及下级部门 |
| | | List<Long> deptList = new ArrayList<>(); |
| | | if (!AuthUtil.isAdministrator()) { |
| | | deptList = SysCache.getDeptChildIds(Long.valueOf(AuthUtil.getDeptId())); |
| | | } |
| | | return baseMapper.getDeviceManufacturerStatistics(deptList, AuthUtil.getDeptId()); |
| | | } |
| | | |
| | | /** |
| | | * 设备属性统计 |
| | | * |
| | | * @return |
| | | */ |
| | | @Override |
| | | public AlarmStatisticsVO statisticalDeviceAtt(String regionCode, String currentDeptId) { |
| | | return baseMapper.statisticalDeviceAtt(regionCode, currentDeptId); |
| | | } |
| | | |
| | | @Override |
| | | public Map<Long, String> selectSceneNameByDeviceIds(List<Long> deviceIds) { |
| | | return fwAreaDivideService.selectSceneNameByDeviceIds(deviceIds); |
| | | } |
| | | |
| | | @Override |
| | | public boolean existsAreaBindByDeviceId(Long deviceId) { |
| | | return fwAreaDivideService.existsAreaByDeviceId(deviceId); |
| | | } |
| | | |
| | | /** |
| | | * 保存或更新设备信息 |
| | | * |
| | | * @param fwDeviceEntity |
| | | * @return |
| | | */ |
| | | @Override |
| | | public boolean saveOrUpdateDevice(FwDeviceEntity fwDeviceEntity) { |
| | | // 无效范围时清空坐标,避免显示无意义位置 |
| | | if (fwDeviceEntity.getEffectiveRangeKm() == null || fwDeviceEntity.getEffectiveRangeKm().compareTo(BigDecimal.ZERO) == 0) { |
| | | fwDeviceEntity.setLatitude(""); |
| | | fwDeviceEntity.setLongitude(""); |
| | | } |
| | | return saveOrUpdate(fwDeviceEntity); |
| | | } |
| | | |
| | | @Override |
| | | public boolean updateTrackStatusByDeviceId(Long deviceId, Integer trackStatus, String outTarget, String outTargetCode) { |
| | | return baseMapper.updateTrackStatusByDeviceId(deviceId, trackStatus, outTarget, outTargetCode) > 0; |
| | | } |
| | | |
| | | /** |
| | | * 查询非本部门区域的设备 |
| | | * |
| | | * @param regionCode 区域编码,用于查询不在该区域内的设备 |
| | | * @param deptId 机构ID,用于限定查询范围 |
| | | * @return 设备列表 |
| | | */ |
| | | @Override |
| | | public List<FwDeviceVO> getNonDeptAreaDevices(String regionCode, String deptId) { |
| | | // 1. 根据区域编码获取区域名称 |
| | | Region region = RegionCache.getByCode(regionCode); |
| | | String regionName = region != null ? region.getName() : null; |
| | | // 2. 查询不在这些部门区域内的设备 |
| | | List<FwDeviceVO> deviceList = baseMapper.selectNonDeptAreaDevices(regionName, deptId); |
| | | return deviceList; |
| | | } |
| | | |
| | | @Override |
| | | public List<DeviceStatisticsVO> getDeviceStatistics(FwDeviceDTO fwDeviceDTO) { |
| | | return baseMapper.getDeviceStatistics(fwDeviceDTO); |
| | | } |
| | | } |