feat: There is no way the,buss

This commit is contained in:
super_liu
2021-12-14 21:21:05 +08:00
parent d50c43c8fa
commit 4a28ed8d04
17 changed files with 1161 additions and 27 deletions
+32
View File
@@ -165,6 +165,38 @@
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
</dependency>
<!-- poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.2</version>
<exclusions>
<exclusion>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.9.1</version>
</dependency>
<!-- Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
@@ -14,7 +14,7 @@ import java.util.Map;
/**
* <p>
* OA日志表 前端控制器
* 流程评分历史表 前端控制器
* </p>
*
* @author super_liu
@@ -0,0 +1,42 @@
package com.ydw.bat.wkflow.business_main.datas.controller;
import com.ydw.bat.wkflow.business_main.datas.entity.BusProcessEvaluationHis;
import com.ydw.bat.wkflow.business_main.datas.entity.BusProcessModelHis;
import com.ydw.bat.wkflow.business_main.datas.service.IBusProcessEvaluationHisService;
import com.ydw.bat.wkflow.business_main.datas.service.IBusProcessModelHisService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* <p>
* 流程模块历史表 前端控制器
* </p>
*
* @author super_liu
* @since 2021-09-17
*/
@RestController
@RequestMapping("/busProcessModel")
public class BusProcessModelHisController {
@Autowired
private IBusProcessModelHisService busProcessModelHisService;
@GetMapping("/processModelHisOne")
public BusProcessModelHis modelHisOne(String pid,String taskId) {
BusProcessModelHis modelHisOne = busProcessModelHisService.modelHisOne(pid,taskId);
return modelHisOne;
}
@GetMapping("/processModelHisList")
public List<BusProcessModelHis> evaluationHisList(String pid) {
List<BusProcessModelHis> processModelHisList = busProcessModelHisService.modelHisList(pid);
return processModelHisList;
}
}
@@ -14,7 +14,7 @@ import java.io.Serializable;
/**
* <p>
* OA日志
* 流程评分历史
* </p>
*
* @author super_liu
@@ -0,0 +1,92 @@
package com.ydw.bat.wkflow.business_main.datas.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* <p>
* 流程模块历史表
* </p>
*
* @author super_liu
* @since 2021-09-17
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="BusProcessModelHis对象", description="流程模块历史表")
public class BusProcessModelHis implements Serializable {
private static final long serialVersionUID=1L;
@ApiModelProperty(value = "主键")
@TableId(value = "ID", type = IdType.UUID)
private String id;
@ApiModelProperty(value = "标准id")
@TableField("STAND_ID")
private String standId;
@ApiModelProperty(value = "处理人")
@TableField("USER_ID")
private String userId;
@ApiModelProperty(value = "信息")
@TableField("MESG")
private String mesg;
@ApiModelProperty(value = "节点信息")
@TableField("TASK_INFO")
private String taskInfo;
@ApiModelProperty(value = "任务id")
@TableField("TASK_ID")
private String taskId;
@ApiModelProperty(value = "流程实例id")
@TableField("P_ID")
private String pId;
@ApiModelProperty(value = "流程名称")
@TableField("PRC_NAME")
private String prcName;
@ApiModelProperty(value = "创建时间")
@TableField("CREATE_TIME")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private String createTime;
@ApiModelProperty(value = "更新时间")
@TableField("UPDATE_TIME")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private String updateTime;
@ApiModelProperty(value = "onlyOffice 是否编辑 0 未编辑 1 已编辑")
@TableField("EDIT_STATUS")
private String editStatus;
@ApiModelProperty(value = "onlyOffice 编辑文件存储路径")
@TableField("EDIT_FILE_PATH")
private String editFilePath;
@ApiModelProperty(value = "onlyOffice 编辑类型 node 节点编辑 count 汇总编辑")
@TableField("EDIT_TYPE")
private String editType;
@ApiModelProperty(value = "逻辑状态")
@TableField("FLAG")
private String flag;
@ApiModelProperty(value = "onlyOffice 访问编辑文件全路径")
@TableField(exist = false)
private String downLoadUrl;
}
@@ -0,0 +1,19 @@
package com.ydw.bat.wkflow.business_main.datas.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ydw.bat.wkflow.business_main.datas.entity.BusProcessEvaluationHis;
import com.ydw.bat.wkflow.business_main.datas.entity.BusProcessModelHis;
import org.springframework.stereotype.Repository;
/**
* <p>
* 流程模块历史表 Mapper 接口
* </p>
*
* @author super_liu
* @since 2021-09-17
*/
@Repository
public interface BusProcessModelHisMapper extends BaseMapper<BusProcessModelHis> {
}
@@ -0,0 +1,29 @@
package com.ydw.bat.wkflow.business_main.datas.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ydw.bat.wkflow.business_main.datas.entity.BusProcessEvaluationHis;
import com.ydw.bat.wkflow.business_main.datas.entity.BusProcessModelHis;
import java.util.List;
/**
* <p>
* 流程模块历史表 服务类
* </p>
*
* @author super_liu
* @since 2021-09-17
*/
public interface IBusProcessModelHisService extends IService<BusProcessModelHis> {
BusProcessModelHis modelHisOne(String pid,String taskId);
List<BusProcessModelHis> modelHisList(String pid);
String saveBussModelFile(String pid, String taskId);
String mergeModelFile(String pid, String taskId,String fileSuffix);
void saveBussTemplateFile(JSONObject object, String pid);
}
@@ -0,0 +1,155 @@
package com.ydw.bat.wkflow.business_main.datas.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ydw.bat.wkflow.business_main.datas.entity.BusProcessEvaluationHis;
import com.ydw.bat.wkflow.business_main.datas.entity.BusProcessModelHis;
import com.ydw.bat.wkflow.business_main.datas.mapper.BusProcessEvaluationHisMapper;
import com.ydw.bat.wkflow.business_main.datas.mapper.BusProcessModelHisMapper;
import com.ydw.bat.wkflow.business_main.datas.service.IBusProcessEvaluationHisService;
import com.ydw.bat.wkflow.business_main.datas.service.IBusProcessModelHisService;
import com.ydw.bat.wkflow.listener.bussLibrary.Utils.PoiUtil;
import com.ydw.bat.wkflow.listener.bussLibrary.Utils.PoiWord;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.IOException;
import java.util.List;
/**
* <p>
* 流程模块历史表 服务实现类
* </p>
*
* @author super_liu
* @since 2021-09-17
*/
@Service
public class BusProcessModelHisServiceImpl extends ServiceImpl<BusProcessModelHisMapper, BusProcessModelHis> implements IBusProcessModelHisService {
private static final Logger logger = LoggerFactory.getLogger(BusProcessModelHisServiceImpl.class);
@Value("${buss.edit.file.path}")
private String filePath;//文件存储路径
/**
* 文件下载路径
*/
@Value("${buss.down.file.path}")
private String downloadUrl;
@Override
public String mergeModelFile(String pid, String taskId,String fileSuffix){
String fileSavePath = filePath +"bussEdit"+ getUUIDPath(pid,taskId);
StringBuilder builder=new StringBuilder();
builder.append(filePath);
builder.append("buss").append("/");
builder.append(pid).append("/");
String saveFileUrl = builder.toString();
String modelPath = saveFileUrl+"model.docx";
QueryWrapper wrapper = new QueryWrapper();
wrapper.eq("P_ID",pid);
wrapper.eq("EDIT_TYPE","node");
List<BusProcessModelHis> hisList = this.baseMapper.selectList(wrapper);
String newFileName = "";
try {
if(!hisList.isEmpty()){
newFileName = fileSavePath+taskId + "_" + pid + "_count." + fileSuffix;
for (int i = 0; i < hisList.size(); i++) {
if(i == 0){
PoiWord.wordRedDocument(modelPath,null,newFileName,hisList.get(i).getEditFilePath());
}else {
PoiWord.wordRedDocument(newFileName,null,newFileName,hisList.get(i).getEditFilePath());
}
}
}
}catch (Exception e){
logger.error(e.getMessage());
}
return newFileName;
}
@Override
public String saveBussModelFile(String pid, String taskId){
return saveProcessFile(filePath,pid,taskId,"docx");
}
@Override
public void saveBussTemplateFile(JSONObject object,String pid){
PoiWord.writeWordModel(filePath, object, pid);
}
/**
* 企标流程文件存储
* @param pid
* @param taskId
* @param fileSuffix
* @param filePath 文件存储路径
* @throws IOException
*/
public String saveProcessFile(String filePath,String pid,String taskId,String fileSuffix){
String fileSavePath = filePath +"bussEdit"+ getUUIDPath(pid,taskId);
String newFileName = "";
try {
File dir = new File(fileSavePath);
if (!dir.exists()) {
dir.mkdirs();
}
newFileName = taskId + "_" + pid + "_node." + fileSuffix;
File saveFile = new File(fileSavePath + newFileName);
FileUtils.write(saveFile, "","UTF-8");
}catch (Exception e){
logger.error(e.getMessage(),e);
}
return fileSavePath+newFileName;
}
public static String getUUIDPath(String pid,String taskId){
StringBuilder builder=new StringBuilder();
builder.append("/");
builder.append(pid).append("/");
// builder.append(taskId).append("/");
return builder.toString();
}
@Override
public BusProcessModelHis modelHisOne(String pid,String taskId){
BusProcessModelHis modelHis = new BusProcessModelHis();
QueryWrapper wrapper = new QueryWrapper();
wrapper.eq("P_ID",pid);
wrapper.eq("TASK_ID",taskId);
List<BusProcessModelHis> hisList = this.baseMapper.selectList(wrapper);
if(!hisList.isEmpty()){
modelHis = hisList.get(0);
StringBuffer downloadFileUrl = new StringBuffer();
downloadFileUrl.append(downloadUrl).append(modelHis.getEditFilePath() == null ? "" : modelHis.getEditFilePath());
modelHis.setDownLoadUrl(downloadFileUrl.toString());
}
return modelHis;
}
@Override
public List<BusProcessModelHis> modelHisList(String pid){
QueryWrapper wrapper = new QueryWrapper();
wrapper.eq("P_ID",pid);
return this.baseMapper.selectList(wrapper);
}
}
@@ -1,24 +1,27 @@
package com.ydw.bat.wkflow.listener.bussLibrary;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ydw.bat.wkflow.business_main.datas.entity.BusProcessModelHis;
import com.ydw.bat.wkflow.business_main.datas.entity.BusProcessName;
import com.ydw.bat.wkflow.business_main.datas.entity.BusProcessNew;
import com.ydw.bat.wkflow.business_main.datas.entity.Datas;
import com.ydw.bat.wkflow.business_main.datas.service.IBusProcessModelHisService;
import com.ydw.bat.wkflow.business_main.datas.service.IBusProcessNameService;
import com.ydw.bat.wkflow.business_main.datas.service.IBusProcessNewService;
import com.ydw.bat.wkflow.business_main.datas.service.IDatasService;
import com.ydw.bat.wkflow.listener.bussLibrary.Utils.PoiWord;
import com.ydw.bat.wkflow.util.SpringContextUtil;
import com.ydw.bat.wkflow.util.Utils;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
import org.apache.commons.lang.StringUtils;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
* 发起企标制修订流程后
@@ -30,6 +33,7 @@ public class BLApplicantAfter implements TaskListener{
IDatasService datasService = SpringContextUtil.getBean(IDatasService.class);
IBusProcessNewService busBean = SpringContextUtil.getBean(IBusProcessNewService.class);
IBusProcessNameService busProcessNameService = SpringContextUtil.getBean(IBusProcessNameService.class);
IBusProcessModelHisService busProcessModelHisService = SpringContextUtil.getBean(IBusProcessModelHisService.class);
QueryWrapper<Datas> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("ACTI_TASK_ID", delegateTask.getId());
@@ -38,23 +42,6 @@ public class BLApplicantAfter implements TaskListener{
JSONObject object = JSONObject.parseObject(datas.getFormValsJson());
delegateTask.setVariable("objectJson",object);
List<String> nextUserList = new ArrayList();
if(StringUtils.isNotBlank(object.getString("qcUserId"))){
if(object.getString("qcUserId").contains(",")){
nextUserList = Arrays.asList(object.getString("qcUserId").split(","));
}else {
nextUserList.add(object.getString("qcUserId"));
}
// 配置多实例
delegateTask.setVariable("qcUserList",nextUserList);
delegateTask.addCandidateUsers(nextUserList);
}else {
throw new ActivitiException("1#2其他起草人参数不存在,请配置相关用户");
}
//截止时间 流程描述 创建人
String OVERTIME = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
String user = object.getString("prcCreateUser");
@@ -62,6 +49,43 @@ public class BLApplicantAfter implements TaskListener{
// object.getString("standName")
String standName = "";
String prcName = "企标制修订流程及企业标准库流程";
// 下个节点执行人处理逻辑
List<String> nextUserList = new ArrayList();
List<BusProcessModelHis> busProcessModelHisList = new ArrayList<>();
if(StringUtils.isNotBlank(object.getString("modelData"))){
List<JSONObject> valueArr = JSONArray.parseArray(object.getString("modelData"),JSONObject.class);
Map<String, List<JSONObject>> listMap = valueArr.stream().collect(
Collectors.groupingBy(a -> Utils.format("{0}", a.getString("userId"))));
List<String> finalNextUserList = nextUserList;
listMap.forEach((s, jsonObjects) -> {
String json = JSONArray.toJSONString(jsonObjects);
SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
BusProcessModelHis modelHis = new BusProcessModelHis();
modelHis.setPId(delegateTask.getProcessInstanceId());
modelHis.setMesg(json);
modelHis.setTaskInfo(delegateTask.getName());
modelHis.setUserId(s);
modelHis.setPrcName(prcName);
modelHis.setEditType("node");
modelHis.setCreateTime(sdf.format(new Date()));
modelHis.setUpdateTime(sdf.format(new Date()));
busProcessModelHisList.add(modelHis);
finalNextUserList.add(s);
});
nextUserList.addAll(finalNextUserList);
// if(object.getString("qcUserId").contains(",")){
// nextUserList = Arrays.asList(object.getString("qcUserId").split(","));
// }else {
// nextUserList.add(object.getString("qcUserId"));
// }
// 配置多实例
delegateTask.setVariable("qcUserList",nextUserList);
delegateTask.addCandidateUsers(nextUserList);
}else {
throw new ActivitiException("1#2其他起草人参数不存在,请配置相关用户");
}
QueryWrapper queryWrapper2 = new QueryWrapper();
queryWrapper2.eq("PRC_ID",delegateTask.getProcessInstanceId());
BusProcessName one1 = busProcessNameService.getOne(queryWrapper2);
@@ -100,6 +124,12 @@ public class BLApplicantAfter implements TaskListener{
busBean.save(busProcessNewNext);
}
}
if(!busProcessModelHisList.isEmpty()){
busProcessModelHisService.saveBatch(busProcessModelHisList);
}
// 生成 模板
busProcessModelHisService.saveBussTemplateFile(object,delegateTask.getProcessInstanceId());
}
private String verifyObj(String str){
@@ -21,7 +21,7 @@ import java.util.Date;
import java.util.List;
/**
* 企标协同编写后
* 企标编写后
*/
public class BussLibrary2After implements TaskListener{
@Override
@@ -1,17 +1,21 @@
package com.ydw.bat.wkflow.listener.bussLibrary;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ydw.bat.wkflow.business_main.datas.entity.BusProcessModelHis;
import com.ydw.bat.wkflow.business_main.datas.entity.BusProcessNew;
import com.ydw.bat.wkflow.business_main.datas.service.IBusProcessModelHisService;
import com.ydw.bat.wkflow.business_main.datas.service.IBusProcessNewService;
import com.ydw.bat.wkflow.business_mq.service.CreateMQService;
import com.ydw.bat.wkflow.util.SpringContextUtil;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
* 企标协同编写前
* 企标编写前
*/
public class BussLibrary2Before implements TaskListener{
@Override
@@ -33,5 +37,24 @@ public class BussLibrary2Before implements TaskListener{
one1.setTaskInfo(delegateTask.getName());
oaService.sendTodoMq(one1);
}
// 创建当前节点文件 - 暂时为空文件
IBusProcessModelHisService hisService = SpringContextUtil.getBean(IBusProcessModelHisService.class);
QueryWrapper wrapperModel = new QueryWrapper();
wrapperModel.eq("P_ID",delegateTask.getProcessInstanceId());
wrapperModel.eq("USER_ID",delegateTask.getAssignee());
wrapperModel.isNull("TASK_ID");
List<BusProcessModelHis> hisList = hisService.list(wrapperModel);
if(!hisList.isEmpty()){
SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
BusProcessModelHis modelHis = hisList.get(0);
modelHis.setTaskId(delegateTask.getId());
String filePath = hisService.saveBussModelFile(delegateTask.getProcessInstanceId(),delegateTask.getId());
modelHis.setEditFilePath(filePath);
modelHis.setUpdateTime(sdf.format(new Date()));
hisService.saveOrUpdate(modelHis);
}
}
}
@@ -1,13 +1,17 @@
package com.ydw.bat.wkflow.listener.bussLibrary;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ydw.bat.wkflow.business_main.datas.entity.BusProcessModelHis;
import com.ydw.bat.wkflow.business_main.datas.entity.BusProcessNew;
import com.ydw.bat.wkflow.business_main.datas.service.IBusProcessModelHisService;
import com.ydw.bat.wkflow.business_main.datas.service.IBusProcessNewService;
import com.ydw.bat.wkflow.business_mq.service.CreateMQService;
import com.ydw.bat.wkflow.util.SpringContextUtil;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
@@ -32,6 +36,25 @@ public class BussLibrary3Before implements TaskListener{
one1.setLink("bussLibrary3?prcType=buss1");
one1.setTaskInfo(delegateTask.getName());
oaService.sendTodoMq(one1);
// 创建汇总文件 --- 合并子节点在线编辑文件
IBusProcessModelHisService hisService = SpringContextUtil.getBean(IBusProcessModelHisService.class);
SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
BusProcessModelHis modelHis = new BusProcessModelHis();
modelHis.setPId(delegateTask.getProcessInstanceId());
modelHis.setMesg(one1.getMesg());
modelHis.setTaskInfo(delegateTask.getName());
modelHis.setUserId(one1.getUserId());
modelHis.setPrcName(one1.getPrcName());
modelHis.setTaskId(delegateTask.getId());
modelHis.setEditType("count");
modelHis.setCreateTime(sdf.format(new Date()));
modelHis.setUpdateTime(sdf.format(new Date()));
// 合并子节点在线编辑文件后 返回 汇总文件路径
String fileUrl = hisService.mergeModelFile(delegateTask.getProcessInstanceId(),delegateTask.getId(),"docx");
modelHis.setEditFilePath(fileUrl);
hisService.save(modelHis);
}
}
}
@@ -0,0 +1,18 @@
package com.ydw.bat.wkflow.listener.bussLibrary.Utils;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import java.io.File;
import java.io.IOException;
/**
* @Description: TODO
* @author: super_liu
* @date: 2021年12月13日 11:26
*/
public class PoiUtil {
}
@@ -0,0 +1,649 @@
package com.ydw.bat.wkflow.listener.bussLibrary.Utils;
import com.alibaba.fastjson.JSONObject;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.xwpf.NiceXWPFDocument;
import com.ydw.bat.wkflow.business_main.datas.service.impl.BusProcessModelHisServiceImpl;
import org.apache.poi.hpsf.DocumentSummaryInformation;
import org.apache.poi.hpsf.SummaryInformation;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.poifs.filesystem.FileMagic;
import org.apache.poi.poifs.nio.DataSource;
import org.apache.poi.util.LocaleUtil;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy;
import org.apache.poi.xwpf.usermodel.*;
import org.apache.xmlbeans.XmlOptions;
import org.apache.xmlbeans.impl.xb.xmlschema.SpaceAttribute;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import java.io.*;
import java.math.BigInteger;
import java.util.List;
import java.util.Map;
/**
* @Description: TODO
* @author: super_liu
* @date: 2021年12月10日 15:38
*/
public class PoiWord {
private static final Logger logger = LoggerFactory.getLogger(BusProcessModelHisServiceImpl.class);
/**
* 输出SummaryInfomation
* @param info
*/
private static void printInfo(SummaryInformation info) {
//作者
System.out.println(info.getAuthor());
//字符统计
System.out.println(info.getCharCount());
//页数
System.out.println(info.getPageCount());
//标题
System.out.println(info.getTitle());
//主题
System.out.println(info.getSubject());
}
/**
* 输出DocumentSummaryInfomation
* @param info
*/
private static void printInfo(DocumentSummaryInformation info) {
//分类
System.out.println(info.getCategory());
//公司
System.out.println(info.getCompany());
}
/**
* 关闭输入流
* @param is
*/
private static void closeStream(InputStream is) {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
static String read(InputStream is) throws Exception {
System.out.println(FileMagic.valueOf(is));
String text = "";
return text;
}
public static void writeToDocx()throws Exception{
XWPFDocument document= new XWPFDocument();
//Write the Document in file system
FileOutputStream out = new FileOutputStream(new File("E:\\Software\\rtpro\\Foton\\File\\doc\\create_table2.docx"));
//添加标题
XWPFParagraph titleParagraph = document.createParagraph();
//设置段落居中
titleParagraph.setAlignment(ParagraphAlignment.CENTER);
XWPFRun titleParagraphRun = titleParagraph.createRun();
titleParagraphRun.setText("Java PoI");
titleParagraphRun.setColor("000000");
titleParagraphRun.setFontSize(20);
//段落
XWPFParagraph firstParagraph = document.createParagraph();
XWPFRun run = firstParagraph.createRun();
run.setText("Java POI 生成word文件。");
run.setColor("696969");
run.setFontSize(16);
//设置段落背景颜色
CTShd cTShd = run.getCTR().addNewRPr().addNewShd();
cTShd.setVal(STShd.CLEAR);
cTShd.setFill("97FFFF");
//换行
XWPFParagraph paragraph1 = document.createParagraph();
XWPFRun paragraphRun1 = paragraph1.createRun();
paragraphRun1.setText("\r");
//基本信息表格
XWPFTable infoTable = document.createTable();
//去表格边框
infoTable.getCTTbl().getTblPr().unsetTblBorders();
//列宽自动分割
CTTblWidth infoTableWidth = infoTable.getCTTbl().addNewTblPr().addNewTblW();
infoTableWidth.setType(STTblWidth.DXA);
infoTableWidth.setW(BigInteger.valueOf(9072));
//表格第一行
XWPFTableRow infoTableRowOne = infoTable.getRow(0);
infoTableRowOne.getCell(0).setText("职位");
infoTableRowOne.addNewTableCell().setText(": Java 开发工程师");
//表格第二行
XWPFTableRow infoTableRowTwo = infoTable.createRow();
infoTableRowTwo.getCell(0).setText("姓名");
infoTableRowTwo.getCell(1).setText(": seawater");
//表格第三行
XWPFTableRow infoTableRowThree = infoTable.createRow();
infoTableRowThree.getCell(0).setText("生日");
infoTableRowThree.getCell(1).setText(": xxx-xx-xx");
//表格第四行
XWPFTableRow infoTableRowFour = infoTable.createRow();
infoTableRowFour.getCell(0).setText("性别");
infoTableRowFour.getCell(1).setText(": 男");
//表格第五行
XWPFTableRow infoTableRowFive = infoTable.createRow();
infoTableRowFive.getCell(0).setText("现居地");
infoTableRowFive.getCell(1).setText(": xx");
CTSectPr sectPr = document.getDocument().getBody().addNewSectPr();
XWPFHeaderFooterPolicy policy = new XWPFHeaderFooterPolicy(document, sectPr);
//添加页眉
CTP ctpHeader = CTP.Factory.newInstance();
CTR ctrHeader = ctpHeader.addNewR();
CTText ctHeader = ctrHeader.addNewT();
String headerText = "ctpHeader";
ctHeader.setStringValue(headerText);
XWPFParagraph headerParagraph = new XWPFParagraph(ctpHeader, document);
//设置为右对齐
headerParagraph.setAlignment(ParagraphAlignment.RIGHT);
XWPFParagraph[] parsHeader = new XWPFParagraph[1];
parsHeader[0] = headerParagraph;
policy.createHeader(XWPFHeaderFooterPolicy.DEFAULT, parsHeader);
//添加页脚
CTP ctpFooter = CTP.Factory.newInstance();
CTR ctrFooter = ctpFooter.addNewR();
CTText ctFooter = ctrFooter.addNewT();
String footerText = "ctpFooter";
ctFooter.setStringValue(footerText);
XWPFParagraph footerParagraph = new XWPFParagraph(ctpFooter, document);
headerParagraph.setAlignment(ParagraphAlignment.CENTER);
XWPFParagraph[] parsFooter = new XWPFParagraph[1];
parsFooter[0] = footerParagraph;
policy.createFooter(XWPFHeaderFooterPolicy.DEFAULT, parsFooter);
document.write(out);
out.close();
}
public static void CustomTOC(CTSdtBlock block) {
CTSdtPr sdtPr = block.addNewSdtPr();
CTDecimalNumber id = sdtPr.addNewId();
id.setVal(new BigInteger("4844945"));
sdtPr.addNewDocPartObj().addNewDocPartGallery().setVal("Table of contents");
CTSdtEndPr sdtEndPr = block.addNewSdtEndPr();
CTRPr rPr = sdtEndPr.addNewRPr();
CTFonts fonts = rPr.addNewRFonts();
fonts.setAsciiTheme(STTheme.MINOR_H_ANSI);
fonts.setEastAsiaTheme(STTheme.MINOR_H_ANSI);
fonts.setHAnsiTheme(STTheme.MINOR_H_ANSI);
fonts.setCstheme(STTheme.MINOR_BIDI);
rPr.addNewB().setVal(STOnOff.OFF);
rPr.addNewBCs().setVal(STOnOff.OFF);
rPr.addNewColor().setVal("auto");
rPr.addNewSz().setVal(new BigInteger("24"));
rPr.addNewSzCs().setVal(new BigInteger("24"));
CTSdtContentBlock content = block.addNewSdtContent();
CTP p = content.addNewP();
p.setRsidR("00EF7E24".getBytes(LocaleUtil.CHARSET_1252));
p.setRsidRDefault("00EF7E24".getBytes(LocaleUtil.CHARSET_1252));
p.addNewPPr().addNewPStyle().setVal("TOCHeading");
p.addNewR().addNewT().setStringValue("目 录");//源码中为"Table of contents"
//设置段落对齐方式,即将“目录”二字居中
CTPPr pr = p.getPPr();
CTJc jc = pr.isSetJc() ? pr.getJc() : pr.addNewJc();
STJc.Enum en = STJc.Enum.forInt(ParagraphAlignment.CENTER.getValue());
jc.setVal(en);
//"目录"二字的字体
CTRPr pRpr = p.getRArray(0).addNewRPr();
fonts = pRpr.isSetRFonts() ? pRpr.getRFonts() : pRpr.addNewRFonts();
fonts.setAscii("Times New Roman");
fonts.setEastAsia("华文中宋");
fonts.setHAnsi("华文中宋");
//"目录"二字加粗
CTOnOff bold = pRpr.isSetB() ? pRpr.getB() : pRpr.addNewB();
bold.setVal(STOnOff.TRUE);
// 设置“目录”二字字体大小为24号
CTHpsMeasure sz = pRpr.isSetSz() ? pRpr.getSz() : pRpr.addNewSz();
sz.setVal(new BigInteger("36"));
}
public static void addRowOnlyTitle(int level, String title,CTSdtBlock block) {
CTSdtContentBlock contentBlock = block.getSdtContent();
CTP p = contentBlock.addNewP();
p.setRsidR("00EF7E24".getBytes(LocaleUtil.CHARSET_1252));
p.setRsidRDefault("00EF7E24".getBytes(LocaleUtil.CHARSET_1252));
CTPPr pPr = p.addNewPPr();
pPr.addNewPStyle().setVal("TOC" + level);
CTTabs tabs = pPr.addNewTabs();//Set of Custom Tab Stops自定义制表符集合
CTTabStop tab = tabs.addNewTab();//Custom Tab Stop自定义制表符
tab.setVal(STTabJc.RIGHT);
tab.setLeader(STTabTlc.DOT);
tab.setPos(new BigInteger("9190"));//默认为8290,因为调整过页边距,所有需要调整,手动设置找出最佳值
pPr.addNewRPr().addNewNoProof();//不检查语法
CTR run = p.addNewR();
run.addNewRPr().addNewNoProof();
run.addNewT().setStringValue(title);
//设置行间距
CTSpacing pSpacing = pPr.getSpacing() != null ? pPr.getSpacing(): pPr.addNewSpacing();
pSpacing.setLineRule(STLineSpacingRule.AUTO);//行间距类型:多倍
pSpacing.setLine(new BigInteger("360"));//此处1.5倍行间距
pSpacing.setBeforeLines(new BigInteger("20"));//段前0.2
pSpacing.setAfterLines(new BigInteger("10"));//段后0.1
//设置字体
CTRPr pRpr = run.getRPr();
CTFonts fonts = pRpr.isSetRFonts() ? pRpr.getRFonts() : pRpr.addNewRFonts();
fonts.setAscii("Times New Roman");
fonts.setEastAsia("黑体");
fonts.setHAnsi("黑体");
// 设置字体大小
CTHpsMeasure sz = pRpr.isSetSz() ? pRpr.getSz() : pRpr.addNewSz();
sz.setVal(new BigInteger("24"));
CTHpsMeasure szCs = pRpr.isSetSzCs() ? pRpr.getSzCs() : pRpr.addNewSzCs();
szCs.setVal(new BigInteger("24"));
}
public static void addRow(int level, String title, int page, String bookmarkRef,CTSdtBlock block) {
CTSdtContentBlock contentBlock = block.getSdtContent();
CTP p = contentBlock.addNewP();
p.setRsidR("00EF7E24".getBytes(LocaleUtil.CHARSET_1252));
p.setRsidRDefault("00EF7E24".getBytes(LocaleUtil.CHARSET_1252));
CTPPr pPr = p.addNewPPr();
pPr.addNewPStyle().setVal("TOC" + level);
CTTabs tabs = pPr.addNewTabs();//Set of Custom Tab Stops自定义制表符集合
CTTabStop tab = tabs.addNewTab();//Custom Tab Stop自定义制表符
tab.setVal(STTabJc.RIGHT);
tab.setLeader(STTabTlc.DOT);
tab.setPos(new BigInteger("9100"));//默认为8290,因为调整过页边距,所有需要调整,手动设置找出最佳值
pPr.addNewRPr().addNewNoProof();//不检查语法
CTR run = p.addNewR();
run.addNewRPr().addNewNoProof();
run.addNewT().setStringValue(title);//添加标题文字
//设置标题字体
CTRPr pRpr = run.getRPr();
CTFonts fonts = pRpr.isSetRFonts() ? pRpr.getRFonts() : pRpr.addNewRFonts();
fonts.setAscii("Times New Roman");
fonts.setEastAsia("楷体");
fonts.setHAnsi("楷体");
// 设置标题字体大小
CTHpsMeasure sz = pRpr.isSetSz() ? pRpr.getSz() : pRpr.addNewSz();
sz.setVal(new BigInteger("21"));
CTHpsMeasure szCs = pRpr.isSetSzCs() ? pRpr.getSzCs() : pRpr.addNewSzCs();
szCs.setVal(new BigInteger("21"));
//添加制表符
run = p.addNewR();
run.addNewRPr().addNewNoProof();
run.addNewTab();
//添加页码左括号
p.addNewR().addNewT().setStringValue("(");
//STFldCharType.BEGIN标识与结尾处STFldCharType.END相对应
run = p.addNewR();
run.addNewRPr().addNewNoProof();
run.addNewFldChar().setFldCharType(STFldCharType.BEGIN);//Field Character Type
// pageref run
run = p.addNewR();
run.addNewRPr().addNewNoProof();
CTText text = run.addNewInstrText();//Field Code 添加域代码文本控件
text.setSpace(SpaceAttribute.Space.PRESERVE);
// bookmark reference
//源码的域名为" PAGEREF _Toc","\h"含义为在目录内建立目录项与页码的超链接
text.setStringValue(" PAGEREF "+bookmarkRef + " \\h ");
p.addNewR().addNewRPr().addNewNoProof();
run = p.addNewR();
run.addNewRPr().addNewNoProof();
run.addNewFldChar().setFldCharType(STFldCharType.SEPARATE);
// page number run
run = p.addNewR();
run.addNewRPr().addNewNoProof();
run.addNewT().setStringValue(Integer.toString(page));
run = p.addNewR();
run.addNewRPr().addNewNoProof();
//STFldCharType.END标识与上面STFldCharType.BEGIN相对应
run.addNewFldChar().setFldCharType(STFldCharType.END);
//添加页码右括号
p.addNewR().addNewT().setStringValue(")");
//设置行间距
CTSpacing pSpacing = pPr.getSpacing() != null ? pPr.getSpacing(): pPr.addNewSpacing();
pSpacing.setLineRule(STLineSpacingRule.AUTO);//行间距类型:多倍
pSpacing.setLine(new BigInteger("360"));//此处1.5倍行间距
}
/**
* @param content 旧文件地址
* @param data 需要填写的参数
* @param destDocx 保存的文件地址
* @param newFile 新文件地址
*/
public static void wordRedDocument(String content, Map<String, String> data, String destDocx,String newFile) throws Exception {
//模板文件地址 固定模板
// String model = "模板.docx";
//模板文件 参数填写 render(data)
XWPFTemplate template = XWPFTemplate.compile(newFile);
//获取模板文件 公文
NiceXWPFDocument main = template.getXWPFDocument();
NiceXWPFDocument sub = new NiceXWPFDocument(new FileInputStream(content));
// 合并两个文档
NiceXWPFDocument newDoc = main.merge(sub);
// 生成新文档
FileOutputStream out = new FileOutputStream(destDocx);
newDoc.write(out);
newDoc.close();
out.close();
}
/**
* 合并两个文档到新的文件
* @param outfile 输出文件
* @param file1 要合并的文件1
* @param file2 要合并的文件2
* @throws Exception
*/
private void appenddoc(String outfile,String file1,String file2) throws Exception {
InputStream in1 = null;
InputStream in2 = null;
OPCPackage src1Package = null;
OPCPackage src2Package = null;
OutputStream dest = new FileOutputStream(outfile);
try {
in1 = new FileInputStream(file1);
in2 = new FileInputStream(file2);
src1Package = OPCPackage.open(in1);
src2Package = OPCPackage.open(in2);
} catch (Exception e) {
e.printStackTrace();
}
XWPFDocument src1Document = new XWPFDocument(src1Package);
CTBody src1Body = src1Document.getDocument().getBody();
XWPFParagraph p = src1Document.createParagraph();
//设置分页符
p.setPageBreak(true);
XWPFDocument src2Document = new XWPFDocument(src2Package);
CTBody src2Body = src2Document.getDocument().getBody();
appendBody(src1Body, src2Body);
src1Document.write(dest);
src1Document.close();
src2Document.close();
in1.close();
in2.close();
dest.close();
}
private void appendBody(CTBody src, CTBody append) throws Exception {
XmlOptions optionsOuter = new XmlOptions();
optionsOuter.setSaveOuter();
String appendString = append.xmlText(optionsOuter);
String srcString = src.xmlText();
String prefix = srcString.substring(0,srcString.indexOf(">")+1);
String mainPart = srcString.substring(srcString.indexOf(">")+1,srcString.lastIndexOf("<"));
String sufix = srcString.substring( srcString.lastIndexOf("<") );
String addPart = appendString.substring(appendString.indexOf(">") + 1, appendString.lastIndexOf("<"));
CTBody makeBody = CTBody.Factory.parse(prefix+mainPart+addPart+sufix);
src.set(makeBody);
}
/**
* 生成企标模板
*/
public static void writeWordModel(String filePath, JSONObject object, String pid) {
try {
XWPFDocument doc = new XWPFDocument();
StringBuilder builder=new StringBuilder();
builder.append(filePath);
builder.append("buss").append("/");
builder.append(pid).append("/");
String saveFileUrl = builder.toString();
File dir = new File(saveFileUrl);
if (!dir.exists()) {
dir.mkdirs();
}
FileOutputStream out = new FileOutputStream(new File(saveFileUrl+"model.docx"));
//设置文档一级主题居右
XWPFParagraph titleParagraph1 = doc.createParagraph();
titleParagraph1.setAlignment(ParagraphAlignment.RIGHT);
XWPFRun titleParagraphRun = titleParagraph1.createRun();
titleParagraphRun.setText(object.getString("standSort"));
titleParagraphRun.setColor("000000");
titleParagraphRun.setFontSize(48);
titleParagraphRun.setFontFamily("Times New Roman");
titleParagraphRun.setBold(true);
titleParagraphRun.addCarriageReturn();
//设置文档二级主题居中
XWPFParagraph titleParagraph2 = doc.createParagraph();
titleParagraph2.setAlignment(ParagraphAlignment.CENTER);
XWPFRun titleParagraphRun2 = titleParagraph2.createRun();
titleParagraphRun2.setText("北汽福田汽车股份有限公司企业标准");
titleParagraphRun2.setColor("000000");
titleParagraphRun2.setFontSize(24);
titleParagraphRun2.setFontFamily("黑体");
titleParagraphRun2.addCarriageReturn();
titleParagraphRun2.addCarriageReturn();
//设置文档三级级主题居右
XWPFParagraph titleParagraph3 = doc.createParagraph();
titleParagraph3.setAlignment(ParagraphAlignment.RIGHT);
XWPFRun titleParagraphRun3 = titleParagraph3.createRun();
titleParagraphRun3.setText(object.getString("standCode"));
titleParagraphRun3.setColor("000000");
titleParagraphRun3.setFontSize(14);
titleParagraphRun3.setFontFamily("Times New Roman");
titleParagraphRun3.addCarriageReturn();
titleParagraphRun3.addCarriageReturn();
titleParagraphRun3.addCarriageReturn();
//设置文档三级级主题居右
// XWPFParagraph titleParagraph4 = doc.createParagraph();
//
// titleParagraph4.setAlignment(ParagraphAlignment.RIGHT);
//
// XWPFRun titleParagraphRun4 = titleParagraph4.createRun();
// titleParagraphRun4.setText("代替 Q/FT XXXX—XXX X");
// titleParagraphRun4.setColor("000000");
// titleParagraphRun4.setFontSize(10);
// titleParagraphRun4.setFontFamily("Times New Roman");
// titleParagraphRun4.addCarriageReturn();
// titleParagraphRun4.addCarriageReturn();
// titleParagraphRun4.addCarriageReturn();
// titleParagraphRun4.addCarriageReturn();
// titleParagraphRun4.addCarriageReturn();
//设置背景名称一级级主题居中
XWPFParagraph breakParagraph1 = doc.createParagraph();
breakParagraph1.setAlignment(ParagraphAlignment.CENTER);
XWPFRun breakParagraphRun1 = breakParagraph1.createRun();
breakParagraphRun1.setText(object.getString("standName"));
breakParagraphRun1.setColor("000000");
breakParagraphRun1.setFontSize(26);
breakParagraphRun1.setFontFamily("黑体");
breakParagraphRun1.addCarriageReturn();
//设置背景名称二级级主题居中
XWPFParagraph breakParagraph2 = doc.createParagraph();
breakParagraph2.setAlignment(ParagraphAlignment.CENTER);
XWPFRun breakParagraphRun2 = breakParagraph2.createRun();
breakParagraphRun1.setText(object.getString("standEnName") == null ? "" : object.getString("standEnName"));
breakParagraphRun2.setColor("000000");
breakParagraphRun2.setFontSize(14);
breakParagraphRun2.setFontFamily("Times New Roman");
breakParagraphRun2.addCarriageReturn();
// 创建目录主题
// createCustomTOC(doc);
XWPFParagraph contentParagraph1 = doc.createParagraph();
contentParagraph1.setAlignment(ParagraphAlignment.CENTER);
XWPFRun contentParagraphRun1 = contentParagraph1.createRun();
breakParagraphRun1.setText(object.getString("standName"));
contentParagraphRun1.setColor("000000");
contentParagraphRun1.setFontSize(16);
contentParagraphRun1.setFontFamily("黑体");
contentParagraphRun1.addCarriageReturn();
contentParagraph1.setPageBreak(true);
doc.write(out);
out.close();
}catch (Exception e){
logger.error(e.getMessage());
}
}
public static CTSdtBlock createCustomTOC(XWPFDocument doc) {
CTSdtBlock block = doc.getDocument().getBody().addNewSdt();
// 生成目录方法 先在顶部占位,然后等文档的标题和内容等信息全部写完之后,在写目录剩下的部分
doc.createTOC();
CustomTOC(block);
addItem2TOC(doc,block);
return block;
}
public static void writeTOC() throws IOException {
XWPFDocument document= new XWPFDocument();
//Write the Document in file system
FileOutputStream out = new FileOutputStream(new File("E:\\Software\\rtpro\\Foton\\File\\doc\\create_toc.docx"));
//添加标题
XWPFParagraph titleParagraph = document.createParagraph();
//设置段落居中
titleParagraph.setAlignment(ParagraphAlignment.CENTER);
XWPFRun titleParagraphRun = titleParagraph.createRun();
titleParagraphRun.setText("Java PoI");
titleParagraphRun.setColor("000000");
titleParagraphRun.setFontSize(20);
//段落
XWPFParagraph firstParagraph = document.createParagraph();
firstParagraph.setStyle("Heading1");
XWPFRun run = firstParagraph.createRun();
run.setText("段落1。");
run.setColor("696969");
run.setFontSize(18);
//段落
XWPFParagraph firstParagraph1 = document.createParagraph();
firstParagraph1.setStyle("Heading1");
XWPFRun run1 = firstParagraph1.createRun();
run1.setText("段落2");
run1.setColor("696969");
run1.setFontSize(16);
document.createTOC();
document.write(out);
out.close();
}
public static void addItem2TOC(XWPFDocument doc,CTSdtBlock block) {
List<XWPFParagraph> paragraphs = doc.getParagraphs();
for (XWPFParagraph par : paragraphs) {
String parStyle = par.getStyle();
if (parStyle != null && parStyle.startsWith("Heading")) {
List<CTBookmark> bookmarkList=par.getCTP().getBookmarkStartList();
try {
int level = Integer.parseInt(parStyle.substring("Heading".length()));
if(level==1){
//添加栏目
addRowOnlyTitle(level, par.getText(),block);
}else{
//添加标题
addRow(level, par.getText(), 1, bookmarkList.get(0).getName(),block);
}
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) throws Exception {
wordRedDocument("E:\\Software\\rtpro\\Foton\\File\\doc\\create_toc-1.docx",null,"E:\\Software\\rtpro\\Foton\\File\\doc\\create_toc3.docx","E:\\Software\\rtpro\\Foton\\File\\doc\\create_toc-2.docx");
// writeWordBanch();
// writeToDocx();
// writeTOC();
// InputStream is = new BufferedInputStream(new FileInputStream("E:\\Software\\rtpro\\Foton\\File\\doc\\北汽福田资料\\资料\\提供材料2021.04\\10、标准复审单及修订计划表.doc")); //really a OOXML Word file
InputStream is = new BufferedInputStream(new FileInputStream("E:\\Software\\rtpro\\Foton\\File\\doc\\企业技术标准通用模板12.3.docx")); //really a OOXML Word file
if (FileMagic.valueOf(is) == FileMagic.OLE2) {
WordExtractor ex = new WordExtractor(is);
printWord(ex);
ex.close();
} else if (FileMagic.valueOf(is) == FileMagic.OOXML) {
XWPFDocument doc = new XWPFDocument(is);
System.out.println(doc.getStyles());
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
// printWordHWPF(extractor);
extractor.close();
}
closeStream(is);
}
private static void printWord(WordExtractor extractor) {
//输出word文档所有的文本
System.out.println(extractor.getText());
System.out.println(extractor.getTextFromPieces());
//输出页眉的内容
System.out.println("页眉:" + extractor.getHeaderText());
//输出页脚的内容
System.out.println("页脚:" + extractor.getFooterText());
//输出当前word文档的元数据信息,包括作者、文档的修改时间等。
System.out.println(extractor.getMetadataTextExtractor().getText());
//获取各个段落的文本
String paraTexts[] = extractor.getParagraphText();
for (int i=0; i<paraTexts.length; i++) {
System.out.println("Paragraph " + (i+1) + " : " + paraTexts[i]);
}
//输出当前word的一些信息
printInfo(extractor.getSummaryInformation());
//输出当前word的一些信息
printInfo(extractor.getDocSummaryInformation());
}
private static void printWordHWPF(XWPFWordExtractor xwpfWordExtractor) {
//输出word文档所有的文本
System.out.println(xwpfWordExtractor.getText());
}
}
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import java.text.MessageFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
@@ -20,6 +21,10 @@ import java.util.*;
*/
public class Utils {
public static String format(String value, Object... paras) {
return MessageFormat.format(value, paras);
}
public static int subDayNum(String endTime){
if (endTime.length() >= 10) {
endTime = endTime.substring(0, 10);
+14 -2
View File
@@ -31,9 +31,12 @@ spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://39.100.23.127:3306/foton-bat-wkflow?nullCatalogMeansCurrent=true&serverTimezone=Asia/Shanghai&useSSL=false&characterEncoding=utf-8
url: jdbc:mysql://123.56.177.15:3306/foton-bat-wkflow?nullCatalogMeansCurrent=true&serverTimezone=Asia/Shanghai&useSSL=false&characterEncoding=utf-8
username: root
password: root
password: RsLDRj3dXtSwYjBI
# url: jdbc:mysql://127.0.0.1:3306/foton-bat-wkflow?nullCatalogMeansCurrent=true&serverTimezone=Asia/Shanghai&useSSL=false&characterEncoding=utf-8
# username: root
# password: root
activiti:
database-schema-update: true
# 自动部署验证设置:true-开启(默认)、false-关闭
@@ -108,3 +111,12 @@ webUrl: http://62.234.136.153:8038/#/
# OA 接受任务定时器是否启用
isNotScheduled: false
buss:
edit:
file:
path: /data/slrs/file/
down:
file:
# path: https://srms.foton.com.cn/file/
path: http://foton.natapp1.cc/file/
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ydw.bat.wkflow.business_main.datas.mapper.BusProcessModelHisMapper">
</mapper>