| | |
| | | package com.lf.server.service.sys; |
| | | |
| | | import com.lf.server.entity.all.RedisCacheKey; |
| | | import com.lf.server.entity.all.SettingData; |
| | | import com.lf.server.entity.all.StaticData; |
| | | import com.lf.server.entity.ctrl.CoordinateEntity; |
| | | import com.lf.server.entity.ctrl.CountEntity; |
| | | import com.lf.server.entity.data.DownloadEntity; |
| | | import com.lf.server.entity.sys.AttachEntity; |
| | |
| | | import com.lf.server.entity.sys.UserEntity; |
| | | import com.lf.server.helper.*; |
| | | import com.lf.server.mapper.sys.ReportMapper; |
| | | import com.lf.server.service.all.RedisService; |
| | | import com.lf.server.service.data.DownloadService; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.locationtech.jts.geom.Coordinate; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.File; |
| | | import java.util.*; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | /** |
| | | * 报告模板 |
| | |
| | | */ |
| | | @Service |
| | | public class ReportService implements ReportMapper { |
| | | @Autowired |
| | | @Resource |
| | | ReportMapper reportMapper; |
| | | |
| | | @Autowired |
| | | @Resource |
| | | AttachService attachService; |
| | | |
| | | @Autowired |
| | | @Resource |
| | | PathHelper pathHelper; |
| | | |
| | | @Autowired |
| | | @Resource |
| | | DownloadService downloadService; |
| | | |
| | | @Resource |
| | | RedisService redisService; |
| | | |
| | | @Override |
| | | public Integer selectCount(String name, String code) { |
| | |
| | | } |
| | | |
| | | @Override |
| | | public List<CountEntity> countSizesByType() { |
| | | return reportMapper.countSizesByType(); |
| | | } |
| | | |
| | | @Override |
| | | public List<CountEntity> countServices() { |
| | | return reportMapper.countServices(); |
| | | } |
| | |
| | | @Override |
| | | public List<CountEntity> countOperates() { |
| | | return reportMapper.countOperates(); |
| | | } |
| | | |
| | | @Override |
| | | public List<CountEntity> countSizesByPrj() { |
| | | return reportMapper.countSizesByPrj(); |
| | | } |
| | | |
| | | @Override |
| | | public List<CountEntity> countExplorationPoints() { |
| | | String key = RedisCacheKey.dataCountKey("countExplorationPoints"); |
| | | // Object obj = redisService.get(key); |
| | | // if (obj instanceof List<?>) { |
| | | // return (List<CountEntity>) obj; |
| | | // } |
| | | |
| | | List<CountEntity> list = reportMapper.countExplorationPoints(); |
| | | if (null != list && list.size() > 0) { |
| | | countExplorationArea(list); |
| | | redisService.put(key, list, SettingData.CACHE_EXPIRE, TimeUnit.MINUTES); |
| | | } |
| | | |
| | | return list; |
| | | } |
| | | |
| | | @Override |
| | | public List<CoordinateEntity> selectExplorationPoints(String code) { |
| | | return reportMapper.selectExplorationPoints(StringHelper.getRightLike(code)); |
| | | } |
| | | |
| | | /** |
| | | * 统计钻孔点面积 |
| | | */ |
| | | private void countExplorationArea(List<CountEntity> list) { |
| | | for (CountEntity ce : list) { |
| | | if (0 == ce.getCount()) { |
| | | continue; |
| | | } |
| | | |
| | | List<CoordinateEntity> ces = selectExplorationPoints(ce.getM3()); |
| | | if (null == ces || ces.size() < 3) { |
| | | continue; |
| | | } |
| | | |
| | | StringBuilder sb = new StringBuilder(); |
| | | sb.append("["); |
| | | for (CoordinateEntity e : ces) { |
| | | sb.append(e.getX() + "," + e.getY() + ","); |
| | | } |
| | | sb.replace(sb.length() - 1, sb.length(), "]"); |
| | | |
| | | // double area = JtsHelper.calcAreaByPoints(ces) |
| | | double area = callJsFn(sb.toString()); |
| | | ce.setArea(area); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 调用JS方法 |
| | | */ |
| | | private double callJsFn(String str) { |
| | | String staticPath = PathHelper.getStaticPath(); |
| | | Object obj = JsHelper.callJsFn(staticPath + "js/turf.min.6.5.js", "pointsToPolygon", str); |
| | | if (null == obj) { |
| | | return 0d; |
| | | } |
| | | |
| | | return (double) obj; |
| | | } |
| | | |
| | | /** |
| | |
| | | case "countSizes": |
| | | createCountSizesWord(source, target); |
| | | break; |
| | | default: |
| | | case "countServices": |
| | | createCountServicesWord(source, target); |
| | | break; |
| | | case "countExplorationPoints": |
| | | createCountExplorationPointsWord(source, target); |
| | | break; |
| | | case "countSizesByType": |
| | | createCountSizesByTypeWord(source, target); |
| | | break; |
| | | case "countSizesByPrj": |
| | | createCountSizesByPrjWord(source, target); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } else { |
| | |
| | | case "countSizes": |
| | | createCountSizesExcel(source, target); |
| | | break; |
| | | default: |
| | | case "countServices": |
| | | createCountServicesExcel(source, target); |
| | | break; |
| | | case "countExplorationPoints": |
| | | createCountExplorationPointsExcel(source, target); |
| | | break; |
| | | case "countSizesByType": |
| | | createCountSizesByTypeExcel(source, target); |
| | | break; |
| | | case "countSizesByPrj": |
| | | createCountSizesByPrjExcel(source, target); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | |
| | | return; |
| | | } |
| | | |
| | | int rows = 1; |
| | | int rows = 1, allCount = 0; |
| | | ArrayList<String[]> addList = new ArrayList<>(); |
| | | for (CountEntity ce : list) { |
| | | allCount += ce.getCount(); |
| | | String[] strs = new String[]{"" + rows++, ce.getM1(), ce.getM2(), ce.getCount().toString()}; |
| | | addList.add(strs); |
| | | } |
| | | |
| | | WordHelper.generateWord(source, target, null, addList); |
| | | } |
| | | |
| | | /** |
| | | * 创建 服务调用量统计 Word |
| | | */ |
| | | public void createCountServicesWord(String source, String target) { |
| | | List<CountEntity> list = countServices(); |
| | | if (null == list || list.isEmpty()) { |
| | | return; |
| | | } |
| | | |
| | | int rows = 1; |
| | | ArrayList<String[]> addList = new ArrayList<>(); |
| | | for (CountEntity ce : list) { |
| | | String[] strs = new String[]{"" + rows++, ce.getM1(), ce.getCount().toString()}; |
| | | addList.add(strs); |
| | | if (addList.size() > 0) { |
| | | addList.add(new String[]{"" + rows, "总计", " ", "" + allCount}); |
| | | } |
| | | |
| | | WordHelper.generateWord(source, target, null, addList); |
| | |
| | | } |
| | | |
| | | int rows = 1; |
| | | Double allSize = 0d; |
| | | ArrayList<String[]> addList = new ArrayList<>(); |
| | | for (CountEntity ce : list) { |
| | | allSize += ce.getSizes(); |
| | | String[] strs = new String[]{"" + rows++, ce.getM1(), FileHelper.getSizes(ce.getSizes())}; |
| | | addList.add(strs); |
| | | } |
| | | if (addList.size() > 0) { |
| | | addList.add(new String[]{"" + rows, "总计", FileHelper.getSizes(allSize)}); |
| | | } |
| | | |
| | | WordHelper.generateWord(source, target, null, addList); |
| | | } |
| | | |
| | | /** |
| | | * 创建 服务调用量统计 Word |
| | | */ |
| | | public void createCountServicesWord(String source, String target) { |
| | | List<CountEntity> list = countServices(); |
| | | if (null == list || list.isEmpty()) { |
| | | return; |
| | | } |
| | | |
| | | int rows = 1, allCount = 0; |
| | | ArrayList<String[]> addList = new ArrayList<>(); |
| | | for (CountEntity ce : list) { |
| | | allCount += ce.getCount(); |
| | | String[] strs = new String[]{"" + rows++, ce.getM1(), ce.getCount().toString()}; |
| | | addList.add(strs); |
| | | } |
| | | if (addList.size() > 0) { |
| | | addList.add(new String[]{"" + rows, "总计", "" + allCount}); |
| | | } |
| | | |
| | | WordHelper.generateWord(source, target, null, addList); |
| | | } |
| | | |
| | | /** |
| | | * 创建 钻孔数据统计 Word |
| | | */ |
| | | public void createCountExplorationPointsWord(String source, String target) { |
| | | List<CountEntity> list = countExplorationPoints(); |
| | | if (null == list || list.isEmpty()) { |
| | | return; |
| | | } |
| | | |
| | | int rows = 1, allCount = 0; |
| | | Double allSize = 0d; |
| | | ArrayList<String[]> addList = new ArrayList<>(); |
| | | for (CountEntity ce : list) { |
| | | allSize += ce.getSizes(); |
| | | allCount += ce.getCount(); |
| | | String[] strs = new String[]{"" + rows++, ce.getM1(), "" + ce.getCount(), FileHelper.getSizes(ce.getSizes())}; |
| | | addList.add(strs); |
| | | } |
| | | if (addList.size() > 0) { |
| | | addList.add(new String[]{"" + rows, "总计", "" + allCount, FileHelper.getSizes(allSize)}); |
| | | } |
| | | |
| | | WordHelper.generateWord(source, target, null, addList); |
| | | } |
| | | |
| | | /** |
| | | * 创建 数据格式统计 Word |
| | | */ |
| | | public void createCountSizesByTypeWord(String source, String target) { |
| | | List<CountEntity> list = countSizesByType(); |
| | | if (null == list || list.isEmpty()) { |
| | | return; |
| | | } |
| | | |
| | | int rows = 1, allCount = 0; |
| | | Double allSize = 0d; |
| | | ArrayList<String[]> addList = new ArrayList<>(); |
| | | for (CountEntity ce : list) { |
| | | allSize += ce.getSizes(); |
| | | allCount += ce.getCount(); |
| | | String[] strs = new String[]{"" + rows++, ce.getM1(), "" + ce.getCount(), FileHelper.getSizes(ce.getSizes())}; |
| | | addList.add(strs); |
| | | } |
| | | if (addList.size() > 0) { |
| | | addList.add(new String[]{"" + rows, "总计", "" + allCount, FileHelper.getSizes(allSize)}); |
| | | } |
| | | |
| | | WordHelper.generateWord(source, target, null, addList); |
| | | } |
| | | |
| | | /** |
| | | * 创建 项目数据统计 Word |
| | | */ |
| | | public void createCountSizesByPrjWord(String source, String target) { |
| | | List<CountEntity> list = countSizesByPrj(); |
| | | if (null == list || list.isEmpty()) { |
| | | return; |
| | | } |
| | | |
| | | int rows = 1, allCount = 0; |
| | | Double allSize = 0d; |
| | | ArrayList<String[]> addList = new ArrayList<>(); |
| | | for (CountEntity ce : list) { |
| | | allSize += ce.getSizes(); |
| | | allCount += ce.getCount(); |
| | | String[] strs = new String[]{"" + rows++, ce.getM1(), "" + ce.getCount(), FileHelper.getSizes(ce.getSizes())}; |
| | | addList.add(strs); |
| | | } |
| | | if (addList.size() > 0) { |
| | | addList.add(new String[]{"" + rows, "总计", "" + allCount, FileHelper.getSizes(allSize)}); |
| | | } |
| | | |
| | | WordHelper.generateWord(source, target, null, addList); |
| | |
| | | return; |
| | | } |
| | | |
| | | int rows = 1; |
| | | int rows = 1, allCount = 0; |
| | | for (CountEntity ce : list) { |
| | | ce.setNo(rows++); |
| | | allCount += ce.getCount(); |
| | | } |
| | | |
| | | Map<String, List<CountEntity>> map = new HashMap<>(1); |
| | | map.put("data", list); |
| | | |
| | | ExcelHelper.writeToTemplate(source, target, map); |
| | | } |
| | | |
| | | /** |
| | | * 创建 服务调用量统计 Excel |
| | | */ |
| | | public void createCountServicesExcel(String source, String target) { |
| | | List<CountEntity> list = countServices(); |
| | | if (null == list || list.isEmpty()) { |
| | | return; |
| | | } |
| | | |
| | | int rows = 1; |
| | | for (CountEntity ce : list) { |
| | | ce.setNo(rows++); |
| | | if (list.size() > 0) { |
| | | CountEntity ce = new CountEntity(); |
| | | ce.setNo(rows); |
| | | ce.setM1("总计"); |
| | | ce.setCount((long) allCount); |
| | | list.add(ce); |
| | | } |
| | | |
| | | Map<String, List<CountEntity>> map = new HashMap<>(1); |
| | |
| | | } |
| | | |
| | | int rows = 1; |
| | | Double allSize = 0d; |
| | | for (CountEntity ce : list) { |
| | | ce.setNo(rows++); |
| | | ce.setM2(FileHelper.getSizes(ce.getSizes())); |
| | | allSize += ce.getSizes(); |
| | | } |
| | | if (list.size() > 0) { |
| | | CountEntity ce = new CountEntity(); |
| | | ce.setNo(rows); |
| | | ce.setM1("总计"); |
| | | ce.setM2(FileHelper.getSizes(allSize)); |
| | | list.add(ce); |
| | | } |
| | | |
| | | Map<String, List<CountEntity>> map = new HashMap<>(1); |
| | | map.put("data", list); |
| | | |
| | | ExcelHelper.writeToTemplate(source, target, map); |
| | | } |
| | | |
| | | /** |
| | | * 创建 服务调用量统计 Excel |
| | | */ |
| | | public void createCountServicesExcel(String source, String target) { |
| | | List<CountEntity> list = countServices(); |
| | | if (null == list || list.isEmpty()) { |
| | | return; |
| | | } |
| | | |
| | | int rows = 1, allCount = 0; |
| | | for (CountEntity ce : list) { |
| | | ce.setNo(rows++); |
| | | allCount += ce.getCount(); |
| | | } |
| | | if (list.size() > 0) { |
| | | CountEntity ce = new CountEntity(); |
| | | ce.setNo(rows); |
| | | ce.setM1("总计"); |
| | | ce.setCount((long) allCount); |
| | | list.add(ce); |
| | | } |
| | | |
| | | Map<String, List<CountEntity>> map = new HashMap<>(1); |
| | | map.put("data", list); |
| | | |
| | | ExcelHelper.writeToTemplate(source, target, map); |
| | | } |
| | | |
| | | /** |
| | | * 创建 钻孔数据统计 Excel |
| | | */ |
| | | public void createCountExplorationPointsExcel(String source, String target) { |
| | | List<CountEntity> list = countExplorationPoints(); |
| | | if (null == list || list.isEmpty()) { |
| | | return; |
| | | } |
| | | |
| | | int rows = 1, allCount = 0; |
| | | Double allSize = 0d; |
| | | for (CountEntity ce : list) { |
| | | ce.setNo(rows++); |
| | | ce.setM2(FileHelper.getSizes(ce.getSizes())); |
| | | allCount += ce.getCount(); |
| | | allSize += ce.getSizes(); |
| | | } |
| | | if (list.size() > 0) { |
| | | CountEntity ce = new CountEntity(); |
| | | ce.setNo(rows); |
| | | ce.setM1("总计"); |
| | | ce.setCount((long) allCount); |
| | | ce.setM2(FileHelper.getSizes(allSize)); |
| | | list.add(ce); |
| | | } |
| | | |
| | | Map<String, List<CountEntity>> map = new HashMap<>(1); |
| | | map.put("data", list); |
| | | |
| | | ExcelHelper.writeToTemplate(source, target, map); |
| | | } |
| | | |
| | | /** |
| | | * 创建 数据格式统计 Excel |
| | | */ |
| | | public void createCountSizesByTypeExcel(String source, String target) { |
| | | List<CountEntity> list = countSizesByType(); |
| | | if (null == list || list.isEmpty()) { |
| | | return; |
| | | } |
| | | |
| | | int rows = 1, allCount = 0; |
| | | Double allSize = 0d; |
| | | for (CountEntity ce : list) { |
| | | ce.setNo(rows++); |
| | | ce.setM2(FileHelper.getSizes(ce.getSizes())); |
| | | allCount += ce.getCount(); |
| | | allSize += ce.getSizes(); |
| | | } |
| | | if (list.size() > 0) { |
| | | CountEntity ce = new CountEntity(); |
| | | ce.setNo(rows); |
| | | ce.setM1("总计"); |
| | | ce.setCount((long) allCount); |
| | | ce.setM2(FileHelper.getSizes(allSize)); |
| | | list.add(ce); |
| | | } |
| | | |
| | | Map<String, List<CountEntity>> map = new HashMap<>(1); |
| | | map.put("data", list); |
| | | |
| | | ExcelHelper.writeToTemplate(source, target, map); |
| | | } |
| | | |
| | | /** |
| | | * 创建 项目数据统计 Excel |
| | | */ |
| | | public void createCountSizesByPrjExcel(String source, String target) { |
| | | List<CountEntity> list = countSizesByPrj(); |
| | | if (null == list || list.isEmpty()) { |
| | | return; |
| | | } |
| | | |
| | | int rows = 1, allCount = 0; |
| | | Double allSize = 0d; |
| | | for (CountEntity ce : list) { |
| | | ce.setNo(rows++); |
| | | ce.setM2(FileHelper.getSizes(ce.getSizes())); |
| | | allCount += ce.getCount(); |
| | | allSize += ce.getSizes(); |
| | | } |
| | | if (list.size() > 0) { |
| | | CountEntity ce = new CountEntity(); |
| | | ce.setNo(rows); |
| | | ce.setM1("总计"); |
| | | ce.setCount((long) allCount); |
| | | ce.setM2(FileHelper.getSizes(allSize)); |
| | | list.add(ce); |
| | | } |
| | | |
| | | Map<String, List<CountEntity>> map = new HashMap<>(1); |
| | |
| | | private DownloadEntity getDownloadEntity(UserEntity ue, String file) { |
| | | DownloadEntity de = new DownloadEntity(); |
| | | de.setName(FileHelper.getFileName(file)); |
| | | // 1-Shp文件,2-专题图,3-元数据,4-业务数据,5-管道分析,6-统计报告 |
| | | // 1-Shp文件,2-专题图,3-元数据,4-业务数据,5-管道分析,6-统计报告,7-附件文件,8-瓦片文件 |
| | | de.setType(6); |
| | | de.setSizes(FileHelper.sizeToMb(new File(file).length())); |
| | | de.setDepid(ue.getDepid()); |