ny
昨天 b6f169fe43a2b13f351aefc152374fc7f0bc8cb7
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
package jnpf.onlinedev.util;
 
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.Method;
import jnpf.base.UserInfo;
import jnpf.base.model.VisualLogModel;
import jnpf.base.model.flow.DataModel;
import jnpf.config.ConfigValueUtil;
import jnpf.flowable.TriggerApi;
import jnpf.flowable.model.trigger.TriggerDataFo;
import jnpf.message.model.TriggerDataModel;
import jnpf.message.model.TriggerModel;
import jnpf.onlinedev.model.AsyncExecuteModel;
import jnpf.util.Constants;
import jnpf.util.JsonUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
 
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
 
@Component
public class IntegrateUtil {
    @Autowired
    private ConfigValueUtil configValueUtil;
    @Autowired
    private TriggerApi triggerApi;
 
    public List<TriggerDataModel> asyncDelExecute(AsyncExecuteModel executeModel) {
        String modelId = executeModel.getModelId();
        Integer trigger = executeModel.getTrigger();
        List<String> dataId = executeModel.getDataId();
        DataModel dataModel = executeModel.getDataModel();
        List<Map<String, Object>> dataMap = executeModel.getDataMap();
 
        TriggerDataFo fo = new TriggerDataFo();
        fo.setModelId(modelId);
        fo.setTrigger(trigger);
        fo.setDataId(dataId);
        fo.setDataMap(dataMap);
        if (dataModel != null) {
            List<VisualLogModel> listLog = dataModel.getListLog();
            if (CollectionUtil.isNotEmpty(listLog)) {
                List<String> updateFields = this.getUpdateFields(listLog);
                fo.setUpdateFields(updateFields);
            }
        }
 
        List<TriggerDataModel> resultData = triggerApi.getTriggerDataModel(fo);
        return resultData;
    }
 
    @Async
    public void asyncExecute(AsyncExecuteModel executeModel) {
        String modelId = executeModel.getModelId();
        Integer trigger = executeModel.getTrigger();
        List<String> dataId = executeModel.getDataId();
        UserInfo userInfo = executeModel.getUserInfo();
        DataModel dataModel = executeModel.getDataModel();
        List<Map<String, Object>> dataMap = executeModel.getDataMap();
 
        TriggerDataFo fo = new TriggerDataFo();
        fo.setModelId(modelId);
        fo.setTrigger(trigger);
        fo.setDataId(dataId);
        fo.setDataMap(dataMap);
        if (dataModel != null) {
            List<VisualLogModel> listLog = dataModel.getListLog();
            if (CollectionUtil.isNotEmpty(listLog)) {
                List<String> updateFields = this.getUpdateFields(listLog);
                fo.setUpdateFields(updateFields);
            }
        }
 
        List<TriggerDataModel> resultData = triggerApi.getTriggerDataModel(fo);
        if (!resultData.isEmpty()) {
            String url = configValueUtil.getApiDomain() + "/api/workflow/trigger/Execute";
            TriggerModel model = new TriggerModel();
            model.setUserInfo(userInfo);
            model.setDataList(resultData);
            HttpRequest request = HttpRequest.of(url).method(Method.POST).body(JsonUtil.getObjectToString(model));
            request.header(Constants.AUTHORIZATION, userInfo.getToken());
            request.execute().body();
        }
    }
 
    private List<String> getUpdateFields(List<VisualLogModel> listLog) {
        List<String> updateFields = new ArrayList<>();
        if (CollectionUtil.isNotEmpty(listLog)) {
            for (VisualLogModel logModel : listLog) {
                String field = logModel.getField();
                List<Map<String, Object>> chidField = logModel.getChidField();
                List<Map<String, Object>> chidData = logModel.getChidData();
                if (CollectionUtil.isNotEmpty(chidField) && CollectionUtil.isNotEmpty(chidData)) {
                    // 子表
                    for (Map<String, Object> map : chidField) {
                        String key = (String) map.get("prop");
                        for (Map<String, Object> child : chidData) {
                            if (!ObjectUtil.equals(child.get(key), child.get("jnpf_old_" + key))) {
                                updateFields.add(field + "-" + key);
                                break;
                            }
                        }
                    }
                } else {
                    updateFields.add(field);
                }
            }
        }
        return updateFields;
    }
}