package com.vci.server.query.service;
|
|
import java.io.BufferedReader;
|
import java.io.IOException;
|
import java.io.Reader;
|
import java.lang.reflect.Field;
|
import java.math.BigDecimal;
|
import java.sql.Clob;
|
import java.sql.SQLException;
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
import java.util.HashMap;
|
import java.util.HashSet;
|
import java.util.Iterator;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Set;
|
import java.util.concurrent.Callable;
|
import java.util.concurrent.ExecutorCompletionService;
|
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.Executors;
|
|
import org.apache.commons.lang3.StringUtils;
|
import org.hibernate.SQLQuery;
|
import org.hibernate.Session;
|
import org.hibernate.transform.Transformers;
|
import org.omg.CORBA.IntHolder;
|
|
import com.vci.omd.constants.BusinessConstants;
|
import com.vci.omd.constants.LinkConstants;
|
import com.vci.omd.constants.SystemAttribute;
|
import com.vci.server.base.exception.ExceptionLocalHandler;
|
import com.vci.server.base.persistence.dao.HibernateSessionFactory;
|
import com.vci.server.base.utility.OQueryHelper;
|
import com.vci.server.base.utility.OmdHelper;
|
import com.vci.server.cache.OMCacheProvider;
|
import com.vci.server.query.parsers.BtmRefQueryParser;
|
import com.vci.server.query.parsers.Parser;
|
import com.vci.server.query.parsers.ParserForOneLevel;
|
import com.vci.server.query.util.ServerTool;
|
import com.vci.corba.omd.atm.AttPoolServicePrx;
|
import com.vci.corba.omd.atm.AttribItem;
|
import com.vci.corba.omd.data.AttributeValue;
|
import com.vci.corba.omd.data.BusinessObject;
|
import com.vci.corba.omd.data.LinkObject;
|
import com.vci.corba.omd.ltm.LinkType;
|
import com.vci.corba.query.data.BOAndLO;
|
import com.vci.corba.query.data.BtmRefQueryOption;
|
import com.vci.common.exception.VciExceptionTool;
|
import com.vci.common.log.ServerWithLog4j;
|
import com.vci.common.qt.object.QTConstants;
|
import com.vci.common.qt.object.QueryTemplate;
|
import com.vci.common.qt.object.Symbol;
|
import com.vci.common.utility.ObjectUtility;
|
import com.vci.corba.common.VCIError;
|
|
/**
|
* 创建link的业务类型视图的查询策略 从linkTable和btmView查询,递归查询时不需要二次查询。
|
*
|
* @author Administrator
|
*
|
*/
|
public class QueryObjectService {
|
private static QueryObjectService queryObj = null;
|
private int nCpu = Runtime.getRuntime().availableProcessors();
|
|
private VCIError getLocalVciError(String key, Throwable e) {
|
VCIError error = new VCIError(key,
|
new String[] { VciExceptionTool.getExceptionStr(e), VciExceptionTool.getExceptionDetail(e) });
|
VCIError rsError = ExceptionLocalHandler.getInstance().getLocalString(error, "PLMOQ");
|
return rsError;
|
}
|
|
public static QueryObjectService getInstance() {
|
if (queryObj == null) {
|
queryObj = new QueryObjectService();
|
}
|
return queryObj;
|
}
|
|
/**
|
* 解析QueryTemplate 为sql 执行sql, 返回结果
|
*
|
* @param queryTemplate
|
* @return
|
* @throws Throwable
|
*/
|
public List<BusinessObject> findBtmObjects(QueryTemplate queryTemplate) throws Throwable {
|
return this.findBtmObjectsV2(queryTemplate, new IntHolder(0));
|
}
|
|
/**
|
* 解析QueryTemplate 为sql 执行sql, 返回结果 V2版
|
*
|
* @param queryTemplate
|
* @param count 查询结果的总数,通过 count.value 获取
|
* @return 查询到的业务类型数据 <code>com.vci.corba.omd.BusinessObject</code>
|
* @since v1.1 2017.08.31
|
* @see com.vci.corba.omd.data.BusinessObject
|
* @throws Throwable
|
*/
|
public List<BusinessObject> findBtmObjectsV2(QueryTemplate queryTemplate, IntHolder count) throws Throwable {
|
List<BtmRefQueryOption> refOpts = new ArrayList<BtmRefQueryOption>();
|
List<String> clauseList = queryTemplate.getClauseList();
|
// 当clauseList中含有*时, 应当解析为BtmObject的全部属性
|
if (clauseList.contains("*") || queryTemplate.isQueryChildren()) {
|
clauseList = getAllAbNamesForBtm(queryTemplate.getBtmType());
|
} else if (clauseList.size() > 0) {
|
// add by xchao 2017.12.20 begin
|
boolean hasRefQuery = false;
|
List<String> list = queryTemplate.getClauseList();
|
Iterator<String> its = list.iterator();
|
while (its.hasNext()) {
|
String clause = its.next();
|
if (clause.indexOf(".") >= 0) {
|
if (!hasRefQuery) {
|
hasRefQuery = true;
|
}
|
String[] kvs = clause.split("\\.");
|
int len = kvs.length;
|
if (len == 2) {
|
// 一层参照 a.b
|
// 第二个参数给空,是此不处从属性中查其参数的业务类型,由下下专用掊中进行处理
|
BtmRefQueryOption refOpt = new BtmRefQueryOption(kvs[0], "", new String[] { kvs[1] });
|
refOpts.add(refOpt);
|
} else if (len == 3) {
|
// 二层参照 a.b.c
|
// TODO
|
} else {
|
// 三层以的参照 a.b.c.d a.b.c.d.e
|
// TODO
|
}
|
its.remove();
|
}
|
}
|
clauseList = list;
|
queryTemplate.setClauseList(clauseList);
|
if (hasRefQuery) {
|
return this.findBtmObjectsV3(queryTemplate, count, refOpts.toArray(new BtmRefQueryOption[0]));
|
}
|
// add by xchao 2017.12.20 end
|
|
clauseList = getSelectedAbNamesForBtm(queryTemplate.getBtmType(), queryTemplate.getClauseList());
|
}
|
Parser parser = new Parser(queryTemplate);
|
// add by xchao 2017.09.04 BEGIN
|
// 添加总数特殊标识
|
clauseList.add(QTConstants.COUNT_OVER_ALIAS);
|
// add by xchao 2017.09.04 END
|
queryTemplate.setClauseList(clauseList);
|
String sql = parser.parseToSql();
|
// 解析sql后, 去掉clauseList中加的表名
|
clauseList = removeTableName(clauseList);
|
List<BusinessObject> objList = executeSqlForBtmAndClauseV2(clauseList, sql, count, parser);
|
return objList;
|
}
|
|
/**
|
* 解析QueryTemplate 为sql 执行sql, 返回结果 V3版:基于传入指定参照查询规则进行查询参照对象数据
|
*
|
* @param queryTemplate
|
* @param count 查询结果的总数,通过 count.value 获取
|
* @param btmRefQueryOptions 参照查询选项参数
|
* @return 查询到的业务类型数据 <code>com.vci.corba.omd.BusinessObject</code>
|
* @since 2017.12.20
|
* @author xiongchao
|
* @see com.vci.corba.omd.data.BusinessObject
|
* @throws Throwable
|
*/
|
public List<BusinessObject> findBtmObjectsV3(QueryTemplate queryTemplate, IntHolder count,
|
BtmRefQueryOption[] btmRefQueryOptions) throws Throwable {
|
final List<String> joinOnTables = new ArrayList<String>();
|
final Map<String, String> refBtmNameMap = new HashMap<String, String>();
|
Map<String, Integer> refSameBtmNameMap = new HashMap<String, Integer>();
|
Map<String, Set<String>> refSameBtmNameAttrMap = new HashMap<String, Set<String>>();
|
// 参照业务类型查询列与别名之间的映射
|
final Map<String, String> refBtmQueryAttrToAliasMap = new HashMap<String, String>();
|
final Map<String, String> refBtmQueryAliasToAttrMap = new HashMap<String, String>();
|
// 不需要表名的clause
|
final Map<String, String> dotRemoveTableNameClauseMap = new HashMap<String, String>();
|
|
List<String> clauseList = queryTemplate.getClauseList();
|
// 当clauseList中含有*时, 应当解析为BtmObject的全部属性
|
if (clauseList.contains("*") || queryTemplate.isQueryChildren()) {
|
return this.findBtmObjectsV2(queryTemplate, count);
|
// clauseList = getAllAbNamesForBtm(queryTemplate.getBtmType());
|
} else if (clauseList.size() > 0) {
|
String btmTableName = OmdHelper.getBTTableName(queryTemplate.getBtmType());
|
List<String> list = queryTemplate.getClauseList();
|
// 对 参照属性进行处理
|
for (BtmRefQueryOption refOpt : btmRefQueryOptions) {
|
if (StringUtils.isEmpty(refOpt.attrName)) {
|
continue;
|
}
|
// 参照的业务类型为空
|
if (StringUtils.isEmpty(refOpt.refBtmName)) {
|
// 根据属性,从属性池关系中查出参照的业务类型
|
String refBtmName = getAttrRefBtmName(refOpt.attrName);
|
if (StringUtils.isEmpty(refBtmName)) {
|
continue;
|
}
|
refOpt.refBtmName = refBtmName;
|
}
|
if (refOpt.refBtmQueryAttrs.length == 0) {
|
continue;
|
}
|
//
|
String refBtmTable = OmdHelper.getBTTableName(refOpt.refBtmName);
|
// modify by weidy@2021-1-20 把1.2版本的参照查询转移过来,解决参照是自己这个业务类型的时候报错的问题,比如部门里的上级部门属性
|
String trueRefTable = refBtmTable.toLowerCase();
|
if (btmTableName.equals(refBtmTable)) {// 瑙e喅寮曠敤鏈韩鐨勬椂鍊�
|
refBtmTable = refBtmTable.replace("PLATFORM", "") + "_1";
|
}
|
if (refSameBtmNameMap.containsKey(refBtmTable)) {
|
// 这个业务类型里有多个属性的是参照当前业务类型的
|
int max = 0;
|
if (refSameBtmNameMap.containsKey(refBtmTable)) {
|
max = refSameBtmNameMap.get(refBtmTable);
|
}
|
boolean isNewReferTable = true;
|
if (refSameBtmNameAttrMap.containsKey(refBtmTable)) {
|
Set<String> attrSet = refSameBtmNameAttrMap.get(refBtmTable);
|
if (attrSet.contains(refOpt.attrName.trim().toLowerCase())) {
|
isNewReferTable = false;
|
} else {
|
attrSet.add(refOpt.attrName.trim().toLowerCase());
|
}
|
refSameBtmNameAttrMap.put(refBtmTable, attrSet);
|
}
|
if (isNewReferTable) {
|
refSameBtmNameMap.put(refBtmTable, max + 1);
|
refBtmTable = String.valueOf((char) ('A' + (max + 1)));
|
}
|
} else {
|
Set<String> attrSet = new HashSet<String>();
|
attrSet.add(refOpt.attrName.trim().toLowerCase());
|
refSameBtmNameAttrMap.put(refBtmTable, attrSet);
|
refSameBtmNameMap.put(refBtmTable, 1);
|
}
|
for (String refBtmAttr : refOpt.refBtmQueryAttrs) {
|
// 处理参照
|
String queryField = (refBtmTable + "." + refBtmAttr).toLowerCase();
|
char c = (char) (65 + refBtmQueryAttrToAliasMap.size() + 1);
|
String alias = (String.valueOf(c) + "__" + refBtmAttr).toLowerCase();
|
String aliasColumnName = (refOpt.attrName + "." + refBtmAttr).toLowerCase();// 鐢ㄤ簬杩斿洖缁欏墠绔�
|
refBtmQueryAttrToAliasMap.put(queryField, alias);
|
refBtmQueryAliasToAttrMap.put(alias, aliasColumnName);
|
list.add(queryField);
|
|
// 昵称
|
String key = getAppendAliasClause(queryField, alias);
|
dotRemoveTableNameClauseMap.put(key, key);
|
}
|
if (!refBtmNameMap.containsKey(refBtmTable)) {
|
StringBuffer sb = new StringBuffer();
|
sb.append(Symbol.SPACE);
|
sb.append(Symbol.LEFT_JOIN);
|
sb.append(Symbol.SPACE);
|
sb.append(trueRefTable);
|
sb.append(Symbol.SPACE);
|
sb.append(refBtmTable.toLowerCase());
|
sb.append(Symbol.SPACE);
|
sb.append(Symbol.ON);
|
sb.append(Symbol.SPACE);
|
sb.append(refBtmTable.toLowerCase() + ".oid=");
|
sb.append(btmTableName + ".");
|
sb.append(refOpt.attrName);
|
sb.append(Symbol.SPACE);
|
joinOnTables.add(sb.toString());
|
refBtmNameMap.put(refBtmTable, refOpt.refBtmName);
|
}
|
}
|
queryTemplate.setClauseList(list);
|
clauseList = getSelectedAbNamesForBtmV3(queryTemplate.getBtmType(), queryTemplate.getClauseList(),
|
refBtmQueryAttrToAliasMap);
|
}
|
Parser parser = new BtmRefQueryParser(queryTemplate) {
|
@Override
|
public String getQueryType() {
|
// 重写 构建表关联的逻辑段
|
String res = super.getQueryType();
|
if (joinOnTables.size() > 0) {
|
StringBuffer sb = new StringBuffer(res);
|
for (String string : joinOnTables) {
|
sb.append(Symbol.SPACE).append(string);
|
}
|
sb.append(Symbol.SPACE);
|
res = sb.toString();
|
}
|
return res;
|
}
|
};
|
// add by xchao 2017.09.04 BEGIN
|
// 添加总数特殊标识
|
clauseList.add(QTConstants.COUNT_OVER_ALIAS);
|
// add by xchao 2017.09.04 END
|
queryTemplate.setClauseList(clauseList);
|
String sql = parser.parseToSql();
|
// 解析sql后, 去掉clauseList中加的表名
|
clauseList = removeTableNameV3(clauseList, dotRemoveTableNameClauseMap);
|
List<BusinessObject> objList = executeSqlForBtmAndClauseV3(clauseList, sql, count, parser,
|
refBtmQueryAliasToAttrMap);
|
return objList;
|
}
|
|
//private AttPoolServicePrx apImpl = null;
|
private Map<String, AttribItem> apMap = new HashMap<String, AttribItem>();
|
|
protected String getAttrRefBtmName(String attrName) throws VCIError {
|
String[] others = getAttribItem(attrName).other.split(";");
|
for (String string : others) {
|
String[] kvs = string.split("=");
|
String key = kvs[0].trim();
|
String val = kvs[1].trim();
|
if ("btm".equalsIgnoreCase(key)) {
|
return val;
|
}
|
}
|
return "";
|
}
|
|
protected AttribItem getAttribItem(String attrName) throws VCIError {
|
// if (apImpl == null) {
|
// apImpl = ServerServiceProvider.getOMDService().getAttributeService();
|
// }
|
AttribItem ai = apMap.get(attrName);
|
if (ai == null) {
|
//ai = apImpl.getAttribItemByName(attrName);
|
ai = OMCacheProvider.getAttribute(attrName);
|
apMap.put(attrName, ai);
|
}
|
return ai;
|
}
|
|
/**
|
* @param clauseList
|
* @param sql
|
* @return
|
*/
|
private List<BusinessObject> executeSqlForBtmAndClauseV3(List<String> clauseList, String sql, IntHolder count,
|
Parser parser, Map<String, String> refBtmQueryAliasToAttrMap) {
|
List<BusinessObject> objList = new ArrayList<BusinessObject>();
|
Session session = HibernateSessionFactory.getSession();
|
ServerWithLog4j.logger.debug(sql);
|
SQLQuery sqlquery = session.createSQLQuery(sql);
|
// 根据查询模板中的查询列clauseList, 设置map
|
List<?> list = sqlquery.list();
|
String countOverAlias = QTConstants.COUNT_OVER_ALIAS;
|
int countValue = 0;
|
|
Map<String, String> mapValue = new HashMap<String, String>();
|
for (int i = 0; i < list.size(); i++) {
|
BusinessObject bo = new BusinessObject();
|
List<AttributeValue> abList = new ArrayList<AttributeValue>();
|
// 当list.get(i)中有多个Object时, 类型为Object[]
|
// 必须先判断Object[] 再判断Object
|
Object[] objs = (Object[]) list.get(i);
|
mapValue.clear();
|
for (int k = 0; k < clauseList.size(); k++) {
|
String clauseField = clauseList.get(k);
|
if (countOverAlias.equalsIgnoreCase(clauseField)) {
|
countValue = Integer.valueOf(objs[k].toString());
|
if (count == null) {
|
count = new IntHolder();
|
}
|
count.value = countValue;
|
continue;
|
}
|
AttributeValue ab = new AttributeValue();
|
// sessin查询出的值
|
Object value = objs[k];
|
// clauseList中对应的查询列
|
String abName = clauseField;
|
if (clauseField.indexOf("'' as ") > -1) {// 对不存在的列的名字做修饰,因为查询时是以 “'' as 列名”查询的
|
abName = abName.substring(abName.lastIndexOf("'' as ") + "'' as ".length());
|
}
|
// add by xchao 2017.12.20 begin
|
// 参照数据查询列,专用处理
|
String asChar = " as ";
|
// 分解出“别名”
|
int asPos = clauseField.indexOf(asChar);
|
if (asPos >= 0) {
|
abName = clauseField.substring(asPos + asChar.length());
|
}
|
// 基于 别名与 提取出 原始 配置的(查询模板中原始传入的 clauseList中的 ,如 xxx.name)
|
String orignalField = refBtmQueryAliasToAttrMap.get(abName);
|
// 如果值不为空,则添加到 AttributeValue
|
if (StringUtils.isNotEmpty(orignalField)) {
|
abName = orignalField;
|
}
|
// add by xchao 2017.12.20 end
|
|
ab.attrName = abName;
|
// 如果是clob字段,转换字符串
|
ab.attrVal = objValueToString(value);
|
abList.add(ab);
|
mapValue.put(ab.attrName.toLowerCase(), ab.attrVal);
|
}
|
AttributeValue[] abArray = abList.toArray(new AttributeValue[0]);
|
bo.newAttrValList = new AttributeValue[0];
|
bo.hisAttrValList = abArray;
|
// 为btm的系统属性赋值
|
// 改为动态根据查出列的数量赋值
|
setBOAttribute(bo, mapValue);
|
|
objList.add(bo);
|
}
|
return objList;
|
}
|
|
private String objValueToString(Object value) {
|
if (value == null)
|
return "";
|
|
if (value instanceof Clob) {
|
return clobToString((Clob) value);
|
} else if (value instanceof java.sql.Timestamp) {
|
java.sql.Timestamp ts = (java.sql.Timestamp)value;
|
return String.valueOf(ts.getTime());
|
} else if (value instanceof java.sql.Date) {
|
java.sql.Date date = (java.sql.Date)value;
|
return String.valueOf(date.getTime());
|
} else {
|
return String.valueOf(value);
|
}
|
}
|
|
private void setBOAttribute(BusinessObject bo, Map<String, String> mapValue) {
|
Field[] fields = bo.getClass().getFields();
|
for (Field f : fields) {
|
// 只甄选基本类型
|
if (!f.getType().isPrimitive() && !f.getType().equals(String.class))
|
continue;
|
|
f.setAccessible(true);
|
String name = f.getName();
|
if (name.equalsIgnoreCase("BTNAME"))
|
name = "BTMNAME";
|
else if (name.equalsIgnoreCase("MODIFIER"))
|
name = "LASTMODIFIER";
|
else if (name.equalsIgnoreCase("MODIFYTIME"))
|
name = "LASTMODIFYTIME";
|
else if (name.equalsIgnoreCase("FROMVERSION"))
|
name = "COPYFROMVERSION";
|
else if (name.equalsIgnoreCase("REVISIONOID"))
|
name = "revisionid";
|
|
name = name.toLowerCase();
|
// f.getType().equals(String.class)
|
if (mapValue.containsKey(name)) {
|
String value = mapValue.get(name);
|
|
try {
|
if (f.getType().equals(String.class)) {
|
f.set(bo, value);
|
} else if (f.getType().equals(boolean.class)) {
|
f.set(bo, StringUtils.isBlank(value) ? false : Integer.valueOf(value) != 0);
|
} else if (f.getType().equals(short.class)) {
|
f.set(bo, StringUtils.isBlank(value) ? 0 : Short.valueOf(value));
|
} else if (f.getType().equals(int.class)) {
|
f.set(bo, StringUtils.isBlank(value) ? 0 : Integer.valueOf(value));
|
} else if (f.getType().equals(long.class) && value != null && value.length() > 0) {
|
f.set(bo, StringUtils.isBlank(value) ? 0 : Long.valueOf(value));
|
}
|
} catch (IllegalArgumentException e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
} catch (IllegalAccessException e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
}
|
}
|
// try {
|
// if (f.getName().equalsIgnoreCase(abArray[j].attrName)) {
|
// if (f.getType().equals(String.class)) {
|
// f.set(bo, abArray[j].attrVal);
|
// } else if (f.getType().equals(int.class) && abArray[j].attrVal != null
|
// && abArray[j].attrVal.length() > 0) {
|
// f.set(bo, Integer.valueOf(abArray[j].attrVal));
|
// }
|
// continue outer;
|
// // 对象中属性名为revisionid,但是数据库字段名为revisionoid,反射不能正确匹配,所以特别匹配下
|
// } else if (f.getName().equalsIgnoreCase("revisionid")
|
// && abArray[j].attrName.equalsIgnoreCase("REVISIONOID")) {
|
// f.set(bo, abArray[j].attrVal);
|
// }
|
// } catch (Exception e) {
|
// e.printStackTrace();
|
// }
|
}
|
}
|
|
/**
|
* @param clauseList
|
* @param sql
|
* @return
|
*/
|
private List<BusinessObject> executeSqlForBtmAndClauseV2(List<String> clauseList, String sql, IntHolder count,
|
Parser parser) {
|
List<BusinessObject> objList = new ArrayList<BusinessObject>();
|
Session session = HibernateSessionFactory.getSession();
|
ServerWithLog4j.logger.debug(sql);
|
SQLQuery sqlquery = session.createSQLQuery(sql);
|
// 根据查询模板中的查询列clauseList, 设置map
|
List<?> list = sqlquery.list();
|
String countOverAlias = QTConstants.COUNT_OVER_ALIAS;
|
int countValue = 0;
|
Map<String, String> mapValue = new HashMap<String, String>();
|
for (int i = 0; i < list.size(); i++) {
|
BusinessObject bo = new BusinessObject();
|
List<AttributeValue> abList = new ArrayList<AttributeValue>();
|
// 当list.get(i)中有多个Object时, 类型为Object[]
|
// 必须先判断Object[] 再判断Object
|
|
mapValue.clear();
|
Object[] objs = (Object[]) list.get(i);
|
for (int k = 0; k < clauseList.size(); k++) {
|
String clauseField = clauseList.get(k);
|
if (countOverAlias.equalsIgnoreCase(clauseField)) {
|
countValue = Integer.valueOf(objs[k].toString());
|
if (count == null) {
|
count = new IntHolder();
|
}
|
count.value = countValue;
|
continue;
|
}
|
AttributeValue ab = new AttributeValue();
|
// sessin查询出的值
|
Object value = objs[k];
|
// clauseList中对应的查询列
|
String abName = clauseList.get(k);
|
if (clauseList.get(k).indexOf("'' as ") > -1) {// 对不存在的列的名字做修饰,因为查询时是以 “'' as 列名”查询的
|
abName = abName.substring(abName.lastIndexOf("'' as ") + "'' as ".length());
|
}
|
ab.attrName = abName;
|
ab.attrVal = objValueToString(value);
|
abList.add(ab);
|
mapValue.put(ab.attrName.toLowerCase(), ab.attrVal);
|
}
|
AttributeValue[] abArray = abList.toArray(new AttributeValue[0]);
|
bo.newAttrValList = new AttributeValue[0];
|
bo.hisAttrValList = abArray;
|
// 为btm的系统属性赋值
|
// 改为动态根据查出列的数量赋值
|
setBOAttribute(bo, mapValue);
|
// Field[] fields = bo.getClass().getFields();
|
// outer: for (int j = 0; j < abArray.length; j++) {
|
// for (Field f : fields) {
|
// // System.out.println(f.getName()+","+f.getType().equals(int.class));
|
// // 只甄选基本类型和字符串类型
|
// if (f.getType().isPrimitive() || f.getType().equals(String.class)) {
|
// f.setAccessible(true);
|
// try {
|
// if (f.getName().equalsIgnoreCase(abArray[j].attrName)) {
|
// if (f.getType().equals(String.class)) {
|
// f.set(bo, abArray[j].attrVal);
|
// } else if (f.getType().equals(int.class) && abArray[j].attrVal != null
|
// && abArray[j].attrVal.length() > 0) {
|
// f.set(bo, Integer.valueOf(abArray[j].attrVal));
|
// }
|
// continue outer;
|
// // 对象中属性名为revisionid,但是数据库字段名为revisionoid,反射不能正确匹配,所以特别匹配下
|
// } else if (f.getName().equalsIgnoreCase("revisionid")
|
// && abArray[j].attrName.equalsIgnoreCase("REVISIONOID")) {
|
// f.set(bo, abArray[j].attrVal);
|
// }
|
// } catch (Exception e) {
|
// e.printStackTrace();
|
// }
|
// }
|
// }
|
// }
|
objList.add(bo);
|
}
|
return objList;
|
}
|
|
/**
|
* clob转String
|
*
|
* @param value
|
* @return
|
*/
|
private String clobToString(Clob value) {
|
// TODO Auto-generated method stub
|
String clobValue = "";
|
try {
|
Reader is = value.getCharacterStream();
|
BufferedReader br = new BufferedReader(is);
|
String s = br.readLine();
|
StringBuffer sb = new StringBuffer();
|
while (s != null) {
|
sb.append(s);
|
s = br.readLine();
|
}
|
clobValue = sb.toString();
|
} catch (SQLException e) {
|
e.printStackTrace();
|
} catch (IOException e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
}
|
|
return clobValue;
|
}
|
|
/**
|
* 解析QueryTemplate 为sql 执行sql, 返回结果
|
*
|
* @param queryTemplate
|
* @return
|
* @throws VCIError
|
*/
|
public List<LinkObject> findLinkObject(QueryTemplate queryTemplate) throws Throwable {
|
return this.findLinkObjectV2(queryTemplate, new IntHolder(0));
|
}
|
|
/**
|
* 解析QueryTemplate 为sql 执行sql, 返回结果
|
*
|
* @param queryTemplate
|
* @param count 查询结果的总数,通过 count.value 获取
|
* @return 查询到的业务类型数据 <code>com.vci.corba.omd.LinkObject</code>
|
* @since v1.1 2017.08.31
|
* @see com.vci.corba.omd.data.LinkObject
|
* @throws VCIError
|
*/
|
public List<LinkObject> findLinkObjectV2(QueryTemplate queryTemplate, IntHolder count) throws Throwable {
|
List<String> clauseList = queryTemplate.getClauseList();
|
String ltName = queryTemplate.getLinkType();
|
String ltTableName = OmdHelper.getLTTableName(ltName);
|
String btmName = queryTemplate.getBtmType();
|
boolean btmFlag = false;
|
if (clauseList.contains(ltTableName + ".*") || clauseList.contains("*") || clauseList.size() > 0) {
|
if (!clauseList.contains(ltTableName + ".*") && !clauseList.contains("*")) {
|
clauseList = this.getSelectedLinkTypeFiledsWithTableName(ltName, ltTableName, clauseList);
|
} else {
|
clauseList = getAllLinkTypeFiledsWithTableName(ltName, ltTableName);
|
}
|
if (btmName != null && !btmName.equals("")) {
|
btmFlag = true;
|
String viewName = null;
|
if (btmName.equals("*") || btmName.contains(",")) {
|
if (queryTemplate.getDirection().equals(QTConstants.DIRECTION_POSITIVE)) {
|
viewName = OmdHelper.getToViewName(ltName);
|
} else {
|
viewName = OmdHelper.getFromViewName(ltName);
|
}
|
} else {
|
viewName = OmdHelper.getBTTableName(btmName);
|
}
|
|
clauseList.add(viewName + ".OID AS OID2");
|
clauseList.add(viewName + ".REVISIONOID AS REVISIONOID2");
|
}
|
clauseList.add("CONNECT_BY_ISLEAF");
|
clauseList.add("LEVEL");
|
}
|
Parser parser = new Parser(queryTemplate);
|
// add by xchao 2017.09.04 BEGIN
|
// 添加总数列查询
|
clauseList.add(QTConstants.COUNT_OVER_ALIAS);
|
// add by xchao 2017.09.04 END
|
queryTemplate.setClauseList(clauseList);
|
String sql = parser.parseToSql();
|
List<LinkObject> objList = null;
|
clauseList = this.removeTableName(clauseList);
|
if (btmFlag) {
|
objList = executeSqlForLinkWithVersion(clauseList, sql, queryTemplate.getDirection(), ltName);
|
} else {
|
objList = executeSqlForLink(clauseList, sql, ltName);
|
}
|
return objList;
|
}
|
|
/**
|
* 查询一层, 分查询是否有有下一级和不查询是否有有下一级
|
*
|
* @param queryTemplate
|
* @return
|
* @throws Throwable
|
*/
|
public List<LinkObject> findLinkObjectOneLevel(QueryTemplate queryTemplate) throws Throwable {
|
return this.findLinkObjectOneLevelV2(queryTemplate, new IntHolder(0));
|
}
|
|
/**
|
* 查询一层, 分查询是否有有下一级和不查询是否有有下一级
|
*
|
* @param queryTemplate
|
* @return
|
* @param count 查询结果的总数,通过 count.value 获取
|
* @return 查询到的业务类型数据 <code>com.vci.corba.omd.LinkObject</code>
|
* @since v1.1 2017.08.31
|
* @see com.vci.corba.omd.data.LinkObject
|
* @throws Throwable
|
*/
|
public List<LinkObject> findLinkObjectOneLevelV2(QueryTemplate queryTemplate, IntHolder count) throws Throwable {
|
List<String> clauseList = queryTemplate.getClauseList();
|
String ltName = queryTemplate.getLinkType();
|
String ltTableName = OmdHelper.getLTTableName(ltName);
|
String btmName = queryTemplate.getBtmType();
|
boolean btmFlag = false;
|
if (clauseList.contains(ltTableName + ".*") || clauseList.contains("*") || clauseList.size() > 0) {
|
if (!clauseList.contains("*") && !clauseList.contains(ltTableName + ".*")) {
|
clauseList = getSelectedLinkTypeFiledsWithTableName(ltName, ltTableName, clauseList);
|
} else {
|
clauseList = getAllLinkTypeFiledsWithTableName(ltName, ltTableName);
|
}
|
if (btmName != null && !btmName.equals("")) {
|
btmFlag = true;
|
String viewName = null;
|
if (btmName.equals("*") || btmName.contains(",")) {
|
if (queryTemplate.getDirection().equals(QTConstants.DIRECTION_POSITIVE)) {
|
viewName = OmdHelper.getToViewName(ltName);
|
} else {
|
viewName = OmdHelper.getFromViewName(ltName);
|
}
|
} else {
|
viewName = OmdHelper.getBTTableName(btmName);
|
}
|
clauseList.add(viewName + ".OID AS OID2");
|
clauseList.add(viewName + ".REVISIONOID AS REVISIONOID2");
|
}
|
}
|
ParserForOneLevel parser = new ParserForOneLevel(queryTemplate);
|
// add by xhao 2017.09.04 BEGIN
|
// 添加上总数特殊标识查询
|
clauseList.add(QTConstants.COUNT_OVER_ALIAS);
|
// add by xhao 2017.09.04 END
|
queryTemplate.setClauseList(clauseList);
|
String sql = parser.parseToSql();
|
|
Map<String, String> isLeafMap = null;
|
if (queryTemplate.isQueryISLeaf()) {
|
String sql_ = parser.parseToSqlForLinkStartWith();
|
isLeafMap = getIsLeaf(sql_);
|
} else {
|
isLeafMap = new HashMap<String, String>();
|
}
|
|
List<LinkObject> objList = null;
|
clauseList = removeTableName(clauseList);
|
if (btmFlag) {
|
objList = executeSqlForLinkWithVersionOneLevelV2(clauseList, sql, queryTemplate.getDirection(), ltName,
|
isLeafMap, count);
|
} else {
|
objList = executeSqlForLinkOneLevel(clauseList, sql, ltName, isLeafMap);
|
}
|
return objList;
|
}
|
|
/**
|
* 获取特定业务类型属性, 包括系统属性和属性池属性 如果‘要求列’不是确实存在的列,咋在返回值中添加 '' as 别名
|
*
|
* @param btmName
|
* @param clauseList 返回列
|
* @return
|
* @throws Throwable
|
*/
|
private List<String> getSelectedAbNamesForBtm(String btmName, List<String> clauseList) throws Throwable {
|
try {
|
String tableName = OmdHelper.getBTTableName(btmName);
|
// 系统属性
|
String[] sysAbs = BusinessConstants.SELECT_CONSTANTS;
|
List<String> sysList = new ArrayList<String>();
|
List<String> abList = new ArrayList<String>();
|
if (sysAbs != null && sysAbs.length > 0) {
|
for (String sysAb : sysAbs) {
|
String abLower = sysAb.toLowerCase();
|
sysList.add(abLower);
|
abList.add(tableName + "." + abLower);
|
}
|
}
|
// 属性池属性
|
//String[] abs = ServerServiceProvider.getOMDService().getBTMService().getBtmApNameArray(btmName);// OmdTools.getAbNames(btmName);
|
String[] abs = OMCacheProvider.getBTAttributes(btmName);
|
List<String> absList = new ArrayList<String>();
|
if (abs != null && abs.length > 0) {
|
for (String ab : abs) {
|
absList.add(ab.toLowerCase());
|
}
|
}
|
for (int i = 0; i < clauseList.size(); i++) {
|
// 如果传入的clauseList确实存在于系统属性或属性池属性中,则保留,否则按“'' as 别名”查询
|
String lowerCaseName = clauseList.get(i).toLowerCase();
|
if (sysList.contains(lowerCaseName)) {
|
continue;
|
}
|
if (absList.contains(lowerCaseName)) {
|
abList.add(tableName + "." + clauseList.get(i));
|
} else {
|
abList.add("'' as " + clauseList.get(i));
|
}
|
}
|
return abList;
|
} catch (Throwable e) {
|
e.printStackTrace();
|
throw e;
|
}
|
}
|
|
private List<String> getSelectedAbNamesForBtmV3(String btmName, List<String> clauseList,
|
Map<String, String> refBtmQueryAttrToAliasMap) throws Throwable {
|
try {
|
String tableName = OmdHelper.getBTTableName(btmName);
|
// 系统属性
|
String[] sysAbs = BusinessConstants.SELECT_CONSTANTS;
|
List<String> sysList = new ArrayList<String>();
|
List<String> abList = new ArrayList<String>();
|
if (sysAbs != null && sysAbs.length > 0) {
|
for (String sysAb : sysAbs) {
|
String abLower = sysAb.toLowerCase();
|
sysList.add(abLower);
|
abList.add(tableName + "." + abLower);
|
}
|
}
|
// 属性池属性
|
//String[] abs = ServerServiceProvider.getOMDService().getBTMService().getBtmApNameArray(btmName);// OmdTools.getAbNames(btmName);
|
String[] abs = OMCacheProvider.getBTAttributes(btmName);
|
List<String> absList = new ArrayList<String>();
|
if (abs != null && abs.length > 0) {
|
for (String ab : abs) {
|
absList.add(ab.toLowerCase());
|
}
|
}
|
for (int i = 0; i < clauseList.size(); i++) {
|
String clauseString = clauseList.get(i);
|
// 如果传入的clauseList确实存在于系统属性或属性池属性中,则保留,否则按“'' as 别名”查询
|
String lowerCaseName = clauseString.toLowerCase();
|
if (sysList.contains(lowerCaseName)) {
|
continue;
|
}
|
if (absList.contains(lowerCaseName)) {
|
abList.add(tableName + "." + clauseString);
|
} else {
|
String alias = refBtmQueryAttrToAliasMap.get(lowerCaseName);
|
if (StringUtils.isNotEmpty(alias)) {
|
abList.add(getAppendAliasClause(lowerCaseName, alias));
|
}
|
}
|
}
|
return abList;
|
} catch (Throwable e) {
|
e.printStackTrace();
|
throw e;
|
}
|
}
|
|
private String getAppendAliasClause(String clause, String alias) {
|
return clause + " as " + alias;
|
}
|
|
/**
|
* 获取业务类型全部属性, 包括系统属性和属性池属性
|
*
|
* @param btmName
|
* @return
|
* @throws Throwable
|
*/
|
private List<String> getAllAbNamesForBtm(String btmName) throws Throwable {
|
try {
|
String tableName = OmdHelper.getBTTableName(btmName);
|
List<String> abList = new ArrayList<String>();
|
String[] sysAbs = BusinessConstants.SELECT_CONSTANTS;
|
for (int i = 0; i < sysAbs.length; i++) {
|
abList.add(tableName + "." + sysAbs[i]);
|
}
|
//String[] abs = ServerServiceProvider.getOMDService().getBTMService().getBtmApNameArray(btmName);// OmdTools.getAbNames(btmName);
|
String[] abs = OMCacheProvider.getBTAttributes(btmName);
|
for (int i = 0; i < abs.length; i++) {
|
abList.add(tableName + "." + abs[i]);
|
}
|
return abList;
|
} catch (Throwable e) {
|
e.printStackTrace();
|
throw e;
|
}
|
}
|
|
/**
|
* 解析sql后, 去掉clauseList中加的表名
|
*
|
* @param clauseList
|
*/
|
private List<String> removeTableName(List<String> clauseList) {
|
List<String> list = new ArrayList<String>(clauseList.size());
|
for (String clause : clauseList) {
|
if (clause.contains(".")) {
|
clause = clause.substring(clause.lastIndexOf(".") + 1);
|
}
|
list.add(clause);
|
}
|
return list;
|
}
|
|
private List<String> removeTableNameV3(List<String> clauseList, Map<String, String> dotRemoveTableNameClauseMap) {
|
List<String> list = new ArrayList<String>(clauseList.size());
|
for (String clause : clauseList) {
|
if (dotRemoveTableNameClauseMap.containsKey(clause)) {
|
list.add(clause);
|
continue;
|
}
|
if (clause.contains(".")) {
|
clause = clause.substring(clause.lastIndexOf(".") + 1);
|
}
|
list.add(clause);
|
}
|
return list;
|
}
|
|
/**
|
* 将链接类型的全部属性加上表明返回, 用作查询列; 避免与业务类型做链接查询时, 出现列明不明确问题. tableName.ltName
|
*
|
* @param ltName
|
* @param tableName
|
* @return
|
* @throws Throwable
|
*/
|
private List<String> getSelectedLinkTypeFiledsWithTableName(String ltName, String tableName,
|
List<String> clauseList) throws Throwable {
|
try {
|
ServerWithLog4j.logger.debug("非全量查詢。。。。。。");
|
String[] sysAbs = LinkConstants.SELECT_CONSTANTS;
|
List<String> sysAbsList = new ArrayList<String>();
|
if (sysAbs != null && sysAbs.length > 0) {
|
sysAbsList = Arrays.asList(sysAbs);
|
}
|
//LinkType linkType = ServerServiceProvider.getOMDService().getLinkTypeService().getLinkType(ltName);// LinkTypeProvider.getInstance().getLinkTypeByName(ltName);
|
LinkType linkType = OMCacheProvider.getLinkType(ltName);
|
String[] abs = linkType.attributes;
|
List<String> absList = new ArrayList<String>();
|
if (abs != null && abs.length > 0) {
|
absList = Arrays.asList(abs);
|
}
|
List<String> abList = new ArrayList<String>();
|
for (int i = 0; i < clauseList.size(); i++) {
|
// 如果传入的clauseList确实存在于系统属性或属性池属性中,则保留,否则按“'' as 别名”查询
|
if (sysAbsList.contains(clauseList.get(i)) || absList.contains(clauseList.get(i))) {
|
abList.add(tableName + "." + clauseList.get(i));
|
} else {
|
abList.add("'' as " + clauseList.get(i));
|
}
|
}
|
return abList;
|
} catch (Throwable e) {
|
e.printStackTrace();
|
throw e;
|
}
|
}
|
|
/**
|
* 将链接类型的全部属性加上表明返回, 用作查询列; 避免与业务类型做链接查询时, 出现列明不明确问题. tableName.ltName
|
*
|
* @param ltName
|
* @param tableName
|
* @return
|
* @throws Throwable
|
*/
|
private List<String> getAllLinkTypeFiledsWithTableName(String ltName, String tableName) throws Throwable {
|
//LinkType linkType = ServerServiceProvider.getOMDService().getLinkTypeService().getLinkType(ltName);
|
LinkType linkType = OMCacheProvider.getLinkType(ltName);
|
return getAllLinkTypeFiledsWithTableName(linkType, tableName);
|
/*
|
* try{ List<String> abList = new ArrayList<String>(); String[] sysAbs =
|
* LinkConstants.SELECT_CONSTANTS; for(int i = 0; i < sysAbs.length; i++){
|
* abList.add(tableName + "." + sysAbs[i]); } LinkType linkType =
|
* ltService.getLinkType(ltName);//LinkTypeProvider.getInstance().
|
* getLinkTypeByName(ltName); String[] abs = linkType.attributes; for(int i = 0;
|
* i < abs.length; i++){ abList.add(tableName + "." + abs[i].trim()); } return
|
* abList; }catch(Throwable e){ e.printStackTrace(); throw e; }
|
*/
|
}
|
|
/**
|
* 将链接类型的全部属性加上表明返回, 用作查询列; 避免与业务类型做链接查询时, 出现列明不明确问题. tableName.ltName
|
*
|
* @param linkType 链接类型对象
|
* @param tableName
|
* @return
|
* @throws Throwable
|
*/
|
private List<String> getAllLinkTypeFiledsWithTableName(LinkType linkType, String tableName) throws Throwable {
|
try {
|
List<String> abList = new ArrayList<String>();
|
String[] sysAbs = LinkConstants.SELECT_CONSTANTS;
|
for (int i = 0; i < sysAbs.length; i++) {
|
abList.add(tableName + "." + sysAbs[i]);
|
}
|
String[] abs = linkType.attributes;
|
for (int i = 0; i < abs.length; i++) {
|
abList.add(tableName + "." + abs[i].trim());
|
}
|
return abList;
|
} catch (Throwable e) {
|
e.printStackTrace();
|
throw e;
|
}
|
}
|
|
/**
|
* 从linkTable和btmView查询BOAndLO
|
*
|
* @param qt
|
* @return
|
* @throws Throwable
|
*/
|
public List<BOAndLO> findBOAndLOByView(QueryTemplate qt, String btmOId) throws Throwable {
|
List<String> clauseList = qt.getClauseList();
|
String ltName = qt.getLinkType();
|
String btmName = qt.getBtmType();
|
String ltTableName = OmdHelper.getLTTableName(ltName);
|
clauseList = getAllLinkTypeFiledsWithTableName(ltName, ltTableName);
|
clauseList.add("CONNECT_BY_ISLEAF");
|
clauseList.add("LEVEL");
|
List<String> viewCols = null;
|
//LinkType linkType = ServerServiceProvider.getOMDService().getLinkTypeService().getLinkType(ltName);// LinkTypeProvider.getInstance().getLinkTypeByName(ltName);
|
LinkType linkType = OMCacheProvider.getLinkType(ltName);
|
String viewName = null;
|
if (btmName != null && !btmName.equals("*") && !btmName.contains(",")) {
|
viewName = OmdHelper.getBTTableName(btmName);
|
}
|
|
if (viewName == null) {
|
if (qt.getDirection().equals(QTConstants.DIRECTION_POSITIVE)) {
|
viewCols = OQueryHelper.getViewColsWithAlias(linkType.btmItemsTo, OmdHelper.getToViewName(ltName));
|
} else {
|
viewCols = OQueryHelper.getViewColsWithAlias(linkType.btmItemsFrom, OmdHelper.getFromViewName(ltName));
|
}
|
|
} else {
|
viewCols = OQueryHelper.getViewColsWithAlias(new String[] { btmName }, viewName);
|
}
|
clauseList.addAll(viewCols);
|
qt.setClauseList(clauseList);
|
Parser parser = new Parser(qt);
|
String sql = parser.parseToSql();
|
|
String key = "start with";
|
if ((sql.toLowerCase().indexOf("start with") > 0) && StringUtils.isNotEmpty(btmOId)) {
|
String f_oidCondition = " " + ltTableName + ".f_oid = '" + btmOId + "' and ";
|
sql = sql.replace(key, key + f_oidCondition);
|
}
|
|
List<BOAndLO> boAndLos = executeSqlForBOAndLO(clauseList, sql, ltName, qt.getDirection());
|
|
return boAndLos;
|
|
}
|
|
/**
|
* 查询一层, 分查询是否有有下一级和不查询是否有有下一级 从linkTable和btmView查询BOAndLO
|
*
|
* @param qt
|
* @return
|
* @throws Throwable
|
*/
|
public List<BOAndLO> findBOAndLOByViewOneLevel(QueryTemplate qt) throws Throwable {
|
List<String> clauseList = qt.getClauseList();
|
String ltName = qt.getLinkType();
|
String btmName = qt.getBtmType();
|
String ltTableName = OmdHelper.getLTTableName(ltName);
|
//LinkType linkType = ServerServiceProvider.getOMDService().getLinkTypeService().getLinkType(ltName); // weidy@2018-6-26
|
LinkType linkType = OMCacheProvider.getLinkType(ltName);
|
clauseList = getAllLinkTypeFiledsWithTableName(linkType, ltTableName);
|
List<String> viewCols = null;
|
// LinkTypeProvider.getInstance().getLinkTypeByName(ltName);
|
|
String viewName = null;
|
if (btmName != null && !btmName.equals("*") && !btmName.contains(",")) {
|
viewName = OmdHelper.getBTTableName(btmName);
|
}
|
|
if (viewName == null) {
|
if (qt.getDirection().equals(QTConstants.DIRECTION_POSITIVE)) {
|
viewCols = ServerTool.getViewColsWithAlias(linkType.btmItemsTo, OmdHelper.getToViewName(ltName));
|
} else {
|
viewCols = ServerTool.getViewColsWithAlias(linkType.btmItemsFrom, OmdHelper.getFromViewName(ltName));
|
}
|
|
} else {
|
viewCols = ServerTool.getViewColsWithAlias(new String[] { btmName }, viewName);
|
}
|
|
clauseList.addAll(viewCols);
|
qt.setClauseList(clauseList);
|
ParserForOneLevel parser = new ParserForOneLevel(qt);
|
String sql = parser.parseToSql();
|
|
Map<String, String> isLeafMap = null;
|
if (qt.isQueryISLeaf()) {
|
String sql_ = parser.parseToSqlForLinkStartWith();
|
isLeafMap = getIsLeaf(sql_);
|
} else {
|
isLeafMap = new HashMap<String, String>();
|
}
|
|
List<BOAndLO> boAndLos = executeSqlForBOAndLOOneLevel(clauseList, sql, ltName, qt.getDirection(), isLeafMap);
|
|
return boAndLos;
|
|
}
|
|
/**
|
* 查询linkoid 是否有下一级
|
*
|
* @param sql_
|
* @return
|
*/
|
private Map<String, String> getIsLeaf(String sql_) {
|
Map<String, String> isLeafMap = new HashMap<String, String>();
|
Session session = HibernateSessionFactory.getSession();
|
ServerWithLog4j.logger.debug(sql_);
|
SQLQuery sqlQuery = session.createSQLQuery(sql_);
|
sqlQuery.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
|
List<?> list = sqlQuery.list();
|
for (int i = 0; i < list.size(); i++) {
|
Map<String, Object> map = (Map<String, Object>) list.get(i);
|
String key = (String) map.get("OID");
|
String val = String.valueOf(((BigDecimal) (map.get("CONNECT_BY_ISLEAF"))).intValue());
|
isLeafMap.put(key, val);
|
}
|
return isLeafMap;
|
}
|
|
/**
|
* 查询链接类型
|
*
|
* @param clauseList
|
* @param sql
|
* @param queryType
|
* @param direction
|
* @param ltName : 目前系统属性没有ltName
|
* @return
|
* @throws VCIError
|
*/
|
public List<LinkObject> executeSqlForLink(List<String> clauseList, String sql, String ltName) throws VCIError {
|
try {
|
String[] ltSysAttrs = OmdHelper.getLTSysAbItems();
|
//LinkType linkType = ServerServiceProvider.getOMDService().getLinkTypeService().getLinkType(ltName);// LinkTypeProvider.getInstance().getLinkTypeByName(ltName);
|
LinkType linkType = OMCacheProvider.getLinkType(ltName);
|
String[] ltUserAttrs = linkType.attributes;
|
// +2 for :CONNECT_BY_ISLEAF , LEVEL
|
int loAttrSize = ltSysAttrs.length + ltUserAttrs.length + 2;
|
|
List<LinkObject> objList = new ArrayList<LinkObject>();
|
Session session = HibernateSessionFactory.getSession();
|
ServerWithLog4j.logger.debug(sql);
|
SQLQuery sqlQuery = session.createSQLQuery(sql);
|
// 查询出的记录为Map<String, Object>的List集合
|
sqlQuery.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
|
|
List<?> list = sqlQuery.list();
|
for (int i = 0; i < list.size(); i++) {
|
Map<String, Object> map = (Map<String, Object>) list.get(i);
|
LinkObject lo = getLO(map, ltUserAttrs, ltName, loAttrSize, clauseList);
|
objList.add(lo);
|
}
|
return objList;
|
} catch (Throwable e) {
|
e.printStackTrace();
|
throw getLocalVciError("P0010QT-00009", e);
|
}
|
|
}
|
|
public List<LinkObject> executeSqlForLinkOneLevel(List<String> clauseList, String sql, String ltName,
|
Map<String, String> isLeafMap) throws VCIError {
|
try {
|
String[] ltSysAttrs = OmdHelper.getLTSysAbItems();
|
//LinkType linkType = ServerServiceProvider.getOMDService().getLinkTypeService().getLinkType(ltName);// LinkTypeProvider.getInstance().getLinkTypeByName(ltName);
|
LinkType linkType = OMCacheProvider.getLinkType(ltName);
|
String[] ltUserAttrs = linkType.attributes;
|
// +2 for :CONNECT_BY_ISLEAF , LEVEL
|
int loAttrSize = ltSysAttrs.length + ltUserAttrs.length + 2;
|
|
List<LinkObject> objList = new ArrayList<LinkObject>();
|
Session session = HibernateSessionFactory.getSession();
|
ServerWithLog4j.logger.debug(sql);
|
SQLQuery sqlQuery = session.createSQLQuery(sql);
|
// 查询出的记录为Map<String, Object>的List集合
|
sqlQuery.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
|
|
List<?> list = sqlQuery.list();
|
for (int i = 0; i < list.size(); i++) {
|
Map<String, Object> map = (Map<String, Object>) list.get(i);
|
LinkObject lo = getLOOneLevel(map, ltUserAttrs, ltName, loAttrSize, isLeafMap, clauseList);
|
objList.add(lo);
|
}
|
return objList;
|
} catch (Throwable e) {
|
e.printStackTrace();
|
throw getLocalVciError("P0010QT-00009", e);
|
}
|
|
}
|
|
/**
|
* 查询链接类型 正向查询时替换T_OId, T_RevisionOId
|
*
|
* @param clauseList
|
* @param sql
|
* @param queryType
|
* @param direction
|
* @return
|
* @throws VCIError
|
*/
|
public List<LinkObject> executeSqlForLinkWithVersion(List<String> clauseList, String sql, String direction,
|
String ltName) throws VCIError {
|
try {
|
ExecutorService exec = Executors.newFixedThreadPool(nCpu);
|
ExecutorCompletionService<LinkObject> exec_ = new ExecutorCompletionService<LinkObject>(exec);
|
|
String[] ltSysAttrs = OmdHelper.getLTSysAbItems();
|
//LinkType linkType = ServerServiceProvider.getOMDService().getLinkTypeService().getLinkType(ltName);// LinkTypeProvider.getInstance().getLinkTypeByName(ltName);
|
LinkType linkType = OMCacheProvider.getLinkType(ltName);
|
String[] ltUserAttrs = linkType.attributes;
|
// +2 for :CONNECT_BY_ISLEAF , LEVEL
|
int loAttrSize = ltSysAttrs.length + ltUserAttrs.length + 2;
|
|
List<LinkObject> objList = new ArrayList<LinkObject>();
|
Session session = HibernateSessionFactory.getSession();
|
ServerWithLog4j.logger.debug(sql);
|
SQLQuery sqlQuery = session.createSQLQuery(sql);
|
// 查询出的记录为Map<String, Object>的List集合
|
sqlQuery.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
|
List<?> list = sqlQuery.list();
|
for (int i = 0; i < list.size(); i++) {
|
Map<String, Object> map = (Map<String, Object>) list.get(i);
|
// LinkObject lo = getLOWithVersion(map, direction, ltUserAttrs, ltName, loAttrSize);
|
// objList.add(lo);
|
exec_.submit(new QueryLOWithVersion(map, direction, ltUserAttrs, ltName, loAttrSize, clauseList));
|
}
|
for (int m = 0; m < list.size(); m++) {
|
objList.add(exec_.take().get());
|
}
|
exec.shutdown();
|
return objList;
|
} catch (Throwable e) {
|
e.printStackTrace();
|
throw getLocalVciError("P0010QT-00009", e);
|
}
|
|
}
|
|
public List<LinkObject> executeSqlForLinkWithVersionOneLevel(List<String> clauseList, String sql, String direction,
|
String ltName, Map<String, String> isLeafMap) throws VCIError {
|
return this.executeSqlForLinkWithVersionOneLevelV2(clauseList, sql, direction, ltName, isLeafMap,
|
new IntHolder(0));
|
}
|
|
public List<LinkObject> executeSqlForLinkWithVersionOneLevelV2(List<String> clauseList, String sql,
|
String direction, String ltName, Map<String, String> isLeafMap, IntHolder count) throws VCIError {
|
try {
|
String[] ltSysAttrs = OmdHelper.getLTSysAbItems();
|
//LinkType linkType = ServerServiceProvider.getOMDService().getLinkTypeService().getLinkType(ltName);// LinkTypeProvider.getInstance().getLinkTypeByName(ltName);
|
LinkType linkType = OMCacheProvider.getLinkType(ltName);
|
String[] ltUserAttrs = linkType.attributes;
|
// +2 for :CONNECT_BY_ISLEAF , LEVEL
|
int loAttrSize = ltSysAttrs.length + ltUserAttrs.length + 2;
|
|
List<LinkObject> objList = new ArrayList<LinkObject>();
|
Session session = HibernateSessionFactory.getSession();
|
ServerWithLog4j.logger.debug(sql);
|
SQLQuery sqlQuery = session.createSQLQuery(sql);
|
// 查询出的记录为Map<String, Object>的List集合
|
sqlQuery.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
|
List<?> list = sqlQuery.list();
|
for (int i = 0; i < list.size(); i++) {
|
Map<String, Object> map = (Map<String, Object>) list.get(i);
|
LinkObject lo = getLOWithVersionOneLevelV2(map, direction, ltUserAttrs, ltName, loAttrSize, isLeafMap,
|
clauseList, count);
|
objList.add(lo);
|
}
|
return objList;
|
} catch (Throwable e) {
|
e.printStackTrace();
|
throw getLocalVciError("P0010QT-00009", e);
|
}
|
|
}
|
|
/**
|
* 从linkTable和btmView查询BOAndLO
|
*
|
* @param clauseList
|
* @param sql
|
* @param queryType
|
* @param direction
|
* @param ltName : 目前系统属性没有ltName
|
* @return
|
* @throws VCIError
|
*/
|
public List<BOAndLO> executeSqlForBOAndLO(List<String> clauseList, String sql, String ltName, String direction)
|
throws VCIError {
|
try {
|
ExecutorService exec = Executors.newFixedThreadPool(nCpu);
|
ServerWithLog4j.logger.debug("create exec");
|
ExecutorCompletionService<BOAndLO> exec_ = new ExecutorCompletionService<BOAndLO>(exec);
|
|
String[] btSysAttrs = OmdHelper.getBTSysANames();
|
String[] ltSysAttrs = OmdHelper.getLTSysAbItems();
|
//LinkType linkType = ServerServiceProvider.getOMDService().getLinkTypeService().getLinkType(ltName); // LinkTypeProvider.getInstance().getLinkTypeByName(ltName);
|
LinkType linkType = OMCacheProvider.getLinkType(ltName);
|
String[] ltUserAttrs = linkType.attributes;
|
// +2 for :CONNECT_BY_ISLEAF , LEVEL
|
int loAttrSize = ltSysAttrs.length + ltUserAttrs.length + 2;
|
int btSysAttrSize = btSysAttrs.length;
|
// 缓存业务类型对应的用户属性
|
Map<String, String[]> btUserAttrMap = new HashMap<String, String[]>();
|
|
List<BOAndLO> boAndLoList = new ArrayList<BOAndLO>();
|
Session session = HibernateSessionFactory.getSession();
|
ServerWithLog4j.logger.debug(sql);
|
SQLQuery sqlQuery = session.createSQLQuery(sql);
|
// 查询出的记录为Map<String, Object>的List集合
|
sqlQuery.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
|
List<?> list = sqlQuery.list();
|
for (int i = 0; i < list.size(); i++) {
|
// modify by weidy@2019-02-25,原来的方式在数据量大的时候,会造成大量线程,并且查询业务类型也会重复查询
|
// 修改为。1,先行查询to端或者from端的业务类型包含的属性
|
Map<String, Object> map = (Map<String, Object>) list.get(i);
|
String btName = "";
|
if (direction.equals(QTConstants.DIRECTION_POSITIVE)) {
|
Object value = map.get(SystemAttribute.T_BTWNAME.text());
|
btName = String.valueOf(value == null ? "" : value);
|
} else {
|
Object value = map.get(SystemAttribute.F_BTWNAME.text());
|
btName = String.valueOf(value == null ? "" : value);
|
}
|
if (!btUserAttrMap.containsKey(btName)) {
|
//String[] btUserAttrs = ServerServiceProvider.getOMDService().getBTMService().getBtmApNameArray(btName);// BtmProvider.getInstance().getAbNames(btName);
|
String[] btUserAttrs = OMCacheProvider.getBTAttributes(btName);
|
btUserAttrMap.put(btName, btUserAttrs);
|
}
|
}
|
for (int i = 0; i < list.size(); i++) {
|
Map<String, Object> map = (Map<String, Object>) list.get(i);// 线程池已经是根据CPU的个数来执行的了
|
exec_.submit(
|
new QueryBOAndLO(map, direction, ltUserAttrs, ltName, loAttrSize, btUserAttrMap, btSysAttrSize));
|
}
|
for (int m = 0; m < list.size(); m++) {
|
boAndLoList.add(exec_.take().get());
|
}
|
exec.shutdown();
|
return boAndLoList;
|
} catch (Throwable e) {
|
e.printStackTrace();
|
throw getLocalVciError("P0010QT-00009", e);
|
}
|
|
}
|
|
public List<BOAndLO> executeSqlForBOAndLOOneLevel(List<String> clauseList, String sql, String ltName,
|
String direction, Map<String, String> isLeafMap) throws VCIError {
|
try {
|
String[] btSysAttrs = OmdHelper.getBTSysANames();
|
String[] ltSysAttrs = OmdHelper.getLTSysAbItems();
|
//LinkType linkType = ServerServiceProvider.getOMDService().getLinkTypeService().getLinkType(ltName);// LinkTypeProvider.getInstance().getLinkTypeByName(ltName);
|
LinkType linkType = OMCacheProvider.getLinkType(ltName);
|
String[] ltUserAttrs = linkType.attributes;
|
// +2 for :CONNECT_BY_ISLEAF , LEVEL
|
int loAttrSize = ltSysAttrs.length + ltUserAttrs.length + 2;
|
int btSysAttrSize = btSysAttrs.length;
|
// 缓存业务类型对应的用户属性
|
Map<String, String[]> btUserAttrMap = new HashMap<String, String[]>();
|
|
List<BOAndLO> boAndLoList = new ArrayList<BOAndLO>();
|
Session session = HibernateSessionFactory.getSession();
|
ServerWithLog4j.logger.debug(sql);
|
SQLQuery sqlQuery = session.createSQLQuery(sql);
|
// 查询出的记录为Map<String, Object>的List集合
|
sqlQuery.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
|
List<?> list = sqlQuery.list();
|
for (int i = 0; i < list.size(); i++) {
|
Map<String, Object> map = (Map<String, Object>) list.get(i);
|
BOAndLO boAndLo = getBOAndLOOneLevel(map, direction, ltUserAttrs, ltName, loAttrSize, btUserAttrMap,
|
btSysAttrSize, isLeafMap);
|
boAndLoList.add(boAndLo);
|
}
|
return boAndLoList;
|
} catch (Throwable e) {
|
e.printStackTrace();
|
throw getLocalVciError("P0010QT-00009", e);
|
}
|
|
}
|
|
/**
|
* 对查询结果进行过滤
|
*
|
* @param los
|
*/
|
public List<LinkObject> filterLos(List<LinkObject> los) {
|
List<LinkObject> list = new ArrayList<LinkObject>();
|
Map<String, String> map = new HashMap<String, String>();
|
for (LinkObject lo : los) {
|
if (!map.containsKey(lo.oid)) {
|
list.add(lo);
|
map.put(lo.oid, lo.oid);
|
}
|
}
|
return list;
|
}
|
|
/**
|
* 对查询结果进行过滤
|
*
|
* @param list
|
* @return
|
*/
|
public List<BOAndLO> filterLoAndBOs(List<BOAndLO> loAndBos) {
|
List<BOAndLO> list = new ArrayList<BOAndLO>();
|
Map<String, String> map = new HashMap<String, String>();
|
for (BOAndLO loAndBo : loAndBos) {
|
if (!map.containsKey(loAndBo.lo.oid)) {
|
list.add(loAndBo);
|
map.put(loAndBo.lo.oid, loAndBo.lo.oid);
|
}
|
}
|
return list;
|
}
|
|
/**
|
* 将一条查询出的记录封装成LO
|
*
|
* @param map: 一条从linkTable查询出的记录
|
* @param ltUserAttrs: 链接类型的用户属性
|
* @param ltName: 链接类型
|
* @param loAttrSize: 链接类型的属性长度(系统属性+用户属性)
|
* @return
|
*/
|
@SuppressWarnings("unused")
|
private LinkObject getLO(Map<String, Object> map, String[] ltUserAttrs, String ltName, int loAttrSize) {
|
// 设置lo
|
LinkObject lo = new LinkObject();
|
AttributeValue[] loAttrArray = new AttributeValue[loAttrSize];
|
// 为link的系统属性赋值
|
int k = 0;
|
String attrName = SystemAttribute.OID.text();
|
Object value = map.get(attrName);
|
lo.oid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.oid);
|
|
attrName = SystemAttribute.CREATOR.text();
|
value = map.get(attrName);
|
lo.creator = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.creator);
|
|
attrName = SystemAttribute.CREATETIME.text();
|
value = map.get(attrName);
|
lo.createTime = (int)(value == null ? 0 : value);
|
loAttrArray[k++] = new AttributeValue(attrName, String.valueOf(lo.createTime));
|
|
attrName = SystemAttribute.LASTMODIFIER.text();
|
value = map.get(attrName);
|
lo.modifier = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.modifier);
|
|
attrName = SystemAttribute.LASTMODIFYTIME.text();
|
value = map.get(attrName);
|
lo.modifyTime = (int)(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, String.valueOf(lo.modifyTime));
|
|
attrName = SystemAttribute.F_OID.text();
|
value = map.get(attrName);
|
lo.fromOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.fromOid);
|
|
attrName = SystemAttribute.F_REVISIONOID.text();
|
value = map.get(attrName);
|
lo.fromRevOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.fromRevOid);
|
|
attrName = SystemAttribute.F_NAMEOID.text();
|
value = map.get(attrName);
|
lo.fromNameOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.fromNameOid);
|
|
attrName = SystemAttribute.F_BTWNAME.text();
|
value = map.get(attrName);
|
lo.fromBTName = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.fromBTName);
|
|
attrName = SystemAttribute.T_OID.text();
|
value = map.get(attrName);
|
lo.toOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.toOid);
|
|
attrName = SystemAttribute.T_REVISIONOID.text();
|
value = map.get(attrName);
|
lo.toRevOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.toRevOid);
|
|
attrName = SystemAttribute.T_NAMEOID.text();
|
value = map.get(attrName);
|
lo.toNameOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.toNameOid);
|
|
attrName = SystemAttribute.T_BTWNAME.text();
|
value = map.get(attrName);
|
lo.toBTName = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.toBTName);
|
|
attrName = SystemAttribute.TS.text();
|
value = map.get(attrName);
|
lo.ts = ObjectUtility.getTimeMillis(value);
|
loAttrArray[k++] = new AttributeValue(attrName, String.valueOf(lo.ts));
|
|
// lo自定义属性赋值
|
for (String userAttr : ltUserAttrs) {
|
attrName = userAttr.toUpperCase();
|
value = map.get(attrName);
|
loAttrArray[k++] = new AttributeValue(userAttr, getDbRetrunVal(value));
|
}
|
|
// 将CONNECT_BY_ISLEAF , LEVEL加入lo.hisAttrValList
|
value = map.get("CONNECT_BY_ISLEAF");
|
loAttrArray[k++] = new AttributeValue("_ISLEAF", String.valueOf(value == null ? "" : value));
|
|
value = map.get("LEVEL");
|
loAttrArray[k++] = new AttributeValue("_LEVEL", String.valueOf(value == null ? "" : value));
|
|
lo.hisAttrValList = loAttrArray;
|
lo.newAttrValList = new AttributeValue[0];
|
// 目前系统属性没有ltName, 传参赋值
|
lo.ltName = ltName;
|
return lo;
|
}
|
|
/**
|
* 将一条查询出的记录封装成LO
|
*
|
* @param map: 一条从linkTable查询出的记录
|
* @param ltUserAttrs: 链接类型的用户属性
|
* @param ltName: 链接类型
|
* @param loAttrSize: 链接类型的属性长度(系统属性+用户属性)
|
* @param clauseList 返回列
|
* @return
|
*/
|
private LinkObject getLO(Map<String, Object> map, String[] ltUserAttrs, String ltName, int loAttrSize,
|
List<String> clauseList) {
|
// 设置lo
|
LinkObject lo = new LinkObject();
|
// 为link的系统属性赋值
|
List<AttributeValue> attrList = new ArrayList<AttributeValue>();
|
AttributeValue[] loAttrArrayNew = new AttributeValue[clauseList.size()];
|
for (int i = 0; i < clauseList.size(); i++) {
|
String attrName = clauseList.get(i).toUpperCase();
|
if (attrName.indexOf(" AS ") > -1) {
|
attrName = attrName.substring(attrName.lastIndexOf(" AS ") + 4);
|
}
|
Object attrVal = map.get(attrName);
|
if (!attrName.equals(SystemAttribute.REVISIONOID + "2") && !attrName.equals(SystemAttribute.OID + "2")) {
|
String attrValStr = String.valueOf(attrVal == null ? "" : attrVal);
|
attrList.add(new AttributeValue(attrName, attrValStr));
|
}
|
}
|
|
String attrName = SystemAttribute.OID.text();
|
Object value = map.get(attrName);
|
lo.oid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.CREATOR.text();
|
value = map.get(attrName);
|
lo.creator = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.CREATETIME.text();
|
value = map.get(attrName);
|
lo.createTime = ObjectUtility.getTimeMillis(value);
|
|
attrName = SystemAttribute.LASTMODIFIER.text();
|
value = map.get(attrName);
|
lo.modifier = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.LASTMODIFYTIME.text();
|
value = map.get(attrName);
|
lo.modifyTime = ObjectUtility.getTimeMillis(value);
|
|
attrName = SystemAttribute.F_OID.text();
|
value = map.get(attrName);
|
lo.fromOid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.F_REVISIONOID.text();
|
value = map.get(attrName);
|
lo.fromRevOid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.F_NAMEOID.text();
|
value = map.get(attrName);
|
lo.fromNameOid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.F_BTWNAME.text();
|
value = map.get(attrName);
|
lo.fromBTName = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.T_OID.text();
|
value = map.get(attrName);
|
lo.toOid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.T_REVISIONOID.text();
|
value = map.get(attrName);
|
lo.toRevOid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.T_NAMEOID.text();
|
value = map.get(attrName);
|
lo.toNameOid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.T_BTWNAME.text();
|
value = map.get(attrName);
|
lo.toBTName = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.TS.text();
|
value = map.get(attrName);
|
lo.ts = ObjectUtility.getTimeMillis(value);
|
|
// lo自定义属性赋值
|
|
// 将CONNECT_BY_ISLEAF , LEVEL加入lo.hisAttrValList
|
value = map.get("CONNECT_BY_ISLEAF");
|
attrList.add(new AttributeValue("_ISLEAF", String.valueOf(value == null ? "" : value)));
|
|
value = map.get("LEVEL");
|
attrList.add(new AttributeValue("_LEVEL", String.valueOf(value == null ? "" : value)));
|
|
loAttrArrayNew = attrList.toArray(new AttributeValue[0]);
|
lo.hisAttrValList = loAttrArrayNew;
|
lo.newAttrValList = new AttributeValue[0];
|
// 目前系统属性没有ltName, 传参赋值
|
lo.ltName = ltName;
|
return lo;
|
}
|
|
|
@SuppressWarnings("unused")
|
private LinkObject getLOOneLevel(Map<String, Object> map, String[] ltUserAttrs, String ltName, int loAttrSize,
|
Map<String, String> isLeafMap) {
|
// 设置lo
|
LinkObject lo = new LinkObject();
|
AttributeValue[] loAttrArray = new AttributeValue[loAttrSize];
|
// 为link的系统属性赋值
|
int k = 0;
|
String attrName = SystemAttribute.OID.text();
|
Object value = map.get(attrName);
|
lo.oid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.oid);
|
|
attrName = SystemAttribute.CREATOR.text();
|
value = map.get(attrName);
|
lo.creator = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.creator);
|
|
attrName = SystemAttribute.CREATETIME.text();
|
value = map.get(attrName);
|
lo.createTime = ObjectUtility.getTimeMillis(value);
|
loAttrArray[k++] = new AttributeValue(attrName, String.valueOf(lo.createTime));
|
|
attrName = SystemAttribute.LASTMODIFIER.text();
|
value = map.get(attrName);
|
lo.modifier = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.modifier);
|
|
attrName = SystemAttribute.LASTMODIFYTIME.text();
|
value = map.get(attrName);
|
lo.modifyTime = ObjectUtility.getTimeMillis(value);
|
loAttrArray[k++] = new AttributeValue(attrName, String.valueOf(lo.modifyTime));
|
|
attrName = SystemAttribute.F_OID.text();
|
value = map.get(attrName);
|
lo.fromOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.fromOid);
|
|
attrName = SystemAttribute.F_REVISIONOID.text();
|
value = map.get(attrName);
|
lo.fromRevOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.fromRevOid);
|
|
attrName = SystemAttribute.F_NAMEOID.text();
|
value = map.get(attrName);
|
lo.fromNameOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.fromNameOid);
|
|
attrName = SystemAttribute.F_BTWNAME.text();
|
value = map.get(attrName);
|
lo.fromBTName = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.fromBTName);
|
|
attrName = SystemAttribute.T_OID.text();
|
value = map.get(attrName);
|
lo.toOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.toOid);
|
|
attrName = SystemAttribute.T_REVISIONOID.text();
|
value = map.get(attrName);
|
lo.toRevOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.toRevOid);
|
|
attrName = SystemAttribute.T_NAMEOID.text();
|
value = map.get(attrName);
|
lo.toNameOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.toNameOid);
|
|
attrName = SystemAttribute.T_BTWNAME.text();
|
value = map.get(attrName);
|
lo.toBTName = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.toBTName);
|
|
attrName = SystemAttribute.TS.text();
|
value = map.get(attrName);
|
lo.ts = ObjectUtility.getTimeMillis(value);
|
loAttrArray[k++] = new AttributeValue(attrName, String.valueOf(lo.ts));
|
|
// lo自定义属性赋值
|
for (String userAttr : ltUserAttrs) {
|
attrName = userAttr.toUpperCase();
|
value = map.get(attrName);
|
loAttrArray[k++] = new AttributeValue(userAttr, getDbRetrunVal(value));
|
}
|
|
// 将CONNECT_BY_ISLEAF , LEVEL加入lo.hisAttrValList
|
value = isLeafMap.get(lo.oid);
|
loAttrArray[k++] = new AttributeValue("_ISLEAF", String.valueOf(value == null ? "" : value));
|
|
value = map.get("LEVEL");
|
loAttrArray[k++] = new AttributeValue("_LEVEL", String.valueOf(value == null ? "" : value));
|
|
lo.hisAttrValList = loAttrArray;
|
lo.newAttrValList = new AttributeValue[0];
|
// 目前系统属性没有ltName, 传参赋值
|
lo.ltName = ltName;
|
return lo;
|
}
|
|
private LinkObject getLOOneLevel(Map<String, Object> map, String[] ltUserAttrs, String ltName, int loAttrSize,
|
Map<String, String> isLeafMap, List<String> clauseList) {
|
// 设置lo
|
LinkObject lo = new LinkObject();
|
// 为link的系统属性赋值
|
List<AttributeValue> attrList = new ArrayList<AttributeValue>();
|
AttributeValue[] loAttrArrayNew = new AttributeValue[clauseList.size()];
|
for (int i = 0; i < clauseList.size(); i++) {
|
String attrName = clauseList.get(i).toUpperCase();
|
if (attrName.indexOf(" AS ") > -1) {
|
attrName = attrName.substring(attrName.lastIndexOf(" AS ") + 4);
|
}
|
Object attrVal = map.get(attrName);
|
if (!attrName.equals(SystemAttribute.REVISIONOID + "2") && !attrName.equals(SystemAttribute.OID + "2")) {
|
String attrValStr = String.valueOf(attrVal == null ? "" : attrVal);
|
attrList.add(new AttributeValue(attrName, attrValStr));
|
}
|
}
|
|
String attrName = SystemAttribute.OID.text();
|
Object value = map.get(attrName);
|
lo.oid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.CREATOR.text();
|
value = map.get(attrName);
|
lo.creator = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.CREATETIME.text();
|
value = map.get(attrName);
|
lo.createTime = ObjectUtility.getTimeMillis(value);
|
|
attrName = SystemAttribute.LASTMODIFIER.text();
|
value = map.get(attrName);
|
lo.modifier = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.LASTMODIFYTIME.text();
|
value = map.get(attrName);
|
lo.modifyTime = ObjectUtility.getTimeMillis(value);
|
|
attrName = SystemAttribute.F_OID.text();
|
value = map.get(attrName);
|
lo.fromOid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.F_REVISIONOID.text();
|
value = map.get(attrName);
|
lo.fromRevOid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.F_NAMEOID.text();
|
value = map.get(attrName);
|
lo.fromNameOid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.F_BTWNAME.text();
|
value = map.get(attrName);
|
lo.fromBTName = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.T_OID.text();
|
value = map.get(attrName);
|
lo.toOid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.T_REVISIONOID.text();
|
value = map.get(attrName);
|
lo.toRevOid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.T_NAMEOID.text();
|
value = map.get(attrName);
|
lo.toNameOid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.T_BTWNAME.text();
|
value = map.get(attrName);
|
lo.toBTName = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.TS.text();
|
value = map.get(attrName);
|
lo.ts = ObjectUtility.getTimeMillis(value);
|
|
// 将CONNECT_BY_ISLEAF , LEVEL加入lo.hisAttrValList
|
value = isLeafMap.get(lo.oid);
|
attrList.add(new AttributeValue("_ISLEAF", String.valueOf(value == null ? "" : value)));
|
value = map.get("LEVEL");
|
attrList.add(new AttributeValue("_LEVEL", String.valueOf(value == null ? "" : value)));
|
loAttrArrayNew = attrList.toArray(new AttributeValue[0]);
|
lo.hisAttrValList = loAttrArrayNew;
|
lo.newAttrValList = new AttributeValue[0];
|
// 目前系统属性没有ltName, 传参赋值
|
lo.ltName = ltName;
|
return lo;
|
}
|
|
/**
|
* 将一条查询出的记录封装成LO, 用btmView.OID, btmView.REVISIONOID作t_oid, t_revisionOid
|
*
|
* @param map: 一条从linkTable和btmView.OID, btmView.REVISIONOID查询出的记录
|
* @param direction: 链接查询的方向
|
* @param ltUserAttrs: 链接类型的用户属性
|
* @param ltName: 链接类型
|
* @param loAttrSize: 链接类型的属性长度(系统属性+用户属性)
|
* @return
|
*/
|
private LinkObject getLOWithVersion(Map<String, Object> map, String direction, String[] ltUserAttrs, String ltName,
|
int loAttrSize) {
|
// 设置lo
|
LinkObject lo = new LinkObject();
|
AttributeValue[] loAttrArray = new AttributeValue[loAttrSize];
|
// 为link的系统属性赋值
|
int k = 0;
|
String attrName = SystemAttribute.OID.text();
|
Object value = map.get(attrName);
|
lo.oid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.oid);
|
|
attrName = SystemAttribute.CREATOR.text();
|
value = map.get(attrName);
|
lo.creator = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.creator);
|
|
attrName = SystemAttribute.CREATETIME.text();
|
value = map.get(attrName);
|
lo.createTime = ObjectUtility.getTimeMillis(value);
|
loAttrArray[k++] = new AttributeValue(attrName, String.valueOf(lo.createTime));
|
|
attrName = SystemAttribute.LASTMODIFIER.text();
|
value = map.get(attrName);
|
lo.modifier = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.modifier);
|
|
attrName = SystemAttribute.LASTMODIFYTIME.text();
|
value = map.get(attrName);
|
lo.modifyTime = ObjectUtility.getTimeMillis(value);
|
loAttrArray[k++] = new AttributeValue(attrName, String.valueOf(lo.modifyTime));
|
|
attrName = SystemAttribute.F_OID.text();
|
if (direction.equals(QTConstants.DIRECTION_OPPOSITE)) {
|
attrName = SystemAttribute.OID + "2";
|
}
|
value = map.get(attrName);
|
lo.fromOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(SystemAttribute.F_OID.text(), lo.fromOid);
|
|
attrName = SystemAttribute.F_REVISIONOID.text();
|
if (direction.equals(QTConstants.DIRECTION_OPPOSITE)) {
|
attrName = SystemAttribute.REVISIONOID + "2";
|
}
|
value = map.get(attrName);
|
lo.fromRevOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(SystemAttribute.F_REVISIONOID.text(), lo.fromRevOid);
|
|
attrName = SystemAttribute.F_NAMEOID.text();
|
value = map.get(attrName);
|
lo.fromNameOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.fromNameOid);
|
|
attrName = SystemAttribute.F_BTWNAME.text();
|
value = map.get(attrName);
|
lo.fromBTName = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.fromBTName);
|
|
attrName = SystemAttribute.T_OID.text();
|
if (direction.equals(QTConstants.DIRECTION_POSITIVE)) {
|
attrName = SystemAttribute.OID + "2";
|
}
|
value = map.get(attrName);
|
lo.toOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(SystemAttribute.T_OID.text(), lo.toOid);
|
|
attrName = SystemAttribute.T_REVISIONOID.text();
|
if (direction.equals(QTConstants.DIRECTION_POSITIVE)) {
|
attrName = SystemAttribute.REVISIONOID + "2";
|
}
|
value = map.get(attrName);
|
lo.toRevOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(SystemAttribute.T_REVISIONOID.text(), lo.toRevOid);
|
|
attrName = SystemAttribute.T_NAMEOID.text();
|
value = map.get(attrName);
|
lo.toNameOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.toNameOid);
|
|
attrName = SystemAttribute.T_BTWNAME.text();
|
value = map.get(attrName);
|
lo.toBTName = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.toBTName);
|
|
attrName = SystemAttribute.TS.text();
|
value = map.get(attrName);
|
lo.ts = ObjectUtility.getTimeMillis(value);
|
loAttrArray[k++] = new AttributeValue(attrName, String.valueOf(lo.ts));
|
|
// lo自定义属性赋值
|
for (String userAttr : ltUserAttrs) {
|
attrName = userAttr.toUpperCase();
|
value = map.get(attrName);
|
loAttrArray[k++] = new AttributeValue(userAttr, getDbRetrunVal(value));
|
}
|
|
// 将CONNECT_BY_ISLEAF , LEVEL加入lo.hisAttrValList
|
value = map.get("CONNECT_BY_ISLEAF");
|
loAttrArray[k++] = new AttributeValue("_ISLEAF", String.valueOf(value == null ? "" : value));
|
|
value = map.get("LEVEL");
|
loAttrArray[k++] = new AttributeValue("_LEVEL", String.valueOf(value == null ? "" : value));
|
|
lo.hisAttrValList = loAttrArray;
|
lo.newAttrValList = new AttributeValue[0];
|
// 目前系统属性没有ltName, 传参赋值
|
lo.ltName = ltName;
|
return lo;
|
}
|
|
/**
|
* 将一条查询出的记录封装成LO, 用btmView.OID, btmView.REVISIONOID作t_oid, t_revisionOid
|
*
|
* @param map
|
* @param direction
|
* @param ltUserAttrs
|
* @param ltName
|
* @param loAttrSize
|
* @param isLeafMap
|
* @return
|
*/
|
@SuppressWarnings("unused")
|
private LinkObject getLOWithVersionOneLevel(Map<String, Object> map, String direction, String[] ltUserAttrs,
|
String ltName, int loAttrSize, Map<String, String> isLeafMap) {
|
// 设置lo
|
LinkObject lo = new LinkObject();
|
AttributeValue[] loAttrArray = new AttributeValue[loAttrSize];
|
// 为link的系统属性赋值
|
int k = 0;
|
String attrName = SystemAttribute.OID.text();
|
Object value = map.get(attrName);
|
lo.oid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.oid);
|
|
attrName = SystemAttribute.CREATOR.text();
|
value = map.get(attrName);
|
lo.creator = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.creator);
|
|
attrName = SystemAttribute.CREATETIME.text();
|
value = map.get(attrName);
|
lo.createTime = ObjectUtility.getTimeMillis(value);
|
loAttrArray[k++] = new AttributeValue(attrName, String.valueOf(lo.createTime));
|
|
attrName = SystemAttribute.LASTMODIFIER.text();
|
value = map.get(attrName);
|
lo.modifier = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.modifier);
|
|
attrName = SystemAttribute.LASTMODIFYTIME.text();
|
value = map.get(attrName);
|
lo.modifyTime = ObjectUtility.getTimeMillis(value);
|
loAttrArray[k++] = new AttributeValue(attrName, String.valueOf(lo.modifyTime));
|
|
attrName = SystemAttribute.F_OID.text();
|
if (direction.equals(QTConstants.DIRECTION_OPPOSITE)) {
|
attrName = SystemAttribute.OID + "2";
|
}
|
value = map.get(attrName);
|
lo.fromOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(SystemAttribute.F_OID.text(), lo.fromOid);
|
|
attrName = SystemAttribute.F_REVISIONOID.text();
|
if (direction.equals(QTConstants.DIRECTION_OPPOSITE)) {
|
attrName = SystemAttribute.REVISIONOID + "2";
|
}
|
value = map.get(attrName);
|
lo.fromRevOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(SystemAttribute.F_REVISIONOID.text(), lo.fromRevOid);
|
|
attrName = SystemAttribute.F_NAMEOID.text();
|
value = map.get(attrName);
|
lo.fromNameOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.fromNameOid);
|
|
attrName = SystemAttribute.F_BTWNAME.text();
|
value = map.get(attrName);
|
lo.fromBTName = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.fromBTName);
|
|
attrName = SystemAttribute.T_OID.text();
|
if (direction.equals(QTConstants.DIRECTION_POSITIVE)) {
|
attrName = SystemAttribute.OID + "2";
|
}
|
value = map.get(attrName);
|
lo.toOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(SystemAttribute.T_OID.text(), lo.toOid);
|
|
attrName = SystemAttribute.T_REVISIONOID.text();
|
if (direction.equals(QTConstants.DIRECTION_POSITIVE)) {
|
attrName = SystemAttribute.REVISIONOID + "2";
|
}
|
value = map.get(attrName);
|
lo.toRevOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(SystemAttribute.T_REVISIONOID.text(), lo.toRevOid);
|
|
attrName = SystemAttribute.T_NAMEOID.text();
|
value = map.get(attrName);
|
lo.toNameOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.toNameOid);
|
|
attrName = SystemAttribute.T_BTWNAME.text();
|
value = map.get(attrName);
|
lo.toBTName = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.toBTName);
|
|
attrName = SystemAttribute.TS.text();
|
value = map.get(attrName);
|
lo.ts = ObjectUtility.getTimeMillis(value);
|
loAttrArray[k++] = new AttributeValue(attrName, String.valueOf(lo.ts));
|
|
// lo自定义属性赋值
|
for (String userAttr : ltUserAttrs) {
|
attrName = userAttr.toUpperCase();
|
value = map.get(attrName);
|
loAttrArray[k++] = new AttributeValue(userAttr, getDbRetrunVal(value));
|
}
|
|
// 将CONNECT_BY_ISLEAF , LEVEL加入lo.hisAttrValList
|
value = isLeafMap.get(lo.oid);
|
loAttrArray[k++] = new AttributeValue("_ISLEAF", String.valueOf(value == null ? "" : value));
|
|
value = map.get("LEVEL");
|
loAttrArray[k++] = new AttributeValue("_LEVEL", String.valueOf(value == null ? "" : value));
|
|
lo.hisAttrValList = loAttrArray;
|
lo.newAttrValList = new AttributeValue[0];
|
// 目前系统属性没有ltName, 传参赋值
|
lo.ltName = ltName;
|
return lo;
|
}
|
|
/**
|
* add by liumh150909,更改为按列返回值 将一条查询出的记录封装成LO, 用btmView.OID,
|
* btmView.REVISIONOID作t_oid, t_revisionOid
|
*
|
* @param map
|
* @param direction
|
* @param ltUserAttrs
|
* @param ltName
|
* @param loAttrSize
|
* @param isLeafMap
|
* @param clauseList
|
* @return
|
*/
|
private LinkObject getLOWithVersionOneLevel(Map<String, Object> map, String direction, String[] ltUserAttrs,
|
String ltName, int loAttrSize, Map<String, String> isLeafMap, List<String> clauseList) {
|
return this.getLOWithVersionOneLevelV2(map, direction, ltUserAttrs, ltName, loAttrSize, isLeafMap, clauseList,
|
new IntHolder(0));
|
}
|
|
/**
|
* add by liumh150909,更改为按列返回值 将一条查询出的记录封装成LO, 用btmView.OID,
|
* btmView.REVISIONOID作t_oid, t_revisionOid
|
*
|
* @param map
|
* @param direction
|
* @param ltUserAttrs
|
* @param ltName
|
* @param loAttrSize
|
* @param isLeafMap
|
* @param clauseList
|
* @return
|
*/
|
private LinkObject getLOWithVersionOneLevelV2(Map<String, Object> map, String direction, String[] ltUserAttrs,
|
String ltName, int loAttrSize, Map<String, String> isLeafMap, List<String> clauseList, IntHolder count) {
|
// 设置lo
|
LinkObject lo = new LinkObject();
|
// 为link的系统属性赋值
|
List<AttributeValue> attrList = new ArrayList<AttributeValue>();
|
AttributeValue[] loAttrArrayNew = new AttributeValue[clauseList.size()];
|
for (int i = 0; i < clauseList.size(); i++) {
|
String attrName = clauseList.get(i).toUpperCase();
|
if (attrName.indexOf(" AS ") > -1) {
|
attrName = attrName.substring(attrName.lastIndexOf(" AS ") + 4);
|
}
|
Object attrVal = map.get(attrName);
|
if (attrName.equalsIgnoreCase(QTConstants.COUNT_OVER_ALIAS)) {
|
int countValue = Integer.valueOf(attrVal.toString());
|
if (count == null) {
|
count = new IntHolder(0);
|
}
|
count.value = countValue;
|
continue;
|
}
|
|
if (attrName.equalsIgnoreCase(SystemAttribute.F_OID.text())) {
|
if (direction.equals(QTConstants.DIRECTION_OPPOSITE)) {
|
attrName = SystemAttribute.OID + "2";
|
}
|
attrVal = map.get(attrName);
|
attrName = SystemAttribute.F_OID.text();
|
} else if (attrName.equalsIgnoreCase(SystemAttribute.F_REVISIONOID.text())) {
|
if (direction.equals(QTConstants.DIRECTION_OPPOSITE)) {
|
attrName = SystemAttribute.REVISIONOID + "2";
|
}
|
attrVal = map.get(attrName);
|
attrName = SystemAttribute.F_REVISIONOID.text();
|
} else if (attrName.equalsIgnoreCase(SystemAttribute.T_OID.text())) {
|
if (direction.equals(QTConstants.DIRECTION_POSITIVE)) {
|
attrName = SystemAttribute.OID + "2";
|
}
|
attrVal = map.get(attrName);
|
attrName = SystemAttribute.T_OID.text();
|
} else if (attrName.equalsIgnoreCase(SystemAttribute.T_REVISIONOID.text())) {
|
if (direction.equals(QTConstants.DIRECTION_POSITIVE)) {
|
attrName = SystemAttribute.REVISIONOID + "2";
|
}
|
attrVal = map.get(attrName);
|
attrName = SystemAttribute.T_REVISIONOID.text();
|
}
|
|
if (!attrName.equals(SystemAttribute.REVISIONOID + "2") && !attrName.equals(SystemAttribute.OID + "2")) {
|
String attrValStr = String.valueOf(attrVal == null ? "" : attrVal);
|
attrList.add(new AttributeValue(attrName, attrValStr));
|
}
|
}
|
String attrName = SystemAttribute.OID.text();
|
Object value = map.get(attrName);
|
lo.oid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.CREATOR.text();
|
value = map.get(attrName);
|
lo.creator = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.CREATETIME.text();
|
value = map.get(attrName);
|
lo.createTime = ObjectUtility.getTimeMillis(value);
|
|
attrName = SystemAttribute.LASTMODIFIER.text();
|
value = map.get(attrName);
|
lo.modifier = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.LASTMODIFYTIME.text();
|
value = map.get(attrName);
|
lo.modifyTime = ObjectUtility.getTimeMillis(value);
|
|
attrName = SystemAttribute.F_OID.text();
|
if (direction.equals(QTConstants.DIRECTION_OPPOSITE)) {
|
attrName = SystemAttribute.OID + "2";
|
}
|
value = map.get(attrName);
|
lo.fromOid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.F_REVISIONOID.text();
|
if (direction.equals(QTConstants.DIRECTION_OPPOSITE)) {
|
attrName = SystemAttribute.REVISIONOID + "2";
|
}
|
value = map.get(attrName);
|
lo.fromRevOid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.F_NAMEOID.text();
|
value = map.get(attrName);
|
lo.fromNameOid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.F_BTWNAME.text();
|
value = map.get(attrName);
|
lo.fromBTName = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.T_OID.text();
|
if (direction.equals(QTConstants.DIRECTION_POSITIVE)) {
|
attrName = SystemAttribute.OID + "2";
|
}
|
value = map.get(attrName);
|
lo.toOid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.T_REVISIONOID.text();
|
if (direction.equals(QTConstants.DIRECTION_POSITIVE)) {
|
attrName = SystemAttribute.REVISIONOID + "2";
|
}
|
value = map.get(attrName);
|
lo.toRevOid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.T_NAMEOID.text();
|
value = map.get(attrName);
|
lo.toNameOid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.T_BTWNAME.text();
|
value = map.get(attrName);
|
lo.toBTName = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.TS.text();
|
value = map.get(attrName);
|
lo.ts = ObjectUtility.getTimeMillis(value);
|
|
// 将CONNECT_BY_ISLEAF , LEVEL加入lo.hisAttrValList
|
value = isLeafMap.get(lo.oid);
|
attrList.add(new AttributeValue("_ISLEAF", String.valueOf(value == null ? "" : value)));
|
|
value = map.get("LEVEL");
|
attrList.add(new AttributeValue("_LEVEL", String.valueOf(value == null ? "" : value)));
|
|
loAttrArrayNew = attrList.toArray(new AttributeValue[0]);
|
lo.hisAttrValList = loAttrArrayNew;
|
lo.newAttrValList = new AttributeValue[0];
|
// 目前系统属性没有ltName, 传参赋值
|
lo.ltName = ltName;
|
return lo;
|
}
|
|
/**
|
* 将一条查询出的记录封装成BOAndLO
|
*
|
* @param map: 一条从linkTable和btmView查询出的记录
|
* @param direction: 链接查询的方向
|
* @param ltUserAttrs: 链接类型的用户属性
|
* @param ltName: 链接类型
|
* @param loAttrSize: 链接类型的属性长度(系统属性+用户属性)
|
* @param btUserAttrMap: 业务类型及其对应的用户属性Map
|
* @param btSysAttrSize: 业务类型的系统属性长度
|
* @return
|
*/
|
private BOAndLO getBOAndLO(Map<String, Object> map, String direction, String[] ltUserAttrs, String ltName,
|
int loAttrSize, Map<String, String[]> btUserAttrMap, int btSysAttrSize) throws VCIError {
|
// 设置lo
|
LinkObject lo = new LinkObject();
|
AttributeValue[] loAttrArray = new AttributeValue[loAttrSize];
|
// 为link的系统属性赋值
|
int k = 0;
|
String attrName = SystemAttribute.OID.text();
|
Object value = map.get(attrName);
|
lo.oid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.oid);
|
|
attrName = SystemAttribute.CREATOR.text();
|
value = map.get(attrName);
|
lo.creator = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.creator);
|
|
attrName = SystemAttribute.CREATETIME.text();
|
value = map.get(attrName);
|
lo.createTime = ObjectUtility.getTimeMillis(value);
|
loAttrArray[k++] = new AttributeValue(attrName, String.valueOf(lo.createTime));
|
|
attrName = SystemAttribute.LASTMODIFIER.text();
|
value = map.get(attrName);
|
lo.modifier = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.modifier);
|
|
attrName = SystemAttribute.LASTMODIFYTIME.text();
|
value = map.get(attrName);
|
lo.modifyTime = ObjectUtility.getTimeMillis(value);
|
loAttrArray[k++] = new AttributeValue(attrName, String.valueOf(lo.modifyTime));
|
|
attrName = SystemAttribute.F_OID.text();
|
if (direction.equals(QTConstants.DIRECTION_OPPOSITE)) {
|
attrName = SystemAttribute.OID + "2";
|
}
|
value = map.get(attrName);
|
lo.fromOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(SystemAttribute.F_OID.text(), lo.fromOid);
|
|
attrName = SystemAttribute.F_REVISIONOID.text();
|
if (direction.equals(QTConstants.DIRECTION_OPPOSITE)) {
|
attrName = SystemAttribute.REVISIONOID + "2";
|
}
|
value = map.get(attrName);
|
lo.fromRevOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(SystemAttribute.F_REVISIONOID.text(), lo.fromRevOid);
|
|
attrName = SystemAttribute.F_NAMEOID.text();
|
value = map.get(attrName);
|
lo.fromNameOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.fromNameOid);
|
|
attrName = SystemAttribute.F_BTWNAME.text();
|
value = map.get(attrName);
|
lo.fromBTName = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.fromBTName);
|
|
attrName = SystemAttribute.T_OID.text();
|
if (direction.equals(QTConstants.DIRECTION_POSITIVE)) {
|
attrName = SystemAttribute.OID + "2";
|
}
|
value = map.get(attrName);
|
lo.toOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(SystemAttribute.T_OID.text(), lo.toOid);
|
|
attrName = SystemAttribute.T_REVISIONOID.text();
|
if (direction.equals(QTConstants.DIRECTION_POSITIVE)) {
|
attrName = SystemAttribute.REVISIONOID + "2";
|
}
|
value = map.get(attrName);
|
lo.toRevOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(SystemAttribute.T_REVISIONOID.text(), lo.toRevOid);
|
|
attrName = SystemAttribute.T_NAMEOID.text();
|
value = map.get(attrName);
|
lo.toNameOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.toNameOid);
|
|
attrName = SystemAttribute.T_BTWNAME.text();
|
value = map.get(attrName);
|
lo.toBTName = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.toBTName);
|
|
attrName = SystemAttribute.TS.text();
|
value = map.get(attrName);
|
lo.ts = ObjectUtility.getTimeMillis(value);
|
loAttrArray[k++] = new AttributeValue(attrName, String.valueOf(lo.ts));
|
|
// lo自定义属性赋值
|
for (String userAttr : ltUserAttrs) {
|
attrName = userAttr.toUpperCase();
|
value = map.get(attrName);
|
loAttrArray[k++] = new AttributeValue(userAttr, getDbRetrunVal(value));
|
}
|
|
// 将CONNECT_BY_ISLEAF , LEVEL加入lo.hisAttrValList
|
value = map.get("CONNECT_BY_ISLEAF");
|
loAttrArray[k++] = new AttributeValue("_ISLEAF", String.valueOf(value == null ? "" : value));
|
|
value = map.get("LEVEL");
|
loAttrArray[k++] = new AttributeValue("_LEVEL", String.valueOf(value == null ? "" : value));
|
|
lo.hisAttrValList = loAttrArray;
|
lo.newAttrValList = new AttributeValue[0];
|
// 目前系统属性没有ltName, 传参赋值
|
lo.ltName = ltName;
|
|
// 设置bo
|
String btName = null;
|
if (direction.equals(QTConstants.DIRECTION_POSITIVE)) {
|
btName = lo.toBTName;
|
} else {
|
btName = lo.fromBTName;
|
}
|
String[] btUserAttrs = null;
|
// 优先从缓存中取用户属性
|
if (btUserAttrMap.containsKey(btName)) {
|
btUserAttrs = btUserAttrMap.get(btName);
|
} else {
|
//btUserAttrs = ServerServiceProvider.getOMDService().getBTMService().getBtmApNameArray(btName);
|
btUserAttrs = OMCacheProvider.getBTAttributes(btName);
|
btUserAttrMap.put(btName, btUserAttrs);
|
}
|
|
int boAttrSize = btSysAttrSize + btUserAttrs.length;
|
AttributeValue[] boAttrArray = new AttributeValue[boAttrSize];
|
BusinessObject bo = new BusinessObject();
|
|
// bo系统属性赋值
|
k = 0;
|
attrName = SystemAttribute.OID.text();
|
value = map.get(attrName + "2");
|
bo.oid = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.oid);
|
|
attrName = SystemAttribute.REVISIONOID.text();
|
value = map.get(attrName + "2");
|
bo.revisionid = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.revisionid);
|
|
attrName = SystemAttribute.NAMEOID.text();
|
value = map.get(attrName + "2");
|
bo.nameoid = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.nameoid);
|
|
attrName = SystemAttribute.BTMNAME.text();
|
value = map.get(attrName + "2");
|
bo.btName = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.btName);
|
|
attrName = SystemAttribute.ISLASTR.text();
|
value = map.get(attrName + "2");
|
bo.isLastR = Short.valueOf(String.valueOf(value == null ? "0" : value)) != 0;
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.isLastR));
|
|
attrName = SystemAttribute.ISFIRSTR.text();
|
value = map.get(attrName + "2");
|
bo.isFirstR = Short.valueOf(String.valueOf(value == null ? "0" : value)) != 0;
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.isFirstR));
|
|
attrName = SystemAttribute.ISLASTV.text();
|
value = map.get(attrName + "2");
|
bo.isLastV = Short.valueOf(String.valueOf(value == null ? "0" : value)) != 0;
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.isLastV));
|
|
attrName = SystemAttribute.ISFIRSTV.text();
|
value = map.get(attrName + "2");
|
bo.isFirstV = Short.valueOf(String.valueOf(value == null ? "0" : value)) != 0;
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.isFirstV));
|
|
attrName = SystemAttribute.CREATOR.text();
|
value = map.get(attrName + "2");
|
bo.creator = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.creator);
|
|
attrName = SystemAttribute.CREATETIME.text();
|
value = map.get(attrName + "2");
|
bo.createTime = ObjectUtility.getTimeMillis(value);
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.createTime));
|
|
attrName = SystemAttribute.LASTMODIFIER.text();
|
value = map.get(attrName + "2");
|
bo.modifier = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.modifier);
|
|
attrName = SystemAttribute.LASTMODIFYTIME.text();
|
value = map.get(attrName + "2");
|
bo.modifyTime = ObjectUtility.getTimeMillis(value);
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.modifyTime));
|
|
attrName = SystemAttribute.REVISIONRULE.text();
|
value = map.get(attrName + "2");
|
bo.revisionRule = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.revisionRule);
|
|
attrName = SystemAttribute.VERSIONRULE.text();
|
value = map.get(attrName + "2");
|
bo.versionRule = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.versionRule);
|
|
attrName = SystemAttribute.REVISIONSEQ.text();
|
value = map.get(attrName + "2");
|
bo.revisionSeq = Short.valueOf(String.valueOf(value == null ? "0" : value));
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.revisionSeq));
|
|
attrName = SystemAttribute.REVISIONVALUE.text();
|
value = map.get(attrName + "2");
|
bo.revisionValue = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.revisionValue);
|
|
attrName = SystemAttribute.VERSIONSEQ.text();
|
value = map.get(attrName + "2");
|
bo.versionSeq = Short.valueOf(String.valueOf(value == null ? "0" : value));
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.versionSeq));
|
|
attrName = SystemAttribute.VERSIONVALUE.text();
|
value = map.get(attrName + "2");
|
bo.versionValue = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.versionValue);
|
|
attrName = SystemAttribute.LCTID.text();
|
value = map.get(attrName + "2");
|
bo.lctId = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.lctId);
|
|
attrName = SystemAttribute.LCSTATUS.text();
|
value = map.get(attrName + "2");
|
bo.lcStatus = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.lcStatus);
|
|
attrName = SystemAttribute.TS.text();
|
value = map.get(attrName + "2");
|
bo.ts = ObjectUtility.getTimeMillis(value);
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.ts));
|
|
attrName = SystemAttribute.ID.text();
|
value = map.get(attrName + "2");
|
bo.id = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.id);
|
|
attrName = SystemAttribute.NAME.text();
|
value = map.get(attrName + "2");
|
bo.name = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.name);
|
|
attrName = SystemAttribute.DESCRIPTION.text();
|
value = map.get(attrName + "2");
|
bo.description = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.description);
|
|
attrName = SystemAttribute.OWNER.text();
|
value = map.get(attrName + "2");
|
bo.owner = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.owner);
|
|
// attrName = SystemAttribute.CHECKINBY.text();
|
// value = map.get(attrName + "2");
|
// bo.checkinBy = String.valueOf(value == null ? "" : value);
|
// boAttrArray[k++] = new AttributeValue(attrName, bo.checkinBy);
|
//
|
// attrName = SystemAttribute.CHECKINTIME.text();
|
// value = map.get(attrName + "2");
|
// bo.checkinTime = String.valueOf(value == null ? "" : value);
|
// boAttrArray[k++] = new AttributeValue(attrName, bo.checkinTime);
|
//
|
// attrName = SystemAttribute.CHECKOUTBY.text();
|
// value = map.get(attrName + "2");
|
// bo.checkoutBy = String.valueOf(value == null ? "" : value);
|
// boAttrArray[k++] = new AttributeValue(attrName, bo.checkoutBy);
|
//
|
// attrName = SystemAttribute.CHECKOUTTIME.text();
|
// value = map.get(attrName + "2");
|
// bo.checkoutTime = String.valueOf(value == null ? "" : value);
|
// boAttrArray[k++] = new AttributeValue(attrName, bo.checkoutTime);
|
|
attrName = SystemAttribute.COPYFROMVERSION.text();
|
value = map.get(attrName + "2");
|
bo.fromVersion = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.fromVersion);
|
|
// bo用户属性赋值
|
for (String userAttr : btUserAttrs) {
|
attrName = userAttr.toUpperCase() + "2";
|
value = map.get(attrName);
|
boAttrArray[k++] = new AttributeValue(userAttr, getDbRetrunVal(value));
|
}
|
bo.hisAttrValList = boAttrArray;
|
bo.newAttrValList = new AttributeValue[0];
|
|
// 设置boAndLo
|
BOAndLO boAndLo = new BOAndLO();
|
boAndLo.bo = bo;
|
boAndLo.btmName = bo.btName;
|
boAndLo.lo = lo;
|
boAndLo.ltName = ltName;
|
|
return boAndLo;
|
}
|
|
private BOAndLO getBOAndLOOneLevel(Map<String, Object> map, String direction, String[] ltUserAttrs, String ltName,
|
int loAttrSize, Map<String, String[]> btUserAttrMap, int btSysAttrSize, Map<String, String> isLeafMap) {
|
// 设置lo
|
LinkObject lo = new LinkObject();
|
AttributeValue[] loAttrArray = new AttributeValue[loAttrSize];
|
// 为link的系统属性赋值
|
int k = 0;
|
String attrName = SystemAttribute.OID.text();
|
Object value = map.get(attrName);
|
lo.oid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.oid);
|
|
attrName = SystemAttribute.CREATOR.text();
|
value = map.get(attrName);
|
lo.creator = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.creator);
|
|
attrName = SystemAttribute.CREATETIME.text();
|
value = map.get(attrName);
|
lo.createTime = ObjectUtility.getTimeMillis(value);
|
loAttrArray[k++] = new AttributeValue(attrName, String.valueOf(lo.createTime));
|
|
attrName = SystemAttribute.LASTMODIFIER.text();
|
value = map.get(attrName);
|
lo.modifier = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.modifier);
|
|
attrName = SystemAttribute.LASTMODIFYTIME.text();
|
value = map.get(attrName);
|
lo.modifyTime = ObjectUtility.getTimeMillis(value);
|
loAttrArray[k++] = new AttributeValue(attrName, String.valueOf(lo.modifyTime));
|
|
attrName = SystemAttribute.F_OID.text();
|
if (direction.equals(QTConstants.DIRECTION_OPPOSITE)) {
|
attrName = SystemAttribute.OID + "2";
|
}
|
value = map.get(attrName);
|
lo.fromOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(SystemAttribute.F_OID.text(), lo.fromOid);
|
|
attrName = SystemAttribute.F_REVISIONOID.text();
|
if (direction.equals(QTConstants.DIRECTION_OPPOSITE)) {
|
attrName = SystemAttribute.REVISIONOID + "2";
|
}
|
value = map.get(attrName);
|
lo.fromRevOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(SystemAttribute.F_REVISIONOID.text(), lo.fromRevOid);
|
|
attrName = SystemAttribute.F_NAMEOID.text();
|
value = map.get(attrName);
|
lo.fromNameOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.fromNameOid);
|
|
attrName = SystemAttribute.F_BTWNAME.text();
|
value = map.get(attrName);
|
lo.fromBTName = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.fromBTName);
|
|
attrName = SystemAttribute.T_OID.text();
|
if (direction.equals(QTConstants.DIRECTION_POSITIVE)) {
|
attrName = SystemAttribute.OID + "2";
|
}
|
value = map.get(attrName);
|
lo.toOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(SystemAttribute.T_OID.text(), lo.toOid);
|
|
attrName = SystemAttribute.T_REVISIONOID.text();
|
if (direction.equals(QTConstants.DIRECTION_POSITIVE)) {
|
attrName = SystemAttribute.REVISIONOID + "2";
|
}
|
value = map.get(attrName);
|
lo.toRevOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(SystemAttribute.T_REVISIONOID.text(), lo.toRevOid);
|
|
attrName = SystemAttribute.T_NAMEOID.text();
|
value = map.get(attrName);
|
lo.toNameOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.toNameOid);
|
|
attrName = SystemAttribute.T_BTWNAME.text();
|
value = map.get(attrName);
|
lo.toBTName = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.toBTName);
|
|
attrName = SystemAttribute.TS.text();
|
value = map.get(attrName);
|
lo.ts = ObjectUtility.getTimeMillis(value);
|
loAttrArray[k++] = new AttributeValue(attrName, String.valueOf(lo.ts));
|
|
// lo自定义属性赋值
|
for (String userAttr : ltUserAttrs) {
|
attrName = userAttr.toUpperCase();
|
value = map.get(attrName);
|
loAttrArray[k++] = new AttributeValue(userAttr, getDbRetrunVal(value));
|
}
|
|
// 将CONNECT_BY_ISLEAF , LEVEL加入lo.hisAttrValList
|
value = isLeafMap.get(lo.oid);
|
loAttrArray[k++] = new AttributeValue("_ISLEAF", String.valueOf(value == null ? "" : value));
|
|
value = map.get("LEVEL");
|
loAttrArray[k++] = new AttributeValue("_LEVEL", String.valueOf(value == null ? "" : value));
|
|
lo.hisAttrValList = loAttrArray;
|
lo.newAttrValList = new AttributeValue[0];
|
// 目前系统属性没有ltName, 传参赋值
|
lo.ltName = ltName;
|
|
// 设置bo
|
String btName = null;
|
if (direction.equals(QTConstants.DIRECTION_POSITIVE)) {
|
btName = lo.toBTName;
|
} else {
|
btName = lo.fromBTName;
|
}
|
String[] btUserAttrs = null;
|
// 优先从缓存中取用户属性
|
if (btUserAttrMap.containsKey(btName)) {
|
btUserAttrs = btUserAttrMap.get(btName);
|
} else {
|
//btUserAttrs = ServerServiceProvider.getOMDService().getBTMService().getBtmApNameArray(btName);
|
btUserAttrs = OMCacheProvider.getBTAttributes(btName);
|
btUserAttrMap.put(btName, btUserAttrs);
|
}
|
|
int boAttrSize = btSysAttrSize + btUserAttrs.length;
|
AttributeValue[] boAttrArray = new AttributeValue[boAttrSize];
|
BusinessObject bo = new BusinessObject();
|
|
// bo系统属性赋值
|
k = 0;
|
attrName = SystemAttribute.OID.text();
|
value = map.get(attrName + "2");
|
bo.oid = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.oid);
|
|
attrName = SystemAttribute.REVISIONOID.text();
|
value = map.get(attrName + "2");
|
bo.revisionid = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.revisionid);
|
|
attrName = SystemAttribute.NAMEOID.text();
|
value = map.get(attrName + "2");
|
bo.nameoid = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.nameoid);
|
|
attrName = SystemAttribute.BTMNAME.text();
|
value = map.get(attrName + "2");
|
bo.btName = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.btName);
|
|
attrName = SystemAttribute.ISLASTR.text();
|
value = map.get(attrName + "2");
|
bo.isLastR = Short.valueOf(String.valueOf(value == null ? "0" : value)) != 0;
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.isLastR));
|
|
attrName = SystemAttribute.ISFIRSTR.text();
|
value = map.get(attrName + "2");
|
bo.isFirstR = Short.valueOf(String.valueOf(value == null ? "0" : value)) != 0;
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.isFirstR));
|
|
attrName = SystemAttribute.ISLASTV.text();
|
value = map.get(attrName + "2");
|
bo.isLastV = Short.valueOf(String.valueOf(value == null ? "0" : value)) != 0;
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.isLastV));
|
|
attrName = SystemAttribute.ISFIRSTV.text();
|
value = map.get(attrName + "2");
|
bo.isFirstV = Short.valueOf(String.valueOf(value == null ? "0" : value)) != 0;
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.isFirstV));
|
|
attrName = SystemAttribute.CREATOR.text();
|
value = map.get(attrName + "2");
|
bo.creator = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.creator);
|
|
attrName = SystemAttribute.CREATETIME.text();
|
value = map.get(attrName + "2");
|
bo.createTime = ObjectUtility.getTimeMillis(value);
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.createTime));
|
|
attrName = SystemAttribute.LASTMODIFIER.text();
|
value = map.get(attrName + "2");
|
bo.modifier = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.modifier);
|
|
attrName = SystemAttribute.LASTMODIFYTIME.text();
|
value = map.get(attrName + "2");
|
bo.modifyTime = ObjectUtility.getTimeMillis(value);
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.modifyTime));
|
|
attrName = SystemAttribute.REVISIONRULE.text();
|
value = map.get(attrName + "2");
|
bo.revisionRule = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.revisionRule);
|
|
attrName = SystemAttribute.VERSIONRULE.text();
|
value = map.get(attrName + "2");
|
bo.versionRule = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.versionRule);
|
|
attrName = SystemAttribute.REVISIONSEQ.text();
|
value = map.get(attrName + "2");
|
bo.revisionSeq = Short.valueOf(String.valueOf(value == null ? "0" : value));
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.revisionSeq));
|
|
attrName = SystemAttribute.REVISIONVALUE.text();
|
value = map.get(attrName + "2");
|
bo.revisionValue = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.revisionValue);
|
|
attrName = SystemAttribute.VERSIONSEQ.text();
|
value = map.get(attrName + "2");
|
bo.versionSeq = Short.valueOf(String.valueOf(value == null ? "0" : value));
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.versionSeq));
|
|
attrName = SystemAttribute.VERSIONVALUE.text();
|
value = map.get(attrName + "2");
|
bo.versionValue = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.versionValue);
|
|
attrName = SystemAttribute.LCTID.text();
|
value = map.get(attrName + "2");
|
bo.lctId = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.lctId);
|
|
attrName = SystemAttribute.LCSTATUS.text();
|
value = map.get(attrName + "2");
|
bo.lcStatus = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.lcStatus);
|
|
attrName = SystemAttribute.TS.text();
|
value = map.get(attrName + "2");
|
bo.ts = ObjectUtility.getTimeMillis(value);
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.ts));
|
|
attrName = SystemAttribute.ID.text();
|
value = map.get(attrName + "2");
|
bo.id = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.id);
|
|
attrName = SystemAttribute.NAME.text();
|
value = map.get(attrName + "2");
|
bo.name = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.name);
|
|
attrName = SystemAttribute.DESCRIPTION.text();
|
value = map.get(attrName + "2");
|
bo.description = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.description);
|
|
attrName = SystemAttribute.OWNER.text();
|
value = map.get(attrName + "2");
|
bo.owner = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.owner);
|
|
// attrName = SystemAttribute.CHECKINBY.text();
|
// value = map.get(attrName + "2");
|
// bo.checkinBy = String.valueOf(value == null ? "" : value);
|
// boAttrArray[k++] = new AttributeValue(attrName, bo.checkinBy);
|
//
|
// attrName = SystemAttribute.CHECKINTIME.text();
|
// value = map.get(attrName + "2");
|
// bo.checkinTime = String.valueOf(value == null ? "" : value);
|
// boAttrArray[k++] = new AttributeValue(attrName, bo.checkinTime);
|
//
|
// attrName = SystemAttribute.CHECKOUTBY.text();
|
// value = map.get(attrName + "2");
|
// bo.checkoutBy = String.valueOf(value == null ? "" : value);
|
// boAttrArray[k++] = new AttributeValue(attrName, bo.checkoutBy);
|
//
|
// attrName = SystemAttribute.CHECKOUTTIME.text();
|
// value = map.get(attrName + "2");
|
// bo.checkoutTime = String.valueOf(value == null ? "" : value);
|
// boAttrArray[k++] = new AttributeValue(attrName, bo.checkoutTime);
|
|
attrName = SystemAttribute.COPYFROMVERSION.text();
|
value = map.get(attrName + "2");
|
bo.fromVersion = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.fromVersion);
|
|
// bo用户属性赋值
|
for (String userAttr : btUserAttrs) {
|
attrName = userAttr.toUpperCase() + "2";
|
value = map.get(attrName);
|
boAttrArray[k++] = new AttributeValue(userAttr, getDbRetrunVal(value));
|
}
|
bo.hisAttrValList = boAttrArray;
|
bo.newAttrValList = new AttributeValue[0];
|
|
// 设置boAndLo
|
BOAndLO boAndLo = new BOAndLO();
|
boAndLo.bo = bo;
|
boAndLo.btmName = bo.btName;
|
boAndLo.lo = lo;
|
boAndLo.ltName = ltName;
|
|
return boAndLo;
|
}
|
|
/**
|
* 将数据库返回值转换为字符串,主要处理clob类型字段
|
*
|
* @param value
|
* @return
|
*/
|
public String getDbRetrunVal(Object value) {
|
String attrVal = "";
|
if (value instanceof Clob) {
|
attrVal = String.valueOf(value == null ? "" : clobToString((Clob) value));
|
} else {
|
attrVal = String.valueOf(value == null ? "" : value);
|
}
|
|
return attrVal;
|
}
|
}
|
|
/**
|
* GetBOAndLO Callable
|
*
|
* @author zhouhui
|
*
|
*/
|
class QueryBOAndLO implements Callable<BOAndLO> {
|
private Map<String, Object> map;
|
private String direction;
|
private String[] ltUserAttrs;
|
private String ltName;
|
private int loAttrSize;
|
private Map<String, String[]> btUserAttrMap;
|
private int btSysAttrSize;
|
|
/**
|
* 将一条查询出的记录封装成BOAndLO
|
*
|
* @param map: 一条从linkTable和btmView查询出的记录
|
* @param direction: 链接查询的方向
|
* @param ltUserAttrs: 链接类型的用户属性
|
* @param ltName: 链接类型
|
* @param loAttrSize: 链接类型的属性长度(系统属性+用户属性)
|
* @param btUserAttrMap: 业务类型及其对应的用户属性Map
|
* @param btSysAttrSize: 业务类型的系统属性长度
|
* @param map
|
* @param direction
|
* @param ltUserAttrs
|
* @param ltName
|
* @param loAttrSize
|
* @param btUserAttrMap
|
* @param btSysAttrSize
|
*/
|
public QueryBOAndLO(Map<String, Object> map, String direction, String[] ltUserAttrs, String ltName, int loAttrSize,
|
Map<String, String[]> btUserAttrMap, int btSysAttrSize) {
|
this.map = map;
|
this.direction = direction;
|
this.ltUserAttrs = ltUserAttrs;
|
this.ltName = ltName;
|
this.loAttrSize = loAttrSize;
|
this.btUserAttrMap = btUserAttrMap;
|
this.btSysAttrSize = btSysAttrSize;
|
}
|
|
@Override
|
public BOAndLO call() throws Exception {
|
Thread.currentThread().setName("bolocall");
|
// 设置lo
|
LinkObject lo = new LinkObject();
|
AttributeValue[] loAttrArray = new AttributeValue[loAttrSize];
|
// 为link的系统属性赋值
|
int k = 0;
|
String attrName = SystemAttribute.OID.text();
|
Object value = map.get(attrName);
|
lo.oid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.oid);
|
|
attrName = SystemAttribute.CREATOR.text();
|
value = map.get(attrName);
|
lo.creator = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.creator);
|
|
attrName = SystemAttribute.CREATETIME.text();
|
value = map.get(attrName);
|
lo.createTime = ObjectUtility.getTimeMillis(value);
|
loAttrArray[k++] = new AttributeValue(attrName, String.valueOf(lo.createTime));
|
|
attrName = SystemAttribute.LASTMODIFIER.text();
|
value = map.get(attrName);
|
lo.modifier = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.modifier);
|
|
attrName = SystemAttribute.LASTMODIFYTIME.text();
|
value = map.get(attrName);
|
lo.modifyTime = ObjectUtility.getTimeMillis(value);
|
loAttrArray[k++] = new AttributeValue(attrName, String.valueOf(lo.modifyTime));
|
|
attrName = SystemAttribute.F_OID.text();
|
if (direction.equals(QTConstants.DIRECTION_OPPOSITE)) {
|
attrName = SystemAttribute.OID + "2";
|
}
|
value = map.get(attrName);
|
lo.fromOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(SystemAttribute.F_OID.text(), lo.fromOid);
|
|
attrName = SystemAttribute.F_REVISIONOID.text();
|
if (direction.equals(QTConstants.DIRECTION_OPPOSITE)) {
|
attrName = SystemAttribute.REVISIONOID + "2";
|
}
|
value = map.get(attrName);
|
lo.fromRevOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(SystemAttribute.F_REVISIONOID.text(), lo.fromRevOid);
|
|
attrName = SystemAttribute.F_NAMEOID.text();
|
value = map.get(attrName);
|
lo.fromNameOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.fromNameOid);
|
|
attrName = SystemAttribute.F_BTWNAME.text();
|
value = map.get(attrName);
|
lo.fromBTName = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.fromBTName);
|
|
attrName = SystemAttribute.T_OID.text();
|
if (direction.equals(QTConstants.DIRECTION_POSITIVE)) {
|
attrName = SystemAttribute.OID + "2";
|
}
|
value = map.get(attrName);
|
lo.toOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(SystemAttribute.T_OID.text(), lo.toOid);
|
|
attrName = SystemAttribute.T_REVISIONOID.text();
|
if (direction.equals(QTConstants.DIRECTION_POSITIVE)) {
|
attrName = SystemAttribute.REVISIONOID + "2";
|
}
|
value = map.get(attrName);
|
lo.toRevOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(SystemAttribute.T_REVISIONOID.text(), lo.toRevOid);
|
|
attrName = SystemAttribute.T_NAMEOID.text();
|
value = map.get(attrName);
|
lo.toNameOid = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.toNameOid);
|
|
attrName = SystemAttribute.T_BTWNAME.text();
|
value = map.get(attrName);
|
lo.toBTName = String.valueOf(value == null ? "" : value);
|
loAttrArray[k++] = new AttributeValue(attrName, lo.toBTName);
|
|
attrName = SystemAttribute.TS.text();
|
value = map.get(attrName);
|
lo.ts = ObjectUtility.getTimeMillis(value);
|
loAttrArray[k++] = new AttributeValue(attrName, String.valueOf(lo.ts));
|
|
// lo自定义属性赋值
|
for (String userAttr : ltUserAttrs) {
|
attrName = userAttr.toUpperCase();
|
value = map.get(attrName);
|
loAttrArray[k++] = new AttributeValue(userAttr, QueryObjectService.getInstance().getDbRetrunVal(value));
|
}
|
|
// 将CONNECT_BY_ISLEAF , LEVEL加入lo.hisAttrValList
|
value = map.get("CONNECT_BY_ISLEAF");
|
loAttrArray[k++] = new AttributeValue("_ISLEAF", String.valueOf(value == null ? "" : value));
|
|
value = map.get("LEVEL");
|
loAttrArray[k++] = new AttributeValue("_LEVEL", String.valueOf(value == null ? "" : value));
|
|
lo.hisAttrValList = loAttrArray;
|
lo.newAttrValList = new AttributeValue[0];
|
// 目前系统属性没有ltName, 传参赋值
|
lo.ltName = ltName;
|
|
// 设置bo
|
String btName = null;
|
if (direction.equals(QTConstants.DIRECTION_POSITIVE)) {
|
btName = lo.toBTName;
|
} else {
|
btName = lo.fromBTName;
|
}
|
String[] btUserAttrs = null;
|
// 优先从缓存中取用户属性
|
if (btUserAttrMap.containsKey(btName)) {
|
btUserAttrs = btUserAttrMap.get(btName);
|
} else {
|
btUserAttrs = OMCacheProvider.getBTAttributes(btName);// BtmProvider.getInstance().getAbNames(btName);
|
btUserAttrMap.put(btName, btUserAttrs);
|
}
|
|
int boAttrSize = btSysAttrSize + btUserAttrs.length;
|
AttributeValue[] boAttrArray = new AttributeValue[boAttrSize];
|
BusinessObject bo = new BusinessObject();
|
|
// bo系统属性赋值
|
k = 0;
|
attrName = SystemAttribute.OID.text();
|
value = map.get(attrName + "2");
|
bo.oid = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.oid);
|
|
attrName = SystemAttribute.REVISIONOID.text();
|
value = map.get(attrName + "2");
|
bo.revisionid = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.revisionid);
|
|
attrName = SystemAttribute.NAMEOID.text();
|
value = map.get(attrName + "2");
|
bo.nameoid = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.nameoid);
|
|
attrName = SystemAttribute.BTMNAME.text();
|
value = map.get(attrName + "2");
|
bo.btName = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.btName);
|
|
attrName = SystemAttribute.ISLASTR.text();
|
value = map.get(attrName + "2");
|
bo.isLastR = Short.valueOf(String.valueOf(value == null ? "0" : value)) != 0;
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.isLastR));
|
|
attrName = SystemAttribute.ISFIRSTR.text();
|
value = map.get(attrName + "2");
|
bo.isFirstR = Short.valueOf(String.valueOf(value == null ? "0" : value)) != 0;
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.isFirstR));
|
|
attrName = SystemAttribute.ISLASTV.text();
|
value = map.get(attrName + "2");
|
bo.isLastV = Short.valueOf(String.valueOf(value == null ? "0" : value)) != 0;
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.isLastV));
|
|
attrName = SystemAttribute.ISFIRSTV.text();
|
value = map.get(attrName + "2");
|
bo.isFirstV = Short.valueOf(String.valueOf(value == null ? "0" : value)) != 0;
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.isFirstV));
|
|
attrName = SystemAttribute.CREATOR.text();
|
value = map.get(attrName + "2");
|
bo.creator = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.creator);
|
|
attrName = SystemAttribute.CREATETIME.text();
|
value = map.get(attrName + "2");
|
bo.createTime = ObjectUtility.getTimeMillis(value);
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.createTime));
|
|
attrName = SystemAttribute.LASTMODIFIER.text();
|
value = map.get(attrName + "2");
|
bo.modifier = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.modifier);
|
|
attrName = SystemAttribute.LASTMODIFYTIME.text();
|
value = map.get(attrName + "2");
|
bo.modifyTime = ObjectUtility.getTimeMillis(value);
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.modifyTime));
|
|
attrName = SystemAttribute.REVISIONRULE.text();
|
value = map.get(attrName + "2");
|
bo.revisionRule = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.revisionRule);
|
|
attrName = SystemAttribute.VERSIONRULE.text();
|
value = map.get(attrName + "2");
|
bo.versionRule = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.versionRule);
|
|
attrName = SystemAttribute.REVISIONSEQ.text();
|
value = map.get(attrName + "2");
|
bo.revisionSeq = Short.valueOf(String.valueOf(value == null ? "0" : value));
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.revisionSeq));
|
|
attrName = SystemAttribute.REVISIONVALUE.text();
|
value = map.get(attrName + "2");
|
bo.revisionValue = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.revisionValue);
|
|
attrName = SystemAttribute.VERSIONSEQ.text();
|
value = map.get(attrName + "2");
|
bo.versionSeq = Short.valueOf(String.valueOf(value == null ? "0" : value));
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.versionSeq));
|
|
attrName = SystemAttribute.VERSIONVALUE.text();
|
value = map.get(attrName + "2");
|
bo.versionValue = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.versionValue);
|
|
attrName = SystemAttribute.LCTID.text();
|
value = map.get(attrName + "2");
|
bo.lctId = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.lctId);
|
|
attrName = SystemAttribute.LCSTATUS.text();
|
value = map.get(attrName + "2");
|
bo.lcStatus = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.lcStatus);
|
|
attrName = SystemAttribute.TS.text();
|
value = map.get(attrName + "2");
|
bo.ts = ObjectUtility.getTimeMillis(value);
|
boAttrArray[k++] = new AttributeValue(attrName, String.valueOf(bo.ts));
|
|
attrName = SystemAttribute.ID.text();
|
value = map.get(attrName + "2");
|
bo.id = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.id);
|
|
attrName = SystemAttribute.NAME.text();
|
value = map.get(attrName + "2");
|
bo.name = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.name);
|
|
attrName = SystemAttribute.DESCRIPTION.text();
|
value = map.get(attrName + "2");
|
bo.description = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.description);
|
|
attrName = SystemAttribute.OWNER.text();
|
value = map.get(attrName + "2");
|
bo.owner = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.owner);
|
|
// attrName = SystemAttribute.CHECKINBY.text();
|
// value = map.get(attrName + "2");
|
// bo.checkinBy = String.valueOf(value == null ? "" : value);
|
// boAttrArray[k++] = new AttributeValue(attrName, bo.checkinBy);
|
//
|
// attrName = SystemAttribute.CHECKINTIME.text();
|
// value = map.get(attrName + "2");
|
// bo.checkinTime = String.valueOf(value == null ? "" : value);
|
// boAttrArray[k++] = new AttributeValue(attrName, bo.checkinTime);
|
//
|
// attrName = SystemAttribute.CHECKOUTBY.text();
|
// value = map.get(attrName + "2");
|
// bo.checkoutBy = String.valueOf(value == null ? "" : value);
|
// boAttrArray[k++] = new AttributeValue(attrName, bo.checkoutBy);
|
//
|
// attrName = SystemAttribute.CHECKOUTTIME.text();
|
// value = map.get(attrName + "2");
|
// bo.checkoutTime = String.valueOf(value == null ? "" : value);
|
// boAttrArray[k++] = new AttributeValue(attrName, bo.checkoutTime);
|
|
attrName = SystemAttribute.COPYFROMVERSION.text();
|
value = map.get(attrName + "2");
|
bo.fromVersion = String.valueOf(value == null ? "" : value);
|
boAttrArray[k++] = new AttributeValue(attrName, bo.fromVersion);
|
|
// bo用户属性赋值
|
for (String userAttr : btUserAttrs) {
|
attrName = userAttr.toUpperCase() + "2";
|
value = map.get(attrName);
|
boAttrArray[k++] = new AttributeValue(userAttr, QueryObjectService.getInstance().getDbRetrunVal(value));
|
}
|
bo.hisAttrValList = boAttrArray;
|
bo.newAttrValList = new AttributeValue[0];
|
|
// 设置boAndLo
|
BOAndLO boAndLo = new BOAndLO();
|
boAndLo.bo = bo;
|
boAndLo.btmName = bo.btName;
|
boAndLo.lo = lo;
|
boAndLo.ltName = ltName;
|
|
return boAndLo;
|
}
|
}
|
|
class QueryLOWithVersion implements Callable<LinkObject> {
|
private Map<String, Object> map;
|
private String direction;
|
private String[] ltUserAttrs;
|
private String ltName;
|
private int loAttrSize;
|
private List<String> clauseList;
|
|
/**
|
*
|
* 将一条查询出的记录封装成LO, 用btmView.OID, btmView.REVISIONOID作t_oid, t_revisionOid
|
*
|
* @param map: 一条从linkTable和btmView.OID, btmView.REVISIONOID查询出的记录
|
* @param direction: 链接查询的方向
|
* @param ltUserAttrs: 链接类型的用户属性
|
* @param ltName: 链接类型
|
* @param loAttrSize: 链接类型的属性长度(系统属性+用户属性)
|
*/
|
public QueryLOWithVersion(Map<String, Object> map, String direction, String[] ltUserAttrs, String ltName,
|
int loAttrSize) {
|
this.map = map;
|
this.direction = direction;
|
this.ltUserAttrs = ltUserAttrs;
|
this.ltName = ltName;
|
this.loAttrSize = loAttrSize;
|
}
|
|
/**
|
*
|
* 将一条查询出的记录封装成LO, 用btmView.OID, btmView.REVISIONOID作t_oid, t_revisionOid
|
*
|
* @param map: 一条从linkTable和btmView.OID, btmView.REVISIONOID查询出的记录
|
* @param direction: 链接查询的方向
|
* @param ltUserAttrs: 链接类型的用户属性
|
* @param ltName: 链接类型
|
* @param loAttrSize: 链接类型的属性长度(系统属性+用户属性)
|
* @param clauseList 返回列
|
*/
|
public QueryLOWithVersion(Map<String, Object> map, String direction, String[] ltUserAttrs, String ltName,
|
int loAttrSize, List<String> clauseList) {
|
this.map = map;
|
this.direction = direction;
|
this.ltUserAttrs = ltUserAttrs;
|
this.ltName = ltName;
|
this.loAttrSize = loAttrSize;
|
this.clauseList = clauseList;
|
}
|
|
@Override
|
public LinkObject call() throws Exception {
|
// 设置lo
|
LinkObject lo = new LinkObject();
|
// 为link的系统属性赋值
|
List<AttributeValue> attrList = new ArrayList<AttributeValue>();
|
AttributeValue[] loAttrArrayNew = new AttributeValue[clauseList.size()];
|
for (int i = 0; i < clauseList.size(); i++) {
|
String attrName = clauseList.get(i).toUpperCase();
|
if (attrName.indexOf(" AS ") > -1) {
|
attrName = attrName.substring(attrName.lastIndexOf(" AS ") + 4);
|
}
|
Object attrVal = map.get(attrName);
|
if (attrName.equalsIgnoreCase(SystemAttribute.F_OID.text())) {
|
if (direction.equals(QTConstants.DIRECTION_OPPOSITE)) {
|
attrName = SystemAttribute.OID + "2";
|
}
|
attrVal = map.get(attrName);
|
attrName = SystemAttribute.F_OID.text();
|
} else if (attrName.equalsIgnoreCase(SystemAttribute.F_REVISIONOID.text())) {
|
if (direction.equals(QTConstants.DIRECTION_OPPOSITE)) {
|
attrName = SystemAttribute.REVISIONOID + "2";
|
}
|
attrVal = map.get(attrName);
|
attrName = SystemAttribute.F_REVISIONOID.text();
|
} else if (attrName.equalsIgnoreCase(SystemAttribute.T_OID.text())) {
|
if (direction.equals(QTConstants.DIRECTION_POSITIVE)) {
|
attrName = SystemAttribute.OID + "2";
|
}
|
attrVal = map.get(attrName);
|
attrName = SystemAttribute.T_OID.text();
|
} else if (attrName.equalsIgnoreCase(SystemAttribute.T_REVISIONOID.text())) {
|
if (direction.equals(QTConstants.DIRECTION_POSITIVE)) {
|
attrName = SystemAttribute.REVISIONOID + "2";
|
}
|
attrVal = map.get(attrName);
|
attrName = SystemAttribute.T_REVISIONOID.text();
|
}
|
|
if (!attrName.equals(SystemAttribute.REVISIONOID + "2") && !attrName.equals(SystemAttribute.OID + "2")) {
|
String attrValStr = String.valueOf(attrVal == null ? "" : attrVal);
|
attrList.add(new AttributeValue(attrName, attrValStr));
|
}
|
}
|
String attrName = SystemAttribute.OID.text();
|
Object value = map.get(attrName);
|
lo.oid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.CREATOR.text();
|
value = map.get(attrName);
|
lo.creator = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.CREATETIME.text();
|
value = map.get(attrName);
|
lo.createTime = ObjectUtility.getTimeMillis(value);
|
|
attrName = SystemAttribute.LASTMODIFIER.text();
|
value = map.get(attrName);
|
lo.modifier = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.LASTMODIFYTIME.text();
|
value = map.get(attrName);
|
lo.modifyTime = ObjectUtility.getTimeMillis(value);
|
|
attrName = SystemAttribute.F_OID.text();
|
if (direction.equals(QTConstants.DIRECTION_OPPOSITE)) {
|
attrName = SystemAttribute.OID + "2";
|
}
|
value = map.get(attrName);
|
lo.fromOid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.F_REVISIONOID.text();
|
if (direction.equals(QTConstants.DIRECTION_OPPOSITE)) {
|
attrName = SystemAttribute.REVISIONOID + "2";
|
}
|
value = map.get(attrName);
|
lo.fromRevOid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.F_NAMEOID.text();
|
value = map.get(attrName);
|
lo.fromNameOid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.F_BTWNAME.text();
|
value = map.get(attrName);
|
lo.fromBTName = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.T_OID.text();
|
if (direction.equals(QTConstants.DIRECTION_POSITIVE)) {
|
attrName = SystemAttribute.OID + "2";
|
}
|
value = map.get(attrName);
|
lo.toOid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.T_REVISIONOID.text();
|
if (direction.equals(QTConstants.DIRECTION_POSITIVE)) {
|
attrName = SystemAttribute.REVISIONOID + "2";
|
}
|
value = map.get(attrName);
|
lo.toRevOid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.T_NAMEOID.text();
|
value = map.get(attrName);
|
lo.toNameOid = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.T_BTWNAME.text();
|
value = map.get(attrName);
|
lo.toBTName = String.valueOf(value == null ? "" : value);
|
|
attrName = SystemAttribute.TS.text();
|
value = map.get(attrName);
|
lo.ts = ObjectUtility.getTimeMillis(value);
|
|
// 将CONNECT_BY_ISLEAF , LEVEL加入lo.hisAttrValList
|
value = map.get("CONNECT_BY_ISLEAF");
|
attrList.add(new AttributeValue("_ISLEAF", String.valueOf(value == null ? "" : value)));
|
|
value = map.get("LEVEL");
|
attrList.add(new AttributeValue("_LEVEL", String.valueOf(value == null ? "" : value)));
|
|
loAttrArrayNew = attrList.toArray(new AttributeValue[0]);
|
lo.hisAttrValList = loAttrArrayNew;
|
lo.newAttrValList = new AttributeValue[0];
|
// 目前系统属性没有ltName, 传参赋值
|
lo.ltName = ltName;
|
return lo;
|
}
|
|
// @Override
|
// public LinkObject call() throws Exception {
|
// //设置lo
|
// LinkObject lo = new LinkObject();
|
// AttributeValue[] loAttrArray = new AttributeValue[loAttrSize];
|
// //为link的系统属性赋值
|
// int k = 0;
|
// String attrName = SystemAttribute.OID.text();
|
// Object value = map.get(attrName);
|
// lo.oid = String.valueOf(value == null ? "" : value);
|
// loAttrArray[k++] = new AttributeValue(attrName, lo.oid);
|
//
|
// attrName = SystemAttribute.CREATOR.text();
|
// value = map.get(attrName);
|
// lo.creator = String.valueOf(value == null ? "" : value);
|
// loAttrArray[k++] = new AttributeValue(attrName, lo.creator);
|
//
|
// attrName = SystemAttribute.CREATETIME.text();
|
// value = map.get(attrName);
|
// lo.createTime = String.valueOf(value == null ? "" : value);
|
// loAttrArray[k++] = new AttributeValue(attrName, String.valueOf(lo.createTime));
|
//
|
// attrName = SystemAttribute.LASTMODIFIER.text();
|
// value = map.get(attrName);
|
// lo.lastModifier = String.valueOf(value == null ? "" : value);
|
// loAttrArray[k++] = new AttributeValue(attrName, lo.lastModifier);
|
//
|
// attrName = SystemAttribute.LASTMODIFYTIME.text();
|
// value = map.get(attrName);
|
// lo.lastModifyTime = String.valueOf(value == null ? "" : value);
|
// loAttrArray[k++] = new AttributeValue(attrName, String.valueOf(lo.lastModifyTime));
|
//
|
// attrName = SystemAttribute.F_OID.text();
|
// if(direction.equals(QTConstants.DIRECTION_OPPOSITE)){
|
// attrName = SystemAttribute.OID + "2";
|
// }
|
// value = map.get(attrName);
|
// lo.fromOid = String.valueOf(value == null ? "" : value);
|
// loAttrArray[k++] = new AttributeValue(SystemAttribute.F_OID.text(), lo.fromOid);
|
//
|
// attrName = SystemAttribute.F_REVISIONOID.text();
|
// if(direction.equals(QTConstants.DIRECTION_OPPOSITE)){
|
// attrName = SystemAttribute.REVISIONOID + "2";
|
// }
|
// value = map.get(attrName);
|
// lo.fromRevisionOid = String.valueOf(value == null ? "" : value);
|
// loAttrArray[k++] = new AttributeValue(SystemAttribute.F_REVISIONOID.text(), lo.fromRevisionOid);
|
//
|
// attrName = SystemAttribute.F_NAMEOID.text();
|
// value = map.get(attrName);
|
// lo.fromNameOid = String.valueOf(value == null ? "" : value);
|
// loAttrArray[k++] = new AttributeValue(attrName, lo.fromNameOid);
|
//
|
// attrName = SystemAttribute.F_BTWNAME.text();
|
// value = map.get(attrName);
|
// lo.fromBTMName = String.valueOf(value == null ? "" : value);
|
// loAttrArray[k++] = new AttributeValue(attrName, lo.fromBTMName);
|
//
|
// attrName = SystemAttribute.T_OID.text();
|
// if(direction.equals(QTConstants.DIRECTION_POSITIVE)){
|
// attrName = SystemAttribute.OID + "2";
|
// }
|
// value = map.get(attrName);
|
// lo.toOid = String.valueOf(value == null ? "" : value);
|
// loAttrArray[k++] = new AttributeValue(SystemAttribute.T_OID.text(), lo.toOid);
|
//
|
// attrName = SystemAttribute.T_REVISIONOID.text();
|
// if(direction.equals(QTConstants.DIRECTION_POSITIVE)){
|
// attrName = SystemAttribute.REVISIONOID + "2";
|
// }
|
// value = map.get(attrName);
|
// lo.toRevisionOid = String.valueOf(value == null ? "" : value);
|
// loAttrArray[k++] = new AttributeValue(SystemAttribute.T_REVISIONOID.text(), lo.toRevisionOid);
|
//
|
// attrName = SystemAttribute.T_NAMEOID.text();
|
// value = map.get(attrName);
|
// lo.toNameOid = String.valueOf(value == null ? "" : value);
|
// loAttrArray[k++] = new AttributeValue(attrName, lo.toNameOid);
|
//
|
// attrName = SystemAttribute.T_BTWNAME.text();
|
// value = map.get(attrName);
|
// lo.toBTMName = String.valueOf(value == null ? "" : value);
|
// loAttrArray[k++] = new AttributeValue(attrName, lo.toBTMName);
|
//
|
// attrName = SystemAttribute.TS.text();
|
// value = map.get(attrName);
|
// lo.ts = String.valueOf(value == null ? "" : value);
|
// loAttrArray[k++] = new AttributeValue(attrName, String.valueOf(lo.ts));
|
//
|
// //lo自定义属性赋值
|
// for(String userAttr : ltUserAttrs){
|
// attrName = userAttr.toUpperCase();
|
// value = map.get(attrName);
|
// loAttrArray[k++] = new AttributeValue(userAttr, String.valueOf(value == null ? "" : value));
|
// }
|
//
|
// //将CONNECT_BY_ISLEAF , LEVEL加入lo.hisAttrValList
|
// value = map.get("CONNECT_BY_ISLEAF");
|
// loAttrArray[k++] = new AttributeValue("_ISLEAF", String.valueOf(value == null ? "" : value));
|
//
|
// value = map.get("LEVEL");
|
// loAttrArray[k++] = new AttributeValue("_LEVEL", String.valueOf(value == null ? "" : value));
|
//
|
// lo.hisAttrValList = loAttrArray;
|
// lo.newAttrValList = new AttributeValue[0];
|
// //目前系统属性没有ltName, 传参赋值
|
// lo.linkTypeName = ltName;
|
// return lo;
|
// }
|
|
}
|