From d4702daa7e989d3cf2460fe6d2a343e0d25d32b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Fri, 12 Jan 2024 13:58:18 +0800 Subject: [PATCH] 'commit' --- .../0189510b-f70b-4a3c-a3cd-b91ee7641487.xlsx | Bin 0 -> 9799 bytes .../5eda6518-9937-4698-b378-165f0bf029b3.xlsx | Bin 0 -> 5173 bytes src/main/java/UnitTest/TestExportExcel.java | 128 ---------------- .../Collect/Controller/CollectController.java | 42 ++++-- .../QingLong/Collect/Model/CollectModel.java | 139 +++++++++++++++++- 5 files changed, 162 insertions(+), 147 deletions(-) create mode 100644 WebRoot/Excel/0189510b-f70b-4a3c-a3cd-b91ee7641487.xlsx create mode 100644 WebRoot/Excel/5eda6518-9937-4698-b378-165f0bf029b3.xlsx diff --git a/WebRoot/Excel/0189510b-f70b-4a3c-a3cd-b91ee7641487.xlsx b/WebRoot/Excel/0189510b-f70b-4a3c-a3cd-b91ee7641487.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..5b0651f95871d6cc0f63f1c8d8415856ebb72a6d GIT binary patch literal 9799 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 getTableStructInfo(String table_name) { - String sql = "select col.column_name, col.ordinal_position as o, d.description as column_description from information_schema.columns col join pg_class c on c.relname = col.table_name left join pg_description d on d.objoid = c.oid and d.objsubid = col.ordinal_position where col.table_schema = 'public' and table_name=? order by col.ordinal_position"; - return Db.find(sql, table_name); - } - public static void main(String[] args) throws IOException { //读取库 HikariCpPlugin hp = new HikariCpPlugin("jdbc:postgresql://10.10.14.71:5432/szjz_db", "postgres", @@ -39,122 +28,5 @@ public class TestExportExcel { arp.setDialect(new PostgreSqlDialect()); arp.start(); - int job_id = 47; - String sql = "select * from t_collect_job where job_id=?"; - Record record = Db.findFirst(sql, job_id); - String job_name = record.getStr("job_name"); - - int job_type = record.getInt("job_type");//任务类型:1:表单,2:EXCEL模板 - String table_name = record.getStr("form_table_name");//表格名称 - if (job_type == 1) { - Map _map = new HashMap<>(); - List listStruct = getTableStructInfo(table_name); - int idx = 0; - for (Record r : listStruct) { - String column_name = r.getStr("column_name"); - //准备第几列用哪一个字段 - if (column_name.equals("id")) continue; - if (column_name.equals("bureau_id")) continue; - if (column_name.equals("person_id")) continue; - if (column_name.equals("class_id")) continue; - if (column_name.equals("job_id")) continue; - _map.put(idx++, r); - } - //获取数据 - sql = "select * from " + table_name + " where job_id=?"; - List data = Db.find(sql, job_id); - //创建Excel - SXSSFWorkbook workbook = new SXSSFWorkbook();//默认100行,超100行将写入临时文件 - workbook.setCompressTempFiles(false); //是否压缩临时文件,否则写入速度更快,但更占磁盘,但程序最后是会将临时文件删掉的 - //开始生成EXCEL - String sheet_name = "填报情况"; - //获取数据 - Sheet sheet = workbook.createSheet(sheet_name); - // 创建单元格样式对象 - CellStyle headerStyle = workbook.createCellStyle(); - // 设置水平居中 - headerStyle.setAlignment(HorizontalAlignment.CENTER); - // 设置垂直居中 - headerStyle.setVerticalAlignment(VerticalAlignment.CENTER); - // 设置边框样式 - headerStyle.setBorderTop(BorderStyle.THIN); - headerStyle.setBorderBottom(BorderStyle.THIN); - headerStyle.setBorderLeft(BorderStyle.THIN); - headerStyle.setBorderRight(BorderStyle.THIN); - - // 创建字体对象并设置字体颜色为白色 - Font font = workbook.createFont(); - font.setFontHeightInPoints((short) 14); - font.setBold(true); - font.setFontName("黑体"); - font.setColor(IndexedColors.BLACK.getIndex()); - // 设置背景色为浅蓝色 #d2f4f2 - //颜色 - String str = "#d2f4f2"; - String sr = str.substring(1, 3); - String sg = str.substring(3, 5); - String sb = str.substring(5, 7); - //16进制的字符串转为int - int r = Integer.parseInt(sr, 16); - int g = Integer.parseInt(sg, 16); - int b = Integer.parseInt(sb, 16); - XSSFColor rbg = new XSSFColor(new java.awt.Color(r, g, b), new DefaultIndexedColorMap()); - headerStyle.setFillForegroundColor(rbg); - headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); - // 将字体应用于样式 - headerStyle.setFont(font); - - // 在第一行创建单元格并设置样式 - Row headerRow = sheet.createRow(0); - Cell headerCell = headerRow.createCell(0); - headerCell.setCellStyle(headerStyle); - for (int i = 0; i < _map.size(); i++) { - headerCell = headerRow.createCell(i); - headerCell.setCellValue(_map.get(i).getStr("column_description")); - headerCell.setCellStyle(headerStyle); - } - - // 创建字体对象并设置字体大小为12 - font = workbook.createFont(); - font.setFontHeightInPoints((short) 12); - - // 创建单元格样式对象并将字体应用于样式 - CellStyle style = workbook.createCellStyle(); - style.setFont(font); - // 设置行高度为28 - sheet.setDefaultRowHeightInPoints(28); - // 设置每个单元格的宽度为30 - sheet.setDefaultColumnWidth(30); - // 设置边框样式 - style.setBorderTop(BorderStyle.THIN); - style.setBorderBottom(BorderStyle.THIN); - style.setBorderLeft(BorderStyle.THIN); - style.setBorderRight(BorderStyle.THIN); - // 设置水平居中 - style.setAlignment(HorizontalAlignment.CENTER); - // 设置垂直居中 - style.setVerticalAlignment(VerticalAlignment.CENTER); - - // 填充数据集的其余行 - for (int i = 1; i <= data.size(); i++) { - Row row = sheet.createRow(i); - Record r2 = data.get(i - 1); - for (int j = 0; j < _map.size(); j++) { - Cell cell = row.createCell(j); - cell.setCellValue(r2.getStr(_map.get(j).getStr("column_name"))); - cell.setCellStyle(style); - } - } - - String filePath = "c:/2.xlsx"; - // 保存Excel文件 - FileOutputStream outputStream = new FileOutputStream(filePath); - workbook.write(outputStream); - - // - System.out.println("恭喜,所有操作成功完成!"); - } else { - System.out.println("不是 Form填报任务,无法执行!"); - } } } \ No newline at end of file diff --git a/src/main/java/com/dsideal/QingLong/Collect/Controller/CollectController.java b/src/main/java/com/dsideal/QingLong/Collect/Controller/CollectController.java index 2c275a51..03e475eb 100644 --- a/src/main/java/com/dsideal/QingLong/Collect/Controller/CollectController.java +++ b/src/main/java/com/dsideal/QingLong/Collect/Controller/CollectController.java @@ -703,19 +703,20 @@ public class CollectController extends Controller { * 0:查全市 * 1:只查市直属 * 2:查登录人员所在县区 - * + *

* bureau_type_ids * 单位类型: * 1: 下属县区教育局 * 2:下属学校 * 3:下属教辅单位 + * * @return */ @Before({GET.class}) @IsLoginInterface({}) @LayUiPageInfoInterface({"page", "limit"}) @EmptyInterface({"bureau_type_ids"}) - public void getBureauList(int query_type_id, String bureau_type_ids, String org_name, int page, int limit) { + public void getBureauList(int query_type_id, String bureau_type_ids, String org_name, int page, int limit) { //操作人员 String person_id = SessionKit.get(getRequest(), getResponse(), "person_id"); //根据人员ID,获取人员所在的单位ID @@ -728,7 +729,7 @@ public class CollectController extends Controller { //0:查全市 //1:只查市直属 //2:查登录人员所在县区 - Page list = cm.getBureauList(query_type_id, bureau_type_ids, area_id, org_name, page, limit); + Page list = cm.getBureauList(query_type_id, bureau_type_ids, area_id, org_name, page, limit); renderJson(CommonUtil.renderJsonForLayUI(list)); } @@ -1613,19 +1614,38 @@ public class CollectController extends Controller { @Before({GET.class}) @IsLoginInterface({}) @IsNumericInterface({"job_id"}) + // http://10.10.21.20:9000/QingLong/collect/getSummaryExcel?job_id=8 + // http://10.10.21.20:9000/QingLong/collect/getSummaryExcel?job_id=47 public void getSummaryExcel(int job_id) throws IOException { + //操作人员 + String person_id = SessionKit.get(getRequest(), getResponse(), "person_id"); + //根据人员ID,获取人员所在的单位ID + LoginPersonModel personModel = new LoginPersonModel(); + Record rs = personModel.getLoginInfoByPersonId(person_id); + String bureau_id = rs.get("bureau_id"); + Record jobRecord = cm.getJob(job_id); + String fabu_bureau_id = jobRecord.getStr("bureau_id"); + if (!fabu_bureau_id.equals(bureau_id)) { + Map map = new HashMap<>(); + map.put("success", false); + map.put("message", "这个任务不是登录人下发的,无法输出汇总表!"); + renderJson(map); + } String job_name = jobRecord.getStr("job_name"); - String temp_excel_filename = UUID.randomUUID().toString().toLowerCase() + ".xlsx"; - String excelPath = basePath + "/" + temp_excel_filename; + String tmpFile = UUID.randomUUID().toString().toLowerCase() + ".xlsx"; + String excelPath = basePath + "/" + tmpFile; //这里需要知道是哪种类型的,因为不同的类型,生成EXCEL汇总表的方法不同 int job_type = jobRecord.getInt("job_type");//任务类型:1:表单,2:EXCEL模板 - if (job_type == 2) { - cm.getSummaryExcel(job_id, excelPath); - //提供下载 - renderFile(new File(excelPath), "【" + job_name + "】汇总表.xlsx"); - } else { - //暂未实现 + switch (job_type) { + case 1: + cm.getSummaryExcelForFormFill(job_id, excelPath); //测试用例 job_id=8 + break; + case 2: + cm.getSummaryExcelForImportExcel(job_id, excelPath);//测试用例 job_id=47 + break; } + //提供下载 + renderFile(new File(excelPath), "【" + job_name + "】汇总表.xlsx"); } } diff --git a/src/main/java/com/dsideal/QingLong/Collect/Model/CollectModel.java b/src/main/java/com/dsideal/QingLong/Collect/Model/CollectModel.java index 1c271bc7..5b81e522 100644 --- a/src/main/java/com/dsideal/QingLong/Collect/Model/CollectModel.java +++ b/src/main/java/com/dsideal/QingLong/Collect/Model/CollectModel.java @@ -903,19 +903,19 @@ public class CollectModel { if (publish_job_type_id == 1) { if (xiaShuSchool == 1) { //query_type_id=1:只查市直属 - Page list = getBureauList(1, "2", null, null, 1, 9999); + Page list = getBureauList(1, "2", null, null, 1, 9999); for (Record record : list.getList()) { bureauSet.add(record.getStr("org_id")); } } if (xiaShuJiaoFu == 1) { - Page list = getBureauList(1, "3", null, null, 1, 9999); + Page list = getBureauList(1, "3", null, null, 1, 9999); for (Record record : list.getList()) { bureauSet.add(record.getStr("org_id")); } } if (xiaShuJiaoYuJu == 1) { - Page list = getBureauList(1, "1", null, null, 1, 9999); + Page list = getBureauList(1, "1", null, null, 1, 9999); for (Record record : list.getList()) { bureauSet.add(record.getStr("org_id")); } @@ -925,13 +925,13 @@ public class CollectModel { else if (publish_job_type_id == 2) { if (xiaShuSchool == 1) { //query_type_id=2:查县区属 - Page list = getBureauList(2, "2", area_id, null, 1, 9999); + Page list = getBureauList(2, "2", area_id, null, 1, 9999); for (Record record : list.getList()) { bureauSet.add(record.getStr("org_id")); } } if (xiaShuJiaoFu == 1) { - Page list = getBureauList(2, "3", area_id, null, 1, 9999); + Page list = getBureauList(2, "3", area_id, null, 1, 9999); for (Record record : list.getList()) { bureauSet.add(record.getStr("org_id")); } @@ -1583,14 +1583,14 @@ public class CollectModel { //获取此县区的所有学校 Set targetSet = new HashSet<>(); if (xiaShuSchool == 1) { - Page list = getBureauList(2, "2", area_id, null, 1, 9999); + Page list = getBureauList(2, "2", area_id, null, 1, 9999); for (Record record : list.getList()) { targetSet.add(record.getStr("org_id")); } } //获取此县区的所有教辅单位 if (xiaShuJiaoFu == 1) { - Page list = getBureauList(2, "3", area_id, null, 1, 9999); + Page list = getBureauList(2, "3", area_id, null, 1, 9999); for (Record record : list.getList()) { targetSet.add(record.getStr("org_id")); } @@ -1731,6 +1731,17 @@ public class CollectModel { return Db.find(sql, job_id); } + /** + * 功能:获取指定列的列描述信息 + * + * @param table_name + * @return + */ + public static List getTableStructInfo(String table_name) { + String sql = "select col.column_name, col.ordinal_position as o, d.description as column_description from information_schema.columns col join pg_class c on c.relname = col.table_name left join pg_description d on d.objoid = c.oid and d.objsubid = col.ordinal_position where col.table_schema = 'public' and table_name=? order by col.ordinal_position"; + return Db.find(sql, table_name); + } + /** * 功能:生成简单的数据汇集EXCEL * @@ -1738,7 +1749,7 @@ public class CollectModel { * @param filePath * @throws IOException */ - public void getSummaryExcel(int job_id, String filePath) throws IOException { //给定任务编号,获取它有哪些表 + public void getSummaryExcelForImportExcel(int job_id, String filePath) throws IOException { //给定任务编号,获取它有哪些表 // 创建工作簿和工作表 SXSSFWorkbook workbook = new SXSSFWorkbook();//默认100行,超100行将写入临时文件 workbook.setCompressTempFiles(false); //是否压缩临时文件,否则写入速度更快,但更占磁盘,但程序最后是会将临时文件删掉的 @@ -1847,4 +1858,116 @@ public class CollectModel { FileOutputStream outputStream = new FileOutputStream(filePath); workbook.write(outputStream); } + + /** + * 功能:导出Form表单式录入的汇集数据EXCEL + * + * @param job_id + * @param filePath + * @throws IOException + */ + public void getSummaryExcelForFormFill(int job_id, String filePath) throws IOException { + Record jobRecord = getJob(job_id); + String table_name = jobRecord.getStr("form_table_name");//表格名称 + Map _map = new HashMap<>(); + List listStruct = getTableStructInfo(table_name); + int idx = 0; + for (Record r : listStruct) { + String column_name = r.getStr("column_name"); + //准备第几列用哪一个字段 + if (column_name.equals("id")) continue; + if (column_name.equals("bureau_id")) continue; + if (column_name.equals("person_id")) continue; + if (column_name.equals("class_id")) continue; + if (column_name.equals("job_id")) continue; + _map.put(idx++, r); + } + //获取数据 + List data = getTableDataByJobId(job_id, table_name); + //创建Excel + SXSSFWorkbook workbook = new SXSSFWorkbook();//默认100行,超100行将写入临时文件 + workbook.setCompressTempFiles(false); //是否压缩临时文件,否则写入速度更快,但更占磁盘,但程序最后是会将临时文件删掉的 + //开始生成EXCEL + String sheet_name = "填报情况"; + //获取数据 + Sheet sheet = workbook.createSheet(sheet_name); + // 创建单元格样式对象 + CellStyle headerStyle = workbook.createCellStyle(); + // 设置水平居中 + headerStyle.setAlignment(HorizontalAlignment.CENTER); + // 设置垂直居中 + headerStyle.setVerticalAlignment(VerticalAlignment.CENTER); + // 设置边框样式 + headerStyle.setBorderTop(BorderStyle.THIN); + headerStyle.setBorderBottom(BorderStyle.THIN); + headerStyle.setBorderLeft(BorderStyle.THIN); + headerStyle.setBorderRight(BorderStyle.THIN); + + // 创建字体对象并设置字体颜色为白色 + Font font = workbook.createFont(); + font.setFontHeightInPoints((short) 14); + font.setBold(true); + font.setFontName("黑体"); + font.setColor(IndexedColors.BLACK.getIndex()); + // 设置背景色为浅蓝色 #d2f4f2 + //颜色 + String str = "#d2f4f2"; + String sr = str.substring(1, 3); + String sg = str.substring(3, 5); + String sb = str.substring(5, 7); + //16进制的字符串转为int + int r = Integer.parseInt(sr, 16); + int g = Integer.parseInt(sg, 16); + int b = Integer.parseInt(sb, 16); + XSSFColor rbg = new XSSFColor(new java.awt.Color(r, g, b), new DefaultIndexedColorMap()); + headerStyle.setFillForegroundColor(rbg); + headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + // 将字体应用于样式 + headerStyle.setFont(font); + + // 在第一行创建单元格并设置样式 + Row headerRow = sheet.createRow(0); + Cell headerCell = headerRow.createCell(0); + headerCell.setCellStyle(headerStyle); + for (int i = 0; i < _map.size(); i++) { + headerCell = headerRow.createCell(i); + headerCell.setCellValue(_map.get(i).getStr("column_description")); + headerCell.setCellStyle(headerStyle); + } + + // 创建字体对象并设置字体大小为12 + font = workbook.createFont(); + font.setFontHeightInPoints((short) 12); + + // 创建单元格样式对象并将字体应用于样式 + CellStyle style = workbook.createCellStyle(); + style.setFont(font); + // 设置行高度为28 + sheet.setDefaultRowHeightInPoints(28); + // 设置每个单元格的宽度为30 + sheet.setDefaultColumnWidth(30); + // 设置边框样式 + style.setBorderTop(BorderStyle.THIN); + style.setBorderBottom(BorderStyle.THIN); + style.setBorderLeft(BorderStyle.THIN); + style.setBorderRight(BorderStyle.THIN); + // 设置水平居中 + style.setAlignment(HorizontalAlignment.CENTER); + // 设置垂直居中 + style.setVerticalAlignment(VerticalAlignment.CENTER); + + // 填充数据集的其余行 + for (int i = 1; i <= data.size(); i++) { + Row row = sheet.createRow(i); + Record r2 = data.get(i - 1); + for (int j = 0; j < _map.size(); j++) { + Cell cell = row.createCell(j); + cell.setCellValue(r2.getStr(_map.get(j).getStr("column_name"))); + cell.setCellStyle(style); + } + } + // 保存Excel文件 + FileOutputStream outputStream = new FileOutputStream(filePath); + workbook.write(outputStream); + } } \ No newline at end of file