package com.lf.server.service.sys; import com.lf.server.entity.all.StaticData; 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.ReportEntity; import com.lf.server.entity.sys.UserEntity; import com.lf.server.helper.*; import com.lf.server.mapper.sys.ReportMapper; import com.lf.server.service.data.DownloadService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.util.*; /** * 报告模板 * @author WWW */ @Service public class ReportService implements ReportMapper { @Autowired ReportMapper reportMapper; @Autowired AttachService attachService; @Autowired PathHelper pathHelper; @Autowired DownloadService downloadService; @Override public Integer selectCount(String name, String code) { name = StringHelper.getLikeUpperStr(name); return reportMapper.selectCount(name, code); } @Override public List selectByPage(String name, String code, Integer limit, Integer offset) { name = StringHelper.getLikeUpperStr(name); return reportMapper.selectByPage(name, code, limit, offset); } @Override public List selectAll() { return reportMapper.selectAll(); } @Override public ReportEntity selectById(int id) { return reportMapper.selectById(id); } @Override public Integer insert(ReportEntity entity) { return reportMapper.insert(entity); } @Override public Integer inserts(List list) { return reportMapper.inserts(list); } @Override public Integer delete(int id) { return reportMapper.delete(id); } @Override public Integer deletes(List ids) { return reportMapper.deletes(ids); } @Override public Integer update(ReportEntity entity) { return reportMapper.update(entity); } @Override public Integer updates(List list) { return reportMapper.updates(list); } @Override public List countSizes() { return reportMapper.countSizes(); } @Override public List countServices() { return reportMapper.countServices(); } @Override public List countOperates() { return reportMapper.countOperates(); } /** * 创建报告 */ public void createReport(UserEntity ue, ReportEntity re, HttpServletResponse res) throws Exception { AttachEntity ae = attachService.selectByGuid(re.getGuid()); if (null == ae) { return; } String source = pathHelper.getConfig().getUploadPath() + File.separator + ae.getPath(); String targetName = StringHelper.YMDHMS2_FORMAT.format(new Date()) + FileHelper.getExtension(ae.getName()); String target = pathHelper.getDownloadFullPath() + File.separator + targetName; File sourceFile = new File(source); if (!sourceFile.exists() || sourceFile.isDirectory()) { return; } generateReport(source, target, re); File targetFile = new File(target); if (!targetFile.exists() || sourceFile.isDirectory()) { return; } DownloadEntity de = getDownloadEntity(ue, target); int rows = downloadService.insert(de); if (rows > 0) { WebHelper.download(target, targetName, res); } } /** * 生成报告 */ private void generateReport(String source, String target, ReportEntity re) { if (StaticData.S1.equals(re.getType())) { switch (re.getCode()) { case "countOperates": createCountOperatesWord(source, target); break; case "countSizes": createCountSizesWord(source, target); break; case "countServices": createCountServicesWord(source, target); break; default: break; } } else { switch (re.getCode()) { case "countOperates": createCountOperatesExcel(source, target); break; case "countSizes": createCountSizesExcel(source, target); break; case "countServices": createCountServicesExcel(source, target); break; default: break; } } } /** * 创建 用户流量统计 Word */ public void createCountOperatesWord(String source, String target) { List list = countOperates(); if (null == list || list.isEmpty()) { return; } int rows = 1; ArrayList addList = new ArrayList<>(); for (CountEntity ce : list) { 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 list = countServices(); if (null == list || list.isEmpty()) { return; } int rows = 1; ArrayList addList = new ArrayList<>(); for (CountEntity ce : list) { String[] strs = new String[]{"" + rows++, ce.getM1(), ce.getCount().toString()}; addList.add(strs); } WordHelper.generateWord(source, target, null, addList); } /** * 创建 数据量统计 Word */ public void createCountSizesWord(String source, String target) { List list = countSizes(); if (null == list || list.isEmpty()) { return; } int rows = 1; ArrayList addList = new ArrayList<>(); for (CountEntity ce : list) { String[] strs = new String[]{"" + rows++, ce.getM1(), FileHelper.getSizes(ce.getSizes())}; addList.add(strs); } WordHelper.generateWord(source, target, null, addList); } /** * 创建 用户流量统计 Excel */ public void createCountOperatesExcel(String source, String target) { List list = countOperates(); if (null == list || list.isEmpty()) { return; } int rows = 1; for (CountEntity ce : list) { ce.setNo(rows++); } Map> map = new HashMap<>(1); map.put("data", list); ExcelHelper.writeToTemplate(source, target, map); } /** * 创建 服务调用量统计 Excel */ public void createCountServicesExcel(String source, String target) { List list = countServices(); if (null == list || list.isEmpty()) { return; } int rows = 1; for (CountEntity ce : list) { ce.setNo(rows++); } Map> map = new HashMap<>(1); map.put("data", list); ExcelHelper.writeToTemplate(source, target, map); } /** * 创建 数据量统计 Excel */ public void createCountSizesExcel(String source, String target) { List list = countSizes(); if (null == list || list.isEmpty()) { return; } int rows = 1; for (CountEntity ce : list) { ce.setNo(rows++); ce.setM2(FileHelper.getSizes(ce.getSizes())); } Map> map = new HashMap<>(1); map.put("data", list); ExcelHelper.writeToTemplate(source, target, map); } /** * 获取下载实体类 */ private DownloadEntity getDownloadEntity(UserEntity ue, String file) { DownloadEntity de = new DownloadEntity(); de.setName(FileHelper.getFileName(file)); // 1-Shp文件,2-专题图,3-元数据,4-业务数据,5-管道分析,6-统计报告,7-附件文件,8-瓦片文件 de.setType(6); de.setSizes(FileHelper.sizeToMb(new File(file).length())); de.setDepid(ue.getDepid()); de.setDcount(1); de.setPwd(null); de.setUrl(FileHelper.getRelativePath(file)); de.setDescr("统计报告"); de.setGuid(FileHelper.getFileMd5(file)); de.setCreateUser(ue.getId()); // de.setGeom(null) return de; } }