diff --git a/src/main/java/com/cetc32/dh/controller/rest/CityGeomController.java b/src/main/java/com/cetc32/dh/controller/rest/CityGeomController.java index 4553fa3567f16cc11d6e8790e7002e69295cdcf6..0786e97bf83f7b348945c9c4a598cc7bab56a599 100644 --- a/src/main/java/com/cetc32/dh/controller/rest/CityGeomController.java +++ b/src/main/java/com/cetc32/dh/controller/rest/CityGeomController.java @@ -10,9 +10,11 @@ package com.cetc32.dh.controller.rest; import com.cetc32.dh.common.response.ResponseData; import com.cetc32.dh.common.response.ResponseResult; import com.cetc32.dh.entity.CityGeom; +import com.cetc32.dh.entity.DataFile; import com.cetc32.dh.entity.DataMenu; import com.cetc32.dh.service.CityGeomService; import com.cetc32.dh.service.DataAreaService; +import com.cetc32.dh.service.DataFileService; import com.cetc32.dh.service.DataMenuService; import com.cetc32.webutil.common.annotations.LoginSkipped; import io.swagger.annotations.ApiOperation; @@ -22,6 +24,9 @@ import org.springframework.web.bind.annotation.*; import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static jdk.nashorn.internal.objects.NativeArray.concat; @RestController @@ -34,6 +39,8 @@ public class CityGeomController { DataAreaService dataAreaService; @Autowired DataMenuService dataMenuService; + @Autowired + DataFileService dataFileService; @LoginSkipped @@ -131,13 +138,20 @@ public class CityGeomController { * } */ @GetMapping("/countRegionFileNum") - public ResponseResult countRegionFileNum(String areaName,String flag) { + public ResponseResult countRegionFileNum(String areaName,String flag,String status) { + System.out.println(status+"!!!!!!!!!!!!!"); System.out.println(flag); List areaCodes = new ArrayList<>(); List MidNames = new ArrayList<>(); List tmpCodes =new ArrayList<>(); DataMenu dataMenu = null; - List> result =new ArrayList<>(); + List> result=new ArrayList<>(); + ArrayList dataFileList =new ArrayList<>(); + List> result_new=new ArrayList<>(); + + String polygonText = cityGeomService.queryByName(areaName).getPolygonText(); + result = dataFileService.selectFileIdByPolygon(polygonText); + if(flag.equals("市")||flag.equals("省")) { areaCodes = cityGeomService.queryAreaCodeByCity(areaName); areaCodes.addAll(cityGeomService.queryAreaCodeByProvince(areaName)); @@ -152,17 +166,48 @@ public class CityGeomController { } } } - if(areaCodes.size()==0){ + + // + if((result==null||result.size()==0)&&areaCodes.size()==0){ return ResponseResult.error("未找到相关区域信息和文件信息,请传入正确参数!"); }else{ - result=dataAreaService.countByAreaCodes(areaCodes); - for (Map map:result) { - dataMenu = dataMenuService.queryById((long)map.get("menuid")); - map.put("menuname",dataMenu.getMenuName()); + result.addAll(dataAreaService.countByAreaCodes(areaCodes)); + result=dataFileService.combineMap("menuid",result); + + for (HashMap map:result) { + String[] idsArry = ((String)map.get("fileids")).split(","); + Stream stream = Arrays.stream(idsArry); + List list = stream.distinct().collect(Collectors.toList()); + idsArry = list.toArray(new String[]{}); + List fileIds = Arrays.stream(idsArry) + .map(s -> Long.parseLong(s.trim())) + .collect(Collectors.toList()); + dataFileList = (ArrayList) dataFileService.queryByIds(fileIds); + ArrayList dataFileList_new =new ArrayList<>(); + for(int i=0;i areaList); public Integer deleteAreaByDataId(@Param("dataId")Long dataId); - public List> countByAreaCodes(List areaCodes); + public List> countByAreaCodes(List areaCodes); } diff --git a/src/main/java/com/cetc32/dh/mybatis/DataFileMapper.java b/src/main/java/com/cetc32/dh/mybatis/DataFileMapper.java index 7011081d79788dfcf05fdfb63f83db09fcda85c8..c51e1335cd14ba7cf8890c42712f1ae5d0ed745b 100644 --- a/src/main/java/com/cetc32/dh/mybatis/DataFileMapper.java +++ b/src/main/java/com/cetc32/dh/mybatis/DataFileMapper.java @@ -14,7 +14,9 @@ import org.springframework.stereotype.Repository; import tk.mybatis.mapper.common.Mapper; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * @Title: DataFileMapper @@ -66,6 +68,8 @@ public interface DataFileMapper extends Mapper { */ public DataFile queryById(Long id); + public List queryByIds(@Param("fileIds") List fileIds); + /** * 根据时间查询文件数据 * @@ -82,6 +86,12 @@ public interface DataFileMapper extends Mapper { */ public List queryByRegion(String region); + /** + * 查询polygontext包含points的datafileIds + * @return 返回查询结果 + */ + public List> selectFileIdByPolygon(@Param("polygontext") String polygontext); + /** * 根据安全等级查询文件数据 * diff --git a/src/main/java/com/cetc32/dh/service/DataAreaService.java b/src/main/java/com/cetc32/dh/service/DataAreaService.java index 374727b9f64d465b3be4fa244af992e8b5b2bbf7..fa9bfdc53625b63b0ec1dc03ffb411768b885247 100644 --- a/src/main/java/com/cetc32/dh/service/DataAreaService.java +++ b/src/main/java/com/cetc32/dh/service/DataAreaService.java @@ -16,5 +16,5 @@ public interface DataAreaService { Integer insertArea(List areaList); Integer deleteAreaByDataId(Long dataId); Integer updateArea(Long dataId,List list); - List > countByAreaCodes(List areaCode); + List > countByAreaCodes(List areaCode); } diff --git a/src/main/java/com/cetc32/dh/service/DataFileService.java b/src/main/java/com/cetc32/dh/service/DataFileService.java index dd6f223aad085ae8735708d8ad93f295f9a9f304..ab3ad6344aa84749c89b4e610ea1630fc37ed31c 100644 --- a/src/main/java/com/cetc32/dh/service/DataFileService.java +++ b/src/main/java/com/cetc32/dh/service/DataFileService.java @@ -9,7 +9,9 @@ package com.cetc32.dh.service; import com.cetc32.dh.entity.DataFile; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * @Title: DataFileService @@ -61,6 +63,8 @@ public interface DataFileService { */ public DataFile queryById(Long id); + public List queryByIds(List fileIds); + /** * 根据时间查询文件数据 * @@ -77,6 +81,12 @@ public interface DataFileService { */ public List queryByRegion(String region); + /** + * 查询polygontext包含points的datafileIds + * @return 返回查询结果 + */ + public List> selectFileIdByPolygon(String polygontext); + /** * 根据安全等级查询文件数据 * @@ -175,4 +185,7 @@ public interface DataFileService { * @return 反馈查询到的数据总数 * **/ public Long countAuthorizedData(DataFile data); + + + public List> combineMap(String combineField, List> dataList); } diff --git a/src/main/java/com/cetc32/dh/service/impl/DataAreaServiceImpl.java b/src/main/java/com/cetc32/dh/service/impl/DataAreaServiceImpl.java index f16aac6b01e2920f14fb9ba6fced911f62fb9bae..68919ad670813381c6e7154e14de4f19287352bd 100644 --- a/src/main/java/com/cetc32/dh/service/impl/DataAreaServiceImpl.java +++ b/src/main/java/com/cetc32/dh/service/impl/DataAreaServiceImpl.java @@ -41,7 +41,7 @@ public class DataAreaServiceImpl implements DataAreaService { return dataAreaMapper.insertArea(list); } @Override - public List> countByAreaCodes(List areaCode){ + public List> countByAreaCodes(List areaCode){ return dataAreaMapper.countByAreaCodes(areaCode); } } diff --git a/src/main/java/com/cetc32/dh/service/impl/DataFileServiceImpl.java b/src/main/java/com/cetc32/dh/service/impl/DataFileServiceImpl.java index e8d515e38a08739725aa25e7a52c5e65b41c764c..62d3d4425921a8689e1deec48b33d167e8e4c8df 100644 --- a/src/main/java/com/cetc32/dh/service/impl/DataFileServiceImpl.java +++ b/src/main/java/com/cetc32/dh/service/impl/DataFileServiceImpl.java @@ -80,55 +80,56 @@ public class DataFileServiceImpl implements DataFileService { */ @Override public Integer insertDataFile(DataFile dataFile) { - List dataAreas =new ArrayList<>(); + List dataAreas = new ArrayList<>(); packageDataFile(dataFile); - Integer id =dataFileMapper.insertOne(dataFile); - if(dataFile.getRegionList()!=null){ - for(String s:dataFile.getRegionList()){ - dataAreas .add(new DataArea(Long.valueOf(dataFile.getId()), - s, - Long.valueOf(dataFile.getMenuId()))); + Integer id = dataFileMapper.insertOne(dataFile); + if (dataFile.getRegionList() != null) { + for (String s : dataFile.getRegionList()) { + dataAreas.add(new DataArea(Long.valueOf(dataFile.getId()), + s, + Long.valueOf(dataFile.getMenuId()))); } - if(dataAreas.size()>0){ - try{ + if (dataAreas.size() > 0) { + try { dataAreaMapper.insertArea(dataAreas); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } } } return id; } + /************************************************************************ * 封装前端提交的DataFile实体类型,校验RegionList中区域信息是否是通用的areaCode * 如果是这提取其对应CityName ,如果校验RegionList中区域信息为省市,则转化为areaCode * @param dataFile 需要封装的datafile数据实体 * @return 无 * **********************************************************************/ - public void packageDataFile(DataFile dataFile) { - List rgList =dataFile.getRegionList(); - if (rgList != null && rgList.size()>0) { - if(Pattern.matches("^\\d{6}$", //校验6位数字编码 - rgList.get((new Random().nextInt(rgList.size()))).trim())){ //随即选取一个进行校验 + public void packageDataFile(DataFile dataFile) { + List rgList = dataFile.getRegionList(); + if (rgList != null && rgList.size() > 0) { + if (Pattern.matches("^\\d{6}$", //校验6位数字编码 + rgList.get((new Random().nextInt(rgList.size()))).trim())) { //随即选取一个进行校验 dataFile.setRegion(cityGeomService.selectCityInCodes(rgList)); - }else if(Pattern.matches("^[\\u4e00-\\u9fa5]{0,20}$", - rgList.get((new Random().nextInt(rgList.size()))).trim())){//校验数字编码失败,则表示可能为文字 + } else if (Pattern.matches("^[\\u4e00-\\u9fa5]{0,20}$", + rgList.get((new Random().nextInt(rgList.size()))).trim())) {//校验数字编码失败,则表示可能为文字 dataFile.setRegion(rgList.toString() - .replace("[", "") - .replace("]", "")); + .replace("[", "") + .replace("]", "")); //根据城市名称获取城市areaCode dataFile.setRegionList(cityGeomService.selectCodesInArea(rgList)); } - }else if(null != dataFile.getRegion()){ - String[] regions = dataFile.getRegion().split(","); - if(Pattern.matches("^\\d{6}$", //校验6位数字编码 - regions[(new Random().nextInt(regions.length))].trim())){ //随即选取一个进行校验 + } else if (null != dataFile.getRegion()) { + String[] regions = dataFile.getRegion().split(","); + if (Pattern.matches("^\\d{6}$", //校验6位数字编码 + regions[(new Random().nextInt(regions.length))].trim())) { //随即选取一个进行校验 //rgList.addAll(Arrays.asList(regions)); dataFile.setRegionList(Arrays.asList(regions)); //如果是区域编码这需要先转换汉字后将areacode存储到RegionList dataFile.setRegion(cityGeomService.selectCityInCodes(dataFile.getRegionList())); - }else if(Pattern.matches("^[\\u4e00-\\u9fa5]{0,20}$", - regions[(new Random().nextInt(regions.length))].trim())){//校验数字编码失败,则表示可能为文字 + } else if (Pattern.matches("^[\\u4e00-\\u9fa5]{0,20}$", + regions[(new Random().nextInt(regions.length))].trim())) {//校验数字编码失败,则表示可能为文字 //根据城市名称获取城市areaCode dataFile.setRegionList(cityGeomService.selectCodesInArea(Arrays.asList(regions))); } @@ -183,6 +184,17 @@ public class DataFileServiceImpl implements DataFileService { return dataFileMapper.queryById(id); } + /** + * 根据id查询文件数据 + * + * @param id 文件id + * @return 返回查询结果 + */ + @Override + public List queryByIds(List fileIds) { + return dataFileMapper.queryByIds(fileIds); + } + /** * 根据时间查询文件数据 * @@ -205,6 +217,15 @@ public class DataFileServiceImpl implements DataFileService { return dataFileMapper.queryByRegion(region); } + /** + * 查询polygontext包含points的datafileIds + * + * @return 返回查询结果 + */ + public List> selectFileIdByPolygon(String polygontext) { + return dataFileMapper.selectFileIdByPolygon(polygontext); + } + /** * 根据安全等级查询文件数据 * @@ -247,7 +268,7 @@ public class DataFileServiceImpl implements DataFileService { * @return 返回查询结果 */ @Override - public List queryByMenuId(Integer menuId){ + public List queryByMenuId(Integer menuId) { return dataFileMapper.queryByMenuId(menuId); } @@ -305,10 +326,10 @@ public class DataFileServiceImpl implements DataFileService { } else if (StringUtils.isNotBlank(dataFile.getRegion())) { String polygon = dataFile.getRegion().toUpperCase().trim(); - if(polygon.startsWith("POLYGON")){ + if (polygon.startsWith("POLYGON")) { dataFile.setPoints(polygon); dataFile.setRegion(null); - }else{ + } else { String fileRegion = "%" + dataFile.getRegion() + "%"; dataFile.setRegion(fileRegion); } @@ -449,14 +470,14 @@ public class DataFileServiceImpl implements DataFileService { * @return 返回结果 */ @Override - public Long fileSizeCount(Integer menuId){ + public Long fileSizeCount(Integer menuId) { Long size = 0L; DataMenu dataMenu = dataMenuService.queryById(menuId.longValue()); List dataMenuList = dataMenuService.queryByPIdSatisfyId(menuId.longValue()); - for (DataMenu dataMenuChild:dataMenuList) { - size=size+fileSizeCount(dataMenuChild.getId().intValue()); + for (DataMenu dataMenuChild : dataMenuList) { + size = size + fileSizeCount(dataMenuChild.getId().intValue()); } - size=size+ dataFileMapper.fileSizeCount(menuId); + size = size + dataFileMapper.fileSizeCount(menuId); return size; } @@ -467,14 +488,14 @@ public class DataFileServiceImpl implements DataFileService { * @return 返回结果 */ @Override - public Integer fileNumCount(Integer menuId){ + public Integer fileNumCount(Integer menuId) { Integer num = 0; DataMenu dataMenu = dataMenuService.queryById(menuId.longValue()); List dataMenuList = dataMenuService.queryByPIdSatisfyId(menuId.longValue()); - for (DataMenu dataMenuChild:dataMenuList) { - num=num+fileNumCount(dataMenuChild.getId().intValue()); + for (DataMenu dataMenuChild : dataMenuList) { + num = num + fileNumCount(dataMenuChild.getId().intValue()); } - num=num+ dataFileMapper.fileNumCount(menuId); + num = num + dataFileMapper.fileNumCount(menuId); return num; } @@ -488,24 +509,24 @@ public class DataFileServiceImpl implements DataFileService { **/ @Override public List selectAuthorizedData(Integer limit, Integer pageNum, DataFile data) { - if(null==limit || limit <=0) - return null; - if(pageNum<=0) - pageNum=1; - Integer offset = limit *(pageNum -1); + if (null == limit || limit <= 0) + return null; + if (pageNum <= 0) + pageNum = 1; + Integer offset = limit * (pageNum - 1); UserAreaPermision user = getUserAreaPermision(); if (user == null) return null; - dataFileMapper.selectFilesHasPermission(offset,limit,data,user,user.getPolygon()); + dataFileMapper.selectFilesHasPermission(offset, limit, data, user, user.getPolygon()); return null; } private UserAreaPermision getUserAreaPermision() { UserAreaPermision user = new UserAreaPermision(); LoginUser loginUser = SecurityUserUtil.getUser(); - if(null == loginUser) + if (null == loginUser) return null; - List areaCodes = loginUser.getAreacode(); - if(areaCodes.get(0).length()> CommonVariable.SOUTH_ZQ_CODE.length()) { + List areaCodes = loginUser.getAreacode(); + if (areaCodes.get(0).length() > CommonVariable.SOUTH_ZQ_CODE.length()) { user.setAreaCode(SecurityUserUtil.getUser().getAreacode()); } else { user.setPolygon(zqAreaMapper.selectAreaByZqId(loginUser.getAreacode())); @@ -523,7 +544,31 @@ public class DataFileServiceImpl implements DataFileService { public Long countAuthorizedData(DataFile data) { UserAreaPermision user = getUserAreaPermision(); if (user == null) return null; - return dataFileMapper.countFilesHasPermission(data,user,user.getPolygon()); + return dataFileMapper.countFilesHasPermission(data, user, user.getPolygon()); } -} + @Override + public List> combineMap(String combineField, List> dataList) { + //用于存放最后的结果 + List> countList = new ArrayList>(); + for (int i = 0; i < dataList.size(); i++) { + String oldCombineField = String.valueOf(dataList.get(i).get(combineField)); + + int flag = 0;//0为新增数据,1为增加count + for (int j = 0; j < countList.size(); j++) { + String newCombineField = String.valueOf(countList.get(j).get(combineField)); + if (oldCombineField.equals(newCombineField)) { + //做累加的操作 + String fileids = dataList.get(i).get("fileids").toString().concat(countList.get(j).get("fileids").toString()); + countList.get(j).put("fileids", fileids); + flag = 1; + break; + } + } + if (flag == 0) { + countList.add(dataList.get(i)); + } + } + return countList; + } +} diff --git a/src/main/resources/mapper/CityGeomMapper.xml b/src/main/resources/mapper/CityGeomMapper.xml index 1398d048851a180a6b6efbcaab2a1c1a3f51893c..6d318fbc4d6284a7dc010c4a8a219dfe3d45d663 100644 --- a/src/main/resources/mapper/CityGeomMapper.xml +++ b/src/main/resources/mapper/CityGeomMapper.xml @@ -46,7 +46,7 @@ - select menuid,count(distinct(dataid)) from data_area + select menuid,array_to_string(array_agg(distinct(dataid)),',') as fileids from data_area areacode in diff --git a/src/main/resources/mapper/DataFileMapper.xml b/src/main/resources/mapper/DataFileMapper.xml index 45217fdf7cc45ab5d9518a6b424344a06f772c8c..ffb8a3658c3d3342ffd620b5b8f4afe1d21e92c1 100644 --- a/src/main/resources/mapper/DataFileMapper.xml +++ b/src/main/resources/mapper/DataFileMapper.xml @@ -42,7 +42,8 @@ - SELECT currval('data_file_id_seq'::regclass) as id + SELECT setval('data_file_id_seq', (SELECT max(id) FROM data_file)) +-- SELECT setval('data_file_id_seq'::regclass) as id insert into data_file @@ -483,6 +484,19 @@ where id= #{id,jdbcType=BIGINT} + + +