批量导入日志完善

This commit is contained in:
anhc 2022-07-07 09:35:46 +08:00
parent 7e7dbfbaca
commit a94b875ddb
4 changed files with 108 additions and 74 deletions

View File

@ -3,6 +3,7 @@ package com.actionsoft.apps.coe.pal.datamigration.util;
import com.actionsoft.apps.coe.pal.datamigration.aris.constant.ArisConstant;
import com.actionsoft.apps.coe.pal.datamigration.constant.Constant;
import com.actionsoft.apps.coe.pal.datamigration.log.cache.LogRealTimeCountCache;
import com.actionsoft.apps.coe.pal.datamigration.log.dao.LogDao;
import com.actionsoft.apps.coe.pal.datamigration.log.model.LogModel;
import com.actionsoft.apps.resource.plugin.profile.DCPluginProfile;
import com.actionsoft.bpms.server.UserContext;
@ -31,7 +32,7 @@ public class WordLogUtil {
public WordLogUtil(UserContext _uc){
this.uc = _uc;
logId = UUIDGener.getUUID();// 记录缓存
String fileValue = "AttrtibuteImported-" + new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").format(new Date()) + "=" + _uc.getUID();
String fileValue = "AttrtibuteImported-" + new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").format(new Date()) + "--" + _uc.getUID();
// 创建dc目录
DCPluginProfile dcProfile = DCProfileManager.getDCProfile(Constant.APP_ID, Constant.UPFILE);
DCContext dc = new DCContext(_uc, dcProfile, Constant.APP_ID, "log", fileValue);
@ -142,6 +143,32 @@ public class WordLogUtil {
}
/**
* 更新日志日志操作行为非具体日志信息
* @param id
* @param endDate 结束时间
* @param resultType 结果状态
* @param mainInfo 主要信息
* @return
*/
public int updateLog(Timestamp endDate, int resultType, String mainInfo) {
return new LogDao().update(logId, endDate, resultType, mainInfo);
}
public String takeTime(long startTime,long endTime) {
long time = endTime - startTime;
String timeMsg = "";
if (time > 1000 * 60) {
timeMsg = "[" + (time / 1000 / 60) + "]分钟";
} else if (time > 1000) {
timeMsg = "[" + (time / 1000) + "]秒";
} else {
timeMsg = "[" + time + "]毫秒";
}
return timeMsg;
}

View File

@ -12,6 +12,7 @@ import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.*;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;
@ -72,64 +73,56 @@ public class WordUtil {
public WordUtil() { }
public boolean analysisWordTable(String filePath){
try {
HWPFDocument doc = new HWPFDocument(new FileInputStream(filePath));
Range range = doc.getRange();
for (int i =0;i<range.numParagraphs();i++){
Paragraph paragraph = range.getParagraph(i);
String text = paragraph.text();
if (StringUtils.isEmpty(text)||"\r".equals(text)){
continue;
}
//获取文件编码
if (text.contains("文件编码") && fileFieldMap.get("文件编码") == null){
this.fileNo = this.getFileNo(text);
this.isOldVersion = this.isOldVersion(this.fileNo);
fileFieldMap.put("文件编码",new WordField<>(this.fileNo));
}
//获取文件名称
if (this.isTitle(paragraph)){
this.fileName += text.trim();
}
if (this.isOldVersion){
//旧版本文档
AnalysisStrategyContext strategyContext = new AnalysisStrategyContext();
if (this.isTitle(paragraph)){
//文件标题下解析后续table
AnalysisStrategy titleField = strategyContext.getStrategy("VerticalFeild");
Map<String, WordField<Object>> analysis = titleField.analysis(doc, i);
fileFieldMap.putAll(analysis);
}
WordAttribute wordAttribute = oldWordAttributeMap.get(text.trim());
if (null == wordAttribute){
continue;
}
AnalysisStrategy strategy = strategyContext.getStrategy(wordAttribute.getType());
Map<String, WordField<Object>> analysis = strategy.analysis(doc, i);
fileFieldMap.putAll(analysis);
}else {
WordAttribute wordAttribute = wordAttributeMap.get(text.trim());
if (null == wordAttribute){
continue;
}
AnalysisStrategy strategy = new AnalysisStrategyContext().getStrategy(wordAttribute.getType());
Map<String, WordField<Object>> analysis = strategy.analysis(doc,i);
fileFieldMap.putAll(analysis);
}
public void analysisWordTable(String filePath) throws IOException ,RuntimeException {
HWPFDocument doc = new HWPFDocument(new FileInputStream(filePath));
Range range = doc.getRange();
for (int i =0;i<range.numParagraphs();i++){
Paragraph paragraph = range.getParagraph(i);
String text = paragraph.text();
if (StringUtils.isEmpty(text)||"\r".equals(text)){
continue;
}
} catch (IOException e) {
e.printStackTrace();
return false;
}
//获取文件编码
if (text.contains("文件编码") && fileFieldMap.get("文件编码") == null){
this.fileNo = this.getFileNo(text);
this.isOldVersion = this.isOldVersion(this.fileNo);
fileFieldMap.put("文件编码",new WordField<>(this.fileNo));
}
return true;
//获取文件名称
if (this.isTitle(paragraph)){
this.fileName += text.trim();
}
if (this.isOldVersion){
//旧版本文档
AnalysisStrategyContext strategyContext = new AnalysisStrategyContext();
if (this.isTitle(paragraph)){
//文件标题下解析后续table
AnalysisStrategy titleField = strategyContext.getStrategy("VerticalFeild");
Map<String, WordField<Object>> analysis = titleField.analysis(doc, i);
fileFieldMap.putAll(analysis);
}
WordAttribute wordAttribute = oldWordAttributeMap.get(text.trim());
if (null == wordAttribute){
continue;
}
AnalysisStrategy strategy = strategyContext.getStrategy(wordAttribute.getType());
Map<String, WordField<Object>> analysis = strategy.analysis(doc, i);
fileFieldMap.putAll(analysis);
}else {
WordAttribute wordAttribute = wordAttributeMap.get(text.trim());
if (null == wordAttribute){
continue;
}
AnalysisStrategy strategy = new AnalysisStrategyContext().getStrategy(wordAttribute.getType());
Map<String, WordField<Object>> analysis = strategy.analysis(doc,i);
fileFieldMap.putAll(analysis);
}
}
}
private String getFileNo(String text){

View File

@ -140,8 +140,8 @@ public class DataMigrationWeb extends ActionWeb {
String fileName = "";
for (int i = 0; i < fileArr.length; i++) {
File file = fileArr[i];
fileName = StringUtils.isEmpty(fileName) ? fileName + file.getName() : ","+ fileName + file.getName();
if (i>=3){
fileName = StringUtils.isEmpty(fileName) ? fileName + file.getName() : fileName + ","+ file.getName();
if (i>=2){
fileName += "";
break;
}
@ -169,21 +169,32 @@ public class DataMigrationWeb extends ActionWeb {
return ResponseObject.newErrResponse("资产库不存在或已停用").toString();
}
new Thread(new Runnable() {
@Override
public void run() {
for (File file : fileArr) {
wordLogUtil.appendAllLog("\n[信息]流程属性Word文件" + file.getName());
wordLogUtil.appendAllLog("[信息]流程属性Word文件路径"+ file.getPath());
wordLogUtil.appendAllLog("-----------流程属性Word文件 Begin " + UtilDate.datetimeFormat(startTime));
ResponseObject res = new DataMigrationWeb().analysisWord(wsId, file.getPath(), wordLogUtil);
if (res.isErr()){
wordLogUtil.appendAllAndErrorLog(Constant.LOG_ERROR + "word文件--"+file.getName()+" 解析异常:"+res.getMsg()+" 中断解析\n");
}
if (res.isOk()){
wordLogUtil.appendAllAndInfoLog(Constant.LOG_END+ "word文件--"+file.getName()+" :"+res.getMsg()+"\n");
}
new Thread(()->{
int success = 0;
int error = 0;
for (File file : fileArr) {
wordLogUtil.appendAllLog("\n[信息]流程属性Word文件" + file.getName());
wordLogUtil.appendAllLog("[信息]流程属性Word文件路径"+ file.getPath());
wordLogUtil.appendAllLog("-----------流程属性Word文件 Begin " + UtilDate.datetimeFormat(startTime));
ResponseObject res = new DataMigrationWeb().analysisWord(wsId, file.getPath(), wordLogUtil);
if (res.isErr()){
error++;
wordLogUtil.appendAllAndErrorLog(Constant.LOG_ERROR + "word文件--"+file.getName()+" 解析异常:"+res.getMsg()+" ,中断解析\n");
}
if (res.isOk()){
success++;
wordLogUtil.appendAllAndInfoLog(Constant.LOG_END+ "word文件--"+file.getName()+" :"+res.getMsg()+"\n");
}
}
Timestamp endTime = new Timestamp(System.currentTimeMillis());
if (success > 0){
String resultMsg = "批量导入成功:总耗时" + wordLogUtil.takeTime(startTime.getTime(),endTime.getTime()) + ",总计文档["+fileArr.length+"]条,导入成功[" + success + "]条,导入失败[" + error + "]条";
wordLogUtil.updateLog(new Timestamp(System.currentTimeMillis()), Constant.LOG_RESULT_StATUS_SUCCESS, resultMsg);
wordLogUtil.appendAllAndInfoLog(resultMsg);
}else {
String resultMsg = "批量导入失败:总耗时" + wordLogUtil.takeTime(startTime.getTime(),endTime.getTime()) + ",总计文档["+fileArr.length+"]条,导入成功[" + success + "]条,导入失败[" + error + "]条";
wordLogUtil.updateLog(new Timestamp(System.currentTimeMillis()), Constant.LOG_RESULT_StATUS_ERROR, resultMsg);
wordLogUtil.appendAllAndInfoLog(resultMsg);
}
}).start();
@ -418,9 +429,12 @@ public class DataMigrationWeb extends ActionWeb {
private ResponseObject analysisWord(String wsId,String filePath,WordLogUtil logUtil){
//解析Word文档
WordUtil wordUtil = new WordUtil();
boolean analysisFlag = wordUtil.analysisWordTable(filePath);
if (!analysisFlag) {
return ResponseObject.newErrResponse("文件解析异常");
try {
wordUtil.analysisWordTable(filePath);
} catch (IOException e) {
return ResponseObject.newErrResponse("word 文件解析异常: "+e.getMessage());
} catch (RuntimeException e){
return ResponseObject.newErrResponse("word 文件解析异常: "+e.getMessage());
}
//获取解析后的文件名称同名策略匹配pal寻找对应文件