From d0b93b1b7a307f104e826cf99c72ff2439b810ab Mon Sep 17 00:00:00 2001 From: zhn <947514737@qq.com> Date: Wed, 28 Sep 2022 23:15:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=88=E6=8A=A5=E5=AF=BC=E5=87=BA--=E9=80=82?= =?UTF-8?q?=E7=94=A8=E8=8C=83=E5=9B=B4,=E7=8A=B6=E6=80=81,=E7=94=A8?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jero/modules/report/enums/ScopeEnum.java | 53 ++++ .../jero/modules/report/enums/StateEnum.java | 40 +++ .../jero/modules/report/enums/UsageEnum.java | 40 +++ .../jero/modules/report/util/WordUtil.java | 238 ++++++++++++++++-- 4 files changed, 348 insertions(+), 23 deletions(-) create mode 100644 jero-boot/jero-boot-modules/src/main/java/com/jero/modules/report/enums/ScopeEnum.java create mode 100644 jero-boot/jero-boot-modules/src/main/java/com/jero/modules/report/enums/StateEnum.java create mode 100644 jero-boot/jero-boot-modules/src/main/java/com/jero/modules/report/enums/UsageEnum.java diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/report/enums/ScopeEnum.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/report/enums/ScopeEnum.java new file mode 100644 index 000000000..a3afde435 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/report/enums/ScopeEnum.java @@ -0,0 +1,53 @@ +package com.jero.modules.report.enums; + + +/** + * @description + * @date 2022/1/21 15:22 + * @auth zhn + */ +public enum ScopeEnum { + M("M","M","1"), + N("N","N","2"), + COMPANY("企业","","3"), + WHOLE_CAR("整车","","4"), + SYSTEM_PARTS("系统/零部件","","5"), + NEW_CAR("新车型","","6"), + PRODUCTION_CAR("在产车型","","7"); + + + + String nameCn; + String nameEn; + String value; + + private ScopeEnum(String nameCn,String nameEn, String value) { + this.nameCn = nameCn; + this.nameEn = nameEn; + this.value = value; + } + + public String getNameCn() { + return nameCn; + } + + public void setNameCn(String nameCn) { + this.nameCn = nameCn; + } + + public String getNameEn() { + return nameEn; + } + + public void setNameEn(String nameEn) { + this.nameEn = nameEn; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/report/enums/StateEnum.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/report/enums/StateEnum.java new file mode 100644 index 000000000..2543ae2f8 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/report/enums/StateEnum.java @@ -0,0 +1,40 @@ +package com.jero.modules.report.enums; + + +/** + * @description + * @date 2022/1/21 15:22 + * @auth zhn + */ +public enum StateEnum { + DRAFT("草稿","1"), + PUBLICITY("公示稿","2"), + ISSUE("发布稿","3"); + + + + + String name; + String value; + + private StateEnum(String name, String value) { + this.name = name; + this.value = value; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/report/enums/UsageEnum.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/report/enums/UsageEnum.java new file mode 100644 index 000000000..1558d7471 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/report/enums/UsageEnum.java @@ -0,0 +1,40 @@ +package com.jero.modules.report.enums; + + +/** + * @description + * @date 2022/1/21 15:22 + * @auth zhn + */ +public enum UsageEnum { + FORCE("强制","1"), + RECOMMEND("推荐","2"), + INSTALLATION_REQUIREMENTS("安装需符合","3"); + + + + + String name; + String value; + + private UsageEnum(String name, String value) { + this.name = name; + this.value = value; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/report/util/WordUtil.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/report/util/WordUtil.java index 76c03477d..3296ff4fa 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/report/util/WordUtil.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/report/util/WordUtil.java @@ -496,7 +496,7 @@ public class WordUtil { String stateName = dictItem(sysDictItems, state,cut, DictCodeReportEnum.STATE.getValue()); String useMethodName = dictItem(sysDictItems, useMethod,cut, DictCodeReportEnum.USEMETHOD.getValue()); - XWPFTable table = document.createTable(12, 2); + XWPFTable table = document.createTable(11, 2); //表格属性 CTTblPr tablePr = table.getCTTbl().addNewTblPr(); //固定列宽(英文和数字的时候自动换行) @@ -518,52 +518,52 @@ public class WordUtil { //第1行 setCell(table, 0, "相关领域",technologyTerritoryName); //第2行 - setCell(table,1, "适用车型",applyCarName); +// setCell(table,1, "适用车型",applyCarName); //第3行 - setCell(table,2, "适用范围",applyScopeName); + setCellThree(table,1, "适用范围",applyScopeName,sysDictItems,DictCodeReportEnum.APPLYSCOPE.getValue()); //第4行 - setCell(table,3, "状态",stateName); + setCellThree(table,2, "状态",stateName,sysDictItems,DictCodeReportEnum.STATE.getValue()); //第5行 - setCell(table,4, "用法",useMethodName); + setCellThree(table,3, "用法",useMethodName,sysDictItems,DictCodeReportEnum.USEMETHOD.getValue()); //第6行 - setCell(table,5, "实施车型",implementCar); + setCell(table,4, "实施车型",implementCar); //第7行 - setCell(table,6, "新车型实施日期",newCarImplementTime); + setCell(table,5, "新车型实施日期",newCarImplementTime); //第8行 - setCell(table,7, "在产车实施日期",productionCarImplementTime); + setCell(table,6, "在产车实施日期",productionCarImplementTime); //第9行 - setCell(table,8, "主要内容",contentCn); + setCell(table,7, "主要内容",contentCn); //第10行 - setCell(table,9, "NIO工作进展",workProgressCn); + setCell(table,8, "NIO工作进展",workProgressCn); //第11行 - setCell(table,10, "法规联系人",lawsContact); + setCell(table,9, "法规联系人",lawsContact); //第12行 - setCell(table,11, "链接",link); + setCell(table,10, "链接",link); }else{ //第1行 setCell(table,0, "Related Areas",technologyTerritoryName); //第2行 - setCell(table,1,"Vehicle Type",applyCarName); +// setCell(table,1,"Vehicle Type",applyCarName); //第3行 - setCell(table,2,"Scope",applyScopeName); + setCellThree(table,1,"Scope",applyScopeName,sysDictItems,DictCodeReportEnum.APPLYSCOPE.getValue()); //第4行 - setCell(table,3,"Status",stateName); + setCellThree(table,2,"Status",stateName,sysDictItems,DictCodeReportEnum.APPLYSCOPE.getValue()); //第5行 - setCell(table,4,"usage",useMethodName); + setCellThree(table,3,"Usage",useMethodName,sysDictItems,DictCodeReportEnum.APPLYSCOPE.getValue()); //第6行 - setCell(table,5,"Implementation Model",implementCar); + setCell(table,4,"Implementation Model",implementCar); //第7行 - setCell(table,6,"New Type Execution Date",newCarImplementTime); + setCell(table,5,"New Type Execution Date",newCarImplementTime); //第8行 - setCell(table,7,"New Vehicle Execution Date",productionCarImplementTime); + setCell(table,6,"New Vehicle Execution Date",productionCarImplementTime); //第9行 - setCell(table,8,"Main Content",contentEn); + setCell(table,7,"Main Content",contentEn); //第10行 - setCell(table,9,"NIO Work Progress",workProgressEn); + setCell(table,8,"NIO Work Progress",workProgressEn); //第11行 - setCell(table, 10,"Regulatory Contact",lawsContact); + setCell(table,9,"Regulatory Contact",lawsContact); //第12行 - setCell(table, 11,"Link",link); + setCell(table, 10,"Link",link); } // ctTblLayoutType.setType(STTblLayoutType.FIXED); @@ -964,6 +964,7 @@ public class WordUtil { //设置单元格边距 XWPFTableCell cell0 = table.getRow(number).getCell(0); cellPadding(cell0,fieldName); + CTTblWidth ctTblWidth1 = table.getRow(number).getCell(1).getCTTc().addNewTcPr().addNewTcW(); ctTblWidth1.setType(STTblWidth.DXA); ctTblWidth1.setW(BigInteger.valueOf(6015)); @@ -978,6 +979,43 @@ public class WordUtil { cellPadding(cell1,technologyTerritory); } +// XWPFParagraph para = table.getRow(number).getCell(1).getParagraphs().get(0); +// XWPFRun run = para.createRun();//对某个段落设置格式 +// run.addBreak();//换行 +// +// table.getRow(number).getCell(0).setText(fieldName); +// table.getRow(number).getCell(1).setText(technologyTerritory); + + } + private static void setCellThree(XWPFTable table, int number, String fieldName,String technologyTerritory, + List sysDictItems,String code) { + table.getRow(number).setHeight(500); + CTTblWidth ctTblWidth0 = table.getRow(number).getCell(0).getCTTc().addNewTcPr().addNewTcW(); + ctTblWidth0.setType(STTblWidth.DXA); + ctTblWidth0.setW(BigInteger.valueOf(2296));//宽度通过计算得来-->列表实际宽度除以2.54再乘以1440 + //设置单元格边距 + XWPFTableCell cell0 = table.getRow(number).getCell(0); + cellPadding(cell0,fieldName); + + CTTblWidth ctTblWidth1 = table.getRow(number).getCell(1).getCTTc().addNewTcPr().addNewTcW(); + ctTblWidth1.setType(STTblWidth.DXA); + ctTblWidth1.setW(BigInteger.valueOf(6015)); + //设置单元格边距 + XWPFTableCell cell1 = table.getRow(number).getCell(1); + if("链接".equals(fieldName) || "Link".equals(fieldName)){ + //设置超链接 + if(StringUtils.isNotEmpty(technologyTerritory)){ + cellLink(cell1,technologyTerritory); + } + }else{ + if("适用范围".equals(fieldName) || "状态".equals(fieldName) || "用法".equals(fieldName) + || "Scope".equals(fieldName) || "Status".equals(fieldName) || "Usage".equals(fieldName)){ + threeSet(cell1,technologyTerritory,fieldName,sysDictItems,code); + }else{ + cellPadding(cell1,technologyTerritory); + } + } + // XWPFParagraph para = table.getRow(number).getCell(1).getParagraphs().get(0); // XWPFRun run = para.createRun();//对某个段落设置格式 // run.addBreak();//换行 @@ -1046,6 +1084,160 @@ public class WordUtil { } + //适用范围,状态,用法三个字段单独处理 + public static void threeSet(XWPFTableCell cell,String text,String fieldName,List sysDictItems,String code){ + List sysDictItemList = sysDictItems.stream().filter(e -> code.equals(e.getDictCode())).collect(Collectors.toList()); + //1. 设置单元格页边距 + CTTc ctTc = cell.getCTTc(); + CTTcPr cttcpr =ctTc.isSetTcPr() ? ctTc.getTcPr() : ctTc.addNewTcPr(); + CTTcMar ctTcMar = cttcpr.isSetTcMar() ? cttcpr.getTcMar() : cttcpr.addNewTcMar(); + (ctTcMar.isSetLeft() ? ctTcMar.getLeft() : ctTcMar.addNewLeft()).setW(BigInteger.valueOf(119));//左边距 + (ctTcMar.isSetTop() ? ctTcMar.getTop() : ctTcMar.addNewTop()).setW(BigInteger.valueOf(63));//上边距 + + + //2. 设置文本及文本的字体 + //获取 CTP + CTP ctP = (ctTc.sizeOfPArray() == 0) ? + ctTc.addNewP() : ctTc.getPArray(0); + //getParagraph(ctP) 获取 XWPFParagraph + XWPFParagraph par = cell.getParagraph(ctP); + //XWPFRun 设置格式 + XWPFRun run = par.createRun(); + //单元格内容换行 □ ■ + if(StringUtils.isNotEmpty(text)){ + StringBuilder sb = new StringBuilder(); + if("适用范围".equals(fieldName)){ + String itemText = "M,N,企业,整车,系统/零部件,新车型,在产车型"; + setBlank(text, run, sb, itemText); + } + if("Scope".equals(fieldName)){ + String itemText = "M,N,Enterprise,Vehicle,System/Parts,New Car Model,Models In Production"; + setBlank(text, run, sb, itemText); + + } + if("状态".equals(fieldName)){ + String itemText = "草稿,公示稿,发布稿"; + setBlank(text, run, sb, itemText); + } + if("Status".equals(fieldName)){ + String itemText = "Draft,Public Notice,Release"; + setBlank(text, run, sb, itemText); + } + if("用法".equals(fieldName)){ + String itemText = "强制,推荐,安装需符合"; + setBlank(text, run, sb, itemText); + } + if("Usage".equals(fieldName)){ + String itemText = "Constraint,Recommend,Installation Is Compliant"; + setBlank(text, run, sb, itemText); + } + } + + //设置字体样式,大小 + run.setFontSize(10); + run.setFontFamily("Blue Sky Noto Regular"); + + } + + private static void setBlank(String text, XWPFRun run, StringBuilder sb, String itemText) { + for (String value : itemText.split(",")) { + String blank = getBlank(value); + if(text.contains(value)){ + sb.append("■"+value+blank); + }else{ + sb.append("□"+value+blank); + } + } + String[] split = sb.toString().split("\r\n"); + for (int i = 0; i < split.length; i++) { + run.setText(split[i]); + if(i