calyrex 4.27 和信创建流程接口

ht
calyrex 1 month ago
parent 9ed47b7c11
commit 3951fc6502

@ -32,13 +32,4 @@ public class DataOptions {
private Boolean matchByName; private Boolean matchByName;
} }

@ -0,0 +1,35 @@
package com.weaver.seconddev.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author: calyrex
* @CreateTime: 2025-04-25
* @Description:
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DataOptions {
private String optionId;
private Long dataKey;
private String content;
/**
*
*/
private String type;
private Boolean matchByName;
}

@ -0,0 +1,59 @@
package com.weaver.seconddev.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @Author: calyrex
* @CreateTime: 2025-04-25
* @Description:
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class FormDataDuty {
private Long fieldId;
private String dataKey;
/**
*
*/
private String content;
private List<DataOptions> dataOptions;
/**
* IDdataKey
*/
private Long subFormId;
/**
* ()1
*/
private Long dataIndex;
/**
* 1
*/
private int fieldType;
@Override
public String toString() {
return "FormDataDuty{" +
"fieldId=" + fieldId +
", dataKey='" + dataKey + '\'' +
", content='" + content + '\'' +
", dataOptions=" + dataOptions +
", subFormId=" + subFormId +
", dataIndex=" + dataIndex +
'}';
}
}

@ -0,0 +1,186 @@
package com.weaver.seconddev.util;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.weaver.common.hrm.util.Util;
import com.weaver.common.i18n.tool.util.I18nContextUtil;
import com.weaver.ebuilder.datasource.api.entity.ExecuteSqlEntity;
import com.weaver.ebuilder.datasource.api.enums.SourceType;
import com.weaver.ebuilder.datasource.api.service.DataSetService;
import com.weaver.framework.rpc.context.impl.TenantRpcContext;
import com.weaver.seconddev.entity.DataOptions;
import com.weaver.seconddev.entity.FormDataDuty;
import com.weaver.verupgrade.conn.RecordSet;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @Author: calyrex
* @CreateTime: 2025-04-25
* @Description:
*/
@Component
@Slf4j
public class DataOperateUtil {
@Autowired
private DataSetService dataSetService;
public List<Long> getDetailFormId(String workflowId) {
log.error("getDetailFormId start : " + workflowId );
List<Long> formIdList = new ArrayList();
String sourceType = String.valueOf(SourceType.LOGIC);
String groupId = "weaver-basic-schedule-service";
try {
String sql = "select form_id from ecology10.dbo.form_table where form_id in (select id from e10_core_business.dbo.sub_form where form_id in (select relatekey from e10_core_business.dbo.wfp_relateform where workflowid = '"+workflowId+"'))";
log.info("getConfig sql-->" + sql);
Map<String, Object> datas = executeForQuery(sourceType, groupId, sql);
// log.info("getConfig datas-->" + datas);
if(String.valueOf(datas.get("status")).equals("OK")){
List<Map<String,Object>> records = (List<Map<String,Object>>)datas.get("records");
for (int i = 0; i < records.size(); i++) {
Map<String, Object> map = records.get(i);
String formId = map.get("form_id").toString();
formIdList.add(Long.valueOf(formId));
}
return formIdList;
}else {
log.error("getConfig status-->"+ datas.get("status"));
return formIdList;
}
}catch (Exception e){
log.error("getConfig e--> ",e);
return formIdList;
}
}
public String getConfig(String key,String tenantKey){
String sourceType = String.valueOf(SourceType.LOGIC);
String groupId = "weaver-basic-schedule-service";
try {
String sql = "select configvalue from ecology10.dbo.uf_config where configkey = '" + key + "' and zhkey = '"+tenantKey+"'";
log.info("getConfig sql-->" + sql);
Map<String, Object> datas = executeForQuery(sourceType, groupId, sql);
// log.info("getConfig datas-->" + datas);
if(String.valueOf(datas.get("status")).equals("OK")){
List<Map<String,Object>> records = (List<Map<String,Object>>)datas.get("records");
Map<String, Object> map = records.get(0);
return map.get("config_value").toString();
}else {
log.error("getConfig status-->"+ datas.get("status"));
return "";
}
}catch (Exception e){
log.error("getConfig e--> ",e);
return "";
}
}
public Map<String, Object> executeForQuery(String sourceType, String groupId, String sql) {
// log.info("executeForQuery sourceType-->" + sourceType + ",groupId-->" + groupId + ",sql-->" + sql);
TenantRpcContext.setTargetTenantKey("temkc46eme");
ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity();
executeSqlEntity.setSql(cn.hutool.core.codec.Base64.encode(sql));
executeSqlEntity.setGroupId(groupId); //groupid,可以访问 E10地址/api/datasource/ds/group?sourceType=LOGIC 获取
executeSqlEntity.setSourceType(SourceType.valueOf(sourceType));
// log.info("executeForQuery executeSqlEntity-->"+executeSqlEntity.getSql()+"-->"+executeSqlEntity.getGroupId()+"-->"+executeSqlEntity.getSourceType());
Map<String, Object> datas = dataSetService.executeSql(executeSqlEntity);
// log.info("executeForQuery datas-->" + datas);
TenantRpcContext.removeTargetTenantKey();
return datas;
}
/**
*
* @return
*/
public static JSONObject getFromDataByDataDetails(List<FormDataDuty> formDataDutyList) {
JSONObject formData = new JSONObject();
formData.put("module","workflow");
JSONArray dataDetails = new JSONArray();
formData.put("dataDetails", dataDetails);
formDataDutyList.forEach(formDataDuty -> {
if (formDataDuty.getSubFormId() != null) {
//明细表
if (formDataDuty.getDataOptions() == null) {
//普通字段
JSONObject inputDataKey = new JSONObject();
inputDataKey.put("dataKey", formDataDuty.getDataKey());
inputDataKey.put("dataIndex", formDataDuty.getDataIndex());
inputDataKey.put("content", formDataDuty.getContent());
inputDataKey.put("subFormId", formDataDuty.getSubFormId());
dataDetails.add(inputDataKey);
}else {
JSONObject details = new JSONObject();
dataDetails.add(details);
JSONArray dataOptions = new JSONArray();
details.put("dataKey", formDataDuty.getDataKey());
details.put("dataIndex", formDataDuty.getDataIndex());
details.put("subFormId", formDataDuty.getSubFormId());
details.put("dataOptions", dataOptions);
List<DataOptions> dataOptions1 = formDataDuty.getDataOptions();
dataOptions1.forEach(e -> {
JSONObject option = new JSONObject();
option.put("optionId", e.getOptionId());
dataOptions.add(option);
});
}
}else {
//主表
if (formDataDuty.getDataOptions() == null) {
//普通字段
JSONObject inputDataKey = new JSONObject();
inputDataKey.put("dataKey", formDataDuty.getDataKey());
inputDataKey.put("content", formDataDuty.getContent());
dataDetails.add(inputDataKey);
}else {
//浏览按钮字段
// 浏览按钮
JSONObject details = new JSONObject();
dataDetails.add(details);
JSONArray dataOptions = new JSONArray();
details.put("dataKey", formDataDuty.getDataKey());
details.put("dataOptions", dataOptions);
List<DataOptions> dataOptions1 = formDataDuty.getDataOptions();
dataOptions1.forEach(e -> {
JSONObject option = new JSONObject();
option.put("optionId", e.getOptionId());
//fieldType 3为附件
if (formDataDuty.getFieldType() == 3) {
option.put("content", e.getContent());
}
dataOptions.add(option);
});
}
}
});
return formData;
}
public static String null2String(String s){
return s == null ? "" : s;
}
public static String null2String(Object o){
return o == null ? "" : o.toString();
}
public static String null2String(String s1,String s2){
return s1 == null ? (s2 == null ? "" : s2) : s1;
}
}

@ -0,0 +1,66 @@
package com.weaver.seconddev.util;
import cn.hutool.http.HttpRequest;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.IOException;
/**
* @Author: calyrex
* @CreateTime: 2025-04-25
* @Description:
*/
@Component
@Slf4j
public class InterInfoAchieveUtil {
@Autowired
private DataOperateUtil dataOperateUtil;
public String getCode(String tenantKey){
try {
String corpid = dataOperateUtil.null2String(dataOperateUtil.getConfig("corpid",tenantKey));
String response_type = "code";
String state = "xxx";
String url = dataOperateUtil.null2String(dataOperateUtil.getConfig("oa_address",tenantKey)) + "/papi/openapi/oauth2/authorize?corpid=" +
corpid + "&response_type=" + response_type + "&state=" + state;
String body = HttpRequest.get(url).execute().body();
// log.info("getCode body-->" + body);
return body;
}catch (Exception e){
log.error("getCode error--> " + e);
return "";
}
}
public String getToken(String code,String tenantKey) throws IOException {
String app_key = dataOperateUtil.null2String(dataOperateUtil.getConfig("app_key",tenantKey));
String app_secret = dataOperateUtil.null2String(dataOperateUtil.getConfig("app_secret",tenantKey));
String grant_type = "authorization_code";
// JSONObject params = new JSONObject();
// params.put("app_key",app_key);
// params.put("app_secret",app_secret);
// params.put("grant_type",grant_type);
// params.put("code",code);
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
String params = "app_key="+app_key+"&app_secret="+app_secret+"&grant_type="+grant_type+"&code="+code;
String url = dataOperateUtil.null2String(dataOperateUtil.getConfig("oa_address",tenantKey)) + "/papi/openapi/oauth2/access_token";
// log.info("getToken params-->" + params);
RequestBody body = RequestBody.create(mediaType, params);
Request request = new Request.Builder()
.url(url)
.method("POST", body)
.addHeader("Content-Type", "application/x-www-form-urlencoded")
.build();
Response response = client.newCall(request).execute();
return response.body().string();
}
}

@ -1,30 +0,0 @@
package com.weaver.seconddev.webservice;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.weaver.verupgrade.workflow.workflow.WorkflowAllComInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service("demoService")
public class DemoService {
private final static Logger log = LoggerFactory.getLogger(DemoService.class);
@Autowired
private WorkflowAllComInfo workflowAllComInfo;
public String demo(String detailTables){
log.error("DemoService start");
String workcodeId = "100003460000005676";
String detailTable = detailTables;
log.error("detailTable" + detailTables);
log.error("DemoService end");
return detailTable;
}
}

@ -0,0 +1,152 @@
package com.weaver.seconddev.webservice;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONArray;
import com.weaver.common.hrm.util.StringUtils;
import com.weaver.seconddev.entity.FormDataDuty;
import com.weaver.seconddev.util.DataOperateUtil;
import com.weaver.seconddev.util.InterInfoAchieveUtil;
import com.weaver.teams.domain.user.SimpleEmployee;
import com.weaver.verupgrade.workflow.workflow.WorkflowAllComInfo;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@Service("doCreateWorkflowService")
public class DoCreateWorkflowService {
private final static Logger log = LoggerFactory.getLogger(DoCreateWorkflowService.class);
@Autowired
private DataOperateUtil dataOperateUtil;
@Autowired
private InterInfoAchieveUtil interInfoAchieveUtil;
@Autowired
private WorkflowAllComInfo workflowAllComInfo;
public String doCreateWorkflowRequest(String creator,String tenantKey,String workflowId,String mainTable,String[] detailTables) throws IOException {
log.info("DoCreateWorkflowService start");
List<Long> detailFormId = dataOperateUtil.getDetailFormId(workflowId);
JSONObject param = new JSONObject();
param.put("userid", Long.valueOf(creator));
param.put("workflowId", Long.valueOf(workflowId));
log.info("主表数据:" + mainTable);
//主表数据 json {"sqr":"sqr1","date":"date1","hrm:zrr":"zrr1"}
//字段名前面加 hrm:表示是人力资源字段
if (mainTable == null || mainTable.equals("")) {
return "主表数据不能为空";
}
JSONObject jsonObject = JSONObject.parseObject(mainTable);
Map<String, Object> mainMap = jsonObject.toJavaObject(Map.class);
log.error("主表集合:" + mainMap);
List<FormDataDuty> formDataDutyList = new ArrayList();
// 输出 Map 的内容
for (Map.Entry<String, Object> entry : mainMap.entrySet()) {
FormDataDuty formDataDuty = FormDataDuty.builder().build();
String key = entry.getKey();
Object value = entry.getValue();
formDataDuty.setFieldType(1);
formDataDuty.setDataKey(key);
formDataDuty.setContent(String.valueOf(value));
formDataDutyList.add(formDataDuty);
}
if(detailTables==null){
}else{
// log.error("处理明细数据");
if(detailTables.length>0){
// 遍历外部 JSONArray
for (int i = 0; i < detailTables.length; i++) {
JSONArray innerArray = JSONArray.parseArray(detailTables[i]); // 获取内部的 JSONArray
log.error("innerArray:"+innerArray);
if(innerArray.size()>0){
//判断明细表id是否存在
if (detailFormId.size() < i+1) {
log.error("明细表"+(i+1)+"form_id未找到或不存在");
return "明细表"+(i+1)+"form_id未找到或不存在";
}
Long subFormId = detailFormId.get(i);
log.error("明细表"+(i+1)+"form_id"+subFormId);
// 遍历内部 JSONArray
for (int j = 0; j < innerArray.size(); j++) {
com.alibaba.fastjson.JSONObject jsonDetail = innerArray.getJSONObject(j);
// 遍历 JSONObject 的键值对
for (String key : jsonDetail.keySet()) {
FormDataDuty formDataDuty = FormDataDuty.builder().build();
String value = jsonDetail.getString(key);
if (!"".equals(key)) {
// log.error("明细表普通字段值:"+value);
if(StringUtils.isNotEmpty(value)){
formDataDuty.setDataKey(key);
formDataDuty.setDataIndex((long) (j + 1));
formDataDuty.setContent(value);
//目前写死 后续在找方法
formDataDuty.setSubFormId(subFormId);
}else{
// log.error("明细表普通字段值为空");
}
formDataDutyList.add(formDataDuty);
}
}
}
}
}
log.error("formDataDutyList数据"+formDataDutyList.size()+"-"+formDataDutyList);
}
}
if(CollectionUtils.isNotEmpty(formDataDutyList)) {
JSONObject fromDataByDataDetails = dataOperateUtil.getFromDataByDataDetails(formDataDutyList);
param.put("formData", fromDataByDataDetails);
}
String code = interInfoAchieveUtil.getCode(tenantKey);
String token = interInfoAchieveUtil.getToken(code,tenantKey);
String url = dataOperateUtil.null2String(dataOperateUtil.getConfig("oa_address",tenantKey)) + "/api/workflow/core/paService/v1/doCreateRequest?access_token=" + token;
log.error("url : " + url);
JSONObject otherParams =new JSONObject();
otherParams.put("isnextflow",1);
param.put("otherParams",otherParams);
log.error("表单json:"+param.toJSONString());
// 远程调用创建流程。
String response = HttpUtil.post(url, param.toJSONString());
log.error("自动创建流程结果:"+response);
JSONObject responseObj = JSONObject.parseObject(response);
Object message = responseObj.get("message");
JSONObject messageObj = JSONObject.parseObject(message.toString());
String errcode = messageObj.get("errcode").toString();
log.error("errcode"+errcode);
if(StringUtils.isNotEmpty(errcode)){
if(messageObj.get("errcode").toString().equals("0")){
log.error("requestId"+messageObj.get("requestId").toString());
return Optional.ofNullable(messageObj.get("requestId")).map(Object::toString).orElse("");
}else{
log.error("errmsg"+messageObj.get("errmsg").toString());
return messageObj.get("errmsg").toString();
}
}else{
return "调用泛微流程创建接口失败";
}
}
}
Loading…
Cancel
Save