ludc
2025-01-15 d42f321ca241ab7f8bb3cdc71f11fe5ec4ebc48d
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
package com.vci.web.controller;
 
import com.vci.corba.wf.data.TasksAssignedInfo;
import com.vci.pagemodel.ProcessUserVO;
import com.vci.starter.web.annotation.log.VciBusinessLog;
import com.vci.starter.web.pagemodel.BaseResult;
import com.vci.starter.web.pagemodel.DataGrid;
import com.vci.starter.web.dto.BaseModelDTO;
import com.vci.dto.ProcessNodeUseDTO;
import com.vci.dto.ProcessStartConfigDTO;
import com.vci.web.service.WebProcessCommandServiceI;
import com.vci.web.util.WebUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
 
import java.io.IOException;
import java.util.*;
 
/**
 * 流程执行控制
 * @author weidy
 */
@VciBusinessLog(modelName="流程执行服务")
@Controller
@RequestMapping("/webProcessCommandController")
public class WebProcessCommandController{
 
    private Logger logger = LoggerFactory.getLogger(getClass());
    
    @Autowired
    private WebProcessCommandServiceI proCmdService;
    
    @VciBusinessLog(operateName="执行流程")
    @RequestMapping("/completeTasks")
    @ResponseBody
    public BaseResult completeTasks(String taskOids, String outCome, String note, String  nextTaskUserIds){
        try{
            proCmdService.completeTasks(taskOids, outCome, note, getProcessUserByIds(nextTaskUserIds));
            return BaseResult.success(taskOids);
        }catch(Exception e){
            BaseResult result = BaseResult.fail(WebUtil.getErrorMsg(e));
            result.setObj(taskOids);
            return result;
        }
    }
 
    /**
     * 将用户名转为流程用户对象
     * @param userIds 用户名
     * @return
     */
    private List<ProcessUserVO> getProcessUserByIds(String userIds){
        List<ProcessUserVO> users = new ArrayList<ProcessUserVO>();
        if(WebUtil.isNotNull(userIds)){
            for(String s : userIds.split(",")){
                if(WebUtil.isNotNull(s)){
                    ProcessUserVO pu = new ProcessUserVO();
                    pu.setId(s);
                    pu.setType("user");
                    users.add(pu);
                }
            }
        }
        return users;
    }
    
    
    @VciBusinessLog(operateName="开始流程")
    @RequestMapping("/startProcess")
    @ResponseBody
    public BaseResult startProcess(ProcessStartConfigDTO config, ProcessNodeUseDTO processNodeUseDTO, BaseModelDTO variablesInfo){
        try {
            Map<String,List<ProcessUserVO>> inProcessUsers = new HashMap<String, List<ProcessUserVO>>();
            if(processNodeUseDTO != null && processNodeUseDTO.getNodeUsers()!=null){
                for(String nodeName : processNodeUseDTO.getNodeUsers().keySet()){
                    String userIds = processNodeUseDTO.getNodeUsers().get(nodeName);
                    inProcessUsers.put(nodeName, getProcessUserByIds(userIds));
                }
            }
            proCmdService.startProcess(config, inProcessUsers, variablesInfo.getData());
            return BaseResult.successMsg("发起流程成功");
        } catch (Exception e) {
            return BaseResult.fail(WebUtil.getErrorMsg(e));
        }
    }
 
    @VciBusinessLog(operateName="发起流程时校验数据的属性是否符合要求")
    @RequestMapping("/checkAttributesOnStartProcess")
    @ResponseBody
    public BaseResult checkAttributesOnStartProcess(String oids,String btmType,String attributes,String attributeValues,String primaryKeyName){
        try{
            proCmdService.checkAttributesOnStartProcess(oids,btmType,attributes,attributeValues,primaryKeyName);
            return BaseResult.successMsg("属性校验成功");
        }catch (Throwable e){
            return BaseResult.fail(WebUtil.getErrorMsg(e));
        }
    }
    
    @VciBusinessLog(operateName="终止流程")
    @RequestMapping("/endProcess")
    @ResponseBody
    public BaseResult endProcess(String processOids,String note){
        proCmdService.endProcess(processOids,note);
        return BaseResult.success();
    }
    
    @VciBusinessLog(operateName="挂起流程")
    @RequestMapping("/suspendProcess")
    @ResponseBody
    public BaseResult suspendProcess(String processOids,String note){
        proCmdService.suspendProcess(processOids,note);
        return BaseResult.success();
    }
    
    @VciBusinessLog(operateName="恢复流程")
    @RequestMapping("/resumeProcess")
    @ResponseBody
    public BaseResult resumeProcess(String processOids){
        proCmdService.resumeProcess(processOids);
        return BaseResult.success();
    }
    
    @VciBusinessLog(operateName="查看代理信息")
    @RequestMapping("/getProxy")
    @ResponseBody
    public DataGrid getProxy(){
        DataGrid dg = new DataGrid();
        TasksAssignedInfo taskAss = proCmdService.getProxy();
        if(taskAss!=null){
            dg.getData().add(taskAss);
            dg.setLimit(1);
            dg.setTotal(1);
        }
        return dg;
    }
    
    @VciBusinessLog(operateName="开启代理")
    @RequestMapping("/startProxy")
    @ResponseBody
    public BaseResult startProxy(String userId,Date startTime,Date endTime) {
        proCmdService.beginProxy(userId, startTime, endTime,true);
        return BaseResult.successMsg("添加流程代理人成功");
    }
    
    @VciBusinessLog(operateName="关闭代理")
    @RequestMapping("/endProxy")
    @ResponseBody
    public BaseResult endProxy() {
        proCmdService.endProxy();
        return BaseResult.successMsg("停止代理成功,在代理期间被转移到代理人的任务不会自动回转");
    }
    
    @VciBusinessLog(operateName="设置负责人")
    @RequestMapping("/setPrincipal")
    @ResponseBody
    public BaseResult setPrincipal(String taskOids,String userIds){
        proCmdService.setPrincipal(taskOids, userIds);
        return BaseResult.successMsg("设置负责人成功");
    }
 
    @VciBusinessLog(operateName="上传流程审批意见")
    @RequestMapping("/uploadAuditSuggestFile")
    @ResponseBody
    public BaseResult uploadAuditSuggestFile(String taskOids, MultipartFile file) throws IOException {
        if(file != null){
            proCmdService.uploadAuditSuggestFile(taskOids, file,file.getOriginalFilename());
            return BaseResult.successMsg("上传流程审批意见成功");
        }else{
            return BaseResult.successMsg("上传的文件是空的");
        }
    }
 
}