diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index 72d888f..b266507 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -118,6 +118,16 @@
javax.servlet
javax.servlet-api
+
diff --git a/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/controller/KhGatherController.java b/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/controller/KhGatherController.java
index 20060cb..0309a22 100644
--- a/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/controller/KhGatherController.java
+++ b/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/controller/KhGatherController.java
@@ -1,5 +1,6 @@
package com.ruoyi.kaohe.controller;
+import java.io.IOException;
import java.math.BigDecimal;
import java.util.*;
import javax.servlet.http.HttpServletResponse;
@@ -9,6 +10,7 @@ import com.ruoyi.kaohe.domain.KhKhrwResult;
import com.ruoyi.kaohe.service.IKhKhrwResultService;
import com.ruoyi.kaohe.service.IKhVoteEmpService;
import com.ruoyi.kaohe.service.IKhVoteService;
+import com.ruoyi.kaohe.util.EnhancedJsonExporter;
import com.ruoyi.kaohe.util.JsonDeepMerge;
import com.ruoyi.kaohe.util.PinYinUtil;
import org.json.JSONArray;
@@ -97,6 +99,16 @@ public class KhGatherController extends BaseController {
tabledata.putAll(hz_df);
//根据被考核对象名分组数据到map中 得到表格内容的最终数据
JSONArray endTableData = JsonDeepMerge.mergeByKey(tabledata, "khdx");
+ //把数据结果中的khdx这个键值对———放到汇总主题拼音的key值里面
+ for (Object endData : endTableData) {
+ JSONObject jsonData = (JSONObject) endData;
+ String khdx = jsonData.getString("khdx");
+ JSONObject hzData = jsonData.getJSONObject(pyhz_name);
+ hzData.put("khdx",khdx);
+ jsonData.remove("khdx");
+ jsonData.put(pyhz_name,hzData);
+ endData=jsonData;
+ }
KhGather gather = new KhGather();
gather.setHzName(hz_name);
@@ -117,7 +129,6 @@ public class KhGatherController extends BaseController {
private Map parseJson(JSONArray datas, String titleP, BigDecimal z_zb) throws JsonProcessingException {
Map result = new HashMap<>();
- JSONArray hz_df = new JSONArray();//存储标题占比时的得分
JSONArray title_df = new JSONArray();//处理标题占比时的得分
String pyTitle = PinYinUtil.getPinyinInitials(titleP);//父级表头
JSONObject btKhdx = new JSONObject(true); //表头考核对象存储
@@ -311,13 +322,21 @@ public class KhGatherController extends BaseController {
/**
* 导出生成汇总列表
*/
- @PreAuthorize("@ss.hasPermi('kaohe:gather:export')")
+ /*@PreAuthorize("@ss.hasPermi('kaohe:gather:export')")
@Log(title = "生成汇总", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, KhGather khGather) {
List list = khGatherService.selectKhGatherList(khGather);
ExcelUtil util = new ExcelUtil(KhGather.class);
util.exportExcel(response, list, "生成汇总数据");
+ }*/
+ @PreAuthorize("@ss.hasPermi('kaohe:gather:export')")
+ @Log(title = "生成汇总", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, Long id) throws Exception {
+ KhGather gather = khGatherService.selectKhGatherById(id);
+ String tableHeader = gather.getTableHeader();
+ // EnhancedJsonExporter.export(tableHeader,"生成汇总数据.xlsx");
}
/**
diff --git a/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/util/EnhancedJsonExporter.java b/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/util/EnhancedJsonExporter.java
new file mode 100644
index 0000000..e173900
--- /dev/null
+++ b/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/util/EnhancedJsonExporter.java
@@ -0,0 +1,279 @@
+package com.ruoyi.kaohe.util;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+
+import java.io.FileOutputStream;
+import java.util.*;
+
+public class EnhancedJsonExporter {
+ private static final ObjectMapper mapper = new ObjectMapper();
+
+ static class HeaderNode {
+ String name;
+ String label;
+ int level;
+ int startCol;
+ int span;
+ List children = new ArrayList<>();
+ }
+
+ public static void exportWithMergedHeader(String jsonStr,String jsonData, String outputPath) throws Exception {
+ JsonNode rootNode = mapper.readTree(jsonStr);
+ JsonNode dataNode = mapper.readTree(jsonData);
+ Workbook workbook = new XSSFWorkbook();
+ Sheet sheet = workbook.createSheet("sheet1");
+
+ //获取标题样式
+ CellStyle headStyle = getStyle(workbook);
+
+ // 构建表头树
+ HeaderNode rootHeader = buildHeaderTree(rootNode, 0);
+
+ // 计算列位置和跨度
+ calculateHeaderLayout(rootHeader, 0);
+
+ // 创建合并表头
+ createMergedHeaderRows(sheet, rootHeader, headStyle);
+
+ // 填充数据
+ fillDataRows(sheet, dataNode, rootHeader,headStyle);//rootNode改为实际数据dataNode
+
+ // 自适应列宽
+ autoSizeColumns(sheet, rootHeader.span);
+
+ // 添加边框
+ addBordersWithMergedRegions(sheet);
+
+ // 输出文件
+ try (FileOutputStream fos = new FileOutputStream(outputPath)) {
+ workbook.write(fos);
+ }
+ }
+
+ private static HeaderNode buildHeaderTree(JsonNode node, int curLevel) {
+ HeaderNode root = new HeaderNode();
+ if (node.isArray()) {
+ for (JsonNode child : node) {
+ root.children.add(buildHeaderTree(child, curLevel));
+ }
+ return root;
+ }
+
+ HeaderNode current = new HeaderNode();
+ current.level = curLevel;
+ current.name = node.path("name").asText();
+ current.label = node.path("label").asText();
+
+ if (node.has("children")) {
+ for (JsonNode child : node.path("children")) {
+ HeaderNode childNode = buildHeaderTree(child, curLevel + 1);
+ childNode.level = current.level + 1;
+ current.children.add(childNode);
+ }
+ }
+ return current;
+ }
+
+ private static int calculateHeaderLayout(HeaderNode node, int startCol) {
+ if (node.children.isEmpty()) {
+ node.startCol = startCol;
+ node.span = 1;
+ return startCol + 1;
+ }
+
+ int currentCol = startCol;
+ for (HeaderNode child : node.children) {
+ currentCol = calculateHeaderLayout(child, currentCol);
+ }
+ node.startCol = node.children.get(0).startCol;
+ node.span = currentCol - startCol;
+ return currentCol;
+ }
+
+ private static int getMaxDepth(HeaderNode node) {
+ int max = node.level;
+ for (HeaderNode child : node.children) {
+ max = Math.max(max, getMaxDepth(child));
+ }
+ return max;
+ }
+
+ private static void createMergedHeaderRows(Sheet sheet, HeaderNode root, CellStyle headStyle) {
+ int maxDepth = getMaxDepth(root);
+ for (int level = 0; level <= maxDepth; level++) {
+ Row row = sheet.createRow(level);
+ createHeaderRow(sheet, row, root, level, headStyle, getMaxDepth(root));
+ }
+ }
+
+ //创建标题行
+ private static void createHeaderRow(Sheet sheet, Row row, HeaderNode node, int targetLevel, CellStyle headStyle, int maxLevel) {
+ if (node.name!=null&&node.level == targetLevel) {
+ Cell cell = row.createCell(node.startCol);
+ cell.setCellValue(node.label);
+ cell.setCellStyle(headStyle);
+ // 列合并处理
+ if (node.span > 1) {
+ sheet.addMergedRegion(new CellRangeAddress(
+ row.getRowNum(), row.getRowNum(),
+ node.startCol, node.startCol + node.span - 1
+ ));
+ }
+ // 行合并(关键改进点)
+ if (shouldMergeRows(node, maxLevel)) {
+ sheet.addMergedRegion(new CellRangeAddress(
+ row.getRowNum(), maxLevel,
+ node.startCol, node.startCol
+ ));
+ }
+ return;
+ }
+ for (HeaderNode child : node.children) {
+ createHeaderRow(sheet, row, child, targetLevel, headStyle, maxLevel);
+ }
+ }
+
+ private static boolean shouldMergeRows(HeaderNode node, int maxLevel) {
+ // 当前节点没有子节点 且 不是最后一级
+ return node.children.isEmpty() && node.level < maxLevel;
+ }
+
+ //设置字体样式
+ private static CellStyle getStyle(Workbook workbook) {
+ CellStyle style = workbook.createCellStyle();
+ style.setWrapText(true); // 启用自动换行
+ // 设置水平居中
+ style.setAlignment(HorizontalAlignment.CENTER);
+ // 设置垂直居中
+ style.setVerticalAlignment(VerticalAlignment.CENTER);
+ Font font = workbook.createFont();
+ // 设置加粗
+ // font.setBold(true);
+ // 设置字号
+ font.setFontHeightInPoints((short) 12);
+ //设置字体
+ // font.setFontName("宋体");
+ // 将字体应用到样式
+ style.setFont(font);
+ return style;
+ }
+
+ private static void fillDataRows(Sheet sheet, JsonNode dataNode, HeaderNode header, CellStyle style) {
+ if (!dataNode.isArray()) return;
+ int startRow = getMaxDepth(header) + 1;
+ for (int i = 0; i < dataNode.size(); i++) {
+ Row row = sheet.createRow(startRow + i);
+ fillRowData(row, dataNode.get(i), header, style);
+ }
+ }
+
+ private static void fillRowData(Row row, JsonNode data, HeaderNode header, CellStyle style) {
+ if (header.children.isEmpty()) {
+ if (data.has(header.name)) {
+ Cell cell = row.createCell(header.startCol);
+ cell.setCellValue(data.get(header.name).asText());
+ cell.setCellStyle(style);
+ }
+ return;
+ }
+
+ for (HeaderNode child : header.children) {
+ if (header.name!=null&&data.has(header.name)) {
+ data=data.get(header.name);
+ }
+ fillRowData(row, data, child, style);
+ }
+ }
+
+
+ private static void autoSizeColumns(Sheet sheet, int columnCount) {
+ for (int i = 0; i < columnCount; i++) {
+ sheet.autoSizeColumn(i, true);
+ // sheet.setColumnWidth(i, sheet.getColumnWidth(i) + 6 * 256); //中文自动列宽不准确,这里4*256 代表额外增加4个中文字符宽度
+ sheet.setColumnWidth(i, sheet.getColumnWidth(i));
+ }
+ }
+
+ public static void addBordersWithMergedRegions(Sheet sheet) {
+ // 创建细线边框样式
+ CellStyle borderStyle = createBorderStyle(sheet.getWorkbook());
+
+ // 先处理合并区域边框
+ for (int i = 0; i < sheet.getNumMergedRegions(); i++) {
+ CellRangeAddress region = sheet.getMergedRegion(i);
+ applyBorderToMergedRegion(sheet, region, borderStyle);
+ }
+
+ // 再处理普通单元格边框
+ for (Row row : sheet) {
+ for (Cell cell : row) {
+ if (!isInMergedRegion(cell, sheet)) {
+ applyBorderToCell(cell, borderStyle);
+ }
+ }
+ }
+ }
+
+ private static CellStyle createBorderStyle(Workbook workbook) {
+ CellStyle style = workbook.createCellStyle();
+ style.setBorderTop(BorderStyle.THIN);
+ style.setBorderBottom(BorderStyle.THIN);
+ style.setBorderLeft(BorderStyle.THIN);
+ style.setBorderRight(BorderStyle.THIN);
+ return style;
+ }
+
+ private static void applyBorderToMergedRegion(Sheet sheet,
+ CellRangeAddress region, CellStyle style) {
+ for (int rowNum = region.getFirstRow(); rowNum <= region.getLastRow(); rowNum++) {
+ Row row = sheet.getRow(rowNum) != null ? sheet.getRow(rowNum) : sheet.createRow(rowNum);
+ for (int colNum = region.getFirstColumn(); colNum <= region.getLastColumn(); colNum++) {
+ Cell cell = row.getCell(colNum) != null ? row.getCell(colNum) : row.createCell(colNum);
+ CellStyle newStyle = sheet.getWorkbook().createCellStyle();
+ newStyle.cloneStyleFrom(cell.getCellStyle());
+ newStyle.setBorderTop(BorderStyle.THIN);
+ newStyle.setBorderBottom(BorderStyle.THIN);
+ newStyle.setBorderLeft(BorderStyle.THIN);
+ newStyle.setBorderRight(BorderStyle.THIN);
+ cell.setCellStyle(newStyle);
+ }
+ }
+ }
+
+ private static boolean isInMergedRegion(Cell cell, Sheet sheet) {
+ for (int i = 0; i < sheet.getNumMergedRegions(); i++) {
+ CellRangeAddress region = sheet.getMergedRegion(i);
+ if (region.isInRange(cell.getRowIndex(), cell.getColumnIndex())) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private static void applyBorderToCell(Cell cell, CellStyle style) {
+ CellStyle newStyle = cell.getSheet().getWorkbook().createCellStyle();
+ newStyle.cloneStyleFrom(cell.getCellStyle());
+ newStyle.setBorderTop(style.getBorderTop());
+ newStyle.setBorderBottom(style.getBorderBottom());
+ newStyle.setBorderLeft(style.getBorderLeft());
+ newStyle.setBorderRight(style.getBorderRight());
+ cell.setCellStyle(newStyle);
+ }
+
+ public static void main(String[] args) {
+ String jsonHead = "[{\"children\":[{\"name\":\"khdx\",\"label\":\"单位\"},{\"children\":[{\"children\":[{\"name\":\"khx1\",\"label\":\"政治建设\"},{\"name\":\"khx1_zb\",\"label\":\"占比\"},{\"name\":\"khx2\",\"label\":\"宣传与思想政治工作\"},{\"name\":\"khx2_zb\",\"label\":\"占比\"},{\"name\":\"khx3\",\"label\":\"作风纪律\"},{\"name\":\"khx3_zb\",\"label\":\"占比\"},{\"name\":\"khx4\",\"label\":\"安全稳定\"},{\"name\":\"khx4_zb\",\"label\":\"占比\"},{\"name\":\"khx5\",\"label\":\"师资队伍与师德师风\"},{\"name\":\"khx5_zb\",\"label\":\"占比\"},{\"name\":\"khx6\",\"label\":\"财务工作\"},{\"name\":\"khx6_zb\",\"label\":\"占比\"},{\"name\":\"khx7\",\"label\":\"依法治校与综合治理\"},{\"name\":\"khx7_zb\",\"label\":\"占比\"},{\"name\":\"khx8\",\"label\":\"国有资产管理\"},{\"name\":\"khx8_zb\",\"label\":\"占比\"},{\"name\":\"khx9\",\"label\":\"实验室管理\"},{\"name\":\"khx9_zb\",\"label\":\"占比\"},{\"name\":\"khx10\",\"label\":\"招生就业与创新创业工作\"},{\"name\":\"khx10_zb\",\"label\":\"占比\"},{\"name\":\"khx11\",\"label\":\"对外交流与合作\"},{\"name\":\"khx11_zb\",\"label\":\"占比\"}],\"name\":\"djyxzmbrw\",\"label\":\"党建与行政目标任务\"},{\"name\":\"djyxzmbrw_df\",\"label\":\"得分\"},{\"name\":\"djyxzmbrw_zb\",\"label\":\"占比\"},{\"name\":\"djyxzmbrw_zsfs\",\"label\":\"折算分数\"},{\"children\":[{\"name\":\"khx1\",\"label\":\"教学工作\"},{\"name\":\"khx1_zb\",\"label\":\"占比\"},{\"name\":\"khx2\",\"label\":\"科研工作\"},{\"name\":\"khx2_zb\",\"label\":\"占比\"},{\"name\":\"khx3\",\"label\":\"学生工作\"},{\"name\":\"khx3_zb\",\"label\":\"占比\"}],\"name\":\"syfz\",\"label\":\"事业发展\"},{\"name\":\"syfz_df\",\"label\":\"得分\"},{\"name\":\"syfz_zb\",\"label\":\"占比\"},{\"name\":\"syfz_zsfs\",\"label\":\"折算分数\"}],\"name\":\"ejbt\",\"label\":\"二级标题\"},{\"name\":\"ejbt_df\",\"label\":\"得分\"},{\"name\":\"ejbt_zb\",\"label\":\"占比\"},{\"name\":\"ejbt_zsfs\",\"label\":\"折算分数\"},{\"children\":[{\"children\":[{\"name\":\"optionA\",\"label\":\"优秀\"},{\"name\":\"optionB\",\"label\":\"合格\"},{\"name\":\"optionC\",\"label\":\"基本合格\"},{\"name\":\"optionD\",\"label\":\"不合格\"},{\"name\":\"avgScore\",\"label\":\"得分\"},{\"name\":\"percentage\",\"label\":\"占比\"}],\"name\":\"khx1\",\"label\":\"师院领导班子\"},{\"children\":[{\"name\":\"optionA\",\"label\":\"优秀\"},{\"name\":\"optionB\",\"label\":\"合格\"},{\"name\":\"optionC\",\"label\":\"基本合格\"},{\"name\":\"optionD\",\"label\":\"不合格\"},{\"name\":\"avgScore\",\"label\":\"得分\"},{\"name\":\"percentage\",\"label\":\"占比\"}],\"name\":\"khx2\",\"label\":\"师院处级领导干部\"},{\"children\":[{\"name\":\"optionA\",\"label\":\"优秀\"},{\"name\":\"optionB\",\"label\":\"合格\"},{\"name\":\"optionC\",\"label\":\"基本合格\"},{\"name\":\"optionD\",\"label\":\"不合格\"},{\"name\":\"avgScore\",\"label\":\"得分\"},{\"name\":\"percentage\",\"label\":\"占比\"}],\"name\":\"khx3\",\"label\":\"服务对象代表\"}],\"name\":\"mzcp\",\"label\":\"民主测评\"},{\"name\":\"mzcp_df\",\"label\":\"得分\"},{\"name\":\"mzcp_zb\",\"label\":\"占比\"},{\"name\":\"mzcp_zsfs\",\"label\":\"折算分数\"},{\"children\":[{\"name\":\"khx1\",\"label\":\"分数 (满分10分)\"}],\"name\":\"tscx\",\"label\":\"特色创新\"},{\"name\":\"tscx_df\",\"label\":\"得分\"},{\"name\":\"tscx_zb\",\"label\":\"占比\"},{\"name\":\"tscx_zsfs\",\"label\":\"折算分数\"},{\"name\":\"cssj1_df\",\"label\":\"总分\"}],\"name\":\"cssj1\",\"label\":\"测试数据1\"}]"; // 替换为实际JSON字符串
+ String jsonData = "[{\"cssj1\":{\"ejbt_zb\":0.1,\"tscx\":{\"khx1\":10},\"khdx\":\"物理科学与技术学院\",\"mzcp_zsfs\":73.6,\"tscx_zb\":0.1,\"mzcp\":{\"khx1\":{\"avgScore\":100,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":1,\"optionB\":0},\"khx2\":{\"avgScore\":100,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":1,\"optionB\":0},\"khx3\":{\"avgScore\":80,\"percentage\":0.4,\"optionC\":0,\"optionD\":0,\"optionA\":0,\"optionB\":2}},\"ejbt_zsfs\":9.8866,\"mzcp_zb\":0.8,\"tscx_df\":10,\"ejbt_df\":98.866,\"ejbt\":{\"syfz_zb\":0.9,\"syfz_zsfs\":89.001,\"djyxzmbrw_df\":98.65,\"djyxzmbrw\":{\"khx9_zb\":0.03,\"khx8_zb\":0.02,\"khx7_zb\":0.05,\"khx1\":100,\"khx2\":100,\"khx4_zb\":0.1,\"khx5\":90,\"khx3_zb\":0.1,\"khx6\":100,\"khx3\":100,\"khx5_zb\":0.1,\"khx4\":100,\"khx6_zb\":0.1,\"khx9\":90,\"khx7\":99,\"khx10\":100,\"khx8\":100,\"khx11\":100,\"khx1_zb\":0.2,\"khx2_zb\":0.1,\"khx10_zb\":0.1,\"khx11_zb\":0.1},\"djyxzmbrw_zb\":0.1,\"djyxzmbrw_zsfs\":9.865,\"syfz_df\":98.89,\"syfz\":{\"khx1\":100,\"khx1_zb\":0.5,\"khx2\":98,\"khx2_zb\":0.28,\"khx3_zb\":0.22,\"khx3\":97.5}},\"mzcp_df\":92,\"tscx_zsfs\":1,\"cssj1_df\":84.4866}},{\"cssj1\":{\"ejbt_zb\":0.1,\"tscx\":{\"khx1\":10},\"khdx\":\"体育系\",\"mzcp_zsfs\":65.6,\"tscx_zb\":0.1,\"mzcp\":{\"khx1\":{\"avgScore\":80,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":0,\"optionB\":1},\"khx2\":{\"avgScore\":60,\"percentage\":0.3,\"optionC\":1,\"optionD\":0,\"optionA\":0,\"optionB\":0},\"khx3\":{\"avgScore\":100,\"percentage\":0.4,\"optionC\":0,\"optionD\":0,\"optionA\":2,\"optionB\":0}},\"ejbt_zsfs\":9.3547,\"mzcp_zb\":0.8,\"tscx_df\":10,\"ejbt_df\":93.547,\"ejbt\":{\"syfz_zb\":0.9,\"syfz_zsfs\":83.997,\"djyxzmbrw_df\":95.5,\"djyxzmbrw\":{\"khx9_zb\":0.03,\"khx8_zb\":0.02,\"khx7_zb\":0.05,\"khx1\":85,\"khx2\":100,\"khx4_zb\":0.1,\"khx5\":100,\"khx3_zb\":0.1,\"khx6\":100,\"khx3\":98,\"khx5_zb\":0.1,\"khx4\":100,\"khx6_zb\":0.1,\"khx9\":90,\"khx7\":100,\"khx10\":100,\"khx8\":100,\"khx11\":90,\"khx1_zb\":0.2,\"khx2_zb\":0.1,\"khx10_zb\":0.1,\"khx11_zb\":0.1},\"djyxzmbrw_zb\":0.1,\"djyxzmbrw_zsfs\":9.55,\"syfz_df\":93.33,\"syfz\":{\"khx1\":89,\"khx1_zb\":0.5,\"khx2\":97,\"khx2_zb\":0.28,\"khx3_zb\":0.22,\"khx3\":98.5}},\"mzcp_df\":82,\"tscx_zsfs\":1,\"cssj1_df\":75.9547}},{\"cssj1\":{\"ejbt_zb\":0.1,\"tscx\":{\"khx1\":10},\"khdx\":\"外国语学院\",\"mzcp_zsfs\":75.2,\"tscx_zb\":0.1,\"mzcp\":{\"khx1\":{\"avgScore\":80,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":0,\"optionB\":1},\"khx2\":{\"avgScore\":100,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":1,\"optionB\":0},\"khx3\":{\"avgScore\":100,\"percentage\":0.4,\"optionC\":0,\"optionD\":0,\"optionA\":2,\"optionB\":0}},\"ejbt_zsfs\":9.8069,\"mzcp_zb\":0.8,\"tscx_df\":10,\"ejbt_df\":98.069,\"ejbt\":{\"syfz_zb\":0.9,\"syfz_zsfs\":88.605,\"djyxzmbrw_df\":94.64,\"djyxzmbrw\":{\"khx9_zb\":0.03,\"khx8_zb\":0.02,\"khx7_zb\":0.05,\"khx1\":90,\"khx2\":100,\"khx4_zb\":0.1,\"khx5\":100,\"khx3_zb\":0.1,\"khx6\":96,\"khx3\":90,\"khx5_zb\":0.1,\"khx4\":100,\"khx6_zb\":0.1,\"khx9\":90,\"khx7\":90,\"khx10\":100,\"khx8\":97,\"khx11\":89,\"khx1_zb\":0.2,\"khx2_zb\":0.1,\"khx10_zb\":0.1,\"khx11_zb\":0.1},\"djyxzmbrw_zb\":0.1,\"djyxzmbrw_zsfs\":9.464,\"syfz_df\":98.45,\"syfz\":{\"khx1\":100,\"khx1_zb\":0.5,\"khx2\":98,\"khx2_zb\":0.28,\"khx3_zb\":0.22,\"khx3\":95.5}},\"mzcp_df\":94,\"tscx_zsfs\":1,\"cssj1_df\":86.0069}},{\"cssj1\":{\"ejbt_zb\":0.1,\"tscx\":{\"khx1\":7.5},\"khdx\":\"生命科学系\",\"mzcp_zsfs\":68.8,\"tscx_zb\":0.1,\"mzcp\":{\"khx1\":{\"avgScore\":100,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":1,\"optionB\":0},\"khx2\":{\"avgScore\":80,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":0,\"optionB\":1},\"khx3\":{\"avgScore\":80,\"percentage\":0.4,\"optionC\":1,\"optionD\":0,\"optionA\":1,\"optionB\":0}},\"ejbt_zsfs\":9.7226,\"mzcp_zb\":0.8,\"tscx_df\":7.5,\"ejbt_df\":97.226,\"ejbt\":{\"syfz_zb\":0.9,\"syfz_zsfs\":87.453,\"djyxzmbrw_df\":97.73,\"djyxzmbrw\":{\"khx9_zb\":0.03,\"khx8_zb\":0.02,\"khx7_zb\":0.05,\"khx1\":96,\"khx2\":100,\"khx4_zb\":0.1,\"khx5\":100,\"khx3_zb\":0.1,\"khx6\":99,\"khx3\":99,\"khx5_zb\":0.1,\"khx4\":100,\"khx6_zb\":0.1,\"khx9\":90,\"khx7\":99,\"khx10\":96,\"khx8\":99,\"khx11\":95,\"khx1_zb\":0.2,\"khx2_zb\":0.1,\"khx10_zb\":0.1,\"khx11_zb\":0.1},\"djyxzmbrw_zb\":0.1,\"djyxzmbrw_zsfs\":9.773,\"syfz_df\":97.17,\"syfz\":{\"khx1\":95,\"khx1_zb\":0.5,\"khx2\":100,\"khx2_zb\":0.28,\"khx3_zb\":0.22,\"khx3\":98.5}},\"mzcp_df\":86,\"tscx_zsfs\":0.75,\"cssj1_df\":79.2726}},{\"cssj1\":{\"ejbt_zb\":0.1,\"tscx\":{\"khx1\":10},\"khdx\":\"化学系\",\"mzcp_zsfs\":73.6,\"tscx_zb\":0.1,\"mzcp\":{\"khx1\":{\"avgScore\":100,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":1,\"optionB\":0},\"khx2\":{\"avgScore\":100,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":1,\"optionB\":0},\"khx3\":{\"avgScore\":80,\"percentage\":0.4,\"optionC\":0,\"optionD\":0,\"optionA\":0,\"optionB\":2}},\"ejbt_zsfs\":9.2434,\"mzcp_zb\":0.8,\"tscx_df\":10,\"ejbt_df\":92.434,\"ejbt\":{\"syfz_zb\":0.9,\"syfz_zsfs\":82.899,\"djyxzmbrw_df\":95.35,\"djyxzmbrw\":{\"khx9_zb\":0.03,\"khx8_zb\":0.02,\"khx7_zb\":0.05,\"khx1\":86,\"khx2\":100,\"khx4_zb\":0.1,\"khx5\":100,\"khx3_zb\":0.1,\"khx6\":99,\"khx3\":94,\"khx5_zb\":0.1,\"khx4\":100,\"khx6_zb\":0.1,\"khx9\":90,\"khx7\":99,\"khx10\":100,\"khx8\":100,\"khx11\":92,\"khx1_zb\":0.2,\"khx2_zb\":0.1,\"khx10_zb\":0.1,\"khx11_zb\":0.1},\"djyxzmbrw_zb\":0.1,\"djyxzmbrw_zsfs\":9.535,\"syfz_df\":92.11,\"syfz\":{\"khx1\":87,\"khx1_zb\":0.5,\"khx2\":97,\"khx2_zb\":0.28,\"khx3_zb\":0.22,\"khx3\":97.5}},\"mzcp_df\":92,\"tscx_zsfs\":1,\"cssj1_df\":83.8434}},{\"cssj1\":{\"ejbt_zb\":0.1,\"tscx\":{\"khx1\":7.5},\"khdx\":\"文学院\",\"mzcp_zsfs\":70.4,\"tscx_zb\":0.1,\"mzcp\":{\"khx1\":{\"avgScore\":80,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":0,\"optionB\":1},\"khx2\":{\"avgScore\":80,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":0,\"optionB\":1},\"khx3\":{\"avgScore\":100,\"percentage\":0.4,\"optionC\":0,\"optionD\":0,\"optionA\":2,\"optionB\":0}},\"ejbt_zsfs\":9.0252,\"mzcp_zb\":0.8,\"tscx_df\":7.5,\"ejbt_df\":90.252,\"ejbt\":{\"syfz_zb\":0.9,\"syfz_zsfs\":80.604,\"djyxzmbrw_df\":96.48,\"djyxzmbrw\":{\"khx9_zb\":0.03,\"khx8_zb\":0.02,\"khx7_zb\":0.05,\"khx1\":90,\"khx2\":100,\"khx4_zb\":0.1,\"khx5\":100,\"khx3_zb\":0.1,\"khx6\":100,\"khx3\":99,\"khx5_zb\":0.1,\"khx4\":100,\"khx6_zb\":0.1,\"khx9\":90,\"khx7\":90,\"khx10\":100,\"khx8\":99,\"khx11\":94,\"khx1_zb\":0.2,\"khx2_zb\":0.1,\"khx10_zb\":0.1,\"khx11_zb\":0.1},\"djyxzmbrw_zb\":0.1,\"djyxzmbrw_zsfs\":9.648,\"syfz_df\":89.56,\"syfz\":{\"khx1\":83,\"khx1_zb\":0.5,\"khx2\":97,\"khx2_zb\":0.28,\"khx3_zb\":0.22,\"khx3\":95}},\"mzcp_df\":88,\"tscx_zsfs\":0.75,\"cssj1_df\":80.1752}},{\"cssj1\":{\"ejbt_zb\":0.1,\"tscx\":{\"khx1\":10},\"khdx\":\"继续教育学院\",\"mzcp_zsfs\":80,\"tscx_zb\":0.1,\"mzcp\":{\"khx1\":{\"avgScore\":100,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":1,\"optionB\":0},\"khx2\":{\"avgScore\":100,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":1,\"optionB\":0},\"khx3\":{\"avgScore\":100,\"percentage\":0.4,\"optionC\":0,\"optionD\":0,\"optionA\":2,\"optionB\":0}},\"ejbt_zsfs\":8.8449,\"mzcp_zb\":0.8,\"tscx_df\":10,\"ejbt_df\":88.449,\"ejbt\":{\"syfz_zb\":0.9,\"syfz_zsfs\":78.759,\"djyxzmbrw_df\":96.9,\"djyxzmbrw\":{\"khx9_zb\":0.03,\"khx8_zb\":0.02,\"khx7_zb\":0.05,\"khx1\":90,\"khx2\":100,\"khx4_zb\":0.1,\"khx5\":100,\"khx3_zb\":0.1,\"khx6\":99,\"khx3\":98,\"khx5_zb\":0.1,\"khx4\":100,\"khx6_zb\":0.1,\"khx9\":90,\"khx7\":100,\"khx10\":100,\"khx8\":100,\"khx11\":95,\"khx1_zb\":0.2,\"khx2_zb\":0.1,\"khx10_zb\":0.1,\"khx11_zb\":0.1},\"djyxzmbrw_zb\":0.1,\"djyxzmbrw_zsfs\":9.69,\"syfz_df\":87.51,\"syfz\":{\"khx1\":80,\"khx1_zb\":0.5,\"khx2\":97,\"khx2_zb\":0.28,\"khx3_zb\":0.22,\"khx3\":92.5}},\"mzcp_df\":100,\"tscx_zsfs\":1,\"cssj1_df\":89.8449}},{\"cssj1\":{\"ejbt_zb\":0.1,\"tscx\":{\"khx1\":10},\"khdx\":\"教育学院\",\"mzcp_zsfs\":64,\"tscx_zb\":0.1,\"mzcp\":{\"khx1\":{\"avgScore\":80,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":0,\"optionB\":1},\"khx2\":{\"avgScore\":80,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":0,\"optionB\":1},\"khx3\":{\"avgScore\":80,\"percentage\":0.4,\"optionC\":0,\"optionD\":0,\"optionA\":0,\"optionB\":2}},\"ejbt_zsfs\":9.4026,\"mzcp_zb\":0.8,\"tscx_df\":10,\"ejbt_df\":94.026,\"ejbt\":{\"syfz_zb\":0.9,\"syfz_zsfs\":84.546,\"djyxzmbrw_df\":94.8,\"djyxzmbrw\":{\"khx9_zb\":0.03,\"khx8_zb\":0.02,\"khx7_zb\":0.05,\"khx1\":90,\"khx2\":100,\"khx4_zb\":0.1,\"khx5\":88,\"khx3_zb\":0.1,\"khx6\":93,\"khx3\":100,\"khx5_zb\":0.1,\"khx4\":100,\"khx6_zb\":0.1,\"khx9\":90,\"khx7\":100,\"khx10\":99,\"khx8\":100,\"khx11\":91,\"khx1_zb\":0.2,\"khx2_zb\":0.1,\"khx10_zb\":0.1,\"khx11_zb\":0.1},\"djyxzmbrw_zb\":0.1,\"djyxzmbrw_zsfs\":9.48,\"syfz_df\":93.94,\"syfz\":{\"khx1\":90,\"khx1_zb\":0.5,\"khx2\":97,\"khx2_zb\":0.28,\"khx3_zb\":0.22,\"khx3\":99}},\"mzcp_df\":80,\"tscx_zsfs\":1,\"cssj1_df\":74.4026}},{\"cssj1\":{\"ejbt_zb\":0.1,\"tscx\":{\"khx1\":10},\"khdx\":\"美术学院\",\"mzcp_zsfs\":73.6,\"tscx_zb\":0.1,\"mzcp\":{\"khx1\":{\"avgScore\":100,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":1,\"optionB\":0},\"khx2\":{\"avgScore\":100,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":1,\"optionB\":0},\"khx3\":{\"avgScore\":80,\"percentage\":0.4,\"optionC\":0,\"optionD\":0,\"optionA\":0,\"optionB\":2}},\"ejbt_zsfs\":8.9429,\"mzcp_zb\":0.8,\"tscx_df\":10,\"ejbt_df\":89.429,\"ejbt\":{\"syfz_zb\":0.9,\"syfz_zsfs\":79.749,\"djyxzmbrw_df\":96.8,\"djyxzmbrw\":{\"khx9_zb\":0.03,\"khx8_zb\":0.02,\"khx7_zb\":0.05,\"khx1\":90,\"khx2\":100,\"khx4_zb\":0.1,\"khx5\":100,\"khx3_zb\":0.1,\"khx6\":99,\"khx3\":98,\"khx5_zb\":0.1,\"khx4\":100,\"khx6_zb\":0.1,\"khx9\":90,\"khx7\":100,\"khx10\":100,\"khx8\":100,\"khx11\":94,\"khx1_zb\":0.2,\"khx2_zb\":0.1,\"khx10_zb\":0.1,\"khx11_zb\":0.1},\"djyxzmbrw_zb\":0.1,\"djyxzmbrw_zsfs\":9.68,\"syfz_df\":88.61,\"syfz\":{\"khx1\":80,\"khx1_zb\":0.5,\"khx2\":97,\"khx2_zb\":0.28,\"khx3_zb\":0.22,\"khx3\":97.5}},\"mzcp_df\":92,\"tscx_zsfs\":1,\"cssj1_df\":83.5429}},{\"cssj1\":{\"ejbt_zb\":0.1,\"tscx\":{\"khx1\":10},\"khdx\":\"海洋学院\",\"mzcp_zsfs\":64,\"tscx_zb\":0.1,\"mzcp\":{\"khx1\":{\"avgScore\":80,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":0,\"optionB\":1},\"khx2\":{\"avgScore\":80,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":0,\"optionB\":1},\"khx3\":{\"avgScore\":80,\"percentage\":0.4,\"optionC\":0,\"optionD\":0,\"optionA\":0,\"optionB\":2}},\"ejbt_zsfs\":8.9428,\"mzcp_zb\":0.8,\"tscx_df\":10,\"ejbt_df\":89.428,\"ejbt\":{\"syfz_zb\":0.9,\"syfz_zsfs\":80.1,\"djyxzmbrw_df\":93.28,\"djyxzmbrw\":{\"khx9_zb\":0.03,\"khx8_zb\":0.02,\"khx7_zb\":0.05,\"khx1\":96,\"khx2\":100,\"khx4_zb\":0.1,\"khx5\":80,\"khx3_zb\":0.1,\"khx6\":90,\"khx3\":90,\"khx5_zb\":0.1,\"khx4\":100,\"khx6_zb\":0.1,\"khx9\":90,\"khx7\":100,\"khx10\":94,\"khx8\":99,\"khx11\":90,\"khx1_zb\":0.2,\"khx2_zb\":0.1,\"khx10_zb\":0.1,\"khx11_zb\":0.1},\"djyxzmbrw_zb\":0.1,\"djyxzmbrw_zsfs\":9.328,\"syfz_df\":89,\"syfz\":{\"khx1\":80,\"khx1_zb\":0.5,\"khx2\":98,\"khx2_zb\":0.28,\"khx3_zb\":0.22,\"khx3\":98}},\"mzcp_df\":80,\"tscx_zsfs\":1,\"cssj1_df\":73.9428}},{\"cssj1\":{\"ejbt_zb\":0.1,\"tscx\":{\"khx1\":9},\"khdx\":\"音乐系\",\"mzcp_zsfs\":75.2,\"tscx_zb\":0.1,\"mzcp\":{\"khx1\":{\"avgScore\":80,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":0,\"optionB\":1},\"khx2\":{\"avgScore\":100,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":1,\"optionB\":0},\"khx3\":{\"avgScore\":100,\"percentage\":0.4,\"optionC\":0,\"optionD\":0,\"optionA\":2,\"optionB\":0}},\"ejbt_zsfs\":8.8475,\"mzcp_zb\":0.8,\"tscx_df\":9,\"ejbt_df\":88.475,\"ejbt\":{\"syfz_zb\":0.9,\"syfz_zsfs\":78.912,\"djyxzmbrw_df\":95.63,\"djyxzmbrw\":{\"khx9_zb\":0.03,\"khx8_zb\":0.02,\"khx7_zb\":0.05,\"khx1\":90,\"khx2\":100,\"khx4_zb\":0.1,\"khx5\":100,\"khx3_zb\":0.1,\"khx6\":99,\"khx3\":97,\"khx5_zb\":0.1,\"khx4\":100,\"khx6_zb\":0.1,\"khx9\":90,\"khx7\":89,\"khx10\":100,\"khx8\":99,\"khx11\":89,\"khx1_zb\":0.2,\"khx2_zb\":0.1,\"khx10_zb\":0.1,\"khx11_zb\":0.1},\"djyxzmbrw_zb\":0.1,\"djyxzmbrw_zsfs\":9.563,\"syfz_df\":87.68,\"syfz\":{\"khx1\":80,\"khx1_zb\":0.5,\"khx2\":98,\"khx2_zb\":0.28,\"khx3_zb\":0.22,\"khx3\":92}},\"mzcp_df\":94,\"tscx_zsfs\":0.9,\"cssj1_df\":84.9475}},{\"cssj1\":{\"ejbt_zb\":0.1,\"tscx\":{\"khx1\":5},\"khdx\":\"历史文化与法学系\",\"mzcp_zsfs\":73.6,\"tscx_zb\":0.1,\"mzcp\":{\"khx1\":{\"avgScore\":100,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":1,\"optionB\":0},\"khx2\":{\"avgScore\":100,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":1,\"optionB\":0},\"khx3\":{\"avgScore\":80,\"percentage\":0.4,\"optionC\":0,\"optionD\":0,\"optionA\":0,\"optionB\":2}},\"ejbt_zsfs\":8.8914,\"mzcp_zb\":0.8,\"tscx_df\":5,\"ejbt_df\":88.914,\"ejbt\":{\"syfz_zb\":0.9,\"syfz_zsfs\":79.308,\"djyxzmbrw_df\":96.06,\"djyxzmbrw\":{\"khx9_zb\":0.03,\"khx8_zb\":0.02,\"khx7_zb\":0.05,\"khx1\":100,\"khx2\":100,\"khx4_zb\":0.1,\"khx5\":80,\"khx3_zb\":0.1,\"khx6\":99,\"khx3\":98,\"khx5_zb\":0.1,\"khx4\":100,\"khx6_zb\":0.1,\"khx9\":90,\"khx7\":96,\"khx10\":100,\"khx8\":93,\"khx11\":90,\"khx1_zb\":0.2,\"khx2_zb\":0.1,\"khx10_zb\":0.1,\"khx11_zb\":0.1},\"djyxzmbrw_zb\":0.1,\"djyxzmbrw_zsfs\":9.606,\"syfz_df\":88.12,\"syfz\":{\"khx1\":80,\"khx1_zb\":0.5,\"khx2\":98,\"khx2_zb\":0.28,\"khx3_zb\":0.22,\"khx3\":94}},\"mzcp_df\":92,\"tscx_zsfs\":0.5,\"cssj1_df\":82.9914}},{\"cssj1\":{\"ejbt_zb\":0.1,\"tscx\":{\"khx1\":10},\"khdx\":\"数学与计算科学学院\",\"mzcp_zsfs\":75.2,\"tscx_zb\":0.1,\"mzcp\":{\"khx1\":{\"avgScore\":80,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":0,\"optionB\":1},\"khx2\":{\"avgScore\":100,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":1,\"optionB\":0},\"khx3\":{\"avgScore\":100,\"percentage\":0.4,\"optionC\":0,\"optionD\":0,\"optionA\":2,\"optionB\":0}},\"ejbt_zsfs\":9.1797,\"mzcp_zb\":0.8,\"tscx_df\":10,\"ejbt_df\":91.797,\"ejbt\":{\"syfz_zb\":0.9,\"syfz_zsfs\":82.215,\"djyxzmbrw_df\":95.82,\"djyxzmbrw\":{\"khx9_zb\":0.03,\"khx8_zb\":0.02,\"khx7_zb\":0.05,\"khx1\":90,\"khx2\":100,\"khx4_zb\":0.1,\"khx5\":100,\"khx3_zb\":0.1,\"khx6\":100,\"khx3\":100,\"khx5_zb\":0.1,\"khx4\":100,\"khx6_zb\":0.1,\"khx9\":90,\"khx7\":96,\"khx10\":94,\"khx8\":96,\"khx11\":90,\"khx1_zb\":0.2,\"khx2_zb\":0.1,\"khx10_zb\":0.1,\"khx11_zb\":0.1},\"djyxzmbrw_zb\":0.1,\"djyxzmbrw_zsfs\":9.582,\"syfz_df\":91.35,\"syfz\":{\"khx1\":88,\"khx1_zb\":0.5,\"khx2\":98,\"khx2_zb\":0.28,\"khx3_zb\":0.22,\"khx3\":90.5}},\"mzcp_df\":94,\"tscx_zsfs\":1,\"cssj1_df\":85.3797}},{\"cssj1\":{\"ejbt_zb\":0.1,\"tscx\":{\"khx1\":10},\"khdx\":\"计算机科学技术系\",\"mzcp_zsfs\":64,\"tscx_zb\":0.1,\"mzcp\":{\"khx1\":{\"avgScore\":100,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":1,\"optionB\":0},\"khx2\":{\"avgScore\":60,\"percentage\":0.3,\"optionC\":1,\"optionD\":0,\"optionA\":0,\"optionB\":0},\"khx3\":{\"avgScore\":80,\"percentage\":0.4,\"optionC\":0,\"optionD\":0,\"optionA\":0,\"optionB\":2}},\"ejbt_zsfs\":8.9912,\"mzcp_zb\":0.8,\"tscx_df\":10,\"ejbt_df\":89.912,\"ejbt\":{\"syfz_zb\":0.9,\"syfz_zsfs\":80.298,\"djyxzmbrw_df\":96.14,\"djyxzmbrw\":{\"khx9_zb\":0.03,\"khx8_zb\":0.02,\"khx7_zb\":0.05,\"khx1\":90,\"khx2\":100,\"khx4_zb\":0.1,\"khx5\":100,\"khx3_zb\":0.1,\"khx6\":97,\"khx3\":98,\"khx5_zb\":0.1,\"khx4\":100,\"khx6_zb\":0.1,\"khx9\":100,\"khx7\":100,\"khx10\":100,\"khx8\":97,\"khx11\":87,\"khx1_zb\":0.2,\"khx2_zb\":0.1,\"khx10_zb\":0.1,\"khx11_zb\":0.1},\"djyxzmbrw_zb\":0.1,\"djyxzmbrw_zsfs\":9.614,\"syfz_df\":89.22,\"syfz\":{\"khx1\":80,\"khx1_zb\":0.5,\"khx2\":98,\"khx2_zb\":0.28,\"khx3_zb\":0.22,\"khx3\":99}},\"mzcp_df\":80,\"tscx_zsfs\":1,\"cssj1_df\":73.9912}},{\"cssj1\":{\"ejbt_zb\":0.1,\"tscx\":{\"khx1\":10},\"khdx\":\"资源管理系\",\"mzcp_zsfs\":68.8,\"tscx_zb\":0.1,\"mzcp\":{\"khx1\":{\"avgScore\":100,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":1,\"optionB\":0},\"khx2\":{\"avgScore\":80,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":0,\"optionB\":1},\"khx3\":{\"avgScore\":80,\"percentage\":0.4,\"optionC\":0,\"optionD\":0,\"optionA\":0,\"optionB\":2}},\"ejbt_zsfs\":9.5029,\"mzcp_zb\":0.8,\"tscx_df\":10,\"ejbt_df\":95.029,\"ejbt\":{\"syfz_zb\":0.9,\"syfz_zsfs\":85.536,\"djyxzmbrw_df\":94.93,\"djyxzmbrw\":{\"khx9_zb\":0.03,\"khx8_zb\":0.02,\"khx7_zb\":0.05,\"khx1\":88,\"khx2\":100,\"khx4_zb\":0.1,\"khx5\":100,\"khx3_zb\":0.1,\"khx6\":95,\"khx3\":98,\"khx5_zb\":0.1,\"khx4\":100,\"khx6_zb\":0.1,\"khx9\":90,\"khx7\":99,\"khx10\":100,\"khx8\":99,\"khx11\":84,\"khx1_zb\":0.2,\"khx2_zb\":0.1,\"khx10_zb\":0.1,\"khx11_zb\":0.1},\"djyxzmbrw_zb\":0.1,\"djyxzmbrw_zsfs\":9.493,\"syfz_df\":95.04,\"syfz\":{\"khx1\":99,\"khx1_zb\":0.5,\"khx2\":99,\"khx2_zb\":0.28,\"khx3_zb\":0.22,\"khx3\":81}},\"mzcp_df\":86,\"tscx_zsfs\":1,\"cssj1_df\":79.3029}},{\"cssj1\":{\"ejbt_zb\":0.1,\"tscx\":{\"khx1\":10},\"khdx\":\"马克思主义学院\",\"mzcp_zsfs\":73.6,\"tscx_zb\":0.1,\"mzcp\":{\"khx1\":{\"avgScore\":100,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":1,\"optionB\":0},\"khx2\":{\"avgScore\":100,\"percentage\":0.3,\"optionC\":0,\"optionD\":0,\"optionA\":1,\"optionB\":0},\"khx3\":{\"avgScore\":80,\"percentage\":0.4,\"optionC\":0,\"optionD\":0,\"optionA\":0,\"optionB\":2}},\"ejbt_zsfs\":8.701,\"mzcp_zb\":0.8,\"tscx_df\":10,\"ejbt_df\":87.01,\"ejbt\":{\"syfz_zb\":0.9,\"syfz_zsfs\":77.49,\"djyxzmbrw_df\":95.2,\"djyxzmbrw\":{\"khx9_zb\":0.03,\"khx8_zb\":0.02,\"khx7_zb\":0.05,\"khx1\":90,\"khx2\":100,\"khx4_zb\":0.1,\"khx5\":100,\"khx3_zb\":0.1,\"khx6\":100,\"khx3\":94,\"khx5_zb\":0.1,\"khx4\":100,\"khx6_zb\":0.1,\"khx9\":90,\"khx7\":100,\"khx10\":97,\"khx8\":100,\"khx11\":84,\"khx1_zb\":0.2,\"khx2_zb\":0.1,\"khx10_zb\":0.1,\"khx11_zb\":0.1},\"djyxzmbrw_zb\":0.1,\"djyxzmbrw_zsfs\":9.52,\"syfz_df\":86.1,\"syfz\":{\"khx1\":80,\"khx1_zb\":0.5,\"khx2\":90,\"khx2_zb\":0.28,\"khx3_zb\":0.22,\"khx3\":95}},\"mzcp_df\":92,\"tscx_zsfs\":1,\"cssj1_df\":83.301}}]";
+ // String jsonHead ="[{\"name\":\"khdx\",\"label\":\"单位\"},{\"name\":\"tscx\",\"label\":\"特色创新\",\"children\":[{\"name\":\"khx1\",\"label\":\"分数 (满分10分)\"}]},{\"name\":\"tscx_df\",\"label\":\"得分\"}]";
+ // String jsonData ="[{\"khdx\":\"生命科学系\",\"tscx\":{\"khx1\":7.5000},\"tscx_df\":7.5000},{\"khdx\":\"海洋学院\",\"tscx\":{\"khx1\":10.0000},\"tscx_df\":10.0000},{\"khdx\":\"历史文化与法学系\",\"tscx\":{\"khx1\":5.0000},\"tscx_df\":5.0000},{\"khdx\":\"物理科学与技术学院\",\"tscx\":{\"khx1\":10.0000},\"tscx_df\":10.0000},{\"khdx\":\"教育学院\",\"tscx\":{\"khx1\":10.0000},\"tscx_df\":10.0000},{\"khdx\":\"资源管理系\",\"tscx\":{\"khx1\":10.0000},\"tscx_df\":10.0000},{\"khdx\":\"马克思主义学院\",\"tscx\":{\"khx1\":10.0000},\"tscx_df\":10.0000},{\"khdx\":\"美术学院\",\"tscx\":{\"khx1\":10.0000},\"tscx_df\":10.0000},{\"khdx\":\"计算机科学技术系\",\"tscx\":{\"khx1\":10.0000},\"tscx_df\":10.0000},{\"khdx\":\"化学系\",\"tscx\":{\"khx1\":10.0000},\"tscx_df\":10.0000},{\"khdx\":\"数学与计算科学学院\",\"tscx\":{\"khx1\":10.0000},\"tscx_df\":10.0000},{\"khdx\":\"继续教育学院\",\"tscx\":{\"khx1\":10.0000},\"tscx_df\":10.0000},{\"khdx\":\"外国语学院\",\"tscx\":{\"khx1\":10.0000},\"tscx_df\":10.0000},{\"khdx\":\"体育系\",\"tscx\":{\"khx1\":10.0000},\"tscx_df\":10.0000},{\"khdx\":\"文学院\",\"tscx\":{\"khx1\":7.5000},\"tscx_df\":7.5000},{\"khdx\":\"音乐系\",\"tscx\":{\"khx1\":9.0000},\"tscx_df\":9.0000}]";
+ try {
+ exportWithMergedHeader(jsonHead,jsonData, "考核结果.xlsx");
+ System.out.println("导出成功");
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/util/JsonDeepMerge.java b/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/util/JsonDeepMerge.java
index b486dd4..fe25882 100644
--- a/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/util/JsonDeepMerge.java
+++ b/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/util/JsonDeepMerge.java
@@ -31,7 +31,7 @@ public class JsonDeepMerge {
}
}
}
-
+ //根据某个相同key值,整合其他相同层级的key数据到一起,然后返回新的JSONArray数据
public static JSONArray mergeByKey(JSONArray array, String mergeKey) {
JSONArray result = new JSONArray();
for (int i = 0; i < array.length(); i++) {
diff --git a/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/util/JsonToExcelExporter.java b/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/util/JsonToExcelExporter.java
new file mode 100644
index 0000000..4ca2777
--- /dev/null
+++ b/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/util/JsonToExcelExporter.java
@@ -0,0 +1,85 @@
+package com.ruoyi.kaohe.util;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.*;
+
+public class JsonToExcelExporter {
+ public static Workbook export(JsonNode jsonData) throws IOException {
+ Workbook workbook = new XSSFWorkbook();
+ Sheet sheet = workbook.createSheet("Sheet1");
+
+ // 计算最大深度
+ int maxDepth = calculateMaxDepth(jsonData);
+
+ // 创建标题行
+ for (int i = 0; i <= maxDepth; i++) {
+ sheet.createRow(i);
+ }
+
+ // 递归构建表头
+ int[] currentCol = {0};
+ for (JsonNode node : jsonData) {
+ buildHeader(sheet, node, 0, currentCol);
+ }
+ return workbook;
+ }
+
+ private static int calculateMaxDepth(JsonNode nodes) {
+ int maxDepth = 0;
+ for (JsonNode node : nodes) {
+ if (node.has("children")) {
+ int childDepth = calculateMaxDepth(node.get("children"));
+ maxDepth = Math.max(maxDepth, childDepth + 1);
+ }
+ }
+ return maxDepth;
+ }
+
+ private static void buildHeader(Sheet sheet, JsonNode node,
+ int depth, int[] currentCol) {
+ Row row = sheet.getRow(depth);
+ Cell cell = row.createCell(currentCol[0]);
+ cell.setCellValue(node.get("label").asText());
+
+ int startCol = currentCol[0];
+
+ if (node.has("children")) {
+ Iterator children = node.get("children").elements();
+ while (children.hasNext()) {
+ buildHeader(sheet, children.next(), depth + 1, currentCol);
+ }
+
+ // 合并父单元格
+ if (currentCol[0] - startCol > 1) {
+ sheet.addMergedRegion(new CellRangeAddress(
+ depth, depth,
+ startCol, currentCol[0] - 1
+ ));
+ }
+ } else {
+ currentCol[0]++;
+ }
+ }
+
+
+ public static void main(String[] args) {
+ String json = "[{\"children\":[{\"name\":\"khdx\",\"label\":\"单位\"},{\"children\":[{\"children\":[{\"name\":\"khx1\",\"label\":\"政治建设\"},{\"name\":\"khx1_zb\",\"label\":\"占比\"},{\"name\":\"khx2\",\"label\":\"宣传与思想政治工作\"},{\"name\":\"khx2_zb\",\"label\":\"占比\"},{\"name\":\"khx3\",\"label\":\"作风纪律\"},{\"name\":\"khx3_zb\",\"label\":\"占比\"},{\"name\":\"khx4\",\"label\":\"安全稳定\"},{\"name\":\"khx4_zb\",\"label\":\"占比\"},{\"name\":\"khx5\",\"label\":\"师资队伍与师德师风\"},{\"name\":\"khx5_zb\",\"label\":\"占比\"},{\"name\":\"khx6\",\"label\":\"财务工作\"},{\"name\":\"khx6_zb\",\"label\":\"占比\"},{\"name\":\"khx7\",\"label\":\"依法治校与综合治理\"},{\"name\":\"khx7_zb\",\"label\":\"占比\"},{\"name\":\"khx8\",\"label\":\"国有资产管理\"},{\"name\":\"khx8_zb\",\"label\":\"占比\"},{\"name\":\"khx9\",\"label\":\"实验室管理\"},{\"name\":\"khx9_zb\",\"label\":\"占比\"},{\"name\":\"khx10\",\"label\":\"招生就业与创新创业工作\"},{\"name\":\"khx10_zb\",\"label\":\"占比\"},{\"name\":\"khx11\",\"label\":\"对外交流与合作\"},{\"name\":\"khx11_zb\",\"label\":\"占比\"}],\"name\":\"djyxzmbrw\",\"label\":\"党建与行政目标任务\"},{\"name\":\"djyxzmbrw_df\",\"label\":\"得分\"},{\"name\":\"djyxzmbrw_zb\",\"label\":\"占比\"},{\"name\":\"djyxzmbrw_zsfs\",\"label\":\"折算分数\"},{\"children\":[{\"name\":\"khx1\",\"label\":\"教学工作\"},{\"name\":\"khx1_zb\",\"label\":\"占比\"},{\"name\":\"khx2\",\"label\":\"科研工作\"},{\"name\":\"khx2_zb\",\"label\":\"占比\"},{\"name\":\"khx3\",\"label\":\"学生工作\"},{\"name\":\"khx3_zb\",\"label\":\"占比\"}],\"name\":\"syfz\",\"label\":\"事业发展\"},{\"name\":\"syfz_df\",\"label\":\"得分\"},{\"name\":\"syfz_zb\",\"label\":\"占比\"},{\"name\":\"syfz_zsfs\",\"label\":\"折算分数\"}],\"name\":\"ejdwmbglyjxkhcj\",\"label\":\"二级单位目标管理与绩效考核成绩\"},{\"name\":\"ejdwmbglyjxkhcj_df\",\"label\":\"得分\"},{\"name\":\"ejdwmbglyjxkhcj_zb\",\"label\":\"占比\"},{\"name\":\"ejdwmbglyjxkhcj_zsfs\",\"label\":\"折算分数\"},{\"children\":[{\"children\":[{\"name\":\"optionA\",\"label\":\"优秀\"},{\"name\":\"optionB\",\"label\":\"合格\"},{\"name\":\"optionC\",\"label\":\"基本合格\"},{\"name\":\"optionD\",\"label\":\"不合格\"},{\"name\":\"avgScore\",\"label\":\"得分\"},{\"name\":\"percentage\",\"label\":\"占比\"}],\"name\":\"khx1\",\"label\":\"师院领导班子\"},{\"children\":[{\"name\":\"optionA\",\"label\":\"优秀\"},{\"name\":\"optionB\",\"label\":\"合格\"},{\"name\":\"optionC\",\"label\":\"基本合格\"},{\"name\":\"optionD\",\"label\":\"不合格\"},{\"name\":\"avgScore\",\"label\":\"得分\"},{\"name\":\"percentage\",\"label\":\"占比\"}],\"name\":\"khx2\",\"label\":\"师院处级领导干部\"},{\"children\":[{\"name\":\"optionA\",\"label\":\"优秀\"},{\"name\":\"optionB\",\"label\":\"合格\"},{\"name\":\"optionC\",\"label\":\"基本合格\"},{\"name\":\"optionD\",\"label\":\"不合格\"},{\"name\":\"avgScore\",\"label\":\"得分\"},{\"name\":\"percentage\",\"label\":\"占比\"}],\"name\":\"khx3\",\"label\":\"服务对象代表\"}],\"name\":\"mzcp\",\"label\":\"民主测评\"},{\"name\":\"mzcp_df\",\"label\":\"得分\"},{\"name\":\"mzcp_zb\",\"label\":\"占比\"},{\"name\":\"mzcp_zsfs\",\"label\":\"折算分数\"},{\"children\":[{\"name\":\"khx1\",\"label\":\"分数 (满分10分)\"}],\"name\":\"tscx\",\"label\":\"特色创新\"},{\"name\":\"tscx_df\",\"label\":\"得分\"},{\"children\":[{\"name\":\"khx1\",\"label\":\"分数 (加减分项,值域可以为负)\"}],\"name\":\"zhpj\",\"label\":\"综合评价\"},{\"name\":\"zhpj_df\",\"label\":\"得分\"},{\"name\":\"jxdwldbzkhzf_df\",\"label\":\"总分\"}],\"name\":\"jxdwldbzkhzf\",\"label\":\"教学单位领导班子考核总分\"}]"; // 替换为实际JSON字符串
+ //String json ="[{\"label\":\"基本信息\",\"children\":[{\"label\":\"个人信息\",\"children\":[{\"label\":\"姓名\"},{\"label\":\"年龄\"},{\"label\":\"性别\"}]},{\"label\":\"联系方式\",\"children\":[{\"label\":\"手机\"},{\"label\":\"邮箱\"}]}]},{\"label\":\"教育背景\",\"children\":[{\"label\":\"学历\",\"children\":[{\"label\":\"学校名称\"},{\"label\":\"专业\"},{\"label\":\"入学时间\"},{\"label\":\"毕业时间\"}]},{\"label\":\"证书\",\"children\":[{\"label\":\"证书名称\"},{\"label\":\"获得时间\"}]}]},{\"label\":\"工作经历\",\"children\":[{\"label\":\"公司A\",\"children\":[{\"label\":\"职位\"},{\"label\":\"在职时间\"},{\"label\":\"工作内容\"}]},{\"label\":\"公司B\",\"children\":[{\"label\":\"职位\"},{\"label\":\"在职时间\"},{\"label\":\"工作内容\"}]}]},{\"label\":\"技能评价\",\"children\":[{\"label\":\"技术技能\"},{\"label\":\"语言能力\"},{\"label\":\"综合评分\"}]}]";
+ try {
+ Workbook workbook =export(new ObjectMapper().readTree(json));
+ try (FileOutputStream out = new FileOutputStream("output.xlsx")) {
+ workbook.write(out);
+ System.out.println("ok");
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+}