first commit
This commit is contained in:
@@ -0,0 +1,335 @@
|
||||
package io.v.nutz;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelImportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ImportParams;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.hutool.core.util.CharsetUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.http.ContentType;
|
||||
import cn.hutool.http.HttpRequest;
|
||||
import cn.hutool.http.HttpResponse;
|
||||
import cn.hutool.http.HttpUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import io.jsonwebtoken.Header;
|
||||
import io.v.nutz.base.constant.RedisConstant;
|
||||
import io.v.nutz.base.service.BaseService;
|
||||
import io.v.nutz.base.utils.MsgApi;
|
||||
import io.v.nutz.base.utils.Roles;
|
||||
import io.v.nutz.data.model.UserSource;
|
||||
import io.v.nutz.jf.model.ChildrenFaculty;
|
||||
import io.v.nutz.member.MemberMode;
|
||||
import io.v.nutz.service.AsyncService;
|
||||
import io.v.nutz.sickHelp.model.SickFundMember;
|
||||
import io.v.nutz.sys.constant.todo.Sys_remote_app;
|
||||
import io.v.nutz.sys.constant.todo.Sys_remote_dept;
|
||||
import io.v.nutz.sys.constant.todo.Sys_remote_profile;
|
||||
import io.v.nutz.sys.models.*;
|
||||
import io.v.nutz.sys.services.SysConfigService;
|
||||
import io.v.nutz.sys.services.SysUserRoleService;
|
||||
import io.v.nutz.sys.services.SysUserService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.shiro.crypto.hash.Sha256Hash;
|
||||
import org.apache.shiro.util.ByteSource;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mountcloud.graphql.GraphqlClient;
|
||||
import org.mountcloud.graphql.request.mutation.DefaultGraphqlMutation;
|
||||
import org.mountcloud.graphql.request.mutation.GraphqlMutation;
|
||||
import org.mountcloud.graphql.response.GraphqlResponse;
|
||||
import org.nutz.boot.NbApp;
|
||||
import org.nutz.boot.starter.logback.exts.loglevel.LoglevelProperty;
|
||||
import org.nutz.boot.test.junit4.NbJUnit4Runner;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.entity.Record;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
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 org.nutz.lang.random.R;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.URLEncoder;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
/**
|
||||
* Created by wizzer on 2018/4/1.
|
||||
*/
|
||||
@IocBean(create = "init")
|
||||
@RunWith(NbJUnit4Runner.class)
|
||||
@Slf4j
|
||||
public class WebTestDemo extends Assert {
|
||||
|
||||
@Inject
|
||||
private SysConfigService sysConfigService;
|
||||
@Inject
|
||||
private RedisService redisService;
|
||||
|
||||
public void init() {
|
||||
System.out.println("say hi");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_service_inject() {
|
||||
Set<String> set = redisService.keys("logback:loglevel:list:*");
|
||||
NutMap map = NutMap.NEW();
|
||||
for (String key : set) {
|
||||
String[] keys = key.split(":");
|
||||
String name = keys[3];
|
||||
LoglevelProperty loglevelProperty = Json.fromJson(LoglevelProperty.class, redisService.get(key));
|
||||
map.addv2(name, loglevelProperty);
|
||||
}
|
||||
System.out.println(Json.toJson(map));
|
||||
}
|
||||
|
||||
// 测试类可提供public的static的createNbApp方法,用于定制当前测试类所需要的NbApp对象.
|
||||
// 测试类带@IocBean或不带@IocBean,本规则一样生效
|
||||
// 若不提供,默认使用当前测试类作为MainLauncher.
|
||||
// 也可以自定义NbJUnit4Runner, 继承NbJUnit4Runner并覆盖其createNbApp方法
|
||||
public static NbApp createNbApp() {
|
||||
NbApp nb = new NbApp().setMainClass(MainLauncher.class).setPrintProcDoc(false);
|
||||
nb.getAppContext().setMainPackage("io.v");
|
||||
return nb;
|
||||
}
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
|
||||
@Inject
|
||||
private SysUserRoleService sysUserRoleService;
|
||||
|
||||
@Inject
|
||||
private SysUserService sysUserService;
|
||||
|
||||
@Inject
|
||||
private AsyncService asyncService;
|
||||
|
||||
|
||||
@Test
|
||||
public void testToDo() {
|
||||
//创建 graphql 客户端
|
||||
GraphqlClient graphqlClient = GraphqlClient.buildGraphqlClient("https://portal.nsi.edu.cn/taskapi/graphql");
|
||||
//获取并设置 token
|
||||
Map httpHeaders = new HashMap<>(1);
|
||||
httpHeaders.put("Authorization", "3b1ba160e2cc4b6a854b5208ab395c8f");
|
||||
graphqlClient.setHttpHeaders(httpHeaders);
|
||||
//定义 mutation 操作
|
||||
GraphqlMutation mutation = new DefaultGraphqlMutation("pushProcess");
|
||||
|
||||
String json = """
|
||||
{
|
||||
"create": 1712565477892,
|
||||
"entry": "20240408163757-2",
|
||||
"name": "【慰问】超级管理员",
|
||||
"owner": {
|
||||
"account": "T220210128",
|
||||
"id": "17a7f8ad3ee947b4a26175049a9c253d",
|
||||
"name": "熊爱群"
|
||||
},
|
||||
"priority": "normal",
|
||||
"status": "done",
|
||||
"tasks": [
|
||||
{
|
||||
"actionDepts": [{
|
||||
"code":"ceshi",
|
||||
"name":"ceshi"
|
||||
}],
|
||||
"actionName": "测试",
|
||||
"actionTime": 1712565577171,
|
||||
"actionUser": {
|
||||
"account": "T220210128",
|
||||
"id": "17a7f8ad3ee947b4a26175049a9c253d",
|
||||
"name": "熊爱群"
|
||||
},
|
||||
"actioners": [{
|
||||
"account": "T220210128",
|
||||
"id": "17a7f8ad3ee947b4a26175049a9c253d",
|
||||
"name": "熊爱群"
|
||||
}],
|
||||
"assignTime": 1712565494000,
|
||||
"id": "3-union_chairman_review",
|
||||
"name": "分工会审核",
|
||||
"status": "done",
|
||||
"stepCode": "分工会审核",
|
||||
"uri": "https://zhgh.nsi.edu.cn/platform/fw/condolence/ucr/union"
|
||||
}
|
||||
],
|
||||
"update": 1712565477892,
|
||||
"uri": "https://zhgh.nsi.edu.cn/platform/fw/condolence/myList",
|
||||
"app": {
|
||||
"id":"20240613",
|
||||
"name": "ceshi",
|
||||
"department": "ceshi",
|
||||
}
|
||||
}
|
||||
""";
|
||||
Sys_local_process_instance sysLocalProcess = dao.fetch(Sys_local_process_instance.class, 3L);
|
||||
//构造信息中心待办实例
|
||||
Sys_remote_process remoteProcess = new Sys_remote_process();
|
||||
remoteProcess.setName(sysLocalProcess.getProcessName());
|
||||
remoteProcess.setUri(sysLocalProcess.getPcUrl());
|
||||
//生成流水号
|
||||
String entry = DateUtil.format(new Date(sysLocalProcess.getCreatedAt()), "yyyyMMddHHmmss") + "-" + sysLocalProcess.getId();
|
||||
remoteProcess.setEntry(entry);
|
||||
remoteProcess.setCreate(sysLocalProcess.getCreatedAt());
|
||||
remoteProcess.setUpdate(sysLocalProcess.getUpdatedAt());
|
||||
//所属应用
|
||||
// remoteProcess.setApp(new Sys_remote_app().setId("20240613").setName("ceshi").setDepartment("ceshi"));
|
||||
//流程实例所有者
|
||||
remoteProcess.setOwner(new Sys_remote_profile()
|
||||
.setId(sysLocalProcess.getProcessInitiatorId())
|
||||
.setAccount(sysLocalProcess.getProcessInitiatorLoginName())
|
||||
.setName(sysLocalProcess.getProcessInitiatorName()));
|
||||
//流程状态
|
||||
String status = "doing";
|
||||
if (sysLocalProcess.getProcessInstanceStatus() == 1) {
|
||||
status = "doing";
|
||||
} else if (sysLocalProcess.getProcessInstanceStatus() == 2) {
|
||||
status = "done";
|
||||
}
|
||||
remoteProcess.setStatus(status);
|
||||
remoteProcess.setPriority("normal");
|
||||
|
||||
//本地任务列表
|
||||
List<Sys_local_process_instance_task> localTasks = dao.query(Sys_local_process_instance_task.class, Cnd.where("processUniqueId", "=", sysLocalProcess.getProcessUniqueId()));
|
||||
//信息中心正常任务列表
|
||||
List<Sys_remote_task> remoteTasks = localTasks.stream()
|
||||
.filter(t -> !t.getTaskDeleteFlag() && !t.getDelFlag())
|
||||
.map(t -> {
|
||||
Sys_remote_task task = new Sys_remote_task();
|
||||
task.setId(t.getId() + "-" + t.getTaskUniqueId());
|
||||
task.setName(t.getTaskNodeName());
|
||||
task.setUri(t.getFormUrl());
|
||||
task.setActionUser(
|
||||
new Sys_remote_profile()
|
||||
.setId(t.getActualOwnerId())
|
||||
.setName(t.getActualOwnerName())
|
||||
.setAccount(t.getActualOwnerLoginName())
|
||||
);
|
||||
task.setAssignTime(Optional.ofNullable(t.getCreatedOn()).map(Date::getTime).orElse(null));
|
||||
task.setActionTime(Optional.ofNullable(t.getEndOn()).map(Date::getTime).orElse(null));
|
||||
task.setActionName(null);
|
||||
task.setStatus(t.getStatus() == 1 ? "todo" : "done");
|
||||
//可办理人
|
||||
List<String> assignments = t.getAssignments();
|
||||
Sql sql = Sqls.queryRecord(Sqls.create("select id,username,loginname,unitid,unitname from `user` where loginname in (@loginnames)").setParam("loginnames", assignments).toString());
|
||||
dao.execute(sql);
|
||||
List<Record> profileRecords = sql.getList(Record.class);
|
||||
List<Sys_remote_profile> actionErs = profileRecords.stream().map(p -> {
|
||||
Sys_remote_profile sysRemoteProfile = new Sys_remote_profile();
|
||||
sysRemoteProfile.setId(p.getString("id"));
|
||||
sysRemoteProfile.setName(p.getString("username"));
|
||||
sysRemoteProfile.setAccount(p.getString("loginname"));
|
||||
return sysRemoteProfile;
|
||||
}).collect(Collectors.toList());
|
||||
task.setActioners(actionErs);
|
||||
|
||||
task.setStepCode(t.getTaskNodeName());
|
||||
|
||||
List<Sys_remote_dept> actionDepts = profileRecords.stream().map(p -> {
|
||||
Sys_remote_dept sysRemoteDept = new Sys_remote_dept();
|
||||
sysRemoteDept.setCode(p.getString("unitid"));
|
||||
sysRemoteDept.setName(p.getString("unitname"));
|
||||
return sysRemoteDept;
|
||||
}).collect(Collectors.toList());
|
||||
task.setActionDepts(actionDepts);
|
||||
return task;
|
||||
}).collect(Collectors.toList());
|
||||
remoteProcess.setTasks(null);
|
||||
|
||||
remoteProcess.setApp(new Sys_remote_app()
|
||||
.setId("1")
|
||||
.setName("工会慰问申请")
|
||||
.setDepartment("工会")
|
||||
);
|
||||
|
||||
//设置参数
|
||||
mutation.getRequestParameter()
|
||||
.addObjectParameter("process", remoteProcess)
|
||||
.addObjectParameter("timestamp", System.currentTimeMillis());
|
||||
// //设置返回字段
|
||||
// mutation.addResultAttributes("id");
|
||||
//调用接口
|
||||
GraphqlResponse graphqlResponse = null;
|
||||
|
||||
|
||||
String mutationStr = "mutation ($process: ProcessInput!, $myTimestamp: Long!) { "
|
||||
+ " pushProcess(process: $process, timestamp: $myTimestamp) { "
|
||||
+ " id "
|
||||
+ " } "
|
||||
+ "}";
|
||||
|
||||
long currentTimestamp = System.currentTimeMillis();
|
||||
|
||||
Map<String, Object> variables = new HashMap<>();
|
||||
variables.put("process", remoteProcess);
|
||||
variables.put("myTimestamp", currentTimestamp);
|
||||
|
||||
HttpRequest request = HttpUtil.createPost("https://portal.nsi.edu.cn/taskapi/graphql");
|
||||
request.header("Content-Type", "application/json");
|
||||
request.header("Authorization","3b1ba160e2cc4b6a854b5208ab395c8f");
|
||||
|
||||
// 设置请求体
|
||||
Map<String, Object> requestBody = new HashMap<>();
|
||||
requestBody.put("query", mutationStr);
|
||||
requestBody.put("variables", variables);
|
||||
|
||||
// 将请求体序列化为 JSON 字符串
|
||||
String jsonRequestBody = JSONUtil.toJsonStr(requestBody);
|
||||
|
||||
// 设置请求体
|
||||
request.body(jsonRequestBody);
|
||||
|
||||
// 发送请求并获取响应
|
||||
String result = request.execute().body();
|
||||
log.info(result);
|
||||
|
||||
|
||||
// try {
|
||||
// graphqlResponse = graphqlClient.doMutation(mutation);
|
||||
// //获取返回结果
|
||||
// Map resultMap = graphqlResponse.getData();
|
||||
//
|
||||
// log.info(JSON.toJSONString(resultMap));
|
||||
// } catch (IOException e) {
|
||||
// log.info(json);
|
||||
// log.error(e.getMessage() + "待办推送失败!");
|
||||
// throw new RuntimeException(e);
|
||||
// }
|
||||
}
|
||||
|
||||
@Test
|
||||
public void t02() {
|
||||
HttpRequest httpRequest = HttpRequest.post("https://auth.nsi.edu.cn/sso/oauth2/token")
|
||||
.charset(CharsetUtil.UTF_8).timeout(10000);
|
||||
Map map = MapUtil.builder(new HashMap(4))
|
||||
.put("client_id", "MuZqgmGVVmQ749f0qm7T")
|
||||
.put("client_secret", "F2F18F042315D0295DB52C7625ADCE673D9EEF9B6B6E921C")
|
||||
.put("scope", "introspect")
|
||||
.put("grant_type", "client_credentials").build();
|
||||
HttpResponse response = httpRequest.form(map).contentType(ContentType.FORM_URLENCODED.toString()).execute();
|
||||
String result = response.body();
|
||||
JSONObject object = JSON.parseObject(result);
|
||||
System.out.println(object);
|
||||
String tokenType = object.getString("token_type");
|
||||
String token = object.getString("access_token");
|
||||
System.out.println(token);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void t03(){
|
||||
List<ChildrenFaculty> importList = ExcelImportUtil.importExcel(new File("C:\\Users\\jug\\Desktop\\子女活动经费导入模板.xlsx"), ChildrenFaculty.class, new ImportParams());
|
||||
System.out.println(importList.size());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user