From 48e498136c8784ee79a698da2c852ca3aa0549ab Mon Sep 17 00:00:00 2001 From: jinpengyong <jpy123456> Date: Wed, 29 Dec 2021 15:10:41 +0800 Subject: [PATCH] 行业贡献率,区域贡献率 --- screen-api/src/main/java/com/moral/api/service/impl/HistoryMonthlyServiceImpl.java | 143 ++++++++++++++++++++++++++++++----------------- 1 files changed, 91 insertions(+), 52 deletions(-) diff --git a/screen-api/src/main/java/com/moral/api/service/impl/HistoryMonthlyServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/HistoryMonthlyServiceImpl.java index 946fd43..613a00c 100644 --- a/screen-api/src/main/java/com/moral/api/service/impl/HistoryMonthlyServiceImpl.java +++ b/screen-api/src/main/java/com/moral/api/service/impl/HistoryMonthlyServiceImpl.java @@ -11,6 +11,7 @@ import com.moral.api.utils.GetCenterPointFromListOfCoordinates; import com.moral.constant.Constants; import com.moral.util.PollutantUtils; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; @@ -18,7 +19,10 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; +import java.util.function.Supplier; import java.util.stream.Collectors; +import java.util.stream.DoubleStream; +import java.util.stream.Stream; /** * <p> @@ -43,10 +47,10 @@ @Override public HistoryMonthly getHistoryMonthlyByMacAndDate(String mac, Date date) { QueryWrapper<HistoryMonthly> wrapper = new QueryWrapper<>(); - wrapper.eq("mac",mac); - wrapper.eq("time",date); + wrapper.eq("mac", mac); + wrapper.eq("time", date); List<HistoryMonthly> historyMonthlies = historyMonthlyMapper.selectList(wrapper); - if(ObjectUtils.isEmpty(historyMonthlies)) + if (ObjectUtils.isEmpty(historyMonthlies)) return null; return historyMonthlies.get(0); } @@ -54,12 +58,12 @@ @Override public Map<String, HistoryMonthly> getHistoryMonthlyByMacsAndDate(List<String> mac, Date date) { QueryWrapper<HistoryMonthly> wrapper = new QueryWrapper<>(); - wrapper.in("mac",mac); - wrapper.eq("time",date); + wrapper.in("mac", mac); + wrapper.eq("time", date); List<HistoryMonthly> historyMonthlies = historyMonthlyMapper.selectList(wrapper); - Map<String,HistoryMonthly> map = new HashMap<>(); + Map<String, HistoryMonthly> map = new HashMap<>(); for (HistoryMonthly historyMonthly : historyMonthlies) { - map.put(historyMonthly.getMac(),historyMonthly); + map.put(historyMonthly.getMac(), historyMonthly); } return map; } @@ -74,8 +78,8 @@ //������������ //��������������� List<Organization> allChildrenOrganization = organizationService.getChildrenOrganizationsById(orgId); - if (!ObjectUtils.isEmpty(allChildrenOrganization) || allChildrenOrganization.size() < 1){ - for (Organization organization:allChildrenOrganization) { + if (!ObjectUtils.isEmpty(allChildrenOrganization) || allChildrenOrganization.size() < 1) { + for (Organization organization : allChildrenOrganization) { allOrgId.add(organization.getId()); } } @@ -84,38 +88,38 @@ //������������list���������������mac List<String> deviceMacList = new ArrayList<>(); //������������map���Mac������key���device������value - Map<String,Device> deviceMap = new HashMap<>(); + Map<String, Device> deviceMap = new HashMap<>(); List<Double> longitudeList = new ArrayList<>(); List<Double> latitudeList = new ArrayList<>(); - for (Integer orgIdWithoutDuplicates:allOrgIdWithoutDuplicates) { + for (Integer orgIdWithoutDuplicates : allOrgIdWithoutDuplicates) { //������id������������������ QueryWrapper<Device> wrapper_device = new QueryWrapper<>(); - wrapper_device.eq("is_delete",Constants.NOT_DELETE).eq("organization_id",orgIdWithoutDuplicates); + wrapper_device.eq("is_delete", Constants.NOT_DELETE).eq("organization_id", orgIdWithoutDuplicates); List<Device> devices = new ArrayList<>(); devices = deviceMapper.selectList(wrapper_device); - if (devices.size()>0){ - for (Device device:devices) { + if (devices.size() > 0) { + for (Device device : devices) { String mac = device.getMac(); deviceMacList.add(mac); - deviceMap.put(mac,device); + deviceMap.put(mac, device); double longitude = device.getLongitude(); double latitude = device.getLatitude(); longitudeList.add(longitude); latitudeList.add(latitude); } - }else { + } else { continue; } } //������������ - String time = parameters.get("time").toString().substring(0,7)+"-01 00:00:00"; - resultMap.put("time",time); + String time = parameters.get("time").toString().substring(0, 7) + "-01 00:00:00"; + resultMap.put("time", time); QueryWrapper<HistoryMonthly> historyMonthlyQueryWrapper = new QueryWrapper<>(); - historyMonthlyQueryWrapper.eq("time",time); + historyMonthlyQueryWrapper.eq("time", time); historyMonthlyQueryWrapper.in("mac", deviceMacList); List<HistoryMonthly> historyDailies = historyMonthlyMapper.selectList(historyMonthlyQueryWrapper); List<Object> list = new ArrayList<>(); - for (HistoryMonthly historyDailyData:historyDailies) { + for (HistoryMonthly historyDailyData : historyDailies) { List<Object> list1 = new ArrayList<>(); String mac = historyDailyData.getMac(); Device device = deviceMap.get(mac); @@ -129,17 +133,17 @@ list1.add(level); list.add(list1); } - resultMap.put("list",list); - double latitudeMin = Collections.min(latitudeList)-0.0018; - double latitudeMax = Collections.max(latitudeList)+0.0018; - double longitudeMin = Collections.min(longitudeList)-0.2/(111*Math.cos(latitudeMin)); - double longitudeMax = Collections.max(longitudeList)+0.2/(111*Math.cos(latitudeMin)); + resultMap.put("list", list); + double latitudeMin = Collections.min(latitudeList) - 0.0018; + double latitudeMax = Collections.max(latitudeList) + 0.0018; + double longitudeMin = Collections.min(longitudeList) - 0.2 / (111 * Math.cos(latitudeMin)); + double longitudeMax = Collections.max(longitudeList) + 0.2 / (111 * Math.cos(latitudeMin)); List<Double> bound = new ArrayList<>(); bound.add(longitudeMin); bound.add(latitudeMin); bound.add(longitudeMax); bound.add(latitudeMax); - resultMap.put("bound",bound); + resultMap.put("bound", bound); List<List> bound1 = new ArrayList<>(); List<Double> left_up = new ArrayList<>(); left_up.add(latitudeMax); @@ -158,7 +162,7 @@ bound1.add(right_down); bound1.add(left_down); List<GeoCoordinate> geoCoordinates = new ArrayList<>(); - for (List bo:bound1) { + for (List bo : bound1) { GeoCoordinate g = new GeoCoordinate(); g.setLatitude(Double.parseDouble(bo.get(0).toString())); g.setLongitude(Double.parseDouble(bo.get(1).toString())); @@ -168,7 +172,7 @@ List centerPoint = new ArrayList(); centerPoint.add(centerPoint400.getLongitude()); centerPoint.add(centerPoint400.getLatitude()); - resultMap.put("centerPoint",centerPoint); + resultMap.put("centerPoint", centerPoint); return resultMap; } @@ -181,8 +185,8 @@ //������������ //��������������� List<Organization> allChildrenOrganization = organizationService.getChildrenOrganizationsById(orgId); - if (!ObjectUtils.isEmpty(allChildrenOrganization) || allChildrenOrganization.size() < 1){ - for (Organization organization:allChildrenOrganization) { + if (!ObjectUtils.isEmpty(allChildrenOrganization) || allChildrenOrganization.size() < 1) { + for (Organization organization : allChildrenOrganization) { allOrgId.add(organization.getId()); } } @@ -191,33 +195,33 @@ //������������list���������������mac List<String> deviceMacList = new ArrayList<>(); //������������map���Mac������key���device������value - Map<String,Device> deviceMap = new HashMap<>(); + Map<String, Device> deviceMap = new HashMap<>(); List<Double> longitudeList = new ArrayList<>(); List<Double> latitudeList = new ArrayList<>(); - for (Integer orgIdWithoutDuplicates:allOrgIdWithoutDuplicates) { + for (Integer orgIdWithoutDuplicates : allOrgIdWithoutDuplicates) { //������id������������������ QueryWrapper<Device> wrapper_device = new QueryWrapper<>(); - wrapper_device.eq("is_delete",Constants.NOT_DELETE).eq("organization_id",orgIdWithoutDuplicates); + wrapper_device.eq("is_delete", Constants.NOT_DELETE).eq("organization_id", orgIdWithoutDuplicates); List<Device> devices = new ArrayList<>(); devices = deviceMapper.selectList(wrapper_device); - if (devices.size()>0){ - for (Device device:devices) { + if (devices.size() > 0) { + for (Device device : devices) { String mac = device.getMac(); deviceMacList.add(mac); - deviceMap.put(mac,device); + deviceMap.put(mac, device); double longitude = device.getLongitude(); double latitude = device.getLatitude(); longitudeList.add(longitude); latitudeList.add(latitude); } - }else { + } else { continue; } } - double latitudeMin = Collections.min(latitudeList)-0.0018; - double latitudeMax = Collections.max(latitudeList)+0.0018; - double longitudeMin = Collections.min(longitudeList)-0.2/(111*Math.cos(latitudeMin)); - double longitudeMax = Collections.max(longitudeList)+0.2/(111*Math.cos(latitudeMin)); + double latitudeMin = Collections.min(latitudeList) - 0.0018; + double latitudeMax = Collections.max(latitudeList) + 0.0018; + double longitudeMin = Collections.min(longitudeList) - 0.2 / (111 * Math.cos(latitudeMin)); + double longitudeMax = Collections.max(longitudeList) + 0.2 / (111 * Math.cos(latitudeMin)); List<Double> bound = new ArrayList<>(); bound.add(longitudeMin); bound.add(latitudeMin); @@ -241,7 +245,7 @@ bound1.add(right_down); bound1.add(left_down); List<GeoCoordinate> geoCoordinates = new ArrayList<>(); - for (List bo:bound1) { + for (List bo : bound1) { GeoCoordinate g = new GeoCoordinate(); g.setLatitude(Double.parseDouble(bo.get(0).toString())); g.setLongitude(Double.parseDouble(bo.get(1).toString())); @@ -253,16 +257,16 @@ centerPoint.add(centerPoint400.getLatitude()); List<Map<String, Object>> resultList = new ArrayList<>(); //������������ - String endTime = parameters.get("endTime").toString().substring(0,7)+"-01 00:00:00"; + String endTime = parameters.get("endTime").toString().substring(0, 7) + "-01 00:00:00"; //������������ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM"); int months = Integer.parseInt(parameters.get("months").toString()); Date newEndTime = new Date(); - for (int i=months;i>=0;i--){ + for (int i = months; i >= 0; i--) { Map<String, Object> resultMap = new HashMap<>(); //������������������������������ - resultMap.put("centerPoint",centerPoint); - resultMap.put("bound",bound); + resultMap.put("centerPoint", centerPoint); + resultMap.put("bound", bound); Calendar calendar = Calendar.getInstance(); try { newEndTime = df.parse(endTime); @@ -270,16 +274,16 @@ e.printStackTrace(); } calendar.setTime(newEndTime); - calendar.set(Calendar.MONTH,calendar.get(Calendar.MONDAY)-i); - String time = df.format(calendar.getTime())+"-01 00:00:00"; + calendar.set(Calendar.MONTH, calendar.get(Calendar.MONDAY) - i); + String time = df.format(calendar.getTime()) + "-01 00:00:00"; //������������ - resultMap.put("time",time); + resultMap.put("time", time); QueryWrapper<HistoryMonthly> historyMonthlyQueryWrapper = new QueryWrapper<>(); - historyMonthlyQueryWrapper.eq("time",time); + historyMonthlyQueryWrapper.eq("time", time); historyMonthlyQueryWrapper.in("mac", deviceMacList); List<HistoryMonthly> historyDailies = historyMonthlyMapper.selectList(historyMonthlyQueryWrapper); List<Object> list = new ArrayList<>(); - for (HistoryMonthly historyMonthlyData:historyDailies) { + for (HistoryMonthly historyMonthlyData : historyDailies) { List<Object> list1 = new ArrayList<>(); String mac = historyMonthlyData.getMac(); Device device = deviceMap.get(mac); @@ -293,7 +297,7 @@ list1.add(level); list.add(list1); } - resultMap.put("list",list); + resultMap.put("list", list); resultList.add(resultMap); } return resultList; @@ -307,4 +311,39 @@ .in("mac", macs); return historyMonthlyMapper.selectList(queryWrapper); } + + @Override + public Double calculatedValue(List<HistoryMonthly> list, String sensorCode, String type) { + Supplier<Stream<HistoryMonthly>> supplier = list::stream; + DoubleStream doubleStream = supplier.get() + .flatMapToDouble(v -> { + Map<String, Object> dataValue = JSONObject.parseObject(v.getValue(), Map.class); + Object sensorValue = dataValue.get(sensorCode); + if (ObjectUtils.isEmpty(sensorValue)) { + return null; + } + double aDouble = Double.parseDouble(sensorValue.toString()); + return DoubleStream.of(aDouble); + }); + Double result = null; + OptionalDouble optionalDouble = null; + if ("sum".equals(type)) { + result = doubleStream.sum(); + } else { + if ("min".equals(type)) { + optionalDouble = doubleStream.average(); + + } else if ("max".equals(type)) { + optionalDouble = doubleStream.min(); + + } else if ("avg".equals(type)) { + optionalDouble = doubleStream.max(); + } + + if (optionalDouble.isPresent()) { + result = optionalDouble.getAsDouble(); + } + } + return result; + } } -- Gitblit v1.8.0