package com.moral.service.impl;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.TypeReference;
|
import com.moral.entity.*;
|
import com.moral.entity.layout.RealTimeDeviceLayout;
|
import com.moral.entity.layout.RtdLayoutUpload;
|
import com.moral.entity.layout.SensorComb;
|
import com.moral.mapper.DictionaryDataMapper;
|
import com.moral.mapper.OrganizationLayoutMapper;
|
import com.moral.mapper.OrganizationSensorUnitMapper;
|
import com.moral.mapper.SensorMapper;
|
import com.moral.service.OrganizationLayoutService;
|
import org.springframework.data.annotation.Transient;
|
import org.springframework.stereotype.Service;
|
import tk.mybatis.mapper.entity.Example;
|
|
import javax.annotation.Resource;
|
import javax.naming.Name;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
@Service
|
public class OrganizationLayoutServiceImpl implements OrganizationLayoutService{
|
@Resource
|
SensorMapper sensorMapper;
|
@Resource
|
OrganizationLayoutMapper orgLayoutMapper;
|
@Resource
|
OrganizationSensorUnitMapper orgUnitMapper;
|
private static String pageLayoutFixedItems = "page_layout_fixed_items";
|
@Resource
|
DictionaryDataMapper dataMapper;
|
private DictionaryData queryDictionaryData(String dictDataKey) {
|
DictionaryData query = new DictionaryData();
|
query.setDictDataKey(dictDataKey);
|
List<DictionaryData> dataList = dataMapper.select(query);
|
List<String> fixedItemKeys = new ArrayList<>();
|
if(dataList.size()>0) {
|
return dataList.get(0);
|
}
|
return null;
|
}
|
@Override
|
public List<String> getFixedItemKeys() {
|
DictionaryData dictionaryData = queryDictionaryData(pageLayoutFixedItems);
|
List<String> fixedItemKeys = new ArrayList<>();
|
if(dictionaryData!=null && dictionaryData.getDictDataValue()!=null ) {
|
List<String> keyList = JSON.parseObject(dictionaryData.getDictDataValue().toString(),
|
new TypeReference<List<String>>(){});
|
if(keyList!=null) {
|
fixedItemKeys.addAll(keyList);
|
}
|
}
|
return fixedItemKeys;
|
}
|
public Integer queryPageConfigCountByOrgId(Integer orgId,String pageType) {
|
OrganizationLayout query = new OrganizationLayout();
|
query.setOrganizationId(orgId);
|
query.setPageType(pageType);
|
return orgLayoutMapper.selectCount(query);
|
}
|
@Override
|
public RealTimeDeviceLayout queryRealTimeDeviceLayout(Integer orgId,Integer version){
|
String pageType = getPageType(version);
|
if(queryPageConfigCountByOrgId(orgId,pageType) > 0) {
|
RealTimeDeviceLayout rtdLayout = new RealTimeDeviceLayout();
|
Example example = new Example(OrganizationLayout.class);
|
// 升序排序
|
example.orderBy("pagePositionIndex").asc();
|
// 查询图表key
|
example.or().andEqualTo("pageType",pageType)
|
.andEqualTo("organizationId",orgId)
|
.andEqualTo("pagePosition",RealTimeDeviceLayout.ChartSensorKey);
|
List<OrganizationLayout> ChartSensorKeys = orgLayoutMapper.selectByExample(example);
|
if(ChartSensorKeys.size()>0) {
|
rtdLayout.setChartSensorKey(ChartSensorKeys.get(0).getPagePositionValue());
|
}
|
// 查询默认区
|
example.clear();
|
example.or().andEqualTo("pageType",pageType)
|
.andEqualTo("organizationId",orgId)
|
.andEqualTo("pagePosition",RealTimeDeviceLayout.DefaultMonitorItems);
|
List<OrganizationLayout> defaultMonitorItems = orgLayoutMapper.selectByExample(example);
|
List<SensorComb> defaultSensorCombList = defaultMonitorItems.stream().map(
|
item-> {
|
SensorComb sensorComb = new SensorComb();
|
sensorComb.setSensorKey(item.getPagePositionValue());
|
sensorComb.setIndex(item.getPagePositionIndex());
|
return sensorComb;
|
}
|
).collect(Collectors.toList());
|
rtdLayout.setDefaultMonitorItems(defaultSensorCombList);
|
// 查询核心区
|
example.clear();
|
example.or().andEqualTo("pageType",pageType)
|
.andEqualTo("organizationId",orgId)
|
.andEqualTo("pagePosition",RealTimeDeviceLayout.CoreMonitorItems);
|
List<OrganizationLayout> coreMonitorItems = orgLayoutMapper.selectByExample(example);
|
List<SensorComb> coreSensorCombList = coreMonitorItems.stream().map(
|
item-> {
|
SensorComb sensorComb = new SensorComb();
|
sensorComb.setSensorKey(item.getPagePositionValue());
|
sensorComb.setIndex(item.getPagePositionIndex());
|
return sensorComb;
|
}
|
).collect(Collectors.toList());
|
rtdLayout.setCoreMonitorItems(coreSensorCombList);
|
// 查询固定区
|
example.clear();
|
example.or().andEqualTo("pageType",pageType)
|
.andEqualTo("organizationId",orgId)
|
.andEqualTo("pagePosition",RealTimeDeviceLayout.FixedMonitorItems);
|
List<OrganizationLayout> fixedMonitorItems = orgLayoutMapper.selectByExample(example);
|
List<SensorComb> fixedSensorCombList = fixedMonitorItems.stream().map(
|
item-> {
|
SensorComb sensorComb = new SensorComb();
|
sensorComb.setSensorKey(item.getPagePositionValue());
|
sensorComb.setIndex(item.getPagePositionIndex());
|
return sensorComb;
|
}
|
).collect(Collectors.toList());
|
rtdLayout.setFixedMonitorItems(fixedSensorCombList);
|
this.loadSensorToComb(rtdLayout);
|
return rtdLayout;
|
}
|
return null;
|
}
|
private void loadSensorToComb(RealTimeDeviceLayout rtdLayout) {
|
List<SensorComb> allSensorCombList = new ArrayList<>();
|
allSensorCombList.addAll(rtdLayout.getCoreMonitorItems());
|
allSensorCombList.addAll(rtdLayout.getDefaultMonitorItems());
|
allSensorCombList.addAll(rtdLayout.getFixedMonitorItems());
|
List<String> sensorKeyList = allSensorCombList.stream().map(
|
item -> {
|
return item.getSensorKey();
|
}
|
).collect(Collectors.toList());
|
Example example = new Example(Sensor.class);
|
example.or().andIn("sensorKey",sensorKeyList);
|
List<Sensor> sensorList = sensorMapper.selectByExample(example);
|
for (SensorComb sensorComb: allSensorCombList) {
|
for (Sensor sensor :sensorList) {
|
if(sensor.getSensorKey()!=null
|
&&sensor.getSensorKey().equals(sensorComb.getSensorKey())){
|
sensorComb.setName(sensor.getDescription());
|
sensorComb.setSensorId(sensor.getId());
|
sensorComb.setSourceUnit(sensor.getUnit());
|
sensorComb.setTargetUnit(sensor.getUnit());
|
}
|
}
|
}
|
}
|
public static String getPageType(Integer version) {
|
return RealTimeDeviceLayout.PageTypePrefix + version.toString();
|
}
|
@Transient
|
@Override
|
public void saveRtdLayout(RtdLayoutUpload rtdUpload) {
|
|
String pageType = getPageType(rtdUpload.getVersion());
|
Integer orgId = rtdUpload.getOrganizationId();
|
RealTimeDeviceLayout rtdLayout = rtdUpload.getRealTimeDeviceLayout();
|
// 清空旧数据
|
this.deleteRtdLayout(orgId,rtdUpload.getVersion());
|
OrganizationLayout orgLayout = new OrganizationLayout();
|
orgLayout.setOrganizationId(orgId);
|
orgLayout.setPageType(pageType);
|
// 储存chartSensorKey
|
orgLayout.setPagePosition(RealTimeDeviceLayout.ChartSensorKey);
|
orgLayout.setPagePositionIndex(0);
|
orgLayout.setPagePositionValue(rtdLayout.getChartSensorKey());
|
orgLayoutMapper.insert(orgLayout);
|
// 储存核心区
|
List<SensorComb> coreSensorList = rtdLayout.getCoreMonitorItems();
|
orgLayout.setPagePosition(RealTimeDeviceLayout.CoreMonitorItems);
|
if( coreSensorList !=null ) {
|
for(int index=0;index< coreSensorList.size();index++) {
|
orgLayout.setPagePositionIndex(index);
|
orgLayout.setPagePositionValue(coreSensorList.get(index).getSensorKey());
|
orgLayoutMapper.insert(orgLayout);
|
}
|
}
|
// 储存核心区
|
List<SensorComb> defaultSensorList = rtdLayout.getDefaultMonitorItems();
|
orgLayout.setPagePosition(RealTimeDeviceLayout.DefaultMonitorItems);
|
if ( defaultSensorList != null ){
|
for(int index=0;index< defaultSensorList.size();index++) {
|
orgLayout.setPagePositionIndex(index);
|
orgLayout.setPagePositionValue(defaultSensorList.get(index).getSensorKey());
|
orgLayoutMapper.insert(orgLayout);
|
}
|
}
|
|
// 储存固定区
|
List<SensorComb> fixedSensorList = rtdLayout.getFixedMonitorItems();
|
orgLayout.setPagePosition(RealTimeDeviceLayout.FixedMonitorItems);
|
if( fixedSensorList != null ) {
|
for(int index=0;index< fixedSensorList.size();index++) {
|
orgLayout.setPagePositionIndex(index);
|
orgLayout.setPagePositionValue(fixedSensorList.get(index).getSensorKey());
|
orgLayoutMapper.insert(orgLayout);
|
}
|
}
|
}
|
@Override
|
public void deleteRtdLayout(Integer orgId, Integer version) {
|
// 清空旧数据
|
OrganizationLayout query = new OrganizationLayout();
|
query.setOrganizationId(orgId);
|
query.setPageType(getPageType(version));
|
orgLayoutMapper.delete(query);
|
}
|
@Override
|
public RealTimeDeviceLayout queryRtdLayoutWithUnit(Integer orgId, Integer versionNo) {
|
String pageType = getPageType(versionNo);
|
if(queryPageConfigCountByOrgId(orgId,pageType) == 0 ){
|
orgId = dataMapper.selectSupperOrgId();
|
}
|
RealTimeDeviceLayout rtdLayout = queryRealTimeDeviceLayout(orgId,versionNo);
|
loadUnitToComb(orgId,rtdLayout);
|
return rtdLayout;
|
}
|
// 装载单位信息到布局配置
|
private void loadUnitToComb(Integer orgId,RealTimeDeviceLayout rtdLayout) {
|
List<SensorComb> allList = new ArrayList<>();
|
allList.addAll(rtdLayout.getCoreMonitorItems());
|
allList.addAll(rtdLayout.getDefaultMonitorItems());
|
allList.addAll(rtdLayout.getFixedMonitorItems());
|
List<OrganizationSensorUnit> orgUnitList = orgUnitMapper.selectByOrgId(orgId);
|
allList.forEach(item -> {
|
for(OrganizationSensorUnit orgUnit: orgUnitList) {
|
SensorUnit sensorUnit = orgUnit.getSensorUnit();
|
if( sensorUnit!=null && sensorUnit.getSensorId() !=null) {
|
if(sensorUnit.getSensorId() == item.getSensorId()) {
|
item.setTargetUnit(sensorUnit.getName());
|
item.setEvaluator(sensorUnit.getRules());
|
}
|
}
|
}
|
});
|
}
|
}
|