|  |  |  | 
|---|
|  |  |  | package com.moral.api.service.impl; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.alibaba.fastjson.JSON; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 
|---|
|  |  |  | import com.jhlabs.composite.AverageComposite; | 
|---|
|  |  |  | import com.moral.api.entity.*; | 
|---|
|  |  |  | import com.moral.api.mapper.DeviceMapper; | 
|---|
|  |  |  | import com.moral.api.mapper.HistoryMonthlyMapper; | 
|---|
|  |  |  | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.stereotype.Service; | 
|---|
|  |  |  | import org.springframework.util.ObjectUtils; | 
|---|
|  |  |  | import reactor.core.publisher.Flux; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.util.*; | 
|---|
|  |  |  | import java.util.stream.Collectors; | 
|---|
|  |  |  | 
|---|
|  |  |  | map.put("start",startTime); | 
|---|
|  |  |  | map.put("type","$."+ type); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //获取用户信息 | 
|---|
|  |  |  | Map<String, Object> userInfo = (Map<String, Object>) TokenUtils.getUserInfo(); | 
|---|
|  |  |  | Map<String, Object> orgInfo = (Map<String, Object>) userInfo.get("organization"); | 
|---|
|  |  |  | Integer organizationId = (Integer) orgInfo.get("id"); | 
|---|
|  |  |  | //大账号 | 
|---|
|  |  |  | ArrayList<Integer> list = new ArrayList<>(); | 
|---|
|  |  |  | if (organizationId==24){ | 
|---|
|  |  |  | LambdaQueryWrapper<Organization> wrapper = new LambdaQueryWrapper<>(); | 
|---|
|  |  |  | wrapper.eq(Organization::getIsDelete,Constants.NOT_DELETE); | 
|---|
|  |  |  | wrapper.eq(Organization::getCityCode,code); | 
|---|
|  |  |  | List<Organization> organizations = organizationMapper.selectList(wrapper); | 
|---|
|  |  |  | List<Integer> collect = organizations.stream().map(organization -> organization.getId()).collect(Collectors.toList()); | 
|---|
|  |  |  | list.addAll(collect); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | list.add(organizationId); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //        ArrayList<Map<String, Object>> rsHeatMap = new ArrayList<>(); | 
|---|
|  |  |  | ArrayList<HeatMapDTO> rsHeatMap = new ArrayList<>(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (form.equals("hour")){ //小时 | 
|---|
|  |  |  | Date date1 = DateUtils.getDate(startTime, DateUtils.yyyy_MM_dd_HH_EN); | 
|---|
|  |  |  | List<String> tableNames = MybatisPLUSUtils.getTableNamesByWrapper(date1, date1, SeparateTableType.MONTH); | 
|---|
|  |  |  | 
|---|
|  |  |  | HashMap<String, Object> map = new HashMap<>(); | 
|---|
|  |  |  | map.put("start",startTime); | 
|---|
|  |  |  | map.put("type","$."+ type); | 
|---|
|  |  |  | //获取用户信息 | 
|---|
|  |  |  | //        Map<String, Object> userInfo = (Map<String, Object>) TokenUtils.getUserInfo(); | 
|---|
|  |  |  | //        Map<String, Object> orgInfo = (Map<String, Object>) userInfo.get("organization"); | 
|---|
|  |  |  | //        Integer organizationId = (Integer) orgInfo.get("id"); | 
|---|
|  |  |  | //大账号 | 
|---|
|  |  |  | ArrayList<Integer> list = new ArrayList<>(); | 
|---|
|  |  |  | list.add(id); | 
|---|
|  |  |  | //        if (organizationId==24){ | 
|---|
|  |  |  | ////            LambdaQueryWrapper<Organization> wrapper = new LambdaQueryWrapper<>(); | 
|---|
|  |  |  | ////            wrapper.eq(Organization::getIsDelete,Constants.NOT_DELETE); | 
|---|
|  |  |  | ////            wrapper.eq(Organization::getId,id); | 
|---|
|  |  |  | ////            List<Organization> organizations = organizationMapper.selectList(wrapper); | 
|---|
|  |  |  | ////            List<Integer> collect = organizations.stream().map(organization -> organization.getId()).collect(Collectors.toList()); | 
|---|
|  |  |  | ////            list.addAll(collect); | 
|---|
|  |  |  | //            list.add(id); | 
|---|
|  |  |  | //        }else { | 
|---|
|  |  |  | //            list.add(id); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ArrayList<HeatMapDTO> rsHeatMap = new ArrayList<>(); | 
|---|
|  |  |  | ArrayList<String> list1 = new ArrayList<>(); | 
|---|
|  |  |  | list1.add("腾鳌镇政府"); | 
|---|
|  |  |  | list1.add("西四镇政府"); | 
|---|
|  |  |  | list1.add("孤山镇政府"); | 
|---|
|  |  |  | list1.add("英落镇政府"); | 
|---|
|  |  |  | list1.add("马风镇朱红村"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (form.equals("hour")){ //小时 | 
|---|
|  |  |  | //            log.info(""+startTime); | 
|---|
|  |  |  | log.info(""+startTime); | 
|---|
|  |  |  | String[] split = startTime.split("-"); | 
|---|
|  |  |  | String s = "_" + split[0] + split[1]; | 
|---|
|  |  |  | log.info(s+""); | 
|---|
|  |  |  | String dateString = DateUtils.stringToDateString(startTime, DateUtils.yyyy_MM_dd_HH_EN, DateUtils.yyyyMM_EN); | 
|---|
|  |  |  | //            Date date1 = DateUtils.getDate(startTime, DateUtils.yyyy_MM_dd_HH_EN); | 
|---|
|  |  |  | //            log.info(""+dateString); | 
|---|
|  |  |  | log.info(""+dateString); | 
|---|
|  |  |  | map.put("organizationIds",list); | 
|---|
|  |  |  | map.put("tableName","_"+dateString); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | List<HeatMapDTO> heatMap = deviceMapper.getHeatMapV1(map); | 
|---|
|  |  |  | //            log.info(heatMap.size()+""); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //过滤数据 | 
|---|
|  |  |  | List<HeatMapDTO> collect1 = heatMap.stream().filter(d -> d.getTime() != null).collect(Collectors.toList()); | 
|---|
|  |  |  | if (ObjectUtils.isEmpty(collect1)){ | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | getHeatMap(heatMap); | 
|---|
|  |  |  | rsHeatMap.addAll(heatMap); | 
|---|
|  |  |  | for (HeatMapDTO heatMapDTO : heatMap) { | 
|---|
|  |  |  | //                if (list1.contains(heatMapDTO.getName())){ | 
|---|
|  |  |  | if (type.equals("a34002") || type.equals("a21026")){ | 
|---|
|  |  |  | heatMapDTO.setCount(ObjectUtils.isEmpty(heatMapDTO.getCount())?49.0:heatMapDTO.getCount()); | 
|---|
|  |  |  | }else if (type.equals("a34004")){ | 
|---|
|  |  |  | heatMapDTO.setCount(ObjectUtils.isEmpty(heatMapDTO.getCount())?20.0:heatMapDTO.getCount()); | 
|---|
|  |  |  | }else if (type.equals("a21004")){ | 
|---|
|  |  |  | heatMapDTO.setCount(ObjectUtils.isEmpty(heatMapDTO.getCount())?20.0:heatMapDTO.getCount()); | 
|---|
|  |  |  | }else if (type.equals("a21005")){ | 
|---|
|  |  |  | heatMapDTO.setCount(ObjectUtils.isEmpty(heatMapDTO.getCount())?1.0:heatMapDTO.getCount()); | 
|---|
|  |  |  | }else if (type.equals("a05024")){ | 
|---|
|  |  |  | heatMapDTO.setCount(ObjectUtils.isEmpty(heatMapDTO.getCount())?138.0:heatMapDTO.getCount()); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | heatMapDTO.setCount(ObjectUtils.isEmpty(heatMapDTO.getCount())?0.2:heatMapDTO.getCount()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //                }else { | 
|---|
|  |  |  | //                    if (ObjectUtils.isEmpty(heatMapDTO.getCount())){ | 
|---|
|  |  |  | //                        heatMapDTO.setCount(0.0); | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | getHeatMap(heatMap,type); | 
|---|
|  |  |  | rsHeatMap.addAll(heatMap); | 
|---|
|  |  |  | }else { //天 | 
|---|
|  |  |  | map.put("organizationIds",list); | 
|---|
|  |  |  | List<HeatMapDTO> heatMap = deviceMapper.getHeatMapV1(map); | 
|---|
|  |  |  | 
|---|
|  |  |  | if (ObjectUtils.isEmpty(collect1)){ | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | getHeatMap(heatMap); | 
|---|
|  |  |  | for (HeatMapDTO heatMapDTO : heatMap) { | 
|---|
|  |  |  | if (type.equals("a34002") || type.equals("a21026")){ | 
|---|
|  |  |  | heatMapDTO.setCount(ObjectUtils.isEmpty(heatMapDTO.getCount())?49.0:heatMapDTO.getCount()); | 
|---|
|  |  |  | }else if (type.equals("a34004")){ | 
|---|
|  |  |  | heatMapDTO.setCount(ObjectUtils.isEmpty(heatMapDTO.getCount())?34.0:heatMapDTO.getCount()); | 
|---|
|  |  |  | }else if (type.equals("a21004")){ | 
|---|
|  |  |  | heatMapDTO.setCount(ObjectUtils.isEmpty(heatMapDTO.getCount())?39.0:heatMapDTO.getCount()); | 
|---|
|  |  |  | }else if (type.equals("a21005")){ | 
|---|
|  |  |  | heatMapDTO.setCount(ObjectUtils.isEmpty(heatMapDTO.getCount())?1.9:heatMapDTO.getCount()); | 
|---|
|  |  |  | }else if (type.equals("a05024")){ | 
|---|
|  |  |  | heatMapDTO.setCount(ObjectUtils.isEmpty(heatMapDTO.getCount())?100.0:heatMapDTO.getCount()); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | heatMapDTO.setCount(ObjectUtils.isEmpty(heatMapDTO.getCount())?0.4:heatMapDTO.getCount()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | getHeatMap(heatMap,type); | 
|---|
|  |  |  | rsHeatMap.addAll(heatMap); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | for (int i = 0; i <6; i++) { | 
|---|
|  |  |  | HeatMapDTO heatMapDTO = new HeatMapDTO(); | 
|---|
|  |  |  | heatMapDTO.setCount(0.0); | 
|---|
|  |  |  | if (i==0){ | 
|---|
|  |  |  | heatMapDTO.setLat(40.590436); | 
|---|
|  |  |  | heatMapDTO.setLng(122.861935); | 
|---|
|  |  |  | heatMapDTO.setMac("1111"); | 
|---|
|  |  |  | heatMapDTO.setName("1111"); | 
|---|
|  |  |  | }else if (i==1){ | 
|---|
|  |  |  | heatMapDTO.setLat(40.636617); | 
|---|
|  |  |  | heatMapDTO.setLng(123.101544); | 
|---|
|  |  |  | heatMapDTO.setMac("2222"); | 
|---|
|  |  |  | heatMapDTO.setName("2222"); | 
|---|
|  |  |  | }else if (i==2){ | 
|---|
|  |  |  | heatMapDTO.setLat(40.890881); | 
|---|
|  |  |  | heatMapDTO.setLng(122.910687); | 
|---|
|  |  |  | heatMapDTO.setMac("3333"); | 
|---|
|  |  |  | heatMapDTO.setName("3333"); | 
|---|
|  |  |  | }else if (i==3){ | 
|---|
|  |  |  | heatMapDTO.setLat(40.682129); | 
|---|
|  |  |  | heatMapDTO.setLng(123.105836); | 
|---|
|  |  |  | heatMapDTO.setMac("4444"); | 
|---|
|  |  |  | heatMapDTO.setName("4444"); | 
|---|
|  |  |  | }else if (i==4){ | 
|---|
|  |  |  | heatMapDTO.setLat(40.890037); | 
|---|
|  |  |  | heatMapDTO.setLng(123.021151); | 
|---|
|  |  |  | heatMapDTO.setMac("5555"); | 
|---|
|  |  |  | heatMapDTO.setName("5555"); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | heatMapDTO.setLat(41.051333); | 
|---|
|  |  |  | heatMapDTO.setLng(122.505864); | 
|---|
|  |  |  | heatMapDTO.setMac("6666"); | 
|---|
|  |  |  | heatMapDTO.setName("6666"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | rsHeatMap.add(heatMapDTO); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return distrinList(rsHeatMap); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //数据处理 | 
|---|
|  |  |  | private void getHeatMap(List<HeatMapDTO> heatMap) { | 
|---|
|  |  |  | private void getHeatMap(List<HeatMapDTO> heatMap,String type) { | 
|---|
|  |  |  | //数据过滤 | 
|---|
|  |  |  | List<HeatMapDTO> collect1 = heatMap.stream().filter(d -> d.getGroupId() != null).collect(Collectors.toList()); | 
|---|
|  |  |  | if (ObjectUtils.isEmpty(collect1)){ | 
|---|
|  |  |  | 
|---|
|  |  |  | GeoCoordinate geoCoordinate = new GeoCoordinate(); | 
|---|
|  |  |  | doubleArrayList.add(heatMapDTO.getCount()); | 
|---|
|  |  |  | //                heatMapDTO.setCount(heatMapDTO.getCount()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (type.equals("a21026")){ | 
|---|
|  |  |  | heatMapDTO.setCount(1.0); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | heatMapDTO.setCount(0.0); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | geoCoordinate.setLongitude(heatMapDTO.getLng()); | 
|---|
|  |  |  | geoCoordinate.setLatitude(heatMapDTO.getLat()); | 
|---|
|  |  |  | geoCoordinates.add(geoCoordinate); | 
|---|
|  |  |  | 
|---|
|  |  |  | double asDouble = doubleArrayList.stream().mapToDouble(Double::valueOf).max().getAsDouble(); | 
|---|
|  |  |  | //获取中心点 | 
|---|
|  |  |  | GeoCoordinate centerPoint = GetCenterPointFromListOfCoordinates.getCenterPoint(geoCoordinates); | 
|---|
|  |  |  | //                double rsCode = asDouble - (doubleArrayList.size()*10); | 
|---|
|  |  |  | double rsCode = asDouble - doubleArrayList.size()-1; | 
|---|
|  |  |  | //                log.info(asDouble+"-----"+rsCode); | 
|---|
|  |  |  | heatMapDTO.setCount(rsCode<=0.0?0.0:rsCode); | 
|---|
|  |  |  | //                heatMapDTO.setCount(rsCode); | 
|---|
|  |  |  | heatMapDTO.setCount(rsCode); | 
|---|
|  |  |  | //                heatMapDTO.setSum(asDouble); | 
|---|
|  |  |  | heatMapDTO.setLng(centerPoint.getLongitude()); | 
|---|
|  |  |  | heatMapDTO.setLat(centerPoint.getLatitude()); | 
|---|