package com.bizmatics.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.bizmatics.common.core.exception.BusinessException; import com.bizmatics.common.core.util.BeanMapperUtils; import com.bizmatics.common.mvc.base.AbstractCrudService; import com.bizmatics.model.*; import com.bizmatics.model.system.SysUser; import com.bizmatics.persistence.mapper.AlarmPowerMapper; import com.bizmatics.persistence.mapper.DeviceMapper; import com.bizmatics.persistence.mapper.SiteMapper; import com.bizmatics.persistence.mapper.system.SysUserMapper; import com.bizmatics.service.*; import com.bizmatics.service.enums.DeviceStatusCode; import com.bizmatics.service.util.SecurityUtils; import com.bizmatics.service.vo.DeviceCountVO; import com.bizmatics.service.vo.SiteVO; import com.bizmatics.service.vo.SiteVOT; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; /** *

* 服务实现类 *

* * @author ya * @since 2021-07-07 */ @Slf4j @Service public class SiteServiceImpl extends AbstractCrudService implements SiteService { @Autowired private DeviceMapper deviceMapper; @Autowired private DeviceService deviceService; @Autowired private AlarmPowerMapper alarmPowerMapper; @Autowired private UserSiteService userSiteService; @Autowired private SiteDynamicPropertiesService siteDynamicPropertiesService; @Autowired private RouteService routeService; @Autowired private SysUserMapper userMapper; @Override public DeviceCountVO selectCount() { Integer userId = SecurityUtils.getLoginUser().getUser().getUserId().intValue(); DeviceCountVO deviceCountVO = new DeviceCountVO(); deviceCountVO.setNormalCount(baseMapper.selectCount(userId, null, DeviceStatusCode.NORMAL.getValue())); deviceCountVO.setOffLineCount(baseMapper.selectCount(userId, null, DeviceStatusCode.OFFLINE.getValue())); deviceCountVO.setDeviceCount(baseMapper.selectCount(userId, null, DeviceStatusCode.DEVICE.getValue())); deviceCountVO.setFaultCount(baseMapper.selectCount(userId, null, DeviceStatusCode.FAULT.getValue())); deviceCountVO.setCount(userSiteService.count(userId)); return deviceCountVO; } @Override public List list(String name) { Integer userId = SecurityUtils.getLoginUser().getUser().getUserId().intValue(); List tenantDaya = userMapper.getTenantId(SecurityUtils.getLoginUser().getUser().getUserId()); if (tenantDaya.size() < 0) { throw new BusinessException("无此租户,请联系管理员"); } return baseMapper.list(userId, name, tenantDaya.get(0).getTenantId()); } @Override public List list2(String name) { Integer userId = SecurityUtils.getLoginUser().getUser().getUserId().intValue(); return baseMapper.list2(userId, name); } @Override public List siteList(String name) { LambdaQueryWrapper QueryWrapper = Wrappers.lambdaQuery(); QueryWrapper.eq(Site::getEnable, 1); if (null != name) { QueryWrapper.eq(Site::getSiteName, name); } List siteList = this.list(QueryWrapper); return siteList; } @Override public List siteAndStatusList(String name) { List list = new ArrayList<>(); Integer userId = SecurityUtils.getLoginUser().getUser().getUserId().intValue(); List tenantDaya = userMapper.getTenantId(SecurityUtils.getLoginUser().getUser().getUserId()); if (tenantDaya.size() < 0) { throw new BusinessException("无此租户,请联系管理员"); } List sites = baseMapper.list(userId, name, tenantDaya.get(0).getTenantId()); List deviceList = deviceMapper.list(userId, null, null, null, null, null); List alarmPowers = alarmPowerMapper.list(userId, null, null, null, null, null, 1); sites.forEach(site -> list.add(enhanceSite(deviceList, site, alarmPowers))); return list; } @Override public SiteVO getOne(Long siteId) { Site site = baseMapper.selectOne(Wrappers.lambdaQuery(Site.class).eq(Site::getId, siteId)); return Optional.ofNullable(site) .map(st -> { // LambdaQueryWrapper deviceLambdaQueryWrapper = Wrappers.lambdaQuery(); // deviceLambdaQueryWrapper.eq(Device::getSiteId, site.getId()); // List list = deviceService.list(deviceLambdaQueryWrapper); List list = baseMapper.getDeviceListOne(site.getId()); Integer count = alarmPowerMapper.selectCount(null, site.getId(), null, null, null, null, 1); SiteVO siteVO = enhanceSite(list, site, null); siteVO.setAlarmPowerCount(count); return siteVO; }) .orElseThrow(() -> new BusinessException("站点信息不存在")); } public SiteVO enhanceSite(List list, Site site, List alarmPowers) { SiteVO siteVo = BeanMapperUtils.map(site, SiteVO.class); siteVo.setDeviceCount(list.size()); long deviceCount = list.stream() .filter(device -> device.getSiteId().equals(site.getId())) .filter(device -> DeviceStatusCode.DEVICE.getValue().equals(device.getDeviceStatus())) .count(); long faultCount = list.stream() .filter(device -> device.getSiteId().equals(site.getId())) .filter(device -> DeviceStatusCode.FAULT.getValue().equals(device.getDeviceStatus())) .count(); long offCount = list.stream() .filter(device -> device.getSiteId().equals(site.getId())) .filter(device -> DeviceStatusCode.OFFLINE.getValue().equals(device.getDeviceStatus())) .count(); if (CollectionUtils.isNotEmpty(alarmPowers)) { siteVo.setAlarmPowerCount((int) alarmPowers.stream().filter(alarmPower -> alarmPower.getSiteId().equals(site.getId())).count()); } else { siteVo.setAlarmPowerCount(0); } if (deviceCount > 0) { siteVo.setStatus(DeviceStatusCode.FAULT.getDescribe()); } else if (offCount > 0) { siteVo.setStatus(DeviceStatusCode.OFFLINE.getDescribe()); } else if (faultCount > 0) { siteVo.setStatus(DeviceStatusCode.FAULT.getDescribe()); } else { siteVo.setStatus(DeviceStatusCode.NORMAL.getDescribe()); } List deviceTypes = list.stream() .filter(device -> device.getSiteId().equals(site.getId())) .map(Device::getDeviceType).collect(Collectors.toList()); siteVo.setDeviceType(deviceTypes); return siteVo; } @Override public void siteAdd(SiteVOT siteVOT) { List tenantDaya = userMapper.getTenantId(SecurityUtils.getLoginUser().getUser().getUserId()); if (tenantDaya.size() < 0) { throw new BusinessException("无此租户,请联系管理员"); } SysUser user = SecurityUtils.getLoginUser().getUser(); Site site1 = siteVOT.getSite(); site1.setCreateTime(new Date()); site1.setCreator(user.getUserName()); site1.setCompanyCode(11111); site1.setEnable(1); site1.setTenantId(tenantDaya.get(0).getTenantId()); this.save(site1); int ID = site1.getId(); SiteDynamicProperties siteDynamicProperties = siteVOT.getSiteDynamicProperties(); siteDynamicProperties.setSiteId(ID); siteDynamicProperties.setCreator(user.getUserName()); siteDynamicProperties.setCreateTime(LocalDateTime.now()); siteDynamicPropertiesService.siteDynamicPropertiesAdd(siteDynamicProperties); userSiteService.UserSiteAdd(ID); } @Override public List getSite(String id) { List TemplateDataList = null; TemplateDataList = baseMapper.templateQuery(Integer.parseInt(id)); // TemplateData TemplateDataListOne = (TemplateData) TemplateDataList.get(0); return TemplateDataList; } @Override public void siteUpdate(SiteVOT siteVOT) { this.updateById(siteVOT.getSite()); siteDynamicPropertiesService.updateById(siteVOT.getSiteDynamicProperties()); } @Override public void sitedel(String id) { List SiteList = null; SiteList = baseMapper.list1(Integer.parseInt(id)); Site SiteList1 = (Site) SiteList.get(0); SiteList1.setId(Integer.parseInt(id)); SiteList1.setEnable(0); this.updateById(SiteList1); } @Override public List> sitelist(String name) { SysUser user = SecurityUtils.getLoginUser().getUser(); Integer userId = SecurityUtils.getLoginUser().getUser().getUserId().intValue(); List> list = new ArrayList<>(); List site_list = null; List grouping_list = null; List site_grouping_list = null; List> list1 = new ArrayList<>(); List tenantDaya = userMapper.getTenantId(SecurityUtils.getLoginUser().getUser().getUserId()); if (tenantDaya.size() < 0) { throw new BusinessException("无此租户,请联系管理员"); } if (tenantDaya.get(0).getUserType().equals("01")){ grouping_list = baseMapper.GroupingList(name, null,tenantDaya.get(0).getTenantId()); site_list = baseMapper.SitelistOne(name,tenantDaya.get(0).getTenantId()); site_grouping_list = baseMapper.SiteGroupinglist(0, name,tenantDaya.get(0).getTenantId()); if (grouping_list.size() > 0) { for (int i = 0; i < grouping_list.size(); i++) { GroupingList grouping_list_one = (GroupingList) grouping_list.get(i); Map map1 = new HashMap<>(); List> list2 = new ArrayList<>(); map1.put("id", grouping_list_one.getId()); map1.put("grouping_id", grouping_list_one.getId()); map1.put("grouping_name", grouping_list_one.getGroupingName()); if (site_list.size() > 0) { for (int j = 0; j < site_list.size(); j++) { SiteList site_list_one = (SiteList) site_list.get(j); Map map2 = new HashMap<>(); if (grouping_list_one.getId().equals(site_list_one.getGroupingId())) { map2.put("site_id", site_list_one.getId()); map2.put("site_name", site_list_one.getSiteName()); // map2.put("grouping_id",site_list_one.getGroupingId()); list2.add(map2); } } map1.put("site_list", list2); } else { map1.put("site_list", list2); } list1.add(map1); } } if (site_grouping_list.size() > 0) { List> list3 = new ArrayList<>(); for (int i = 0; i < site_grouping_list.size(); i++) { SiteList site_grouping_list_one = (SiteList) site_grouping_list.get(i); Map map3 = new HashMap<>(); map3.put("id", site_grouping_list_one.getId()); map3.put("grouping_id", 0); map3.put("grouping_name", site_grouping_list_one.getSiteName()); map3.put("site_list", list3); list1.add(map3); } } }else if (tenantDaya.get(0).getUserType().equals("00")){ List grouping_list_one = null; List grouping_list_two = null; site_list = baseMapper.Sitelist(userId, name,tenantDaya.get(0).getTenantId()); grouping_list_one = baseMapper.GroupingListOne(name, userId,tenantDaya.get(0).getTenantId()); grouping_list_two = baseMapper.GroupingListTwo(user.getUserName()); // 合并list grouping_list = Stream.of(grouping_list_one, grouping_list_two).flatMap(Collection::stream).collect(Collectors.toList()); //排序 List dateListMap = grouping_list; // Map> dateListMap = grouping_list.stream().collect(Collectors.groupingBy(GroupingList::getId,TreeMap::new,Collectors.toList())).descendingMap(); site_grouping_list = baseMapper.SiteGroupinglist(userId, name,tenantDaya.get(0).getTenantId()); if (dateListMap.size() > 0) { for (int i = 0; i < dateListMap.size(); i++) { GroupingList grouping_list_three = (GroupingList) dateListMap.get(i); Map map1 = new HashMap<>(); List> list2 = new ArrayList<>(); map1.put("id", grouping_list_three.getId()); map1.put("grouping_id", grouping_list_three.getId()); map1.put("grouping_name", grouping_list_three.getGroupingName()); if (site_list.size() > 0) { for (int j = 0; j < site_list.size(); j++) { SiteList site_list_one = (SiteList) site_list.get(j); Map map2 = new HashMap<>(); if (grouping_list_three.getId().equals(site_list_one.getGroupingId())) { map2.put("site_id", site_list_one.getId()); map2.put("site_name", site_list_one.getSiteName()); // map2.put("grouping_id",site_list_one.getGroupingId()); list2.add(map2); } } map1.put("site_list", list2); } else { map1.put("site_list", list2); } list1.add(map1); } } if (site_grouping_list.size() > 0) { List> list3 = new ArrayList<>(); for (int i = 0; i < site_grouping_list.size(); i++) { SiteList site_grouping_list_one = (SiteList) site_grouping_list.get(i); Map map3 = new HashMap<>(); map3.put("id", site_grouping_list_one.getId()); map3.put("grouping_id", 0); map3.put("grouping_name", site_grouping_list_one.getSiteName()); map3.put("site_list", list3); list1.add(map3); } } } return list1; } @Override public List dynamicPropertiesDroplist(Integer siteId, Integer dataArea) { List deviceAnalogVariableList = new ArrayList<>(); if (siteId != 0) { deviceAnalogVariableList = baseMapper.deviceAnalogVariableList(siteId, dataArea); } return deviceAnalogVariableList; } @Override public List routeDroplist() { LambdaQueryWrapper routeLambdaQueryWrapper = Wrappers.lambdaQuery(); routeLambdaQueryWrapper.eq(Route::getEnable, 1); List list = routeService.list(routeLambdaQueryWrapper); return list; } }