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;
|
}
|
}
|