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

切面逻辑优化

上级 c8423bf6
...@@ -57,13 +57,22 @@ import java.util.regex.Pattern; ...@@ -57,13 +57,22 @@ import java.util.regex.Pattern;
@Slf4j @Slf4j
public class DELogicAspect { public class DELogicAspect {
@Value("${r'${ibiz.filePath:D:/app/file/}'}") public enum LogicMode {
private String fileRoot; /**
* 本地
*/
LOCAL,
/**
* 远程
*/
REMOTE
}
private static BpmnXMLConverter bpmnXMLConverter = new BpmnXMLConverter(); private static BpmnXMLConverter bpmnXMLConverter = new BpmnXMLConverter();
private final ExpressionParser parser = new SpelExpressionParser(); private final ExpressionParser parser = new SpelExpressionParser();
private ConcurrentMap<String, DELogic> deLogicMap = new ConcurrentHashMap<>(); private ConcurrentMap<String, DELogic> deLogicMap = new ConcurrentHashMap<>();
private final String DEFAULT_MODULE_PACKAGE = "[\\w+\\.]\\.core.(\\w+)\\.domain"; private final String DEFAULT_MODULE_PACKAGE = "[\\w+\\.]\\.core.(\\w+)\\.domain";
@Value("${r'${ibiz.dynamicMode:false}'}") @Value("${r'${ibiz.dynamicMode:true}'}")
private boolean dynamicMode; private boolean dynamicMode;
@Value("${r'${ibiz.dynamic.path:/app/file/dynamicmodel/}'}") @Value("${r'${ibiz.dynamic.path:/app/file/dynamicmodel/}'}")
private String dynamicPath; private String dynamicPath;
...@@ -108,13 +117,13 @@ public class DELogicAspect { ...@@ -108,13 +117,13 @@ public class DELogicAspect {
if (dynamicMode) { if (dynamicMode) {
bpmnFile = getRemoteModel(getDEModule(entity), entity.getClass().getSimpleName(), action, "before"); bpmnFile = getRemoteModel(getDEModule(entity), entity.getClass().getSimpleName(), action, "before");
if (bpmnFile.exists()) { if (bpmnFile.exists()) {
executeLogic(bpmnFile, entity); executeLogic(bpmnFile, entity, LogicMode.REMOTE);
return; return;
} }
} }
bpmnFile = getLocalModel(entity.getClass().getSimpleName(), action, "before"); bpmnFile = getLocalModel(entity.getClass().getSimpleName(), action, "before");
if (bpmnFile != null && bpmnFile.exists()) { if (bpmnFile != null && bpmnFile.exists()) {
executeLogic(bpmnFile, entity); executeLogic(bpmnFile, entity, LogicMode.LOCAL);
} }
} }
...@@ -129,13 +138,13 @@ public class DELogicAspect { ...@@ -129,13 +138,13 @@ public class DELogicAspect {
if (dynamicMode) { if (dynamicMode) {
bpmnFile = getRemoteModel(getDEModule(entity), entity.getClass().getSimpleName(), action, "after"); bpmnFile = getRemoteModel(getDEModule(entity), entity.getClass().getSimpleName(), action, "after");
if (bpmnFile.exists()) { if (bpmnFile.exists()) {
executeLogic(bpmnFile, entity); executeLogic(bpmnFile, entity, LogicMode.REMOTE);
return; return;
} }
} }
bpmnFile = getLocalModel(entity.getClass().getSimpleName(), action, "after"); bpmnFile = getLocalModel(entity.getClass().getSimpleName(), action, "after");
if (bpmnFile != null && bpmnFile.exists()) { if (bpmnFile != null && bpmnFile.exists()) {
executeLogic(bpmnFile, entity); executeLogic(bpmnFile, entity, LogicMode.LOCAL);
} }
} }
...@@ -150,13 +159,13 @@ public class DELogicAspect { ...@@ -150,13 +159,13 @@ public class DELogicAspect {
if (dynamicMode) { if (dynamicMode) {
bpmnFile = getRemoteModel(getDEModule(entity), entity.getClass().getSimpleName(), action, "exec"); bpmnFile = getRemoteModel(getDEModule(entity), entity.getClass().getSimpleName(), action, "exec");
if (bpmnFile.exists()) { if (bpmnFile.exists()) {
executeLogic(bpmnFile, entity); executeLogic(bpmnFile, entity, LogicMode.REMOTE);
return; return;
} }
} }
bpmnFile = getLocalModel(entity.getClass().getSimpleName(), action, "exec"); bpmnFile = getLocalModel(entity.getClass().getSimpleName(), action, "exec");
if (bpmnFile != null && bpmnFile.exists()) { if (bpmnFile != null && bpmnFile.exists()) {
executeLogic(bpmnFile, entity); executeLogic(bpmnFile, entity, LogicMode.LOCAL);
} }
} }
...@@ -166,10 +175,10 @@ public class DELogicAspect { ...@@ -166,10 +175,10 @@ public class DELogicAspect {
* @param bpmnFile * @param bpmnFile
* @param entity * @param entity
*/ */
private void executeLogic(File bpmnFile, Object entity) { private void executeLogic(File bpmnFile, Object entity, LogicMode logicMode) {
log.debug("开始执行实体处理逻辑[{}]", bpmnFile.getName()); log.debug("开始执行实体处理逻辑[{}]", bpmnFile.getName());
String bpmnId = DigestUtils.md5DigestAsHex(bpmnFile.getName().getBytes()); String bpmnId = DigestUtils.md5DigestAsHex(bpmnFile.getName().getBytes());
DELogic logic = getDELogic(bpmnFile, entity); DELogic logic = getDELogic(bpmnFile, entity, logicMode);
if (logic == null) { if (logic == null) {
return; return;
} }
...@@ -255,7 +264,7 @@ public class DELogicAspect { ...@@ -255,7 +264,7 @@ public class DELogicAspect {
* @return * @return
*/ */
@SneakyThrows @SneakyThrows
private DELogic getDELogic(File bpmnFile, Object entity) { private DELogic getDELogic(File bpmnFile, Object entity, LogicMode logicMode) {
DELogic logic = null; DELogic logic = null;
XMLStreamReader reader = null; XMLStreamReader reader = null;
InputStream bpmn = null; InputStream bpmn = null;
...@@ -283,8 +292,8 @@ public class DELogicAspect { ...@@ -283,8 +292,8 @@ 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();
File subBpmnFile = getSubBpmn(getDEModule(entity), entity.getClass().getSimpleName(), bpmnFileName); File subBpmnFile = getSubBpmn(getDEModule(entity), entity.getClass().getSimpleName(), bpmnFileName, logicMode);
DELogic refLogic = getDELogic(subBpmnFile, entity); DELogic refLogic = getDELogic(subBpmnFile, entity, logicMode);
if (refLogic != null) { if (refLogic != null) {
refLogics.add(refLogic); refLogics.add(refLogic);
if (!ObjectUtils.isEmpty(refLogic.getRefRuleFiles())) { if (!ObjectUtils.isEmpty(refLogic.getRefRuleFiles())) {
...@@ -360,7 +369,7 @@ public class DELogicAspect { ...@@ -360,7 +369,7 @@ public class DELogicAspect {
* @return * @return
*/ */
private File getLocalModel(String entity, String action, String actionLogic) { private File getLocalModel(String entity, String action, String actionLogic) {
String logicName = String.format("PSDEACTION.json.%s.bpmn", actionLogic); String logicName = String.format("%s.bpmn", actionLogic);
String filePath = File.separator + "rules" + File.separator + entity.toLowerCase() + File.separator + action + File.separator + logicName; String filePath = File.separator + "rules" + File.separator + entity.toLowerCase() + File.separator + action + File.separator + logicName;
URL url = this.getClass().getResource(filePath.replace("\\", "/")); URL url = this.getClass().getResource(filePath.replace("\\", "/"));
return ObjectUtils.isEmpty(url) ? null : new File(url.getPath()); return ObjectUtils.isEmpty(url) ? null : new File(url.getPath());
...@@ -388,8 +397,8 @@ public class DELogicAspect { ...@@ -388,8 +397,8 @@ public class DELogicAspect {
* @param logicName * @param logicName
* @return * @return
*/ */
private File getSubBpmn(String module, String entity, String logicName) { private File getSubBpmn(String module, String entity, String logicName, LogicMode logicMode) {
if (dynamicMode) { if (LogicMode.REMOTE.equals(logicMode)) {
return new File(dynamicPath + File.separator + systemId + File.separator + "PSMODULES" + File.separator + module + File.separator + "PSDATAENTITIES" + File.separator + entity + File.separator + "PSDELOGICS" + File.separator + logicName + File.separator + "PSDELOGIC.json.bpmn"); return new File(dynamicPath + File.separator + systemId + File.separator + "PSMODULES" + File.separator + module + File.separator + "PSDATAENTITIES" + File.separator + entity + File.separator + "PSDELOGICS" + File.separator + logicName + File.separator + "PSDELOGIC.json.bpmn");
} else { } else {
String filePath = String.format("/rules/%s%sRuleFlow.bpmn", entity, logicName); String filePath = String.format("/rules/%s%sRuleFlow.bpmn", entity, logicName);
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册