田源
2024-03-07 4b4083fd73dc27ece42f4835483565eef0e4f608
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
package com.vci.server.query.util;
 
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
 
import org.dom4j.DocumentException;
 
import com.vci.server.base.utility.OQueryHelper;
import com.vci.server.query.delegate.ObjectQueryServiceDelegate;
import com.vci.common.qt.object.Condition;
import com.vci.common.qt.object.OrderInfo;
import com.vci.common.qt.object.PageInfo;
import com.vci.common.qt.object.QTConstants;
import com.vci.common.qt.object.QueryTemplate;
import com.vci.corba.common.VCIError;
import com.vci.corba.omd.data.BusinessObject;
import com.vci.corba.query.data.BOAndLO;
 
public class DataModelServerProcessor implements IDataModelServerProcessor {
 
    /**
     * 根据输入参数自定义查询模板,根据自定义的查询模板获取符合条件的业务对象查询结果
     * @param btmName,业务类型名称
     * @param clauseList,返回的字段列表,暂时默认支持*
     * @param queryChildrenFlag,是否查询子业务类型的数据
     * @param rightFlag,是否根据数据授权过滤,true:进行数据授权过滤,false:不进行数据授权过滤
     * @param queryCondition,查询条件map,即需要附加到业务类型的查询语句的查询条件
     * @param version,1:当前版本当前版次;2代表当前版本最新版次;3:代表最新版本最新版次;4代表当前发布有效版
     * @param pageInfo,分页信息,不需要分页时将其设为null即可,其包含两个属性:pageNO:页数和rowCount:当前页显示条数
     * @param orderInfoList,排序信息,不需要是将其设置为null, 其包含三个属性:level:排序优先级,数越小越优先; orderField:排序字段名称;orderMode:属性ASC或DESC;
     * @return
     * @throws VCIError
     * @throws DocumentException
     */
    @Override
    public BusinessObject[] getBusinessObjectByCondition(String btmName, List<String> clauseList, boolean queryChildrenFlag, boolean rightFlag, 
            Map<String, String> queryCondition, int version, PageInfo pageInfo, List<OrderInfo> orderInfoList) throws VCIError {
            BusinessObject[] bos = null;
            try{
                QueryTemplate qt2 = new QueryTemplate();
                qt2.setId("btmQuery");
                qt2.setBtmType(btmName);
                qt2.setType("btm");
                clauseList = new ArrayList<String>();
                clauseList.add("*");
                qt2.setClauseList(clauseList);
                qt2.setQueryChildrenFlag(queryChildrenFlag);
                qt2.setRightFlag(rightFlag);
                qt2.setVersion(version);
                if (pageInfo != null && pageInfo.getPageNO() > 0 && pageInfo.getRowCount() > 0) {
                    qt2.setPageInfo(pageInfo);
                }
                if (orderInfoList != null && orderInfoList.size() > 0) {
                    qt2.setOrderInfoList(orderInfoList);
                }
                
                if (queryCondition != null && queryCondition.size() > 0) {
                    Condition cond = OQueryHelper.getCondition(queryCondition);
                    qt2.setCondition(cond);
                }
                bos = ObjectQueryServiceDelegate.getInstance().findBTMObjects(qt2);
            }
            catch(VCIError vcie)
            {
                throw vcie;
            }
            catch(java.lang.Exception se)
            {
                VCIError vcierror = new VCIError("",new String[]{se.getMessage()});
                throw vcierror;
            }
            return bos;
    }
    
    /**
     * 自定义查询模板,根据查询条件查询符合条件的业务对象和链接类型查询结果
     * @param linkName,link名称
     * @param clauseList,返回的字段列表,暂时默认支持*
     * @param queryISLeaf,是否查询叶子节点,true代表查询,false代表不查询
     * @param rightFlag,是否根据数据授权过滤,true:进行数据授权过滤,false:不进行数据授权过滤
     * @param direction,查询方向,true代表正向查询,false代表反向查询
     * @param queryCondition,是否查询子业务类型的数据
     * @param version,1:当前版本当前版次;2代表当前版本最新版次;3:代表最新版本最新版次;4代表当前发布有效版
     * @param pageInfo,分页信息,不需要分页时将其设为null即可,其包含两个属性:pageNO:页数和rowCount:当前页显示条数
     * @param level,查询的层级,-1代表所有,其他数字代码查询的具体层数
     * @param orderInfoList,排序信息,不需要是将其设置为null, 其包含三个属性:level:排序优先级,数越小越优先; orderField:排序字段名称;orderMode:属性ASC或DESC;
     * @param recReturnMode,是否去重,true代表去重,false代表不去重
     * @param objId,源对象ID
     * @param btmType,查询目标对象的业务类型
     * @return
     * @throws VCIError
     */
    @Override
    public BOAndLO[] getBOLOsByCondition(String linkName, List<String> clauseList, boolean queryISLeaf, boolean rightFlag, boolean direction,
            Map<String, String> queryCondition, int version, PageInfo pageInfo, int level, List<OrderInfo> orderInfoList, boolean recReturnMode, String objId, String btmType) throws VCIError {
        BOAndLO[]  bolos = null;
        try
        {
        QueryTemplate qt2 = new QueryTemplate();
        qt2.setId("ltQuery");
        qt2.setLinkType(linkName);
        qt2.setType("link");
        clauseList = new ArrayList<String>();
        clauseList.add("*");
        qt2.setClauseList(clauseList);
        qt2.setQueryISLeaf(queryISLeaf);
        qt2.setRightFlag(rightFlag);
        
        if(direction){
            qt2.setDirection(QTConstants.DIRECTION_POSITIVE);
        }else{
            qt2.setDirection(QTConstants.DIRECTION_OPPOSITE);
        }
        if (pageInfo != null && pageInfo.getPageNO() > 0 && pageInfo.getRowCount() > 0) {
            qt2.setPageInfo(pageInfo);
        }
        if (orderInfoList != null && orderInfoList.size() > 0) {
            qt2.setOrderInfoList(orderInfoList);
        }
        if (queryCondition != null && queryCondition.size() > 0) {
            Condition cond = OQueryHelper.getConditionForLink(qt2.getDirection(), objId, btmType, queryCondition);
            qt2.setCondition(cond);
        }
        
        qt2.setVersion(version);
        qt2.setPageInfo(pageInfo);
        qt2.setLevel(level);
        if (recReturnMode) {
            qt2.setRecReturnMode(1);
        } else {
            qt2.setRecReturnMode(2);
        }
        
        bolos = ObjectQueryServiceDelegate.getInstance().getBOAndLOS(qt2, "");
        }
        catch(VCIError vcie)
        {
            throw vcie;
        }
        catch(java.lang.Exception se)
        {
            VCIError vcierror = new VCIError("",new String[]{se.getMessage()});
            throw vcierror;
        }
        return bolos;
    }
}