guoshilong
2023-05-16 d0a1fc499804f832f4c77bc80727340907cbfd4a
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
package cn.gistack.sm.reportFlood.service.impl;
 
import cn.gistack.flow.core.constant.ProcessConstant;
import cn.gistack.flow.core.entity.BladeFlow;
import cn.gistack.flow.core.feign.IFlowClient;
import cn.gistack.flow.core.utils.FlowUtil;
import cn.gistack.flow.core.utils.TaskUtil;
import cn.gistack.sm.patrol.entity.PatrolTask;
import cn.gistack.sm.reportFlood.entity.ReportFloodRecord;
import cn.gistack.sm.reportFlood.mapper.ReportFloodRecordMapper;
import cn.gistack.sm.reportFlood.service.IReportFloodRecordService;
import cn.gistack.sm.reportFlood.vo.ReportFloodRecordVO;
import cn.gistack.sm.sjztmd.constant.PersonType;
import cn.gistack.sm.sjztmd.entity.AttResManagePerson;
import cn.gistack.sm.sjztmd.service.IAttResManagePersonService;
import cn.gistack.system.user.entity.User;
import cn.gistack.system.user.feign.IUserClient;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.AllArgsConstructor;
import org.apache.ibatis.annotations.Param;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.support.Kv;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.ObjectUtil;
import org.springblade.core.tool.utils.StringUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
 
import static org.springblade.core.launch.constant.FlowConstant.TASK_USR_PREFIX;
 
@Service
@AllArgsConstructor
public class ReportFloodRecordServiceImpl extends BaseServiceImpl<ReportFloodRecordMapper, ReportFloodRecord> implements IReportFloodRecordService {
    private final IFlowClient flowClient;
    private final IAttResManagePersonService attResManagePersonService;
    private final IUserClient userClient;
 
    @Override
    public IPage<ReportFloodRecord> selectReportFloodRecordPages(IPage<ReportFloodRecord> page, ReportFloodRecord reportFloodRecord) {
        return page.setRecords(baseMapper.selectReportFloodRecordPages(page,reportFloodRecord));
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean startProcess(ReportFloodRecordVO reportFloodRecord) {
        String businessTable = FlowUtil.getBusinessTable(ProcessConstant.REPORT_FLOOD_KEY);
        if (Func.isEmpty(reportFloodRecord.getId())) {
            save(reportFloodRecord);
            // 启动流程
            Kv variables = Kv.create()
                .set(ProcessConstant.TASK_VARIABLE_CREATE_USER, reportFloodRecord.getCreateUser())
                .set("taskUser", StringUtil.format("{}{}", TASK_USR_PREFIX, reportFloodRecord.getTaskUser()));
            R<BladeFlow> result = flowClient.startProcessInstanceById(reportFloodRecord.getProcessDefinitionId(), FlowUtil.getBusinessKey(businessTable, String.valueOf(reportFloodRecord.getId())), variables);
            if (result.isSuccess()) {
                log.debug("流程已启动,流程ID:" + result.getData().getProcessInstanceId());
                // 返回流程id写入
                reportFloodRecord.setProcessInstanceId(result.getData().getProcessInstanceId());
                updateById(reportFloodRecord);
 
//                //状态正常直接结束任务
                ReportFloodRecordVO reportFloodRecordVO = new ReportFloodRecordVO();
                reportFloodRecordVO.setProcessInstanceId(reportFloodRecord.getProcessInstanceId());
                //业务id
                String businessId = reportFloodRecord.getId().toString();
                //当前用户id
                String currentUserId = reportFloodRecord.getCreateUser().toString();
                //指定下一人
                String taskUser = reportFloodRecord.getTaskUser();
                R<BladeFlow> res = flowClient.getBladeFlow(businessId,currentUserId);
                //参数设置
                if (res.isSuccess()){
                    reportFloodRecordVO.setFlow(res.getData());
                    if (Func.equals(reportFloodRecord.getStatus(),1)){
                        //状态正常结束任务
                        reportFloodRecordVO.setReport(false);
                    }else{
                        //异常
                        if (Func.equals(reportFloodRecord.getSolution(),"1")){
                            //自行处理
                            return true;
                        }else {
                            //上报给技术责任人
                            reportFloodRecordVO.setReport(true);
                        }
                    }
                }
                completeTask(reportFloodRecordVO,taskUser,currentUserId);
            } else {
                throw new ServiceException("开启流程失败");
            }
        } else {
            updateById(reportFloodRecord);
        }
        return true;
    }
 
    @Override
    public boolean completeTask(ReportFloodRecordVO reportFloodRecord, String taskUser, String currentUser) {
            BladeFlow flow = reportFloodRecord.getFlow();
            String taskId = flow.getTaskId();
            String processInstanceId = reportFloodRecord.getProcessInstanceId();
            String comment = "完成";
            // 创建变量
            Map<String, Object> variables = flow.getVariables();
            if (variables == null) {
                variables = Kv.create();
            }
            //指定是否上报
            variables.put(ProcessConstant.REPORT_KEY,reportFloodRecord.isReport());
            //指定转交人
            variables.put("taskUser", StringUtil.format("{}{}", TASK_USR_PREFIX, taskUser));
            // 完成任务
            flowClient.completeTask(taskId,processInstanceId,comment,variables);
            return true;
    }
 
    @Override
    public ReportFloodRecordVO customizeGetDetail(String businessId) {
        return baseMapper.customizeGetDetail(businessId);
    }
 
    /**
     * 根据水库id和责任人类型获取用户
     * @param type 责任人类型
     * @param resGuid 水库id
     * @return
     */
    public User getUser(String type,String resGuid){
        AttResManagePerson attResManagePerson = new AttResManagePerson();
        attResManagePerson.setResGuid(resGuid);
        List<AttResManagePerson> list = attResManagePersonService.list(Condition.getQueryWrapper(attResManagePerson));
 
        //person_type人员类型: 1行政责任人,2主管责任人,3技术责任人,4管理责任人,5巡查责任人(确认)
        list.stream().filter(e->Func.equals(type,e.getType())).collect(Collectors.toList());
        attResManagePerson = list.get(0);
        R<List<User>> res = userClient.userInfoByPhone("000000", attResManagePerson.getUserPhone());
        if (res.isSuccess()){
            return res.getData().get(0);
        }else {
            return null;
        }
    }
}