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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
package com.vci.web.service.impl;
 
import com.vci.client.common.oq.OQTool;
import com.vci.common.qt.object.QTConstants;
import com.vci.common.qt.object.QueryTemplate;
import com.vci.corba.common.PLException;
import com.vci.corba.omd.data.LinkObject;
import com.vci.corba.omd.qtm.QTD;
import com.vci.corba.omd.qtm.QTInfo;
import com.vci.dto.QTInfoDTO;
import com.vci.starter.web.pagemodel.BaseResult;
import com.vci.starter.web.util.*;
import com.vci.web.service.*;
import com.vci.web.util.DateUtil;
import com.vci.web.util.PlatformClientUtil;
import com.vci.web.util.WebUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
 
/**
 * 查询模板服务
 * @author yuxc
 * @date 2024-8-1
 */
@Service
public class OsQueryTemplateImpl implements OsQuereyTemplateServiceI {
 
 
    /**
     * 平台的调用工具类
     */
    @Autowired
    private PlatformClientUtil platformClientUtil;
 
    /**
     * 查询模板的列表
     * @param btmName 类型
     * @param linkFlag 是否链接类型 :true 链接类型 ,false 业务类型
     * @return 查询模板的列表
     */
    @Override
    public BaseResult queryTemplateList(String btmName, Boolean linkFlag) throws PLException {
        QTD[] qtdArray = null;
        if(linkFlag){
            qtdArray = platformClientUtil.getQTDService().getLinkTypeQTDs(btmName);
        }else {
            qtdArray = platformClientUtil.getQTDService().getBizTypeQTDs(btmName);
        }
        return BaseResult.dataList(Arrays.asList(qtdArray));
    }
 
    /**
     * 查询模板
     * @param qtd 查询模板实体类
     * @return 保存结果
     */
    @Override
    public BaseResult saveTemplate(QTD qtd) throws PLException {
        //校验参数
        checkName(qtd);
        //设置默认值
        qtd.creator = WebUtil.getCurrentUserId();
        qtd.createTime = System.currentTimeMillis();
        boolean addFlag = false;
        //进行保存
        addFlag = platformClientUtil.getQTDService().addQTD(qtd);
        if (addFlag) {
            return BaseResult.success("增加业务类型查询模板成功");
        } else {
            throw new PLException("500", new String[]{"增加业务类型查询模板失败"});
        }
    }
    /**
     * 修改查询模板
     * @param qtd 查询模板实体类
     * @return 保存结果
     */
    @Override
    public BaseResult updateTemplate(QTD qtd) throws PLException {
        //校验参数
        if (qtd.name.equals("")) {
            throw new PLException("500", new String[]{"请输入模板定义名"});
        }
        if (!qtd.name.matches("[a-z A-Z]*")) {
            throw new PLException("500", new String[]{"模板定义名只能为英文字母"});
        }
        qtd.createTime = System.currentTimeMillis();
        boolean updateFlag = false;
        //进行保存
        updateFlag = platformClientUtil.getQTDService().modifyQTD(qtd);
        if (updateFlag) {
            return BaseResult.success("修改业务类型查询模板成功");
        } else {
            throw new PLException("500", new String[]{"修改业务类型查询模板失败"});
        }
    }
    /**
     * 删除查询模板
     * @param name 查询模板名
     * @return 保存结果
     */
    @Override
    public BaseResult deleteTemplate(String name) throws PLException {
        boolean flag = false;
        flag = platformClientUtil.getQTDService().deleteQTD(name);
        if (flag) {
            return BaseResult.success("删除查询模板成功");
        } else {
            return BaseResult.fail("删除查询模板失败");
        }
    }
    /**
     *
     * @param dataMap 传输的数据对象:
     *                linkTypeName 链接类型、
     *                rdPositive 方向,true正向,false反向
     *                btmName 业务类型名称
     *                combRelaType 业务类型选择值
     *                versionValue 版本班次值
     *                isQueryIsLeaf 是否选择下级
     *                level 子节点层数
     * @return 查询结果
     */
    @Override
    public BaseResult getCriteria(HashMap<String,Object> dataMap) throws PLException {
        QueryTemplate qt = getQT(dataMap);
        String checkInfo = OQTool.checkQT(qt);
        if(!checkInfo.equals("OK")){
            throw new PLException("500", new String[]{checkInfo});
        }
        qt.setId("qt1");
        LinkObject[] result = platformClientUtil.getQueryService().findLTObjects(qt.getId(), OQTool.qtTOXMl(qt).asXML());
        return BaseResult.dataList(Arrays.asList(result));
    }
 
    /**
     * 查询模板列表
     * @param btName 类型名称
     * @return 查询结果
     */
    @Override
    public BaseResult getObjTypeQTs(String btName) throws PLException, DocumentException {
        VciBaseUtil.alertNotNull(btName,"类型名");
        QTInfo[] objTypeQTs = platformClientUtil.getQTDService().getObjTypeQTs(btName);
        List<QTInfoDTO> dtos = new ArrayList<>();
        for (QTInfo obj : objTypeQTs) {
            QTInfoDTO qtInfoDTO = new QTInfoDTO();
            qtInfoDTO.setCreator(obj.creator);
            qtInfoDTO.setBtmName(obj.btmName);
            qtInfoDTO.setQtName(obj.qtName);
            qtInfoDTO.setLevelFlag(obj.levelFlag);
//            qtInfoDTO.setQtText(obj.qtText);
            qtInfoDTO.setQtUIText(obj.qtUIText);
            qtInfoDTO.setQueryTemplate(OQTool.getQTByDoc(DocumentHelper.parseText(obj.qtText), obj.qtName));
            qtInfoDTO.setCreateTimeText(DateFormatUtils.format(new Date(obj.createTime), DateUtil.PATTERN_DATETIME));
            dtos.add(qtInfoDTO);
        }
        return BaseResult.dataList(dtos);
    }
    /**
     * 检查查询模板名字是否存在
     * @param name 查询模板名字
     * @return 查询结果
     */
    @Override
    public BaseResult isExistsQT(String name) throws PLException {
        VciBaseUtil.alertNotNull(name,"询模板名");
        return BaseResult.success(platformClientUtil.getQTDService().isExistsQT(name));
    }
 
    /**
     * 组装查询模板
     * @return
     */
    public QueryTemplate getQT(HashMap<String,Object> dataMap){
        QueryTemplate qt = new QueryTemplate();
        qt.setType(QTConstants.TYPE_LINK);
        //TODO String qtId =
        qt.setLinkType((String) dataMap.get("linkTypeName"));
        qt.setDirection( (Boolean)dataMap.get("rdPositive") ? QTConstants.DIRECTION_POSITIVE : QTConstants.DIRECTION_OPPOSITE);
        qt.setBtmType((String) dataMap.get("btmName"));
        if("所有类型".equals(dataMap.get("combRelaType"))){
            qt.setBtmType("*");
        }
        qt.setVersion(getVersion((String) dataMap.get("versionValue")));
        qt.setQueryISLeaf((Boolean) dataMap.get("isQueryIsLeaf"));
        qt.setLevel(StringUtils.isBlank((CharSequence) dataMap.get("level")) ? 1 : Integer.valueOf(String.valueOf(dataMap.get("level"))));
        List<String> clauseList = new ArrayList<String>();
        //TODO 查询列 显示列
        clauseList.add("*");
        qt.setClauseList(clauseList);
//        Condition con = new Condition();
//        qt.setCondition(con);
//        HashMap<String, ConditionItem> ciMap = getCIMap();
//        con.setCIMap(ciMap);
//        con.setRootCIName(con.getRootCINameByCIMap(ciMap));
        return qt;
    }
 
 
    /**
     * 返回查询的版本
     * @return
     */
    public int getVersion(String versionValue){
        int version = 0;
        if(versionValue.equals("当前版本当前版次")){
            version = 1;
        }else if(versionValue.equals("当前版本最新版次")){
            version = 2;
        }else if(versionValue.equals("最新版本最新版次")){
            version = 3;
        }else if(versionValue.equals("当前版次")){
            version = 4;
        }else if(versionValue.equals("当前版本")){
            version = 5;
        }else if(versionValue.equals("当前命名对象")){
            version = 6;
        }else if(versionValue.equals("已发布的最新版本")){
            version = 7;
        }
        return version;
    }
 
 
    /**
     * 校验参数
     * @param qtd
     * @return
     */
    private void checkName(QTD qtd) throws PLException {
        if (qtd.name.equals("")) {
            throw new PLException("500", new String[]{"请输入模板定义名"});
        }
        if (!qtd.name.matches("[a-z A-Z]*")) {
            throw new PLException("500", new String[]{"模板定义名只能为英文字母"});
        }
        if (platformClientUtil.getQTDService().isExistsQTD(qtd.name.toLowerCase())) {
            throw new PLException("500", new String[]{"该模板定义名已经被使用, 请更换"});
        }
    }
}