package com.huaxu.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.huaxu.dao.DayReportMapper; import com.huaxu.dto.*; import com.huaxu.entity.DayReportEntity; import com.huaxu.model.LoginUser; import com.huaxu.util.UserUtil; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; /** * 日报Service接口 * * @author: WYY * @date 2020-12-03 16:20 */ @Service public class DayReportService extends AbstractReportService{ @Resource private DayReportMapper dayReportMapper; /** * 查列表 */ public List findList(DayReportEntity dayReportEntity) { return dayReportMapper.findList(dayReportEntity); } /** * 保存 */ public boolean addDayReport(DayReportEntity dayReport) { if (this.save(dayReport)) { return true; } return false; } /** * 根居ID获取对象 */ public DayReportEntity findDayReportById(Long id) { return dayReportMapper.findDayReportById(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) { //根据设备ID查询报表测点信息 DayReportEntity dayReportEntity = new DayReportEntity(); dayReportEntity.setYear(year); dayReportEntity.setMonth(month); dayReportEntity.setDay(day); dayReportEntity.setTenantId(currentUser.getTenantId()); dayReportEntity.setParentSceneIds(ids); dayReportEntity.setDeviceIds(devices); //查询到分页的行数 reportPage = dayReportMapper.findPage(page, dayReportEntity); //查询标题 ReportDto reportDto = new ReportDto(); reportDto.setYear(year); reportDto.setMonth(month); reportDto.setDay(day); 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 = dayReportMapper.findReport(reportDto); //单个属性值 for (ReportDto item : reportPage.getRecords()) { item.setCollectDate(item.getYear() + "-" + String.format("%02d", item.getMonth()) + "-" + String.format("%02d", item.getDay()) + " " + String.format("%02d", item.getHour()) + ":00"); item.setDeviceIds(devices); item.setDataTitle(dataTitle); //固定参数项 calcUsage(item, reportDtos); //动态参数项 List reportAttributeDtos = dayReportMapper.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).getHour().equals(item.getHour())) { index = i; } } if (index == -1) { return; } //System.out.println(reportDtos.get(-1)); 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 (item.getSceneTypeName() != null && "水源水厂".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查询报表测点信息 DayReportEntity dayReportEntity = new DayReportEntity(); dayReportEntity.setYear(year); dayReportEntity.setMonth(month); dayReportEntity.setDay(day); dayReportEntity.setTenantId(currentUser.getTenantId()); dayReportEntity.setType(type); dayReportEntity.setDeviceIds(devices); //查询到分页的行数 reportPage = dayReportMapper.findDevicePressPage(page, dayReportEntity); } 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查询报表测点信息 DayReportEntity dayReportEntity = new DayReportEntity(); dayReportEntity.setYear(year); dayReportEntity.setMonth(month); dayReportEntity.setDay(day); dayReportEntity.setTenantId(currentUser.getTenantId()); dayReportEntity.setDeviceIds(devices); //查询到分页的行数 reportPage = dayReportMapper.findDeviceWaterPage(page, dayReportEntity, currentUser.getId()); } return reportPage; } List findDeviceLastDayValue(DayReportEntity dayReportEntity) { return dayReportMapper.findDeviceLastDayValue(dayReportEntity); } /** * 查询报表数据 * 根据自定义报表参数,是否查找自定义值 * @param page * @param queryDto * @return */ public Page findPageReport(IPage page, ReportQueryDto queryDto) { Page reportPage = new Page<>(); // 查询场景下的所有设备信息 List devices = findDevices(queryDto.getIds()); if (devices.size() == 0 ){ return reportPage; } // 根据设备ID查询报表测点信息,查询到分页的行数 reportPage = dayReportMapper.findPageReprot(page, getReportPageQuery(queryDto, devices,false)); reportDataHandle(queryDto, devices, reportPage, false); return reportPage; } public Page findDevicePressPageReport(IPage page, ReportQueryDto queryDto) { Page reportPage = new Page<>(); List devices = devicesToList(queryDto.getIds()); if (devices.size() == 0 ){ return reportPage; } // 根据设备ID查询报表测点信息,查询到分页的行数 reportPage = dayReportMapper.findPageReprot(page, getReportPageQuery(queryDto, devices, true)); reportDataHandle(queryDto, devices, reportPage, true); //查询到分页的行数 return reportPage; } @Override List findReport(ReportDto reportDto) { return dayReportMapper.findReport(reportDto); } @Override List findAttributeList(ReportDto item) { return dayReportMapper.findAttributeList(item); } }