package com.bizmatics.service.impl;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
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.*;
import com.bizmatics.common.mvc.base.AbstractCrudService;
import com.bizmatics.common.spring.util.GlobalUtils;
import com.bizmatics.model.*;
import com.bizmatics.model.vo.EvaluationReporVo;
import com.bizmatics.persistence.mapper.RtAnalogDataMapper;
import com.bizmatics.service.DeviceAttributeService;
import com.bizmatics.service.DeviceService;
import com.bizmatics.service.RtAnalogDataService;
import com.bizmatics.service.SiteDynamicPropertiesService;
import com.bizmatics.service.util.SecurityUtils;
import com.bizmatics.service.vo.RadCountVO;
import com.bizmatics.service.vo.RealScoreOneVO;
import com.bizmatics.service.vo.RealScoreVO;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;
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 DeviceService deviceService;
@Autowired
private SiteDynamicPropertiesService siteDynamicPropertiesService;
@Autowired
private DeviceAttributeService deviceAttributeService;
@Override
public RadCountVO selectCount() {
Integer userId = SecurityUtils.getLoginUser().getUser().getUserId().intValue();
AtomicReference heavyLoad = new AtomicReference<>(0);
AtomicReference easyLoad = new AtomicReference<>(0);
AtomicReference norMalLoad = new AtomicReference<>(0);
AtomicReference count = new AtomicReference<>(0);
List deviceList = deviceService.list(userId, null, null, null, null, null);
List list = baseMapper.list(userId);
for (Device device : deviceList) {
list.stream()
.filter(rtAnalogData -> device.getDeviceCode().equals(rtAnalogData.getDeviceName())).findAny()
.ifPresent(rtAnalogData -> {
String installedCapacity = device.getInstalledCapacity();
double installedCapacityDouble = 0.00;
if (StringUtils.isNotBlank(installedCapacity)) {
installedCapacityDouble = Double.parseDouble(installedCapacity);
if (installedCapacityDouble > 0) {
installedCapacityDouble = Arith.div(rtAnalogData.getP(), 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);
}
count.getAndSet(count.get() + 1);
});
}
RadCountVO radCountVO = new RadCountVO();
radCountVO.setHeavyLoad(subRadio(heavyLoad.get(), count.get()));
radCountVO.setEasyLoad(subRadio(easyLoad.get(), count.get()));
radCountVO.setNorMalLoad(Arith.sub(1, Arith.add(radCountVO.getEasyLoad(), radCountVO.getHeavyLoad())));
return radCountVO;
}
public Double subRadio(Integer typeCount, Integer count) {
return Optional.of(count).filter(total -> total != 0).map(sub -> Arith.div(typeCount, sub)).orElse(0.00);
}
public String addUnitOne(String name) {
if (name.endsWith("电压")) {
return "V";
} else if (name.endsWith("电流")) {
return "A";
} else if (name.endsWith("温度")) {
return "℃";
} else if (name.endsWith("频率")) {
return "Hz";
} else if (name.endsWith("有功功率") || name.endsWith("需量")) {
return "KW";
} else if (name.endsWith("无功功率")) {
return "KVar";
} else if (name.endsWith("不平衡度") || name.endsWith("电压畸变率")) {
return "%";
} else if (name.endsWith("次数")) {
return "次";
} else if (name.endsWith("电度") || name.endsWith("有功")) {
return "KWh";
} else if (name.endsWith("THD")) {
return "%";
}
return "";
}
@Override
public List