提交 cada8cbf 编写于 作者: zhouweidong's avatar zhouweidong

本地逻辑将File改为Resource直接读取classpath中的处理逻辑

上级 0b4f2487
...@@ -14,13 +14,11 @@ TARGET=PSSYSTEM ...@@ -14,13 +14,11 @@ TARGET=PSSYSTEM
<#if !isDynaSys> <#if !isDynaSys>
package ${pub.getPKGCodeName()}.util.aspect; package ${pub.getPKGCodeName()}.util.aspect;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import ${pub.getPKGCodeName()}.util.domain.DELogic; import ${pub.getPKGCodeName()}.util.domain.DELogic;
import ${pub.getPKGCodeName()}.util.domain.EntityBase; import ${pub.getPKGCodeName()}.util.domain.EntityBase;
import ${pub.getPKGCodeName()}.util.errors.BadRequestAlertException; import ${pub.getPKGCodeName()}.util.errors.BadRequestAlertException;
import ${pub.getPKGCodeName()}.util.helper.DEFieldCacheMap; import ${pub.getPKGCodeName()}.util.helper.DEFieldCacheMap;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Around;
...@@ -36,6 +34,8 @@ import org.kie.api.builder.Results; ...@@ -36,6 +34,8 @@ import org.kie.api.builder.Results;
import org.kie.api.runtime.KieContainer; import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession; import org.kie.api.runtime.KieSession;
import org.kie.internal.io.ResourceFactory; import org.kie.internal.io.ResourceFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.expression.EvaluationContext; import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression; import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser; import org.springframework.expression.ExpressionParser;
...@@ -49,7 +49,6 @@ import org.springframework.util.StringUtils; ...@@ -49,7 +49,6 @@ import org.springframework.util.StringUtils;
import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamReader; import javax.xml.stream.XMLStreamReader;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.lang.reflect.Method; import java.lang.reflect.Method;
...@@ -123,7 +122,7 @@ public class DELogicAspect { ...@@ -123,7 +122,7 @@ public class DELogicAspect {
* @param action * @param action
*/ */
private void executeBeforeLogic(EntityBase entity, String action) { private void executeBeforeLogic(EntityBase entity, String action) {
File bpmnFile = getLocalModel(entity.getClass().getSimpleName(), action, LogicExecMode.BEFORE); Resource bpmnFile = getLocalModel(entity.getClass().getSimpleName(), action, LogicExecMode.BEFORE);
if (bpmnFile != null && bpmnFile.exists() && isValid(bpmnFile, entity, action)) { if (bpmnFile != null && bpmnFile.exists() && isValid(bpmnFile, entity, action)) {
executeLogic(bpmnFile, entity, action); executeLogic(bpmnFile, entity, action);
} }
...@@ -136,7 +135,7 @@ public class DELogicAspect { ...@@ -136,7 +135,7 @@ public class DELogicAspect {
* @param action * @param action
*/ */
private void executeAfterLogic(EntityBase entity, String action) { private void executeAfterLogic(EntityBase entity, String action) {
File bpmnFile = getLocalModel(entity.getClass().getSimpleName(), action, LogicExecMode.AFTER); Resource bpmnFile = getLocalModel(entity.getClass().getSimpleName(), action, LogicExecMode.AFTER);
if (bpmnFile != null && bpmnFile.exists() && isValid(bpmnFile, entity, action)) { if (bpmnFile != null && bpmnFile.exists() && isValid(bpmnFile, entity, action)) {
executeLogic(bpmnFile, entity, action); executeLogic(bpmnFile, entity, action);
} }
...@@ -149,7 +148,7 @@ public class DELogicAspect { ...@@ -149,7 +148,7 @@ public class DELogicAspect {
* @param action * @param action
*/ */
private void executeLogic(EntityBase entity, String action) { private void executeLogic(EntityBase entity, String action) {
File bpmnFile = getLocalModel(entity.getClass().getSimpleName(), action, LogicExecMode.EXEC); Resource bpmnFile = getLocalModel(entity.getClass().getSimpleName(), action, LogicExecMode.EXEC);
if (bpmnFile != null && bpmnFile.exists() && isValid(bpmnFile, entity, action)) { if (bpmnFile != null && bpmnFile.exists() && isValid(bpmnFile, entity, action)) {
executeLogic(bpmnFile, entity, action); executeLogic(bpmnFile, entity, action);
} }
...@@ -161,9 +160,10 @@ public class DELogicAspect { ...@@ -161,9 +160,10 @@ public class DELogicAspect {
* @param bpmnFile * @param bpmnFile
* @param entity * @param entity
*/ */
private void executeLogic(File bpmnFile, Object entity, String action) { private void executeLogic(Resource bpmnFile, Object entity, String action) {
log.debug("开始执行实体处理逻辑[{}:{}:{}:本地模式]", entity.getClass().getSimpleName(), action, bpmnFile.getName()); try {
String bpmnId = DigestUtils.md5DigestAsHex(bpmnFile.getPath().getBytes()); log.debug("开始执行实体处理逻辑[{}:{}:{}:本地模式]", entity.getClass().getSimpleName(), action, bpmnFile.getFilename());
String bpmnId = DigestUtils.md5DigestAsHex(bpmnFile.getURL().getPath().getBytes());
DELogic logic = getDELogic(bpmnFile); DELogic logic = getDELogic(bpmnFile);
if (logic == null) { if (logic == null) {
return; return;
...@@ -186,7 +186,11 @@ public class DELogicAspect { ...@@ -186,7 +186,11 @@ public class DELogicAspect {
} }
} }
kieSession.startProcess(mainProcess.getId()); kieSession.startProcess(mainProcess.getId());
log.debug("实体处理逻辑[{}:{}:{}:本地模式]执行结束", entity.getClass().getSimpleName(), action, bpmnFile.getName()); log.debug("实体处理逻辑[{}:{}:{}:本地模式]执行结束", entity.getClass().getSimpleName(), action, bpmnFile.getFilename());
} catch (IOException e) {
log.error("实体处理逻辑[{}:{}:{}:本地模式]发生异常", entity.getClass().getSimpleName(), action, bpmnFile.getFilename());
throw new BadRequestAlertException("执行实体处理逻辑发生异常" + e.getMessage(), "DELogicAspect", "executeLogic");
}
} }
/** /**
...@@ -194,11 +198,11 @@ public class DELogicAspect { ...@@ -194,11 +198,11 @@ public class DELogicAspect {
* *
* @param logic * @param logic
*/ */
private void reloadLogic(DELogic logic) { private void reloadLogic(DELogic logic) throws IOException {
KieServices kieServices = KieServices.get(); KieServices kieServices = KieServices.get();
KieFileSystem kieFileSystem = kieServices.newKieFileSystem(); KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
for (File bpmn : logic.getRefRuleFiles()) { for (Resource bpmn : logic.getRefRuleFiles()) {
kieFileSystem.write(ResourceFactory.newFileResource(bpmn)); kieFileSystem.write(ResourceFactory.newUrlResource(bpmn.getURL()));
} }
KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem).buildAll(); KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem).buildAll();
Results results = kieBuilder.getResults(); Results results = kieBuilder.getResults();
...@@ -253,28 +257,29 @@ public class DELogicAspect { ...@@ -253,28 +257,29 @@ public class DELogicAspect {
* @param bpmnFile * @param bpmnFile
* @return * @return
*/ */
@SneakyThrows private DELogic getDELogic(Resource bpmnFile) {
private DELogic getDELogic(File bpmnFile) {
DELogic logic = null; DELogic logic = null;
XMLStreamReader reader = null; XMLStreamReader reader = null;
InputStream bpmn = null; InputStream bpmn = null;
try { try {
if (bpmnFile.exists()) { if (bpmnFile.exists()) {
XMLInputFactory factory = XMLInputFactory.newInstance(); XMLInputFactory factory = XMLInputFactory.newInstance();
bpmn = new FileInputStream(bpmnFile); bpmn = bpmnFile.getInputStream();
reader = factory.createXMLStreamReader(bpmn); reader = factory.createXMLStreamReader(bpmn);
BpmnModel model = bpmnXMLConverter.convertToBpmnModel(reader); BpmnModel model = bpmnXMLConverter.convertToBpmnModel(reader);
Process mainProcess = model.getMainProcess(); Process mainProcess = model.getMainProcess();
if (mainProcess == null) { if (mainProcess == null) {
return null; return null;
} }
log.debug("正在加载 BPMN:{}", bpmnFile.getURL().getPath());
List<DELogic> refLogics = new ArrayList<>(); List<DELogic> refLogics = new ArrayList<>();
List<File> refFiles = new ArrayList<>(); List<Resource> refFiles = new ArrayList<>();
//自己 bpmn drl //自己 bpmn drl
refFiles.add(bpmnFile); refFiles.add(bpmnFile);
File drlFile = getDrl(bpmnFile); Resource drlFile = getDrl(bpmnFile);
if (drlFile != null && drlFile.exists()) { if (drlFile != null && drlFile.exists()) {
refFiles.add(drlFile); refFiles.add(drlFile);
log.debug("正在加载 DRL:{}", drlFile.getURL().getPath());
} }
// bpmn drl // bpmn drl
if (!ObjectUtils.isEmpty(model.getMainProcess()) && !ObjectUtils.isEmpty(model.getMainProcess().getFlowElementMap())) { if (!ObjectUtils.isEmpty(model.getMainProcess()) && !ObjectUtils.isEmpty(model.getMainProcess().getFlowElementMap())) {
...@@ -282,11 +287,7 @@ public class DELogicAspect { ...@@ -282,11 +287,7 @@ public class DELogicAspect {
if (item instanceof CallActivity) { if (item instanceof CallActivity) {
CallActivity subBpmn = (CallActivity) item; CallActivity subBpmn = (CallActivity) item;
String bpmnFileName = subBpmn.getName(); String bpmnFileName = subBpmn.getName();
log.debug("正在加载 BPMN:{}", bpmnFileName); Resource subBpmnFile = getSubBpmn(bpmnFileName);
File subBpmnFile = getSubBpmn(bpmnFileName);
if (ObjectUtils.isEmpty(subBpmnFile)) {
log.debug("BPMN:{},缺少文件:{} ", bpmnFileName, subBpmnFile);
}
DELogic refLogic = getDELogic(subBpmnFile); DELogic refLogic = getDELogic(subBpmnFile);
if (refLogic != null) { if (refLogic != null) {
refLogics.add(refLogic); refLogics.add(refLogic);
...@@ -306,7 +307,7 @@ public class DELogicAspect { ...@@ -306,7 +307,7 @@ public class DELogicAspect {
logic.setMd5(getMd5(refFiles)); logic.setMd5(getMd5(refFiles));
} }
} catch (Exception e) { } catch (Exception e) {
log.error("执行处理逻辑失败"+e); log.error("执行处理逻辑失败" + e);
} finally { } finally {
try { try {
if (reader != null) { if (reader != null) {
...@@ -316,7 +317,7 @@ public class DELogicAspect { ...@@ -316,7 +317,7 @@ public class DELogicAspect {
bpmn.close(); bpmn.close();
} }
} catch (Exception e) { } catch (Exception e) {
log.error("执行处理逻辑失败"+e); log.error("执行处理逻辑失败" + e);
} }
} }
return logic; return logic;
...@@ -341,10 +342,10 @@ public class DELogicAspect { ...@@ -341,10 +342,10 @@ public class DELogicAspect {
} }
} }
} }
if(!ObjectUtils.isEmpty(service.getSuperclass()) && !service.getSuperclass().getName().equals(Object.class.getName())) { if (!ObjectUtils.isEmpty(service.getSuperclass()) && !service.getSuperclass().getName().equals(Object.class.getName())) {
return getEntity(service.getSuperclass()); return getEntity(service.getSuperclass());
} }
log.error("获取实体信息失败,未能在[{}]中找到参数为实体类对象的行为,如create.update等",service.getSimpleName()); log.error("获取实体信息失败,未能在[{}]中找到参数为实体类对象的行为,如create.update等", service.getSimpleName());
return null; return null;
} }
...@@ -354,19 +355,19 @@ public class DELogicAspect { ...@@ -354,19 +355,19 @@ public class DELogicAspect {
* @param subFiles * @param subFiles
* @return * @return
*/ */
private String getMd5(List<File> subFiles) { private String getMd5(List<Resource> subFiles) {
try { try {
StringBuffer buffer = new StringBuffer(); StringBuffer buffer = new StringBuffer();
for (File file : subFiles) { for (Resource file : subFiles) {
InputStream bpmnFile = null; InputStream bpmnFile = null;
try { try {
bpmnFile = new FileInputStream(file); bpmnFile = file.getInputStream();
if (!ObjectUtils.isEmpty(bpmnFile)) { if (!ObjectUtils.isEmpty(bpmnFile)) {
String strBpmn = IOUtils.toString(bpmnFile, "UTF-8"); String strBpmn = IOUtils.toString(bpmnFile, "UTF-8");
buffer.append(strBpmn); buffer.append(strBpmn);
} }
} catch (Exception e) { } catch (Exception e) {
log.error("处理逻辑版本检查失败"+e); log.error("处理逻辑版本检查失败" + e);
} finally { } finally {
if (bpmnFile != null) { if (bpmnFile != null) {
bpmnFile.close(); bpmnFile.close();
...@@ -379,7 +380,7 @@ public class DELogicAspect { ...@@ -379,7 +380,7 @@ public class DELogicAspect {
return null; return null;
} }
} catch (Exception e) { } catch (Exception e) {
log.error("处理逻辑版本检查失败"+e); log.error("处理逻辑版本检查失败" + e);
return null; return null;
} }
} }
...@@ -392,10 +393,8 @@ public class DELogicAspect { ...@@ -392,10 +393,8 @@ public class DELogicAspect {
* @param logicExecMode * @param logicExecMode
* @return * @return
*/ */
private File getLocalModel(String entity, String action, LogicExecMode logicExecMode) { private Resource getLocalModel(String entity, String action, LogicExecMode logicExecMode) {
String logicName = String.format("%s.bpmn", logicExecMode.text); return new ClassPathResource("rules" + File.separator + entity + File.separator + action.toLowerCase() + File.separator + logicExecMode.text + ".bpmn");
String filePath = File.separator + "rules" + File.separator + entity + File.separator + action.toLowerCase() + File.separator + logicName;
return getBpmnFile(filePath);
} }
/** /**
...@@ -404,9 +403,8 @@ public class DELogicAspect { ...@@ -404,9 +403,8 @@ public class DELogicAspect {
* @param logicName * @param logicName
* @return * @return
*/ */
private File getSubBpmn(String logicName) { private Resource getSubBpmn(String logicName) {
String filePath = String.format("/rules/%s", logicName); return new ClassPathResource(String.format("rules/%s", logicName));
return getBpmnFile(filePath);
} }
/** /**
...@@ -415,41 +413,10 @@ public class DELogicAspect { ...@@ -415,41 +413,10 @@ public class DELogicAspect {
* @param bpmn * @param bpmn
* @return * @return
*/ */
private File getDrl(File bpmn) { private Resource getDrl(Resource bpmn) {
if (bpmn.getPath().endsWith("RuleFlow.bpmn")) { String filePath = ((ClassPathResource) bpmn).getPath();
return getBpmnFile(bpmn.getPath().replace("RuleFlow.bpmn", "Rule.drl")); filePath = filePath.endsWith("RuleFlow.bpmn") ? filePath.replace("RuleFlow.bpmn", "Rule.drl") : filePath.replace(".bpmn", ".drl");
} else { return new ClassPathResource(filePath);
return getBpmnFile(bpmn.getPath().replace(".bpmn", ".drl"));
}
}
/**
* 获取 bpmn
*
* @param filePath
* @return
*/
private File getBpmnFile(String filePath) {
InputStream in = null;
File bpmn = null;
try {
in = this.getClass().getResourceAsStream(filePath.replace("\\", "/"));
if (in != null) {
bpmn = new File(filePath);
FileUtils.copyToFile(in, bpmn);
}
} catch (IOException e) {
log.error("执行处理逻辑失败,无法获取逻辑文件"+e);
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return bpmn;
} }
/** /**
...@@ -460,8 +427,8 @@ public class DELogicAspect { ...@@ -460,8 +427,8 @@ public class DELogicAspect {
* @param action * @param action
* @return * @return
*/ */
private boolean isValid(File bpmn, Object entity, Object action) { private boolean isValid(Resource bpmn, Object entity, Object action) {
String logicId = String.format("%s%s%s", entity.getClass().getSimpleName(), action, bpmn.getName()).toLowerCase(); String logicId = String.format("%s%s%s", entity.getClass().getSimpleName(), action, bpmn.getFilename()).toLowerCase();
if (validLogic.containsKey(logicId)) { if (validLogic.containsKey(logicId)) {
return true; return true;
} else { } else {
......
...@@ -27,11 +27,6 @@ public class DELogic implements Serializable { ...@@ -27,11 +27,6 @@ public class DELogic implements Serializable {
Process process; Process process;
KieContainer container; KieContainer container;
List<DELogic> refLogic; List<DELogic> refLogic;
<#comment>非动态系统</#comment>
<#if !isDynaSys>
List<File> refRuleFiles;
<#else>
List<Resource> refRuleFiles; List<Resource> refRuleFiles;
</#if>
String md5; String md5;
} }
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册