# 插件開發說明
插件開發手冊
## **一、說明**
在實際項目應用當中,YFE前置系統內置的報文組件可能滿足不了某些報文解析要求,此時項目實施人員可以開發流程插件對特殊報文進行處理;在前置流程收到報文后調用插件進行解包,在返回應答報文前調用插件進行組包報文
## **二、插件開發**
插件開發本質上是編寫一個業務處理jar包,放置到指定位置,然后在流程配置中配置對應的類路徑即可使用。
### 1、新建Java項目
新建一個普通的Java project即可。
如果新建的是maven項目,要注意最后打包jar不能是運行包,maven依賴三方庫注意單獨拿出來,方面后續放到plugin目錄
建議使用普通Java project
如果有之前創建的插件項目,亦可使用
### 2、編寫業務處理邏輯
在項目新建一個Java class。類名按業務自行定義。類的結構如下。
```
<pre class="calibre29">```
package com<span class="token1">.</span>ylink<span class="token1">.</span>plugin<span class="token1">.</span>demo<span class="token1">;</span>
import java<span class="token1">.</span>util<span class="token1">.</span>HashMap<span class="token1">;</span>
import java<span class="token1">.</span>util<span class="token1">.</span>Map<span class="token1">;</span>
import org<span class="token1">.</span>slf4j<span class="token1">.</span>Logger<span class="token1">;</span>
import cn<span class="token1">.</span>hutool<span class="token1">.</span>core<span class="token1">.</span>date<span class="token1">.</span>DateUtil<span class="token1">;</span>
public class <span class="token5">DemoPlugin</span> <span class="token1">{</span>
<span class="token6">/*
* 日志對象,由通訊服務自動注入
*/</span>
public static Logger log<span class="token1">;</span>
<span class="token6">/**
* 初始化方法
*
* @param cfgs 當前接入配置
*/</span>
public static void <span class="token5">initEnv</span><span class="token1">(</span>Map cfgs<span class="token1">)</span> <span class="token1">{</span>
<span class="token1">}</span>
<span class="token6">/**
* 插件具體執行業務處理 <br/>
* 方法必須是static的 <br/>
* 方法的入參的順序和數量是固定的<br/>
*
* @param tranCode 交易碼
* @param inObj 傳入參數。有流程配置時指定
* @return 返回值無約束,根據業務執行定義
* @throws Exception
*/</span>
public static Map<span class="token"><</span>String<span class="token1">,</span> Object<span class="token">></span> <span class="token5">test</span><span class="token1">(</span>String tranCode<span class="token1">,</span> Object inObj<span class="token1">)</span> throws Exception <span class="token1">{</span>
log<span class="token1">.</span><span class="token5">info</span><span class="token1">(</span><span class="token3">"客戶化插件調用開始。。。。。。。"</span><span class="token1">)</span><span class="token1">;</span>
log<span class="token1">.</span><span class="token5">info</span><span class="token1">(</span><span class="token3">"參數 1 交易碼={}"</span><span class="token1">,</span> tranCode<span class="token1">)</span><span class="token1">;</span>
log<span class="token1">.</span><span class="token5">info</span><span class="token1">(</span><span class="token3">"參數 2 配置參數=={}"</span><span class="token1">,</span> inObj<span class="token1">)</span><span class="token1">;</span>
<span class="token6">// TODO 1、參數校驗</span>
<span class="token6">// TODO 2、業務處理</span>
Map<span class="token"><</span>String<span class="token1">,</span> Object<span class="token">></span> retMap <span class="token">=</span> <span class="token4">new</span> <span class="token5">HashMap</span><span class="token"><</span>String<span class="token1">,</span> Object<span class="token">></span><span class="token1">(</span><span class="token1">)</span><span class="token1">;</span>
retMap<span class="token1">.</span><span class="token5">put</span><span class="token1">(</span><span class="token3">"tranCode"</span><span class="token1">,</span> tranCode<span class="token1">)</span><span class="token1">;</span>
retMap<span class="token1">.</span><span class="token5">put</span><span class="token1">(</span><span class="token3">"date"</span><span class="token1">,</span> DateUtil<span class="token1">.</span><span class="token5">now</span><span class="token1">(</span><span class="token1">)</span><span class="token1">)</span><span class="token1">;</span>
<span class="token4">return</span> retMap<span class="token1">;</span>
<span class="token1">}</span>
<span class="token1">}</span>
```
```
- log 日志對象,固定名稱,不可改,為org.slf4j.Logger 對象
- 類內為靜態方法
- 方法的入參是固定的格式,不能修改
- 方法返回值可以根據業務自行定義
- 插件中使用到三方庫,直接放到項目的lib文件夾,設置classpth即可
### 3、導出jar
Eclipse中直接在項目中右鍵 export Jar file即可:
- 導出類型選擇 Java-> JAR file

- 導出文件只選擇src即可。Lib目錄無需導出

## **三、部署、配置**
### 1、部署
將導出的jar放到通訊服務的根目錄的plugin文件夾(如沒有,新建一個):

- plugin文件夾和項目運行包同級
- 如果插件中使用的三方庫(插件項目lib目錄jar)在通訊服務中沒有引入,需要將三方jar也放到plugin目錄下
### 2、配置
流程接入配置:根據業務實際流程在相應位置增加 【插件調用】節點。

配置插件信息:類名+方法名

- 類名必須是類的全路徑名稱,通訊服務根據類名反射獲取類實例
- 方法名必須和插件類一致,通訊按照以下規則獲取方法調用:getMethod(strMethod, String.class, Object.class)