package com.bizmatics.service.impl; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.bizmatics.common.core.util.StringUtils; import com.bizmatics.model.RtAnalogData; import com.bizmatics.model.Site; import com.bizmatics.model.UserSite; import com.bizmatics.persistence.mapper.RtAnalogDataMapper; import com.bizmatics.service.RtAnalogDataService; import com.bizmatics.common.mvc.base.AbstractCrudService; import com.bizmatics.service.SiteService; import com.bizmatics.service.UserSiteService; import com.bizmatics.service.util.Arith; import com.bizmatics.service.util.SessionLocal; import com.bizmatics.service.vo.RadCountVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.atomic.AtomicReference; /** *

* 服务实现类 *

* * @author ya * @since 2021-07-07 */ @Service public class RtAnalogDataServiceImpl extends AbstractCrudService implements RtAnalogDataService { @Autowired private UserSiteService userSiteService; @Autowired private SiteService siteService; @Override public RadCountVO selectCount() { Integer userId = SessionLocal.getUserId(); List userSites = userSiteService.list(Wrappers.lambdaQuery(UserSite.class).eq(UserSite::getUserId, userId)); AtomicReference heavyLoad = new AtomicReference<>(0); AtomicReference easyLoad = new AtomicReference<>(0); AtomicReference norMalLoad = new AtomicReference<>(0); userSites.forEach(userSite -> { Site site = siteService.getOne(Wrappers.lambdaQuery(Site.class).eq(Site::getId, userSite.getId())); Double aDouble = baseMapper.selectTotalLoad(userId, site.getId()); String installedCapacity = site.getInstalledCapacity(); double installedCapacityDouble = 0.00; if (StringUtils.isNotBlank(installedCapacity)){ installedCapacityDouble = Double.parseDouble(installedCapacity); if (installedCapacityDouble > 0){ Arith.div(aDouble,installedCapacityDouble); } } if (installedCapacityDouble < 0.4){ easyLoad.getAndSet(easyLoad.get() + 1); }else if (installedCapacityDouble >= 0.4 && installedCapacityDouble <= 0.8){ norMalLoad.getAndSet(norMalLoad.get() + 1); }else { heavyLoad.getAndSet(heavyLoad.get() + 1); } }); int count = userSites.size(); RadCountVO radCountVO = new RadCountVO(); radCountVO.setHeavyLoad(Arith.div(heavyLoad.get(),count)); radCountVO.setEasyLoad(Arith.div(easyLoad.get(),count)); radCountVO.setNorMalLoad(Arith.div(norMalLoad.get(),count)); return radCountVO; } @Override public List> getOne(Integer siteId) { List> list = new ArrayList<>(); Map radMap = baseMapper.getOneMap(siteId); Optional.ofNullable(radMap).ifPresent(rad -> { for (String name:rad.keySet()) { Map map = new HashMap<>(); map.put("name",name); map.put("value",rad.get(name)); list.add(map); } }); return list; } @Override public Double getEpLoad(Integer siteId) { return baseMapper.selectTotalLoad(SessionLocal.getUserId(), siteId); } /** * 添加数据单位 * @return */ public String addUnit(String name,String value){ if (name.endsWith("电压")){ return value+"V"; }else if (name.endsWith("电流")){ return value+"A"; }else if (name.endsWith("温度")){ return value+"C"; }else if (name.endsWith("频率")){ return value+"Hz"; }else if (name.endsWith("有功功率") || name.endsWith("需量")){ return value+"KW"; }else if (name.endsWith("无功功率")){ return value+"KVar"; }else if (name.endsWith("不平衡度") || name.endsWith("电压畸变率")){ return value+"%"; }else if (name.endsWith("次数")){ return value+"次"; }else if (name.endsWith("电度") || name.endsWith("有功")){ return value+"KWh"; } return value; } @Override public List> getDataReport(Integer siteId,Date startTime, Date endTime,String queryType) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); List> list = new ArrayList<>(); Map radMap = baseMapper.getDataReportMap(siteId,startTime,endTime); Object value = radMap.get("LoadLive"); // String[] result = queryType.split(","); // for (int i = 0; i < result.length; i++) { // System.out.println(result[i]); // } for (String name : radMap.keySet()) { Map map = new HashMap<>(); if (queryType.startsWith("bgbhg_183__Ia")){ map.put("name",name); } map.put("value",addUnit(name,radMap.get(name).toString())); list.add(map); } // Map map = new HashMap<>(); // map.put("LoadLive",value); // list.add(map); // Map LoopStatusList = baseMapper.getLoopStatusListMap(siteId); //// Iterator it = radMap.keySet().iterator(); // int duration=0; return list; } }