田源
2024-08-23 9e20b9fb77a41cb5b4a6eb6213fc51cab1f0bb91
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
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
package com.vci.web.controller;
 
import com.vci.dto.ProcessTemplateVO;
import com.vci.pagemodel.*;
import com.vci.pagemodel.KeyValue;
import com.vci.starter.web.annotation.bus.VciNoUseBaseResult;
import com.vci.starter.web.annotation.controller.VciUnCheckRight;
import com.vci.starter.web.annotation.log.VciBusinessLog;
import com.vci.starter.web.annotation.permission.VciReferPermission;
import com.vci.starter.web.pagemodel.*;
import com.vci.starter.web.util.ControllerUtil;
import com.vci.web.service.WebProcessDefineServiceI;
import com.vci.web.util.WebUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
@VciBusinessLog(modelName="流程查询服务")
@Controller
@RequestMapping("/processDefineController")
public class WebProcessDefineController {
    
    @Autowired
    private WebProcessDefineServiceI proDefineService;
    
    @VciBusinessLog(operateName="获取待办事项")
    @RequestMapping("/getMyUndoTask")
    @ResponseBody
    public DataGrid getMyUndoTask(BaseQueryObject baseQueryObject){
        return proDefineService.getMyUndoProcessTask(baseQueryObject.getConditionMap(), baseQueryObject.getPageHelper());
    }
 
 
    @VciBusinessLog(operateName="查询当前用户发起的流程中正在执行中的流程")
    @RequestMapping("/getMyExecutingProcess")
    @ResponseBody
    public DataGrid getMyExecutingProcess(BaseQueryObject baseQueryObject){
        return proDefineService.getMyExecutingProcess(baseQueryObject.getConditionMap(), baseQueryObject.getPageHelper());
    }
 
    @VciBusinessLog(operateName="查询所有正在执行中的流程")
    @RequestMapping("/getAllExecutingProcess")
    @ResponseBody
    public DataGrid getAllExecutingProcess(BaseQueryObject baseQueryObject){
        return proDefineService.getAllExecutingProcess(baseQueryObject.getConditionMap(), baseQueryObject.getPageHelper());
    }
 
    @VciBusinessLog(operateName="查询当前用户发起的流程中已经完成的流程")
    @RequestMapping("/getMyFinishProcess")
    @ResponseBody
    public DataGrid getFinishProcess(BaseQueryObject baseQueryObject){
        return proDefineService.getMyCompletedProcess(baseQueryObject.getConditionMap(), baseQueryObject.getPageHelper());
    }
 
    @VciBusinessLog(operateName="查询所有已经完成的流程")
    @RequestMapping("/getAllFinishProcess")
    @ResponseBody
    public DataGrid getAllFinishProcess(BaseQueryObject baseQueryObject){
        return proDefineService.getAllCompletedProcess(baseQueryObject.getConditionMap(), baseQueryObject.getPageHelper());
    }
 
    @VciBusinessLog(operateName="查询当前用户发起的流程中已经终止的流程")
    @RequestMapping("/getMyEndProcess")
    @ResponseBody
    public DataGrid getEndProcess(BaseQueryObject baseQueryObject){
        return proDefineService.getMyObsoledtedProcess(baseQueryObject.getConditionMap(), baseQueryObject.getPageHelper());
    }
 
    @VciBusinessLog(operateName="查询所有已终止的流程")
    @RequestMapping("/getAllEndProcess")
    @ResponseBody
    public DataGrid getAllEndProcess(BaseQueryObject baseQueryObject){
            return proDefineService.getAllObsoledtedProcess(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
    }
 
    @VciBusinessLog(operateName="查询当前用户发起的流程中已经挂起的流程")
    @RequestMapping("/getMySuspendedProcess")
    @ResponseBody
    public DataGrid getMySuspendedProcess(BaseQueryObject baseQueryObject){
        return proDefineService.getMySuspendedProcess(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
    }
 
    @VciBusinessLog(operateName="查询当前用户发起的流程中已经挂起的流程")
    @RequestMapping("/getAllSuspendedProcess")
    @ResponseBody
    public DataGrid getAllSuspendedProcess(BaseQueryObject baseQueryObject){
        return proDefineService.getAllSuspendedProcess(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
    }
 
    @VciBusinessLog(operateName="查询当前用户已经处理的流程任务")
    @RequestMapping("/getMyDoneProcessTask")
    @ResponseBody
    public DataGrid getMyDoneProcessTask(BaseQueryObject baseQueryObject){
        return proDefineService.getMyDoneProcessTask(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
    }
    
    @VciBusinessLog(operateName="获取数据展示所需表格的定义",notStore=true)
    @RequestMapping("/getDataDefine")
    @ResponseBody
    public BaseResult getDataDefine(String executionid, String taskOid, HttpServletRequest request) {
        if(StringUtils.isNotBlank(executionid)){
 
        }
        Map<String, Object> map =  proDefineService.getDataTableDefine(executionid,taskOid);
        if(!map.isEmpty()) {
            return BaseResult.success(map);
        }else {
            return BaseResult.fail("没有找到定义");
        }
    }
 
    @VciBusinessLog(operateName="根据任务主键获取任务对象",notStore=true)
    @RequestMapping("/getTaskByOid")
    @ResponseBody
    public BaseResult getTaskByOid(String taskOid){
        return BaseResult.success(proDefineService.getTaskByOid(taskOid));
    }
    
    @VciBusinessLog(operateName="获取任务关联的数据",notStore=true)
    @RequestMapping("/getDataByTask")
    @ResponseBody
    public DataGrid getDataByTask(BaseQueryObject baseQueryObject,String referColumn){
        if(baseQueryObject == null || baseQueryObject.getConditionMap() == null ||
                (!baseQueryObject.getConditionMap().containsKey("taskOid") && !baseQueryObject.getConditionMap().containsKey("processOid"))){
            return new DataGrid();
        }
        String taskOid = "";
        if(baseQueryObject.getConditionMap().containsKey("taskOid")){
            taskOid = baseQueryObject.getConditionMap().get("taskOid");
        }
        String processOid = "";
        if(baseQueryObject.getConditionMap().containsKey("processOid")){
            processOid = baseQueryObject.getConditionMap().get("processOid");
        }
        return proDefineService.getDataInProcess(taskOid,processOid,referColumn);
    }
 
    @VciBusinessLog(operateName="获取流程中业务数据关联文件",notStore=true)
    @RequestMapping("/dataGridFileInProcess")
    @ResponseBody
    public DataGrid dataGridFileInProcess(BaseQueryObject baseQueryObject,String dataOid,String executionid){
        return proDefineService.getFilesInProcess((baseQueryObject != null ? baseQueryObject.getConditionMap() : (new HashMap<String, String>())), dataOid, executionid,baseQueryObject.getPageHelper());
    }
    
    @VciBusinessLog(operateName="获取历史记录",notStore=true)
    @RequestMapping("/getHistory")
    @ResponseBody
    public DataGrid getHistory(String executionId,boolean showCurrentNode){
        return proDefineService.getHistory(executionId, showCurrentNode);
    }
    //应该使用ResonseEntity,但是不知为何前台没有获取到值,暂时使用流输出的方式
    @VciBusinessLog(operateName="获取流程图片",notStore=true)
    @GetMapping("/getProcessPic")
    public void getProcessPic(String executionId,String taskOid,HttpServletResponse response){
        try {
            byte[] picData = proDefineService.getProcessPicture(executionId, taskOid);
            if(picData!=null&& picData.length>0){
                response.setContentType(MediaType.IMAGE_PNG.toString());
                OutputStream os = response.getOutputStream();
                os.write(picData);
                os.flush();
                os.close();
                return;
            }
        } catch (Exception e) {
            try {
                ControllerUtil.writeDataToResponse(response,WebUtil.getErrorMsg(e).getBytes(),null);
            } catch (IOException ioException) {
                ioException.printStackTrace();
            }
        }
    }
    
    @VciBusinessLog(operateName="校验流程任务是否使用相同的模板",notStore=true)
    @RequestMapping("/checkUseSameTemplate")
    @ResponseBody
    public BaseResult checkUseSameTemplate(String taskOids){
        try {
             return BaseResult.success(proDefineService.checkUseSameTemplate(taskOids));
        } catch (Exception e) {
            return BaseResult.fail(WebUtil.getErrorMsg(e));
        }
    }
    
    @VciBusinessLog(operateName="获取任务的路由",notStore=true)
    @RequestMapping("/getOutcomes")
    @ResponseBody
    public BaseResult getOutcomes(String taskOid){
         List<ProcessOutcomeVO> allOutcomes = proDefineService.getOutCome(taskOid, true);
        BaseResult result = BaseResult.success();
        result.setData(allOutcomes);
         if(allOutcomes !=null && allOutcomes.size()>0){
             result.setSuccess(true);
         }else{
             result.setSuccess(false);
             result.setMsg("获取的路由为空");
         }
         return result;
    }
 
    /**
     * 获取某个分类下的userid可以使用的流程模板
     * @param type 流程分类
     * @param filterTemplate 指定模板
     * @return 可用的流程模版
     */
    @ResponseBody
    @RequestMapping("/getTemplateByType")
    @VciBusinessLog(operateName="获取流程模板",notStore=true)
    public BaseResult getTemplateByType(String type,String filterTemplate){
        List<ProcessTemplateVO> myTemplate = proDefineService.getMyTemplates(type, filterTemplate,false);
        List<KeyValue> allCombox = new ArrayList<KeyValue>();
        if(myTemplate!=null && myTemplate.size()>0){
            for(ProcessTemplateVO pt : myTemplate){
                KeyValue kv = new KeyValue();
                kv.setKey(pt.getOid());
                kv.setValue(pt.getName() + "-" + pt.getVersion());
                kv.setAttributes(WebUtil.objectToMap(pt));
                allCombox.add(kv);
            }
            BaseResult result = BaseResult.success();
            result.setData(allCombox);
            return result;
        }else{
            return BaseResult.fail("没有可用的版本");
        }
    }
 
    /**
     * 获取流程中定义的所有任务节点
     * @param processOid 流程模版的主键
     * @param maxSecret 数据中的最大密级值
     * @return 该流程模版中所有的任务节点,其中包含所有可以选择的用户
     */
    @ResponseBody
    @RequestMapping("/getAllProcessNode")
    @VciBusinessLog(operateName="获取流程的节点",notStore=true)
    public BaseResult getAllProcessNode(String processOid,int maxSecret){
        try{
            List<ProcessNodeVO> allNode = proDefineService.getAllProcessNode(processOid, true,maxSecret);
            if(allNode!=null && allNode.size()>0){
                BaseResult baseResult = BaseResult.success();
                baseResult.setData(allNode);
                return baseResult;
            }else{
                return BaseResult.fail("数据有误,没找到流程的节点");
            }
        }catch(Exception e){
            return BaseResult.fail(WebUtil.getErrorMsg(e));
        }
    }
 
    @ResponseBody
    @RequestMapping("/getVariableByKey")
    @VciBusinessLog(operateName="获取流程中参数",notStore=true)
    @VciReferPermission(referedKey = "getVariableByKeyInProcess")
    public BaseResult getVariableByKey(String executionId,String keys){
        if(StringUtils.isBlank(executionId) || StringUtils.isBlank(keys)){
            return BaseResult.fail("没有获取到流程的信息,无法查询变量");
        }
        return BaseResult.success(proDefineService.getVariablesInProcess(executionId, keys));
    }
 
    @ResponseBody
    @RequestMapping("/listAuditSuggestFile")
    @VciBusinessLog(operateName = "获取流程中的审批意见",notStore = true)
    public DataGrid<VciFileObjectVO> listAuditSuggestFile(String taskOids){
        return proDefineService.listAuditSuggestFile(taskOids);
    }
 
 
    /**
     * 参照流程分类列表
     * @param queryObject 查询对象
     * @return 分类的信息
     */
    @ResponseBody
    @RequestMapping(value = "/referGridProcessClassify",method = RequestMethod.GET)
    @VciBusinessLog(operateName = "参照流程分类")
    public DataGrid<ProcessClassifyVO> referGridProcessClassify(BaseQueryObject queryObject){
        return proDefineService.referGridProcessClassify(queryObject.getConditionMap(),queryObject.getPageHelper());
    }
 
    /**
     * 参照流程分类树
     * @param queryObject 查询对象
     * @return 分类的信息
     */
    @ResponseBody
    @RequestMapping(value = "/referTreeProcessClassify",method = RequestMethod.GET)
    @VciBusinessLog(operateName = "参照流程分类树")
    public List<Tree> referTreeProcessClassify(TreeQueryObject queryObject){
        return proDefineService.referTreeProcessClassify(queryObject);
    }
 
    /**
     * 参照流程的模板列表
     * @param processClassifyId 流程分类的名称
     * @param name 模板名称
     * @return 模板的信息
     */
    @ResponseBody
    @RequestMapping(value = "/referGridProcessTemplate",method = RequestMethod.GET)
    @VciBusinessLog(operateName = "参照流程模板")
    public DataGrid<ProcessTemplateVO> referGridProcessTemplate(String processClassifyId,String name){
        return proDefineService.referGridProcessTemplate(processClassifyId,name);
    }
 
    @VciNoUseBaseResult
    @RequestMapping("/getUndoTaskCount")
    @VciUnCheckRight
    @VciBusinessLog(operateName = "外部系统查询待办的总数")
    public void getUndoTaskCount(String username,HttpServletResponse response){
        String count =  String.valueOf(proDefineService.getUndoTaskCount(username));
        try {
            ControllerUtil.writeDataToResponse(response,count.getBytes(StandardCharsets.UTF_8),"text/html");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
 
}