From 4a28ed8d04c37d00f1e7b7952abf189ce73d4b9f Mon Sep 17 00:00:00 2001 From: super_liu <396572590@qq.com> Date: Tue, 14 Dec 2021 21:21:05 +0800 Subject: [PATCH] feat: There is no way the,buss --- pom.xml | 32 + .../BusProcessEvaluationHisController.java | 2 +- .../BusProcessModelHisController.java | 42 ++ .../datas/entity/BusProcessEvaluationHis.java | 2 +- .../datas/entity/BusProcessModelHis.java | 92 +++ .../mapper/BusProcessModelHisMapper.java | 19 + .../service/IBusProcessModelHisService.java | 29 + .../impl/BusProcessModelHisServiceImpl.java | 155 +++++ .../bussLibrary/BLApplicantAfter.java | 72 +- .../bussLibrary/BussLibrary2After.java | 2 +- .../bussLibrary/BussLibrary2Before.java | 25 +- .../bussLibrary/BussLibrary3Before.java | 23 + .../listener/bussLibrary/Utils/PoiUtil.java | 18 + .../listener/bussLibrary/Utils/PoiWord.java | 649 ++++++++++++++++++ .../java/com/ydw/bat/wkflow/util/Utils.java | 5 + src/main/resources/application.yml | 16 +- .../BusProcessModelHisMapper.xml | 5 + 17 files changed, 1161 insertions(+), 27 deletions(-) create mode 100644 src/main/java/com/ydw/bat/wkflow/business_main/datas/controller/BusProcessModelHisController.java create mode 100644 src/main/java/com/ydw/bat/wkflow/business_main/datas/entity/BusProcessModelHis.java create mode 100644 src/main/java/com/ydw/bat/wkflow/business_main/datas/mapper/BusProcessModelHisMapper.java create mode 100644 src/main/java/com/ydw/bat/wkflow/business_main/datas/service/IBusProcessModelHisService.java create mode 100644 src/main/java/com/ydw/bat/wkflow/business_main/datas/service/impl/BusProcessModelHisServiceImpl.java create mode 100644 src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/Utils/PoiUtil.java create mode 100644 src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/Utils/PoiWord.java create mode 100644 src/main/resources/mapper/busProcessModelHis/BusProcessModelHisMapper.xml diff --git a/pom.xml b/pom.xml index 57beee38..d5255b7f 100644 --- a/pom.xml +++ b/pom.xml @@ -165,6 +165,38 @@ spring-boot-devtools true + + + org.apache.poi + poi + 4.1.2 + + + org.apache.poi + poi-ooxml + 4.1.2 + + + org.apache.poi + poi-ooxml-schemas + 4.1.2 + + + xerces + xercesImpl + + + + + org.apache.poi + poi-scratchpad + 4.1.2 + + + com.deepoove + poi-tl + 1.9.1 + 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 @@ + + + + +