package com.vci.server.query;
import java.util.Date;
import org.omg.CORBA.IntHolder;
import com.vci.server.BaseService;
import com.vci.server.query.delegate.ObjectQueryServiceDelegate;
import com.vci.server.query.delegate.RefQueryDelegate;
import com.zeroc.Ice.Current;
import com.vci.common.ServiceNames;
import com.vci.common.exception.VciExceptionTool;
import com.vci.corba.common.VCIError;
import com.vci.corba.omd.data.BusinessObject;
import com.vci.corba.omd.data.LinkObject;
import com.vci.corba.query.ObjectQueryService;
import com.vci.corba.query.data.BOAndLO;
import com.vci.corba.query.data.BtmRefQueryOption;
import com.vci.corba.query.data.KV;
import com.vci.corba.query.data.RefPath;
/**
* 创建link的业务类型视图的查询策略
* 从linkTable和btmView查询,递归查询时不需要二次查询。
* @author zhouhui
*
*/
public class ObjectQueryServiceImpl extends BaseService implements ObjectQueryService{
@Override
public String getServiceName() {
return ServiceNames.OQSERVICE;
}
@Override
public void test(com.zeroc.Ice.Current current) {
String op = current.operation;
String adapter = current.adapter.getName();
String id = current.id.name;
String time = new Date().toString();
System.out.println(String.format("== %s [ObjectQueryService.test] (adapter=%s, id=%s, op=%s)", time, adapter, id, op));
}
/**
* 根据查询模板名, 查询模板内容查询业务对象
*/
@Override
public BusinessObject[] findBTMObjects(String qtName, String qtText, Current current)
throws VCIError {
return ObjectQueryServiceDelegate.getInstance().findBTMObjects(qtName, qtText);
}
/**
* 根据查询模板名, 查询模板内容查询业务对象-V2版
*
* @param qtName 查询模板的名称(内部名称)
* @param qtText 查询模板结构化内容XML形式的字符串(需要在调用客户端进行转化)
* @param count 查询结果的总数,通过 count.value 获取
* @return 查询到的业务类型数据 com.vci.corba.omd.BusinessObject
* @since v1.1 2017.08.31
* @see com.vci.corba.omd.data.BusinessObject
*/
@Override
public FindBTMObjectsV2Result findBTMObjectsV2(String qtName, String qtText, Current current)
throws VCIError {
IntHolder count = new IntHolder();
BusinessObject[] bos = ObjectQueryServiceDelegate.getInstance().findBTMObjectsV2(qtName, qtText, count);
return new FindBTMObjectsV2Result(bos, count.value);
}
/**
* 查询模板数据查询业务对象-v3 : 查BO的同时,根据参照查询选项,查询参照数据
*
* @param qtName 查询模板的名称(内部名称)
* @param qtText 查询模板结构化内容XML形式的字符串(需要在调用客户端进行转化)
* @param count 查询结果的总数,通过 count.value 获取
* @return 查询到的业务类型数据 com.vci.corba.omd.BusinessObject
* @since 2017.12.20
* @author xiongchao
* @see com.vci.corba.omd.data.BusinessObject
*/
@Override
public FindBTMObjectsV3Result findBTMObjectsV3(String qtName, String qtText, BtmRefQueryOption[] btmRefQueryOptions, Current current)
throws VCIError {
IntHolder count = new IntHolder();
BusinessObject[] bos = ObjectQueryServiceDelegate.getInstance().findBTMObjectsV3(qtName, qtText, count, btmRefQueryOptions);
return new FindBTMObjectsV3Result(bos, count.value);
}
/**
* 根据查询模板名, 查询模板内容查询链接对象
*/
@Override
public LinkObject[] findLTObjects(String qtName, String qtText, Current current)
throws VCIError {
return ObjectQueryServiceDelegate.getInstance().findLTObjects(qtName, qtText);
}
/**
* 根据查询模板名, 查询模板内容查询链接对象-V2版
*
* @param qtName 查询模板的名称(内部名称)
* @param qtText 查询模板结构化内容XML形式的字符串(需要在调用客户端进行转化)
* @param count 查询结果的总数,通过 count.value 获取
* @return 查询到的业务类型数据 com.vci.corba.omd.LinkObject
* @since v1.1 2017.08.31
* @see com.vci.corba.omd.data.LinkObject
*/
@Override
public FindLTObjectsV2Result findLTObjectsV2(String qtName, String qtText, Current current)
throws VCIError {
IntHolder count = new IntHolder();
LinkObject[] los = ObjectQueryServiceDelegate.getInstance().findLTObjectsV2(qtName, qtText, count);
return new FindLTObjectsV2Result(los, count.value);
}
/**
* 根据查询模板获取linkObject 和 关联的businessObject
*/
@Override
public BOAndLO[] getBOAndLOS(String qtName, String qtText, String btmOId, Current current) throws VCIError {
return ObjectQueryServiceDelegate.getInstance().getBOAndLOS(qtName, qtText, btmOId);
}
/**
* 根据业务类型名, 版本条件查询业务对象
* version: 0:所有版次; 1:当前版本当前版次; 2:当前版本最新版次; 3:最新版本最新版次.
*/
@Override
public BusinessObject[] findBTMObjectsByTypeNameAndVersion(String typeName,
short version, Current current) throws VCIError {
return ObjectQueryServiceDelegate.getInstance().findBTMObjectsByTypeNameAndVersion(typeName, version);
}
/**
* 根据查询模板名, 查询模板内容返回查询总数
*/
@Override
public long findTotalCount(String qtName, String qtText, Current current) throws VCIError {
return ObjectQueryServiceDelegate.getInstance().findTotalCount(qtName, qtText);
}
/**
* 用标准sql查询数据
*/
@Override
public KV[][] queryBySql(String sql, Current current) throws VCIError {
return ObjectQueryServiceDelegate.getInstance().queryBySql(sql);
}
/**
* 用标准sql查询数据
*/
@Override
public String[][] queryBySqlWithoutKey(String sql, Current current) throws VCIError {
return ObjectQueryServiceDelegate.getInstance().queryBySqlWithoutKey(sql);
}
/**
* 使用标准sql查询数据(基于绑定变量的实现)
*/
@Override
public String[][] queryBySqlAndValuesWithoutKey(String sql, String[] paramValues, Current current) throws VCIError{
return ObjectQueryServiceDelegate.getInstance().queryBySqlAndValuesWithoutKey(sql, paramValues);
}
//@Override
public BOAndLO[] getBOsAndLOS(String qtName, String qtText, String btmOId, Current current)
throws VCIError {
//?????????????以前是啥????
return ObjectQueryServiceDelegate.getInstance().getBOAndLOS(qtName, qtText, btmOId);
}
// 参照查询接口方法 ===================================================================
/**
* 客户端Facade调用的参照查询接口
*
* Client Facade Invoke reference Query Method * * @param RefPath * [] 参照路径数组 * @return RefPath [] 参照路径数组 * @throws VCIError * */ @Override public RefPath[] getRefQueryResults(RefPath[] paths, Current current) throws VCIError { // 数据库最大的限制数是1000 try { return new RefQueryDelegate().limitNumQuery(paths, 1000); } catch (Throwable e) { throw new VCIError(RefQueryDelegate.class.getName(), new String[]{VciExceptionTool.getExceptionStr(e), VciExceptionTool.getExceptionDetail(e)}); } } @Override public RefPath[] getRefResults(RefPath[] paths, String toType, Current current) throws VCIError { try { return new RefQueryDelegate().limitNumQuery(paths, toType, 1000); } catch (Throwable e) { throw new VCIError(RefQueryDelegate.class.getName(), new String[]{VciExceptionTool.getExceptionStr(e), VciExceptionTool.getExceptionDetail(e)}); } } @Override public RefPath[] getRefTypesResults(RefPath[] paths, String[] toTypes, Current current) throws VCIError { try { return new RefQueryDelegate().limitNumQuery(paths, toTypes, 1000); } catch (Throwable e) { throw new VCIError(RefQueryDelegate.class.getName(), new String[]{VciExceptionTool.getExceptionStr(e), VciExceptionTool.getExceptionDetail(e)}); } } }