first commit

This commit is contained in:
2026-09-08 19:49:21 +08:00
commit ebffbab428
7320 changed files with 1477614 additions and 0 deletions
+335
View File
@@ -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());
}
}