commit
This commit is contained in:
@@ -0,0 +1,66 @@
|
|||||||
|
package com.budwk.app.todo.service;
|
||||||
|
|
||||||
|
import com.budwk.app.flow.entity.ProcessTask;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ClassName TodoService
|
||||||
|
* @Author JyuHsin
|
||||||
|
* @Date 2026/3/12 14:12
|
||||||
|
* @Version 1.0
|
||||||
|
* @Description TODO
|
||||||
|
*/
|
||||||
|
public interface TodoService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 调用本接口,发起一个待办任务
|
||||||
|
* 若是首个任务,则会同时创建一条事务
|
||||||
|
* 若非首个任务,则需关联上一条待办任务
|
||||||
|
*
|
||||||
|
* @param task
|
||||||
|
*/
|
||||||
|
void addTransaction(ProcessTask task);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 调用本接口,对当前节点的任务进行办理,当前任务进入已办
|
||||||
|
*
|
||||||
|
* @param task
|
||||||
|
*/
|
||||||
|
void taskHandle(ProcessTask task);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 调用本接口,发起任务转办,转办给转办人(可以多个),被转办人可以在我的代办列表查看任务
|
||||||
|
*
|
||||||
|
* @param task
|
||||||
|
*/
|
||||||
|
void taskComplaint(ProcessTask task);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 调用本接口,对当前节点的任务进行撤回,并创建出新的任务节点
|
||||||
|
* 建议不调用本接口,因为会创建新的任务节点
|
||||||
|
* 如果撤回,可调用taskTerminate,这个接口只操作本任务
|
||||||
|
* @param task
|
||||||
|
*/
|
||||||
|
void taskWithdraw(ProcessTask task);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 调用本接口,发起任务终止,结束该任务
|
||||||
|
*
|
||||||
|
* @param task
|
||||||
|
*/
|
||||||
|
void taskTerminate(ProcessTask task);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 调用本接口,对删除任务的事务进行恢复
|
||||||
|
*
|
||||||
|
* @param task
|
||||||
|
*/
|
||||||
|
void transRecover(ProcessTask task);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 调用本接口,对当前任务的事务进行删除
|
||||||
|
*
|
||||||
|
* @param task
|
||||||
|
*/
|
||||||
|
void transDeleted(ProcessTask task);
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,279 @@
|
|||||||
|
package com.budwk.app.todo.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.http.HttpUtil;
|
||||||
|
import cn.hutool.json.JSONObject;
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import com.budwk.app.base.sms.impl.ncu.util.SmsTokenUtil;
|
||||||
|
import com.budwk.app.flow.engine.FlowEngine;
|
||||||
|
import com.budwk.app.flow.entity.ProcessDefine;
|
||||||
|
import com.budwk.app.flow.entity.ProcessInstance;
|
||||||
|
import com.budwk.app.flow.entity.ProcessTask;
|
||||||
|
import com.budwk.app.flow.entity.ProcessTaskActor;
|
||||||
|
import com.budwk.app.flow.enums.ProcessInstanceStateEnum;
|
||||||
|
import com.budwk.app.sys.models.Sys_user;
|
||||||
|
import com.budwk.app.todo.service.TodoService;
|
||||||
|
import com.budwk.app.todo.util.TodoPlatformTokenUtil;
|
||||||
|
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||||
|
import com.budwk.app.web.commons.base.Globals;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.batik.dom.svg12.Global;
|
||||||
|
import org.nutz.dao.Cnd;
|
||||||
|
import org.nutz.dao.Dao;
|
||||||
|
import org.nutz.integration.jedis.RedisService;
|
||||||
|
import org.nutz.ioc.loader.annotation.Inject;
|
||||||
|
import org.nutz.ioc.loader.annotation.IocBean;
|
||||||
|
import org.nutz.json.Json;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ClassName TodoServiceImpl
|
||||||
|
* @Author JyuHsin
|
||||||
|
* @Date 2026/3/12 14:12
|
||||||
|
* @Version 1.0
|
||||||
|
* @Description TODO
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@IocBean
|
||||||
|
public class TodoServiceImpl implements TodoService {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private Dao dao;
|
||||||
|
@Inject
|
||||||
|
private RedisService redisService;
|
||||||
|
@Inject
|
||||||
|
private FlowEngine flowEngine;
|
||||||
|
@Inject
|
||||||
|
private TodoPlatformTokenUtil tokenUtil;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addTransaction(ProcessTask task) {
|
||||||
|
String url = "https://poa.ncu.edu.cn/apis/ttc/v1/transaction/poa/addTransaction";
|
||||||
|
String token = tokenUtil.getToken();
|
||||||
|
|
||||||
|
ProcessInstance instance = dao.fetch(ProcessInstance.class, task.getProcessInstanceId());
|
||||||
|
ProcessDefine define = dao.fetch(ProcessDefine.class, instance.getProcessDefineId());
|
||||||
|
Sys_user sysUser = dao.fetch(Sys_user.class, instance.getOperator());
|
||||||
|
List<ProcessTaskActor> taskActorList = dao.query(ProcessTaskActor.class, Cnd.where(ProcessTaskActor::getProcessTaskId, "=", task.getId()));
|
||||||
|
String handlers = taskActorList.stream().map(ProcessTaskActor::getActorAccount).collect(Collectors.joining(","));
|
||||||
|
|
||||||
|
Map<String, Object> params = new HashMap<>();
|
||||||
|
params.put("appId", "72e34a101d3011f1a74cbae5193504f4");
|
||||||
|
params.put("nodeId", task.getId());
|
||||||
|
params.put("nodeName", task.getTaskName());
|
||||||
|
params.put("taskId", task.getId());
|
||||||
|
params.put("taskName", task.getDisplayName());
|
||||||
|
params.put("transTypeCode", define.getName());
|
||||||
|
params.put("transTypeName", define.getDisplayName());
|
||||||
|
params.put("handlers", handlers);
|
||||||
|
if(!ObjectUtil.equals(0, task.getTaskParentId())) {
|
||||||
|
params.put("previousTaskId", task.getTaskParentId());
|
||||||
|
}
|
||||||
|
params.put("canDelegate", 0);
|
||||||
|
params.put("autoCreateTransType", true);
|
||||||
|
params.put("initiator", sysUser.getLoginname());
|
||||||
|
params.put("initiatorName", sysUser.getUsername());
|
||||||
|
params.put("serialNumber", task.getId());
|
||||||
|
params.put("handleUrl", Globals.AppDomain + task.getFormKey());
|
||||||
|
params.put("mHandleUrl", Globals.AppDomain + task.getH5FormKey());
|
||||||
|
|
||||||
|
log.info("【log】调用创建待办任务接口,请求参数:{}", Json.toJson(params));
|
||||||
|
String body = HttpUtil.createPost(url)
|
||||||
|
.header("Authorization", token)
|
||||||
|
.header("Content-Type", "application/json")
|
||||||
|
.form(params).execute().body();
|
||||||
|
JSONObject resultJsonBody = JSONUtil.parseObj(body);
|
||||||
|
log.info("【log】调用创建待办任务接口,接口响应数据:{}", body);
|
||||||
|
|
||||||
|
if (resultJsonBody.getInt("code") == 0) {
|
||||||
|
log.info("【log】调用创建待办任务接口成功");
|
||||||
|
} else {
|
||||||
|
log.info("【log】调用创建待办任务接口失败:{}", resultJsonBody.getStr("message"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void taskHandle(ProcessTask task) {
|
||||||
|
String url = "https://poa.ncu.edu.cn/apis/ttc/v1/transaction/poa/taskHandle";
|
||||||
|
String token = tokenUtil.getToken();
|
||||||
|
|
||||||
|
ProcessInstance instance = dao.fetch(ProcessInstance.class, task.getProcessInstanceId());
|
||||||
|
|
||||||
|
Map<String, Object> params = new HashMap<>();
|
||||||
|
params.put("appId", "72e34a101d3011f1a74cbae5193504f4");
|
||||||
|
params.put("handler", SecurityUtil.getUserLoginname());
|
||||||
|
params.put("previousTaskId", task.getId());
|
||||||
|
params.put("status", instance.getState().equals(ProcessInstanceStateEnum.FINISHED.getCode()) ? "end" : "none");
|
||||||
|
|
||||||
|
log.info("【log】调用办理待办任务接口,请求参数:{}", Json.toJson(params));
|
||||||
|
String body = HttpUtil.createPost(url)
|
||||||
|
.header("Authorization", token)
|
||||||
|
.header("Content-Type", "application/json")
|
||||||
|
.form(params).execute().body();
|
||||||
|
JSONObject resultJsonBody = JSONUtil.parseObj(body);
|
||||||
|
log.info("【log】调用办理待办任务接口,接口响应数据:{}", body);
|
||||||
|
|
||||||
|
if (resultJsonBody.getInt("code") == 0) {
|
||||||
|
log.info("【log】调用办理待办任务接口成功");
|
||||||
|
} else {
|
||||||
|
log.info("【log】调用办理待办任务接口失败:{}", resultJsonBody.getStr("message"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void taskComplaint(ProcessTask task) {
|
||||||
|
String url = "https://poa.ncu.edu.cn/apis/ttc/v1/transaction/poa/taskComplaint";
|
||||||
|
String token = tokenUtil.getToken();
|
||||||
|
|
||||||
|
ProcessInstance instance = dao.fetch(ProcessInstance.class, task.getProcessInstanceId());
|
||||||
|
Sys_user sysUser = dao.fetch(Sys_user.class, instance.getOperator());
|
||||||
|
List<ProcessTaskActor> taskActorList = dao.query(ProcessTaskActor.class, Cnd.where(ProcessTaskActor::getProcessTaskId, "=", task.getId()));
|
||||||
|
String handlers = taskActorList.stream().map(ProcessTaskActor::getActorAccount).collect(Collectors.joining(","));
|
||||||
|
|
||||||
|
Map<String, Object> params = new HashMap<>();
|
||||||
|
params.put("appId", "72e34a101d3011f1a74cbae5193504f4");
|
||||||
|
params.put("createTime", "");
|
||||||
|
params.put("creater", sysUser.getLoginname());
|
||||||
|
params.put("creator", sysUser.getLoginname());
|
||||||
|
params.put("handlers", handlers);
|
||||||
|
params.put("handlingGroup", "");
|
||||||
|
params.put("operator", sysUser.getLoginname());
|
||||||
|
params.put("taskId", task.getId());
|
||||||
|
|
||||||
|
log.info("【log】调用转办待办任务接口,请求参数:{}", Json.toJson(params));
|
||||||
|
String body = HttpUtil.createPost(url)
|
||||||
|
.header("Authorization", token)
|
||||||
|
.header("Content-Type", "application/json")
|
||||||
|
.form(params).execute().body();
|
||||||
|
JSONObject resultJsonBody = JSONUtil.parseObj(body);
|
||||||
|
log.info("【log】调用转办待办任务接口,接口响应数据:{}", body);
|
||||||
|
|
||||||
|
if (resultJsonBody.getInt("code") == 0) {
|
||||||
|
log.info("【log】调用转办待办任务接口成功");
|
||||||
|
} else {
|
||||||
|
log.info("【log】调用转办待办任务接口失败:{}", resultJsonBody.getStr("message"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void taskWithdraw(ProcessTask task) {
|
||||||
|
/*String url = "https://poa.ncu.edu.cn/apis/ttc/v1/transaction/poa/taskWithdraw";
|
||||||
|
String token = tokenUtil.getToken();
|
||||||
|
|
||||||
|
ProcessInstance instance = dao.fetch(ProcessInstance.class, task.getProcessInstanceId());
|
||||||
|
Sys_user sysUser = dao.fetch(Sys_user.class, instance.getOperator());
|
||||||
|
|
||||||
|
Map<String, Object> params = new HashMap<>();
|
||||||
|
params.put("appId", "72e34a101d3011f1a74cbae5193504f4");
|
||||||
|
params.put("taskId", task.getId());
|
||||||
|
params.put("creater", sysUser.getLoginname());
|
||||||
|
params.put("creator", sysUser.getLoginname());
|
||||||
|
params.put("status", "end");
|
||||||
|
|
||||||
|
log.info("【log】调用撤回待办任务接口,请求参数:{}", Json.toJson(params));
|
||||||
|
String body = HttpUtil.createPost(url)
|
||||||
|
.header("Authorization", token)
|
||||||
|
.header("Content-Type", "application/json")
|
||||||
|
.form(params).execute().body();
|
||||||
|
JSONObject resultJsonBody = JSONUtil.parseObj(body);
|
||||||
|
log.info("【log】调用撤回待办任务接口,接口响应数据:{}", body);
|
||||||
|
|
||||||
|
if (resultJsonBody.getInt("code") == 0) {
|
||||||
|
log.info("【log】调用撤回待办任务接口成功");
|
||||||
|
} else {
|
||||||
|
log.info("【log】调用撤回待办任务接口失败:{}", resultJsonBody.getStr("message"));
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void taskTerminate(ProcessTask task) {
|
||||||
|
String url = "https://poa.ncu.edu.cn/apis/ttc/v1/transaction/poa/taskTerminate";
|
||||||
|
String token = tokenUtil.getToken();
|
||||||
|
|
||||||
|
ProcessInstance instance = dao.fetch(ProcessInstance.class, task.getProcessInstanceId());
|
||||||
|
Sys_user sysUser = dao.fetch(Sys_user.class, instance.getOperator());
|
||||||
|
|
||||||
|
Map<String, Object> params = new HashMap<>();
|
||||||
|
params.put("appId", "72e34a101d3011f1a74cbae5193504f4");
|
||||||
|
params.put("creater", sysUser.getLoginname());
|
||||||
|
params.put("creator", sysUser.getLoginname());
|
||||||
|
params.put("handlers", "");
|
||||||
|
params.put("operator", SecurityUtil.getUserLoginname());
|
||||||
|
params.put("taskId", task.getId());
|
||||||
|
|
||||||
|
log.info("【log】调用终止待办任务接口,请求参数:{}", Json.toJson(params));
|
||||||
|
String body = HttpUtil.createPost(url)
|
||||||
|
.header("Authorization", token)
|
||||||
|
.header("Content-Type", "application/json")
|
||||||
|
.form(params).execute().body();
|
||||||
|
JSONObject resultJsonBody = JSONUtil.parseObj(body);
|
||||||
|
log.info("【log】调用终止待办任务接口,接口响应数据:{}", body);
|
||||||
|
|
||||||
|
if (resultJsonBody.getInt("code") == 0) {
|
||||||
|
log.info("【log】调用终止待办任务接口成功");
|
||||||
|
} else {
|
||||||
|
log.info("【log】调用终止待办任务接口失败:{}", resultJsonBody.getStr("message"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void transRecover(ProcessTask task) {
|
||||||
|
String url = "https://poa.ncu.edu.cn/apis/ttc/v1/transaction/poa/transRecover";
|
||||||
|
String token = tokenUtil.getToken();
|
||||||
|
|
||||||
|
ProcessInstance instance = dao.fetch(ProcessInstance.class, task.getProcessInstanceId());
|
||||||
|
Sys_user sysUser = dao.fetch(Sys_user.class, instance.getOperator());
|
||||||
|
|
||||||
|
Map<String, Object> params = new HashMap<>();
|
||||||
|
params.put("appId", "72e34a101d3011f1a74cbae5193504f4");
|
||||||
|
params.put("creater", sysUser.getLoginname());
|
||||||
|
params.put("taskId", task.getId());
|
||||||
|
|
||||||
|
log.info("【log】调用事务恢复接口,请求参数:{}", Json.toJson(params));
|
||||||
|
String body = HttpUtil.createPost(url)
|
||||||
|
.header("Authorization", token)
|
||||||
|
.header("Content-Type", "application/json")
|
||||||
|
.form(params).execute().body();
|
||||||
|
JSONObject resultJsonBody = JSONUtil.parseObj(body);
|
||||||
|
log.info("【log】调用事务恢复接口,接口响应数据:{}", body);
|
||||||
|
|
||||||
|
if (resultJsonBody.getInt("code") == 0) {
|
||||||
|
log.info("【log】调用事务恢复接口成功");
|
||||||
|
} else {
|
||||||
|
log.info("【log】调用事务恢复接口失败:{}", resultJsonBody.getStr("message"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void transDeleted(ProcessTask task) {
|
||||||
|
String url = "https://poa.ncu.edu.cn/apis/ttc/v1/transaction/poa/transDeleted";
|
||||||
|
String token = tokenUtil.getToken();
|
||||||
|
|
||||||
|
ProcessInstance instance = dao.fetch(ProcessInstance.class, task.getProcessInstanceId());
|
||||||
|
Sys_user sysUser = dao.fetch(Sys_user.class, instance.getOperator());
|
||||||
|
|
||||||
|
Map<String, Object> params = new HashMap<>();
|
||||||
|
params.put("appId", "72e34a101d3011f1a74cbae5193504f4");
|
||||||
|
params.put("creater", sysUser.getLoginname());
|
||||||
|
params.put("creator", sysUser.getLoginname());
|
||||||
|
params.put("taskId", task.getId());
|
||||||
|
|
||||||
|
log.info("【log】调用事务删除接口,请求参数:{}", Json.toJson(params));
|
||||||
|
String body = HttpUtil.createPost(url)
|
||||||
|
.header("Authorization", token)
|
||||||
|
.header("Content-Type", "application/json")
|
||||||
|
.form(params).execute().body();
|
||||||
|
JSONObject resultJsonBody = JSONUtil.parseObj(body);
|
||||||
|
log.info("【log】调用事务删除接口,接口响应数据:{}", body);
|
||||||
|
|
||||||
|
if (resultJsonBody.getInt("code") == 0) {
|
||||||
|
log.info("【log】调用事务删除接口成功");
|
||||||
|
} else {
|
||||||
|
log.info("【log】调用事务删除接口失败:{}", resultJsonBody.getStr("message"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
package com.budwk.app.todo.util;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import cn.hutool.http.HttpUtil;
|
||||||
|
import cn.hutool.json.JSONObject;
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import com.budwk.app.base.constant.RedisConstant;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.nutz.integration.jedis.RedisService;
|
||||||
|
import org.nutz.ioc.loader.annotation.Inject;
|
||||||
|
import org.nutz.ioc.loader.annotation.IocBean;
|
||||||
|
import org.nutz.json.Json;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ClassName TodoPlatformUtil
|
||||||
|
* @Author JyuHsin
|
||||||
|
* @Date 2026/3/12 14:05
|
||||||
|
* @Version 1.0
|
||||||
|
* @Description TODO
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@IocBean
|
||||||
|
public class TodoPlatformTokenUtil {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private RedisService redisService;
|
||||||
|
|
||||||
|
private static final String TOKEN_URL = "https://poa.ncu.edu.cn/oauth2/token";
|
||||||
|
private static final String CLINT_ID = "dP7SXC1MoYAJHPh6k8Cgsda8tGY=";
|
||||||
|
private static final String CLINT_SECRET = "PFAwVcXOsVFzP3Jwb4RyO5V97o8j8zNTQ8QSTre8oIc=";
|
||||||
|
private static final String SCOPE = "ttc:v1:writeTransaction";
|
||||||
|
|
||||||
|
public String getToken() {
|
||||||
|
String key = RedisConstant.REDIS_TODO_TOKEN_KEY;
|
||||||
|
String token = redisService.get(key);
|
||||||
|
if (StrUtil.isBlank(token)) {
|
||||||
|
// 构造表单参数
|
||||||
|
Map<String, String> param = new HashMap<>();
|
||||||
|
param.put("grant_type", "client_credentials");
|
||||||
|
param.put("client_id", CLINT_ID);
|
||||||
|
param.put("client_secret", CLINT_SECRET);
|
||||||
|
param.put("scope", SCOPE);
|
||||||
|
|
||||||
|
String body = HttpUtil.createPost(TOKEN_URL)
|
||||||
|
.header("Content-Type", "application/x-www-form-urlencoded")
|
||||||
|
.formStr(param).execute().body();
|
||||||
|
|
||||||
|
JSONObject resultJsonBody = JSONUtil.parseObj(body);
|
||||||
|
log.info("【log】获取待办token接口回调数据:{}", Json.toJson(resultJsonBody));
|
||||||
|
if (StrUtil.isNotBlank(resultJsonBody.getStr("access_token"))) {
|
||||||
|
String accessToken = resultJsonBody.getStr("access_token");
|
||||||
|
Integer expiresIn = resultJsonBody.getInt("expires_in");
|
||||||
|
redisService.setex(key, expiresIn, accessToken);
|
||||||
|
return accessToken;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return token;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user