yang_shj
2 years ago
27 changed files with 675 additions and 181 deletions
@ -1,59 +1,59 @@
|
||||
package com.hnac.hzims.scheduled.config; |
||||
|
||||
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springframework.beans.factory.annotation.Value; |
||||
import org.springframework.context.annotation.Bean; |
||||
import org.springframework.context.annotation.ComponentScan; |
||||
import org.springframework.context.annotation.Configuration; |
||||
|
||||
/** |
||||
* @Author WL |
||||
* @Version v1.0 |
||||
* @Serial 1.0 |
||||
* @Date 2022/1/8 10:23 |
||||
*/ |
||||
@Slf4j |
||||
@Configuration |
||||
//指定任务Handler所在包路径
|
||||
public class XxlJobConfig { |
||||
|
||||
|
||||
@Value("${xxl.job.admin.addresses}") |
||||
private String adminAddresses; |
||||
|
||||
@Value("${xxl.job.executor.appname}") |
||||
private String appName; |
||||
|
||||
@Value("${xxl.job.executor.ip}") |
||||
private String ip; |
||||
|
||||
@Value("${xxl.job.executor.port}") |
||||
private int port; |
||||
|
||||
@Value("${xxl.job.accessToken}") |
||||
private String accessToken; |
||||
|
||||
@Value("${xxl.job.executor.logpath}") |
||||
private String logPath; |
||||
|
||||
@Value("${xxl.job.executor.logretentiondays}") |
||||
private int logRetentionDays; |
||||
|
||||
|
||||
@Bean(initMethod = "start", destroyMethod = "destroy") |
||||
public XxlJobSpringExecutor xxlJobExecutor() { |
||||
log.info("====xxl-job config init===="); |
||||
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); |
||||
xxlJobSpringExecutor.setAdminAddresses(adminAddresses); |
||||
xxlJobSpringExecutor.setAppName(appName); |
||||
xxlJobSpringExecutor.setIp(ip); |
||||
xxlJobSpringExecutor.setPort(port); |
||||
xxlJobSpringExecutor.setAccessToken(accessToken); |
||||
xxlJobSpringExecutor.setLogPath(logPath); |
||||
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); |
||||
return xxlJobSpringExecutor; |
||||
} |
||||
|
||||
} |
||||
|
||||
// package com.hnac.hzims.scheduled.config;
|
||||
//
|
||||
// import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
|
||||
// import lombok.extern.slf4j.Slf4j;
|
||||
// import org.springframework.beans.factory.annotation.Value;
|
||||
// import org.springframework.context.annotation.Bean;
|
||||
// import org.springframework.context.annotation.ComponentScan;
|
||||
// import org.springframework.context.annotation.Configuration;
|
||||
//
|
||||
// /**
|
||||
// * @Author WL
|
||||
// * @Version v1.0
|
||||
// * @Serial 1.0
|
||||
// * @Date 2022/1/8 10:23
|
||||
// */
|
||||
// @Slf4j
|
||||
// @Configuration
|
||||
// //指定任务Handler所在包路径
|
||||
// public class XxlJobConfig {
|
||||
//
|
||||
//
|
||||
// @Value("${xxl.job.admin.addresses}")
|
||||
// private String adminAddresses;
|
||||
//
|
||||
// @Value("${xxl.job.executor.appname}")
|
||||
// private String appName;
|
||||
//
|
||||
// @Value("${xxl.job.executor.ip}")
|
||||
// private String ip;
|
||||
//
|
||||
// @Value("${xxl.job.executor.port}")
|
||||
// private int port;
|
||||
//
|
||||
// @Value("${xxl.job.accessToken}")
|
||||
// private String accessToken;
|
||||
//
|
||||
// @Value("${xxl.job.executor.logpath}")
|
||||
// private String logPath;
|
||||
//
|
||||
// @Value("${xxl.job.executor.logretentiondays}")
|
||||
// private int logRetentionDays;
|
||||
//
|
||||
//
|
||||
// @Bean(initMethod = "start", destroyMethod = "destroy")
|
||||
// public XxlJobSpringExecutor xxlJobExecutor() {
|
||||
// log.info("====xxl-job config init====");
|
||||
// XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
|
||||
// xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
|
||||
// xxlJobSpringExecutor.setAppName(appName);
|
||||
// xxlJobSpringExecutor.setIp(ip);
|
||||
// xxlJobSpringExecutor.setPort(port);
|
||||
// xxlJobSpringExecutor.setAccessToken(accessToken);
|
||||
// xxlJobSpringExecutor.setLogPath(logPath);
|
||||
// xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
|
||||
// return xxlJobSpringExecutor;
|
||||
// }
|
||||
//
|
||||
// }
|
||||
//
|
||||
|
@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
<mapper namespace="com.hnac.hzims.scheduled.mapper.operation.HistoryAbnormalAlarmMapper"> |
||||
<select id="getHistoryAbnormalAlarm" resultType="com.hnac.hzims.operational.alert.entity.HistoryAbnormalAlarmEntity"> |
||||
select * from hzims_history_abnormal_alarm |
||||
where station_id = #{stationId} |
||||
and type = #{type} |
||||
and status = 0 |
||||
</select> |
||||
</mapper> |
@ -1,26 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
<mapper namespace="com.hnac.hzims.scheduled.mapper.operation.StationMapper"> |
||||
<select id="selectStationByType" resultType="com.hnac.hzims.operational.station.entity.StationEntity"> |
||||
select * from hzims_station where IS_DELETED = 0 and REF_DEPT IS NOT NULL and `TYPE` IS NOT NULL |
||||
<if test="serveType != null"> |
||||
AND SERVE_TYPE = #{serveType} |
||||
</if> |
||||
<if test="stationType != null"> |
||||
AND `TYPE` = #{stationType} |
||||
</if> |
||||
</select> |
||||
|
||||
|
||||
<select id="selectAll" resultType="com.hnac.hzims.operational.station.entity.StationEntity"> |
||||
select * from hzims_station where IS_DELETED = 0 and REF_DEPT IS NOT NULL AND REF_DOMAIN IS NOT NULL AND `TYPE` IS NOT NULL |
||||
</select> |
||||
|
||||
|
||||
<select id="selectStationByInCode" resultType="com.hnac.hzims.operational.station.entity.StationEntity"> |
||||
SELECT * FROM hzims_station WHERE IS_DELETED = 0 and `CODE` IN |
||||
<foreach collection="list" item="item" index="index" open="(" close=")" separator=","> |
||||
#{item} |
||||
</foreach> |
||||
</select> |
||||
</mapper> |
@ -0,0 +1,172 @@
|
||||
package com.hnac.hzims.ticket.utils; |
||||
|
||||
/** |
||||
* @Author WL |
||||
* @Version v1.0 |
||||
* @Serial 1.0 |
||||
* @Date 2023/5/23 16:42 |
||||
*/ |
||||
import org.apache.poi.openxml4j.opc.OPCPackage; |
||||
import org.apache.poi.xwpf.usermodel.BreakType; |
||||
import org.apache.poi.xwpf.usermodel.Document; |
||||
import org.apache.poi.xwpf.usermodel.XWPFDocument; |
||||
import org.apache.poi.xwpf.usermodel.XWPFPictureData; |
||||
import org.apache.xmlbeans.XmlOptions; |
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody; |
||||
|
||||
import javax.servlet.http.HttpServletResponse; |
||||
import java.io.File; |
||||
import java.io.FileInputStream; |
||||
import java.io.FileOutputStream; |
||||
import java.io.OutputStream; |
||||
import java.time.LocalDate; |
||||
import java.util.*; |
||||
import java.util.regex.Matcher; |
||||
import java.util.regex.Pattern; |
||||
|
||||
|
||||
/** |
||||
* 参数1:需要合并的word的文件对象list |
||||
* 参数2:合并之后word存储的全路径file对象 |
||||
*/ |
||||
public class MergeDocUtils { |
||||
|
||||
|
||||
/** |
||||
* word文档合并 |
||||
* @param fileList 合并文档的路径 |
||||
* @param response 新的word |
||||
* @throws Exception |
||||
*/ |
||||
public static void mergeDoc(List<File> fileList, HttpServletResponse response)throws Exception { |
||||
|
||||
OutputStream dest = response.getOutputStream(); |
||||
ArrayList<XWPFDocument> documentList = new ArrayList<XWPFDocument>(); |
||||
XWPFDocument doc = null; |
||||
for (int i = 0; i < fileList.size(); i++) { |
||||
FileInputStream in = new FileInputStream(fileList.get(i).getPath()); |
||||
OPCPackage open = OPCPackage.open(in); |
||||
XWPFDocument document = new XWPFDocument(open); |
||||
documentList.add(document); |
||||
} |
||||
|
||||
|
||||
|
||||
for (int i = 0; i < documentList.size(); i++) { |
||||
doc = documentList.get(0); |
||||
if (i != 0) { |
||||
//documentList.get(i).createParagraph().setPageBreak(true);//实现了分页效果。//但是会出现在首行为空的情况
|
||||
documentList.get(i).createParagraph().createRun().addBreak(BreakType.PAGE);//现了分页效果。使用这种方式不会出现留白的情况
|
||||
appendBody(doc, documentList.get(i)); |
||||
} |
||||
} |
||||
doc.write(dest);//输出合并之后的文件
|
||||
} |
||||
|
||||
|
||||
/** |
||||
* 图片文件追加 |
||||
* @param src |
||||
* @param append |
||||
* @throws Exception |
||||
*/ |
||||
public static void appendBody(XWPFDocument src, XWPFDocument append) throws Exception { |
||||
CTBody src1Body = src.getDocument().getBody(); |
||||
CTBody src2Body = append.getDocument().getBody(); |
||||
|
||||
List<XWPFPictureData> allPictures = append.getAllPictures(); |
||||
// 记录图片合并前及合并后的ID
|
||||
Map<String, String> map = new HashMap(); |
||||
for (XWPFPictureData picture : allPictures) { |
||||
String before = append.getRelationId(picture); |
||||
//将原文档中的图片加入到目标文档中
|
||||
String after = src.addPictureData(picture.getData(), Document.PICTURE_TYPE_PNG); |
||||
map.put(before, after); |
||||
} |
||||
|
||||
appendBody(src1Body, src2Body, map); |
||||
|
||||
} |
||||
|
||||
private static void appendBody(CTBody src, CTBody append, Map<String, String> map) throws Exception { |
||||
XmlOptions optionsOuter = new XmlOptions(); |
||||
optionsOuter.setSaveOuter(); |
||||
String appendString = append.xmlText(optionsOuter); |
||||
|
||||
//去掉追加word内容中的 w:sectPr 标签,确保合成的word中只有一个 w:sectPr 标签对
|
||||
//避免合成的word文档打开之后会提示有些内容读不出来,导致文件损坏
|
||||
String rgex = "<[\\s]*?w:sectPr[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?w:sectPr[\\s]*?>"; |
||||
appendString = appendString.replaceAll(rgex, ""); |
||||
|
||||
String srcString = src.xmlText(); |
||||
String regex = regex(srcString, "w:sectPr"); |
||||
// System.out.println(regex);
|
||||
|
||||
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("<")); |
||||
|
||||
if (map != null && !map.isEmpty()) { |
||||
//对xml字符串中图片ID进行替换
|
||||
for (Map.Entry<String, String> set : map.entrySet()) { |
||||
addPart = addPart.replace(set.getKey(), set.getValue()); |
||||
} |
||||
} |
||||
//将两个文档的xml内容进行拼接
|
||||
CTBody makeBody = CTBody.Factory.parse(prefix + mainPart + addPart + sufix); |
||||
|
||||
src.set(makeBody); |
||||
} |
||||
|
||||
/** |
||||
* 获取指定标签中的内容 |
||||
* |
||||
* @param xml |
||||
* @param label |
||||
* @return |
||||
*/ |
||||
public static String regex(String xml, String label) { |
||||
String context = ""; |
||||
// 正则表达式
|
||||
String rgex = "<" + label + "[^>]*>((?:(?!<\\/" + label + ">)[\\s\\S])*)<\\/" + label + ">"; |
||||
Pattern pattern = Pattern.compile(rgex);// 匹配的模式
|
||||
Matcher m = pattern.matcher(xml); |
||||
// 匹配的有多个
|
||||
List<String> list = new ArrayList<String>(); |
||||
while (m.find()) { |
||||
int i = 1; |
||||
list.add(m.group(i)); |
||||
i++; |
||||
} |
||||
if (list.size() > 0) { |
||||
// 输出内容自己定义
|
||||
context = String.valueOf(list.size()); |
||||
} |
||||
return context; |
||||
} |
||||
|
||||
|
||||
// public static void main(String[] args) throws Exception {
|
||||
// //new一个list 模拟要合并的word对象集合
|
||||
// List<File>docFileList = new ArrayList<>();
|
||||
// docFileList.add(new File("F:\\idea项目\\flowable\\demo\\src\\main\\resources\\电气第一种工作票模版.docx"));
|
||||
// docFileList.add(new File("F:\\idea项目\\flowable\\demo\\src\\main\\resources\\动火工作票.docx"));
|
||||
//
|
||||
// //合并之后doc存储路径 此处读的配置文件的存储路径 D:/pdfData/
|
||||
// String docPath = "D:\\导出excel\\";
|
||||
// //当前日期+UUID作为文件名防止重复
|
||||
// String fileName = LocalDate.now() + "-" + UUID.randomUUID().toString().replaceAll("-", "");
|
||||
// //合并之后doc存储路径
|
||||
// String mergeDocUrl = docPath+fileName+".docx";
|
||||
// //转成file对象
|
||||
// File mergeDocFile = new File(mergeDocUrl);
|
||||
//
|
||||
// //合并doc
|
||||
// MergeDocUtils.mergeDoc(docFileList,mergeDocFile);
|
||||
//
|
||||
// System.out.println("合并word成功");
|
||||
//
|
||||
// }
|
||||
} |
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in new issue