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.service.DeviceService; import com.bizmatics.service.SiteDynamicPropertiesService; import com.bizmatics.service.SiteService; import com.bizmatics.service.UserSiteService; 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.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; /** *

* 服务实现类 *

* * @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; @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(); return baseMapper.list(userId, name); } @Override public List> siteList(String name) { return null; } @Override public List siteAndStatusList(String name) { List list = new ArrayList<>(); Integer userId = SecurityUtils.getLoginUser().getUser().getUserId().intValue(); List sites = baseMapper.list(userId, name); 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); 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) { SysUser user = SecurityUtils.getLoginUser().getUser(); Site site1 = siteVOT.getSite(); site1.setCreateTime(new Date()); site1.setCreator(user.getUserName()); site1.setCompanyCode(11111); site1.setEnable(1); 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; grouping_list = baseMapper.GroupingList(name,user.getUserName()); site_list = baseMapper.Sitelist(userId, name); site_grouping_list = baseMapper.SiteGroupinglist(userId, name); List> list1 = new ArrayList<>(); 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); } } return list1; } }