title: ランレイ全局インターセプトプロセスノード
date: 2021-09-06 15:16:00
comment: false
toc: true
category:
- ランドレイ
tags: - ランドレイ
- 全局
- インターセプト
- プロセス
- ノード
- リスナー
spring.xml#
spring.xml
の完全な内容は次のとおりです:
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean
id="beanName"
class="packageName"/>
</beans>
plugin.xml#
plugin.xml
の完全な内容は次のとおりです:
<?xml version="1.0" encoding="UTF-8"?>
<plugin
xmlns="http://www.example.org/plugin-config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/plugin-config ../../plugin.xsd ">
<!--SMS承認者ノードイベント-->
<extension
point="com.landray.kmss.lbpm.engine.event">
<item name="listener">
<param name="unid" value="kmImissiveSmsMainListener"/>
<param name="messageKey" value=""/>
<param name="eventTypes" value="manualNodeHanlderGetterEvent"/>
<param name="listener" value="kmImissiveSmsMainListener"/>
<param name="enforce" value="true"/>
</item>
</extension>
</plugin>
逆に対応する Bean
を構築することができます。
Listener#
完全なコードは以下の通りです:
package com.landray.kmss.jtt.sms.listener;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.landray.kmss.common.model.IBaseModel;
import com.landray.kmss.km.imissive.model.KmImissiveMain;
import com.landray.kmss.sys.lbpm.engine.builder.ManualNodeDefinition;
import com.landray.kmss.sys.lbpm.engine.builder.ProcessDefinition;
import com.landray.kmss.sys.lbpm.engine.manager.event.EventExecutionContext;
import com.landray.kmss.sys.lbpm.engine.manager.event.IEventListener;
import com.landray.kmss.sys.lbpmservice.node.support.ManualNodeHanlderGetterEvent;
import com.landray.kmss.sys.organization.interfaces.ISysOrgCoreService;
import com.landray.kmss.sys.organization.model.SysOrgPerson;
import com.landray.kmss.sys.right.interfaces.ExtendAuthModel;
import com.landray.kmss.util.SpringBeanUtil;
import com.landray.kmss.util.UserUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.util.ArrayList;
import java.util.List;
public class GlobalSmsListener implements IEventListener {
private static final Log log = LogFactory.getLog(GlobalSmsListener.class);
@Override
public void handleEvent(EventExecutionContext execution, String s) throws Exception {
ManualNodeHanlderGetterEvent manualNodeHanlderGetterEvent = (ManualNodeHanlderGetterEvent) execution.getEvent();
ManualNodeDefinition manualNodeDefinition = manualNodeHanlderGetterEvent.getManualNodeDefinition();
log.info("HandlerIdsタイプ: " + JSONUtil.toJsonStr(manualNodeDefinition.getHandlerSelectType()));
ProcessDefinition processDefinition = manualNodeDefinition.getProcessDefinition();
// Model情報
IBaseModel mainModel = execution.getMainModel();
String notifyType = processDefinition.getNotifyType();
boolean classResult = mainModel instanceof KmImissiveMain;
if (!classResult) {
return;
}
ExtendAuthModel kmImissiveMain = Convert.convert(ExtendAuthModel.class, mainModel);
String docSubject = kmImissiveMain.getDocSubject();
log.info("予備情報-docSubject:" + docSubject);
final String mobileStr = "mobile";
log.info("SMSマッチ-通知タイプ:" + notifyType);
log.info("SMSマッチ:" + StrUtil.containsAny(notifyType, mobileStr));
if (StrUtil.containsAny(notifyType, mobileStr)) {
String handlerIds = manualNodeDefinition.getHandlerIds();
log.info("handlerIdsマッチ:" + JSONUtil.toJsonStr(handlerIds));
List<String> userIdList = StrUtil.splitTrim(handlerIds, ';');
ISysOrgCoreService sysOrgCoreService =
(ISysOrgCoreService) SpringBeanUtil.getBean("sysOrgCoreService");
String[] userIdArray = ArrayUtil.toArray(userIdList, String.class);
log.info("userIdArrayマッチ:" + JSONUtil.toJsonStr(userIdArray));
try {
List byPrimaryKeys = sysOrgCoreService.findByPrimaryKeys(userIdArray);
// ポジションを具体的な人に解析しようとする
List expandToPerson = sysOrgCoreService.expandToPerson(byPrimaryKeys);
// 一般的なポジションを解析しようとする
List parseSysOrgRole = sysOrgCoreService.parseSysOrgRole(byPrimaryKeys,
sysOrgCoreService.findByPrimaryKey(
UserUtil.getUser().getFdId()));
// 集合に追加
List result = new ArrayList(2 * (expandToPerson.size() + parseSysOrgRole.size()));
result.addAll(expandToPerson);
result.addAll(parseSysOrgRole);
if (CollUtil.isNotEmpty(result)) {
for (Object itemObj : result) {
try {
SysOrgPerson user = Convert.convert(SysOrgPerson.class, itemObj);
String fdName = user.getFdName();
String fdMobileNo = user.getFdMobileNo();
if (StrUtil.isBlank(fdMobileNo)) {
log.error("受取人 [" + fdName + "] の携帯番号が空です、送信しません!");
continue;
}
} catch (Exception e) {
log.error("情報の送信に失敗しました、受取対象が正しくない可能性があります。");
log.error(itemObj.toString());
return;
}
}
}
} catch (Exception e) {
log.error(e.getMessage());
}
} else {
log.debug("待機中の内容がSMSと一致しないため、送信しません!");
}
}
}
検証#
プロセスに関連するモジュールはすべてこのコードをトリガーしてリスニングを行い、コード内では手動で公文モジュールのみを処理するように書かれています。また、プロセスノードは SMS 通知方法を設定する必要があります。