org.springframework.boot
diff --git a/src/main/java/com/ydw/bat/wkflow/business_main/datas/controller/BusProcessEvaluationHisController.java b/src/main/java/com/ydw/bat/wkflow/business_main/datas/controller/BusProcessEvaluationHisController.java
index 0707dc9a..8e6a9eb8 100644
--- a/src/main/java/com/ydw/bat/wkflow/business_main/datas/controller/BusProcessEvaluationHisController.java
+++ b/src/main/java/com/ydw/bat/wkflow/business_main/datas/controller/BusProcessEvaluationHisController.java
@@ -14,7 +14,7 @@ import java.util.Map;
/**
*
- * OA日志表 前端控制器
+ * 流程评分历史表 前端控制器
*
*
* @author super_liu
diff --git a/src/main/java/com/ydw/bat/wkflow/business_main/datas/controller/BusProcessModelHisController.java b/src/main/java/com/ydw/bat/wkflow/business_main/datas/controller/BusProcessModelHisController.java
new file mode 100644
index 00000000..b7cccc5b
--- /dev/null
+++ b/src/main/java/com/ydw/bat/wkflow/business_main/datas/controller/BusProcessModelHisController.java
@@ -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;
+
+/**
+ *
+ * 流程模块历史表 前端控制器
+ *
+ *
+ * @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 evaluationHisList(String pid) {
+ List processModelHisList = busProcessModelHisService.modelHisList(pid);
+ return processModelHisList;
+ }
+}
+
diff --git a/src/main/java/com/ydw/bat/wkflow/business_main/datas/entity/BusProcessEvaluationHis.java b/src/main/java/com/ydw/bat/wkflow/business_main/datas/entity/BusProcessEvaluationHis.java
index 4fe99172..3f0dccfa 100644
--- a/src/main/java/com/ydw/bat/wkflow/business_main/datas/entity/BusProcessEvaluationHis.java
+++ b/src/main/java/com/ydw/bat/wkflow/business_main/datas/entity/BusProcessEvaluationHis.java
@@ -14,7 +14,7 @@ import java.io.Serializable;
/**
*
- * OA日志表
+ * 流程评分历史表
*
*
* @author super_liu
diff --git a/src/main/java/com/ydw/bat/wkflow/business_main/datas/entity/BusProcessModelHis.java b/src/main/java/com/ydw/bat/wkflow/business_main/datas/entity/BusProcessModelHis.java
new file mode 100644
index 00000000..c9058a3d
--- /dev/null
+++ b/src/main/java/com/ydw/bat/wkflow/business_main/datas/entity/BusProcessModelHis.java
@@ -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;
+
+/**
+ *
+ * 流程模块历史表
+ *
+ *
+ * @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;
+}
diff --git a/src/main/java/com/ydw/bat/wkflow/business_main/datas/mapper/BusProcessModelHisMapper.java b/src/main/java/com/ydw/bat/wkflow/business_main/datas/mapper/BusProcessModelHisMapper.java
new file mode 100644
index 00000000..53d795c0
--- /dev/null
+++ b/src/main/java/com/ydw/bat/wkflow/business_main/datas/mapper/BusProcessModelHisMapper.java
@@ -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;
+
+/**
+ *
+ * 流程模块历史表 Mapper 接口
+ *
+ *
+ * @author super_liu
+ * @since 2021-09-17
+ */
+@Repository
+public interface BusProcessModelHisMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/com/ydw/bat/wkflow/business_main/datas/service/IBusProcessModelHisService.java b/src/main/java/com/ydw/bat/wkflow/business_main/datas/service/IBusProcessModelHisService.java
new file mode 100644
index 00000000..8aad8da1
--- /dev/null
+++ b/src/main/java/com/ydw/bat/wkflow/business_main/datas/service/IBusProcessModelHisService.java
@@ -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;
+
+/**
+ *
+ * 流程模块历史表 服务类
+ *
+ *
+ * @author super_liu
+ * @since 2021-09-17
+ */
+public interface IBusProcessModelHisService extends IService {
+
+ BusProcessModelHis modelHisOne(String pid,String taskId);
+
+ List modelHisList(String pid);
+
+ String saveBussModelFile(String pid, String taskId);
+
+ String mergeModelFile(String pid, String taskId,String fileSuffix);
+
+ void saveBussTemplateFile(JSONObject object, String pid);
+}
diff --git a/src/main/java/com/ydw/bat/wkflow/business_main/datas/service/impl/BusProcessModelHisServiceImpl.java b/src/main/java/com/ydw/bat/wkflow/business_main/datas/service/impl/BusProcessModelHisServiceImpl.java
new file mode 100644
index 00000000..76e0b18f
--- /dev/null
+++ b/src/main/java/com/ydw/bat/wkflow/business_main/datas/service/impl/BusProcessModelHisServiceImpl.java
@@ -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;
+
+/**
+ *
+ * 流程模块历史表 服务实现类
+ *
+ *
+ * @author super_liu
+ * @since 2021-09-17
+ */
+@Service
+public class BusProcessModelHisServiceImpl extends ServiceImpl 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 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 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 modelHisList(String pid){
+ QueryWrapper wrapper = new QueryWrapper();
+ wrapper.eq("P_ID",pid);
+ return this.baseMapper.selectList(wrapper);
+ }
+}
diff --git a/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BLApplicantAfter.java b/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BLApplicantAfter.java
index ec3c213c..368d905e 100644
--- a/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BLApplicantAfter.java
+++ b/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BLApplicantAfter.java
@@ -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 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 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 nextUserList = new ArrayList();
+ List busProcessModelHisList = new ArrayList<>();
+ if(StringUtils.isNotBlank(object.getString("modelData"))){
+ List valueArr = JSONArray.parseArray(object.getString("modelData"),JSONObject.class);
+ Map> listMap = valueArr.stream().collect(
+ Collectors.groupingBy(a -> Utils.format("{0}", a.getString("userId"))));
+ List 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){
diff --git a/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BussLibrary2After.java b/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BussLibrary2After.java
index 69473259..abd8728a 100644
--- a/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BussLibrary2After.java
+++ b/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BussLibrary2After.java
@@ -21,7 +21,7 @@ import java.util.Date;
import java.util.List;
/**
- * 企标协同编写后
+ * 企标编写后
*/
public class BussLibrary2After implements TaskListener{
@Override
diff --git a/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BussLibrary2Before.java b/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BussLibrary2Before.java
index a3222e1d..360d76c6 100644
--- a/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BussLibrary2Before.java
+++ b/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BussLibrary2Before.java
@@ -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 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);
+ }
+
}
}
diff --git a/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BussLibrary3Before.java b/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BussLibrary3Before.java
index 53a5d06e..7b80fdca 100644
--- a/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BussLibrary3Before.java
+++ b/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BussLibrary3Before.java
@@ -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);
}
}
}
diff --git a/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/Utils/PoiUtil.java b/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/Utils/PoiUtil.java
new file mode 100644
index 00000000..52dccdd8
--- /dev/null
+++ b/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/Utils/PoiUtil.java
@@ -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 {
+
+}
diff --git a/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/Utils/PoiWord.java b/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/Utils/PoiWord.java
new file mode 100644
index 00000000..a599ed85
--- /dev/null
+++ b/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/Utils/PoiWord.java
@@ -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 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 paragraphs = doc.getParagraphs();
+ for (XWPFParagraph par : paragraphs) {
+ String parStyle = par.getStyle();
+ if (parStyle != null && parStyle.startsWith("Heading")) {
+ List 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= 10) {
endTime = endTime.substring(0, 10);
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index e0d2bdf9..6a31255a 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -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/
+
diff --git a/src/main/resources/mapper/busProcessModelHis/BusProcessModelHisMapper.xml b/src/main/resources/mapper/busProcessModelHis/BusProcessModelHisMapper.xml
new file mode 100644
index 00000000..8e8fb814
--- /dev/null
+++ b/src/main/resources/mapper/busProcessModelHis/BusProcessModelHisMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+