package com.bizmatics.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.bizmatics.common.core.util.DateUtils;
import com.bizmatics.common.core.util.StringUtils;
import com.bizmatics.model.*;
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.apache.commons.lang3.ArrayUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.configurationprocessor.json.JSONArray;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
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