package com.huaxu.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.huaxu.dao.DayReportMapper; import com.huaxu.dao.MonthReportMapper; import com.huaxu.dao.YearReportMapper; import com.huaxu.dto.*; import com.huaxu.entity.DayReportEntity; import com.huaxu.entity.MonthReportEntity; import com.huaxu.entity.YearReportEntity; import com.huaxu.model.LoginUser; import com.huaxu.util.UserUtil; import org.apache.ibatis.annotations.Param; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.*; /** * 日报Service接口 * * @author: WYY * @date 2020-12-03 16:20 */ @Service public class YearReportService extends AbstractReportService { @Resource private YearReportMapper yearReportMapper; /** * 查列表 */ public List findList(YearReportEntity yearReportEntity) { return yearReportMapper.findList(yearReportEntity); } /** * 保存 */ public boolean addYearReport(YearReportEntity yearReport) { if (this.save(yearReport)) { return true; } return false; } /** * 根居ID获取对象 */ public YearReportEntity findYearReportById(Long id) { return yearReportMapper.findYearReportById(id); } public Page findPage(IPage page, Long[] ids, Integer year, Integer month, Integer day) { LoginUser currentUser = UserUtil.getCurrentUser(); Page reportPage = new Page<>(); //查询场景下的所有设备信息 List devices = new ArrayList<>(); DeviceDto deviceDto = new DeviceDto(); for (Long id : ids) { deviceDto.setSceneIds(sceneService.findByParentIdsLike(id)); if (deviceDto.getSceneIds().size() > 0) devices.addAll(deviceService.selectList(deviceDto)); } if(devices.size()>0) { YearReportEntity yearReportEntity = new YearReportEntity(); yearReportEntity.setYear(year); yearReportEntity.setTenantId(currentUser.getTenantId()); yearReportEntity.setParentSceneIds(ids); yearReportEntity.setDeviceIds(devices); reportPage = yearReportMapper.findPage(page, yearReportEntity); //查询标题 ReportDto reportDto = new ReportDto(); reportDto.setYear(year); reportDto.setDeviceIds(devices); reportDto.setParentSceneIds(ids); List reportAttributeDtos2 = deviceParmService.findAttributeNameList(reportDto); List dataTitle = new ArrayList<>(); Map mapsTitle = new LinkedHashMap<>(); int numCount = 0; for (ReportAttributeDto title : reportAttributeDtos2) { dataTitle.add(title.getAttributeName()); if (!mapsTitle.containsKey(title.getAttributeName())) mapsTitle.put(title.getAttributeName(), numCount++); } //固定参数项 List reportDtos = yearReportMapper.findReport(reportDto); //单个属性值 for (ReportDto item : reportPage.getRecords()) { item.setCollectDate(item.getYear() + "-" + String.format("%02d", item.getMonth())); item.setDeviceIds(devices); item.setDataTitle(dataTitle); //固定参数项 calcUsage(item, reportDtos); //动态参数项 List reportAttributeDtos = yearReportMapper.findAttributeList(item); // item.setDataValues(reportAttributeDtos); Map mapData = new LinkedHashMap<>(); for (ReportAttributeDto itemData : reportAttributeDtos) { if (!mapData.containsKey(itemData.getAttributeName())) mapData.put(itemData.getAttributeName(), itemData); } List> maps = new ArrayList<>(); for (String key : mapsTitle.keySet()) { Map map = new LinkedHashMap<>(); map.put("attributeName", mapData.get(key) == null ? key : mapData.get(key).getAttributeName()); map.put("minValue" + mapsTitle.get(key), mapData.get(key) == null||mapData.get(key).getMinValue()==null ? "-" : (double)Math.round(mapData.get(key).getMinValue()*1000)/1000); map.put("maxValue" + mapsTitle.get(key), mapData.get(key) == null||mapData.get(key).getMaxValue()==null ? "-" : (double)Math.round(mapData.get(key).getMaxValue()*1000)/1000); map.put("avgValue" + mapsTitle.get(key), mapData.get(key) == null||mapData.get(key).getAvgValue()==null ? "-" : (double)Math.round(mapData.get(key).getAvgValue()*1000)/1000); map.put("sumValue" + mapsTitle.get(key), mapData.get(key) == null||mapData.get(key).getSumValue()==null ? "-" : (double)Math.round(mapData.get(key).getSumValue()*1000)/1000); map.put("latestValue" + mapsTitle.get(key), mapData.get(key) == null||mapData.get(key).getLatestValue()==null ? "-" : (double)Math.round(mapData.get(key).getLatestValue()*1000)/1000); maps.add(map); } item.setDataMapValues(maps); } } return reportPage; } //计算固定的参数项 @Override public void calcUsage(ReportDto item, List reportDtos) { if(item==null||reportDtos.size()==0) return; //固定参数项 int index = -1; for (int i = 0; i < reportDtos.size(); i++) { if (reportDtos.get(i).getMonth().equals(item.getMonth())) index = i; } Double power = reportDtos!=null&&reportDtos.get(index)!=null?reportDtos.get(index).getPowerUsage():0; Double water = reportDtos!=null&&reportDtos.get(index)!=null?reportDtos.get(index).getIntakeWaterUsage():0; Double yieldWaterUsage = reportDtos!=null&&reportDtos.get(index)!=null? reportDtos.get(index).getYieldWaterUsage():0; if ("水源水厂".indexOf(item.getSceneTypeName()) != -1){ item.setPowerUsage(doubleDivideValue(power)); item.setIntakeWaterUsage(doubleDivideValue(water)); item.setYieldWaterUsage(doubleDivideValue(yieldWaterUsage)); } else { item.setPowerUsage(power); item.setIntakeWaterUsage(water); item.setYieldWaterUsage(yieldWaterUsage); } item.setDrugUsage(reportDtos!=null&&reportDtos.get(index)!=null?reportDtos.get(index).getDrugUsage():0); // if (index != -1) { // if ((index + 2) <= reportDtos.size()) { // item.setYieldWaterUsage(reportDtos.get(index).getYieldWaterUsage() - reportDtos.get(index + 1).getYieldWaterUsage()); // item.setIntakeWaterUsage(reportDtos.get(index).getIntakeWaterUsage() - reportDtos.get(index + 1).getIntakeWaterUsage()); // item.setPowerUsage(reportDtos.get(index).getPowerUsage() - reportDtos.get(index + 1).getPowerUsage()); // item.setDrugUsage(reportDtos.get(index).getDrugUsage() - reportDtos.get(index + 1).getDrugUsage()); // } else { // item.setYieldWaterUsage(0d); // item.setIntakeWaterUsage(0d); // item.setPowerUsage(0d); // item.setDrugUsage(0d); // } // } } public Page findDevicePressPage(IPage page, Long[] ids, Integer year, Integer month, Integer day,Integer type) { LoginUser currentUser = UserUtil.getCurrentUser(); Page reportPage = new Page<>(); //查询场景下的所有设备信息 List devices = new ArrayList<>(); for (Long id : ids) { DeviceDto deviceDto = new DeviceDto(); deviceDto.setId(id); devices.add(deviceDto); } if (devices.size() > 0) { //根据设备ID查询报表测点信息 YearReportEntity yearReportEntity = new YearReportEntity(); yearReportEntity.setYear(year); yearReportEntity.setTenantId(currentUser.getTenantId()); yearReportEntity.setType(type); yearReportEntity.setDeviceIds(devices); //查询到分页的行数 reportPage = yearReportMapper.findDevicePressPage(page, yearReportEntity); } return reportPage; } public Page findDeviceWaterPage(IPage page, Long[] ids, Integer year, Integer month, Integer day) { LoginUser currentUser = UserUtil.getCurrentUser(); Page reportPage = new Page<>(); //查询场景下的所有设备信息 List devices = new ArrayList<>(); for (Long id : ids) { DeviceDto deviceDto = new DeviceDto(); deviceDto.setId(id); devices.add(deviceDto); } if (devices.size() > 0) { //根据设备ID查询报表测点信息 YearReportEntity yearReportEntity = new YearReportEntity(); yearReportEntity.setYear(year); yearReportEntity.setTenantId(currentUser.getTenantId()); yearReportEntity.setDeviceIds(devices); //查询到分页的行数 reportPage = yearReportMapper.findDeviceWaterPage(page, yearReportEntity); } return reportPage; } public List findAmountTotalBySceneIds(YearReportEntity yearReportEntity) { return yearReportMapper.findAmountTotalBySceneIds(yearReportEntity); } @Override List findReport(ReportDto reportDto) { return yearReportMapper.findReport(reportDto); } @Override List findAttributeList(ReportDto item) { return yearReportMapper.findAttributeList(item); } public Page findDevicePressPageReport(IPage page, ReportQueryDto queryDto) { List devices = devicesToList(queryDto.getIds()); if (devices.size() == 0 ){ return new Page<>(); } Page reportPage = yearReportMapper.findPageReprot(page, getReportPageQuery(queryDto, devices, true)); reportDataHandle(queryDto, devices, reportPage, true); return reportPage; } public Page findPageReport(IPage page, ReportQueryDto queryDto) { // 查询场景下的所有设备信息 List devices = findDevices(queryDto.getIds()); if (devices.size() == 0 ){ return new Page<>(); } Page reportPage = yearReportMapper.findPageReprot(page, getReportPageQuery(queryDto, devices, false)); reportDataHandle(queryDto, devices, reportPage, false); return reportPage; } }