228 lines
7.0 KiB
Java
228 lines
7.0 KiB
Java
package com.base.util;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
import com.amarsoft.app.alarm.AlarmMessage;
|
|
import com.amarsoft.app.alarm.CheckItem;
|
|
import com.amarsoft.app.alarm.DefaultCheckItemRunner;
|
|
import com.amarsoft.app.alarm.DefaultScenarioContextLoader;
|
|
import com.amarsoft.app.alarm.ItemGroup;
|
|
import com.amarsoft.app.alarm.ScenarioContext;
|
|
import com.amarsoft.app.alarm.ScenarioContextLoader;
|
|
import com.amarsoft.app.alarm.StringTool;
|
|
import com.amarsoft.are.ARE;
|
|
import com.amarsoft.are.jbo.JBOTransaction;
|
|
import com.amarsoft.are.lang.StringX;
|
|
import com.amarsoft.awe.util.ObjectConverts;
|
|
import com.amarsoft.awe.util.Transaction;
|
|
import com.tenwa.flow.warning.Warning;
|
|
|
|
public class ScenarioUtil {
|
|
List<Map<String, Object>> list;
|
|
String sMsg;
|
|
|
|
public String getsMsg() {
|
|
return sMsg;
|
|
}
|
|
|
|
public List<Map<String, Object>> getList() {
|
|
return list;
|
|
}
|
|
|
|
public boolean autoRiskScan(String sScenarioID, String sBizArgs,
|
|
String sSubTypeNo, JBOTransaction tx, Transaction sqlca)
|
|
throws Exception {
|
|
|
|
boolean sReturn = true;
|
|
if (StringX.isSpace(sScenarioID)) {
|
|
sMsg = "sScenarioID不能为空!";
|
|
return false;
|
|
}
|
|
if (StringX.isSpace(sBizArgs)) {
|
|
sMsg = "sBizArgs不能为空!";
|
|
return false;
|
|
}
|
|
|
|
Warning warning = new Warning();
|
|
warning.setScenarioid(sScenarioID);
|
|
warning.setSubTypeNo(sSubTypeNo);
|
|
String sRes = warning.selectByScenarioid(tx);
|
|
|
|
String autoCommit = "false";
|
|
if ("failed".equals(sRes.toLowerCase())) {
|
|
sMsg = "无需风险预警!";
|
|
return true;
|
|
} else {
|
|
if (sBizArgs.indexOf("isAutoCommit=true") >= 0) {
|
|
autoCommit = "true";
|
|
}
|
|
// 获得组件参数
|
|
System.out.println(sBizArgs);
|
|
sBizArgs = sBizArgs.replace("&", ",");
|
|
ARE.getLog().debug("传入业务参数:" + sBizArgs);
|
|
// 加载器
|
|
ScenarioContextLoader loader = new DefaultScenarioContextLoader();
|
|
((DefaultScenarioContextLoader) loader).init(sqlca, sScenarioID,
|
|
sBizArgs, sSubTypeNo);
|
|
ScenarioContext context = loader.getContext(); // 获取下文容器
|
|
context.setCheckItemRunner(new DefaultCheckItemRunner()); // 模型运行器
|
|
String scenarioSerializable = ObjectConverts.getString(context); // 序列化
|
|
|
|
List<ItemGroup> gList0 = context.getScenario().getGroupList();
|
|
List<ItemGroup> gList = new ArrayList<ItemGroup>();
|
|
|
|
// 根据运行条件进行预处理,分组下检查项检查条件均没通过,则不显示该分组
|
|
for (int i = 0; i < gList0.size(); i++) {
|
|
ItemGroup group = gList0.get(i);
|
|
List<CheckItem> ckList0 = group.getCheckItemList();
|
|
List<CheckItem> ckList1 = new ArrayList<CheckItem>(); // 存放检查通过的
|
|
for (int j = 0; j < ckList0.size(); j++) {
|
|
CheckItem ckItem = ckList0.get(j);
|
|
String sCondition = ckItem.getRunCondition(); // 运行条件
|
|
if (sCondition != null && sCondition.length() > 0) {
|
|
boolean bCondition = StringTool.runAmarScript(sqlca,
|
|
sCondition, context.getParameter())
|
|
.booleanValue();
|
|
if (!bCondition)
|
|
continue;
|
|
else
|
|
ckList1.add(ckItem);
|
|
} else {
|
|
ckList1.add(ckItem);
|
|
}
|
|
}
|
|
if (ckList1.size() > 0) { // 重组分组
|
|
group.getCheckItemList().clear();
|
|
group.getCheckItemList().addAll(ckList1);
|
|
gList.add(group);
|
|
}
|
|
}
|
|
for (int i = 0; i < gList.size(); i++) {
|
|
ItemGroup group = gList.get(i);
|
|
List<CheckItem> ckList = group.getCheckItemList();
|
|
String sGroupId = group.getGroupID();
|
|
String sGroupName = group.getGroupName();
|
|
list = new ArrayList<Map<String, Object>>();
|
|
for (int j = 0; j < ckList.size(); j++) {
|
|
CheckItem ckItem = ckList.get(j);
|
|
// String sItemId = ckItem.getItemID();
|
|
String viewerScript = ckItem.getBizViewer();
|
|
if (viewerScript == null)
|
|
viewerScript = "";
|
|
else
|
|
viewerScript = StringTool.pretreat(
|
|
context.getParameter(), viewerScript);
|
|
|
|
if (ckItem.getItemID().equals("0028")) {
|
|
autoCommit="fales";
|
|
continue;
|
|
} else {
|
|
String sItemName = ckItem.getItemName();
|
|
String sItemId = ckItem.getItemID();
|
|
try {
|
|
Map<String, Object> map = alarmModelInvoker(
|
|
sGroupId, sItemId, sqlca, tx,
|
|
scenarioSerializable);
|
|
map.put("sItemName", sItemName);
|
|
map.put("sGroupName", sGroupName);
|
|
list.add(map);
|
|
if (map.get("sStatus") == null ? false
|
|
: (boolean) map.get("sStatus") == false) {
|
|
sReturn = false;
|
|
}
|
|
} catch (Exception e) {
|
|
ARE.getLog().error(e);
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return sReturn;
|
|
}
|
|
|
|
@SuppressWarnings("deprecation")
|
|
public Map<String, Object> alarmModelInvoker(String sGroupId,
|
|
String sItemId, Transaction Sqlca, JBOTransaction tx,
|
|
String serializableScenario) throws Exception {
|
|
Map<String, Object> map = new HashMap<String, Object>();
|
|
try {
|
|
if (serializableScenario == null)
|
|
serializableScenario = "";
|
|
|
|
if (serializableScenario.length() == 0)
|
|
throw new Exception("场景对象获取错误!");
|
|
try {
|
|
|
|
ScenarioContext context = (ScenarioContext) ObjectConverts
|
|
.getObject(serializableScenario);
|
|
|
|
CheckItem chItem = context.getScenario().getCheckItem(sGroupId,
|
|
sItemId);
|
|
|
|
String sPassMessage = chItem.getPassMessage();
|
|
String sNoPassMessage = chItem.getNoPassMessage();
|
|
if (sPassMessage == null)
|
|
sPassMessage = "";
|
|
if (sNoPassMessage == null)
|
|
sNoPassMessage = "";
|
|
|
|
// AlarmMessage am = (AlarmMessage) context.getCheckItemRunner()
|
|
// .run(Sqlca, chItem);
|
|
AlarmMessage am = (AlarmMessage) context.getCheckItemRunner()
|
|
.run(Sqlca, chItem);
|
|
StringBuffer sbMessage = new StringBuffer();
|
|
String sMessage = "";
|
|
for (int j = 0; j < am.size(); j++) {
|
|
sbMessage.append(am.getMessage(j) + "[~`~]");
|
|
}
|
|
if (sbMessage.length() > 5) {
|
|
sMessage = sbMessage.substring(0, sbMessage.length() - 5);
|
|
} else {
|
|
sMessage = "";
|
|
}
|
|
|
|
// 如果执行后,返回的消息为空
|
|
// 1.如果通过,则消息取配置的通过的提示消息
|
|
// 2.如果未通过,则取配置的未通过的提示消息
|
|
if (sMessage.equals("")) {
|
|
if (am.isPass()) {
|
|
sMessage = sPassMessage;
|
|
} else {
|
|
sMessage = sNoPassMessage;
|
|
}
|
|
}
|
|
// Thread.sleep(200);
|
|
// 生成JSON
|
|
boolean sStatus = am.isPass();
|
|
String sNoPassDeal = am.getNoPassDeal();
|
|
String sMsg = sMessage;
|
|
map.put("sStatus", sStatus);
|
|
map.put("sNoPassDeal", sNoPassDeal);
|
|
map.put("sMsg", sMsg);
|
|
ARE.getLog().debug(
|
|
"status:" + am.isPass() + "|message:" + sMessage);
|
|
} catch (Exception e) {
|
|
ARE.getLog().error(e);
|
|
throw e;
|
|
}
|
|
} catch (Exception e) {
|
|
if (Sqlca != null)
|
|
Sqlca.getConnection().rollback();
|
|
e.printStackTrace();
|
|
ARE.getLog().error(e.getMessage(), e);
|
|
throw e;
|
|
} finally {
|
|
if (Sqlca != null) {
|
|
Sqlca.getConnection().commit();
|
|
Sqlca.disConnect();
|
|
Sqlca = null;
|
|
}
|
|
}
|
|
return map;
|
|
}
|
|
}
|