@ -7,6 +7,7 @@ import com.inspect.metadata.patrolpointmnt.domain.BasedataPatrolPoint;
import com.inspect.metadata.patrolpointmnt.domain.BasedataPatrolPointPreset ;
import com.inspect.metadata.patrolpointmnt.mapper.BasedataPatrolPointMapper ;
import com.inspect.metadata.patrolpointmnt.mapper.BasedataPatrolPointPresetMapper ;
import com.inspect.metadata.patrolpointmnt.service.IBasedataPatrolPointService ;
import com.inspect.metadata.prodevmnt.domain.BasedataDevice ;
import com.inspect.metadata.prodevmnt.domain.BasedataDeviceType ;
import com.inspect.metadata.prodevmnt.domain.BasedataModelDevice ;
@ -63,10 +64,20 @@ public class BasedataDeviceServiceImpl implements IBasedataDeviceService {
return this . basedataDeviceMapper . selectBasedataDeviceByDeviceId ( deviceId ) ;
}
@Override
public BasedataDevice selectBasedataDeviceRelationByDeviceId ( Long toDeviceId ) {
return this . basedataDeviceMapper . selectBasedataDeviceRelationByDeviceId ( toDeviceId ) ;
}
public List < BasedataDevice > selectBasedataDeviceList ( BasedataDevice basedataDevice ) {
return this . basedataDeviceMapper . selectBasedataDeviceList ( basedataDevice ) ;
}
@Override
public Boolean updateBasedataDeviceRelation ( Long toAreaId , Long deviceId ) {
return basedataDeviceMapper . updateBasedataDeviceRelation ( toAreaId , deviceId ) > 0 ;
}
public List < TreeModule > selectAreaAndDeviceTree ( BasedataDevice basedataDevice ) {
return this . basedataDeviceMapper . selectAreaAndDeviceTree ( basedataDevice ) ;
}
@ -241,9 +252,173 @@ public class BasedataDeviceServiceImpl implements IBasedataDeviceService {
areaVOS . add ( deviceVO ) ;
}
return AreaDeviceTreeSelectUtil . buildDeviceTreeFilterByAreaName ( areaVOS , filterNamelist ) ;
List < AreaDeviceTreeSelect > treeList = AreaDeviceTreeSelectUtil . buildDeviceTreeFilterByAreaName ( areaVOS , filterNamelist ) ;
/ / 新增 : 填充点位统计
fillPointNumAndPatrolPoints ( areaVOS , treeList ) ;
return treeList ;
}
/ * *
* 填充 pointNum 和 basedataPatrolPoints
* @param allNodes 平面节点列表 ( 包含所有区域和设备节点 )
* @param treeList 构建后的树根节点列表
* /
private void fillPointNumAndPatrolPoints ( List < AreaDeviceTreeSelect > allNodes , List < AreaDeviceTreeSelect > treeList ) {
/ / 收集所有设备ID
Set < Long > deviceIds = new HashSet < > ( ) ;
for ( AreaDeviceTreeSelect node : allNodes ) {
if ( node . getDeviceId ( ) ! = null ) {
deviceIds . add ( node . getDeviceId ( ) ) ;
}
}
if ( deviceIds . isEmpty ( ) ) {
return ;
}
/ / 批量查询点位
List < BasedataPatrolPoint > patrolPoints = basedataPatrolPointMapper . selectBasedataPatrolPointListByDeviceIds ( new ArrayList < > ( deviceIds ) ) ;
/ / 按设备ID分组
Map < Long , List < BasedataPatrolPoint > > devicePatrolMap = patrolPoints . stream ( )
. collect ( Collectors . groupingBy ( BasedataPatrolPoint : : getDeviceId ) ) ;
/ / 递归设置统计值
setPointNumAndPatrolPoints ( treeList , devicePatrolMap ) ;
}
/ * *
* 递归设置 pointNum 和 basedataPatrolPoints信息
* /
private void setPointNumAndPatrolPoints ( List < AreaDeviceTreeSelect > nodes , Map < Long , List < BasedataPatrolPoint > > devicePatrolMap ) {
for ( AreaDeviceTreeSelect node : nodes ) {
long pointNum = 0L ;
/ / 处理设备节点自身点位
if ( node . getDeviceId ( ) ! = null ) {
List < BasedataPatrolPoint > patrols = devicePatrolMap . get ( node . getDeviceId ( ) ) ;
if ( patrols ! = null ) {
pointNum + = patrols . size ( ) ;
/ / 叶子节点 ( 无子节点 ) 才设置点位列表
if ( node . getChildren ( ) = = null | | node . getChildren ( ) . isEmpty ( ) ) {
List < BasedataPatrolPoint > basedataPatrolPoints = devicePatrolMap . get ( node . getDeviceId ( ) ) ;
List < AreaDeviceTreeSelect > patrolPoints = new ArrayList < > ( ) ;
for ( BasedataPatrolPoint basedataPatrolPoint : basedataPatrolPoints ) {
AreaDeviceTreeSelect patrolVO = new AreaDeviceTreeSelect ( ) ;
patrolVO . setPatrolPointName ( basedataPatrolPoint . getPatrolPointName ( ) ) ;
patrolVO . setDeviceName ( basedataPatrolPoint . getPatrolPointName ( ) ) ;
patrolVO . setPatrolPointId ( String . valueOf ( basedataPatrolPoint . getPatrolPointId ( ) ) ) ;
patrolPoints . add ( patrolVO ) ;
}
/ / 设置点位列表到节点上
node . setChildren ( patrolPoints ) ;
}
}
}
/ / 递归处理子节点
if ( node . getChildren ( ) ! = null & & ! node . getChildren ( ) . isEmpty ( ) ) {
setPointNumAndPatrolPoints ( node . getChildren ( ) , devicePatrolMap ) ;
/ / 累加子节点 pointNum
for ( AreaDeviceTreeSelect child : node . getChildren ( ) ) {
pointNum + = child . getPointNum ( ) ! = null ? child . getPointNum ( ) : 0L ;
}
}
node . setPointNum ( pointNum ) ;
}
}
/ * *
* 与fillPointNumAndPatrolPoints区别在于查询的表不一样 此处用的是basedata_patrolpoint_relation表 , 用于迁移数据使用
* /
private void fillPointNumAndPatrolPointsRelation ( List < AreaDeviceTreeSelect > allNodes , List < AreaDeviceTreeSelect > treeList ) {
/ / 收集所有设备ID
Set < Long > deviceIds = new HashSet < > ( ) ;
for ( AreaDeviceTreeSelect node : allNodes ) {
if ( node . getDeviceId ( ) ! = null ) {
deviceIds . add ( node . getDeviceId ( ) ) ;
}
}
if ( deviceIds . isEmpty ( ) ) {
return ;
}
/ / 批量查询点位
List < BasedataPatrolPoint > patrolPoints = basedataPatrolPointMapper . selectBasedataPatrolPointRelationListByDeviceIds ( new ArrayList < > ( deviceIds ) ) ;
/ / 按设备ID分组
Map < Long , List < BasedataPatrolPoint > > devicePatrolMap = patrolPoints . stream ( )
. collect ( Collectors . groupingBy ( BasedataPatrolPoint : : getDeviceId ) ) ;
/ / 递归设置统计值
setPointNumAndPatrolPoints ( treeList , devicePatrolMap ) ;
}
public List < AreaDeviceTreeSelect > buildAreaDeviceTreeSelectByAreasFilterByPresetRelation ( List < BaseDataArea > areas , List < String > filterNamelist ) {
ArrayList < Long > areaIdList = new ArrayList < > ( ) ;
HashMap < Long , BaseDataArea > areaMap = new HashMap < > ( ) ;
HashMap < Long , BasedataDevice > deviceHashMap = new HashMap < > ( ) ;
List < AreaDeviceTreeSelect > areaVOS = new ArrayList < > ( ) ;
for ( BaseDataArea area : areas ) {
areaIdList . add ( area . getAreaId ( ) ) ;
areaMap . put ( area . getAreaId ( ) , area ) ;
AreaDeviceTreeSelect areaVO = new AreaDeviceTreeSelect ( ) ;
areaVO . setDataId ( String . valueOf ( area . getAreaId ( ) ) ) ;
areaVO . setParentId ( String . valueOf ( area . getParentId ( ) ) ) ;
areaVO . setAreaId ( area . getAreaId ( ) ) ;
areaVO . setAreaFlag ( "Yes" ) ;
areaVO . setAreaParentId ( area . getParentId ( ) ) ;
areaVO . setAreaName ( area . getAreaName ( ) ) ;
areaVO . setAreaType ( area . getAreaType ( ) ) ;
areaVOS . add ( areaVO ) ;
}
BasedataDevice basedataDeviceQuery = new BasedataDevice ( ) ;
Map < String , Object > params = new HashMap < > ( ) ;
params . put ( "areaIdList" , areaIdList ) ;
basedataDeviceQuery . setParams ( params ) ;
List < BasedataDevice > deviceList = this . basedataDeviceMapper . selectBasedataDeviceRelationList ( basedataDeviceQuery ) ;
Iterator < BasedataDevice > iterator = deviceList . iterator ( ) ;
BasedataDevice basedataDevice ;
while ( iterator . hasNext ( ) ) {
basedataDevice = iterator . next ( ) ;
deviceHashMap . put ( basedataDevice . getDeviceId ( ) , basedataDevice ) ;
}
iterator = deviceList . iterator ( ) ;
while ( iterator . hasNext ( ) ) {
basedataDevice = iterator . next ( ) ;
AreaDeviceTreeSelect deviceVO = new AreaDeviceTreeSelect ( ) ;
StringBuilder idBuilder = new StringBuilder ( ) ;
StringBuilder pIdBuilder = new StringBuilder ( ) ;
this . getAreaDeviceTreeDeviceCode ( basedataDevice . getDeviceId ( ) , areaMap , deviceHashMap , idBuilder , pIdBuilder ) ;
deviceVO . setDataId ( idBuilder . toString ( ) ) ;
deviceVO . setParentId ( pIdBuilder . toString ( ) ) ;
deviceVO . setAreaId ( basedataDevice . getAreaId ( ) ) ;
deviceVO . setDeviceParentId ( basedataDevice . getParentId ( ) ) ;
deviceVO . setDeviceId ( basedataDevice . getDeviceId ( ) ) ;
deviceVO . setDeviceName ( basedataDevice . getDeviceName ( ) ) ;
deviceVO . setPowerMainEquFlag ( basedataDevice . getPowerMainEquFlag ( ) ) ;
deviceVO . setPositionX ( basedataDevice . getPositionX ( ) ) ;
deviceVO . setPositionY ( basedataDevice . getPositionY ( ) ) ;
deviceVO . setPositionZ ( basedataDevice . getPositionZ ( ) ) ;
deviceVO . setDeviceLength ( basedataDevice . getDeviceLength ( ) ) ;
deviceVO . setDeviceWidth ( basedataDevice . getDeviceWidth ( ) ) ;
deviceVO . setDeviceHigh ( basedataDevice . getDeviceHeight ( ) ) ;
areaVOS . add ( deviceVO ) ;
}
List < AreaDeviceTreeSelect > treeList = AreaDeviceTreeSelectUtil . buildDeviceTreeFilterByAreaName ( areaVOS , filterNamelist ) ;
/ / 新增 : 填充点位统计
fillPointNumAndPatrolPointsRelation ( areaVOS , treeList ) ;
return treeList ;
}
public List < AreaDeviceTreeSelect > buildAreaDeviceTreeSelectByAreasFilterByMeter ( List < BaseDataArea > areas ) {
ArrayList < Long > areaIdList = new ArrayList < > ( ) ;
HashMap < Long , BaseDataArea > areaMap = new HashMap < > ( ) ;