Browse Source

Merge remote-tracking branch 'origin/master'

tags/24080901
PoffyZhang 1 year ago
parent
commit
2d29fad0bb
6 changed files with 161 additions and 49 deletions
  1. +57
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/common/util/SendWorkNoticeUtil.java
  2. +28
    -7
      pmapi/src/main/java/com/ningdatech/pmapi/todocenter/manage/TodoCenterManage.java
  3. +26
    -9
      pmapi/src/main/java/com/ningdatech/pmapi/user/manage/UserInfoManage.java
  4. +21
    -2
      pmapi/src/main/java/com/ningdatech/pmapi/user/model/vo/ResUserDetailVO.java
  5. +3
    -3
      pmapi/src/test/java/com/ningdatech/pmapi/beanconfig/BeanConfig.java
  6. +26
    -28
      pmapi/src/test/java/com/ningdatech/pmapi/todocenter/TodoCenterTest.java

+ 57
- 0
pmapi/src/main/java/com/ningdatech/pmapi/common/util/SendWorkNoticeUtil.java View File

@@ -0,0 +1,57 @@
package com.ningdatech.pmapi.common.util;

import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.model.GenericResult;
import com.ningdatech.pmapi.todocenter.bean.entity.WorkNoticeInfo;
import com.ningdatech.zwdd.client.ZwddClient;
import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.*;

/**
* 异步发送工作通知工具类
*
* @author CMM
* @since 2023/02/23 13:50
*/
@Slf4j
public class SendWorkNoticeUtil {

private SendWorkNoticeUtil(){

}

public static void sendWorkNotice(ZwddClient zwddClient, WorkNoticeInfo workNoticeInfo, String msg){
// 初始化线程池
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(10, 20,
60, TimeUnit.SECONDS, new ArrayBlockingQueue(20), new ThreadPoolExecutor.AbortPolicy());

// 将发送工作通知交给异步任务Future
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
// 调用浙政钉的接口发送工作通知
long startTime = System.currentTimeMillis();
GenericResult<Void> result =
zwddClient.sendWorkNotice(workNoticeInfo.getReceiverUserId(), workNoticeInfo.getBizMsgId(), msg);
String resultMsg = result.getMsg();
if (resultMsg.equals("success")) {
log.info("异步任务执行完成, " + workNoticeInfo.getBizMsgId() + " 当前线程:" + Thread.currentThread().getName());
long endTime = System.currentTimeMillis();
log.info("方法执行完成返回,耗时:" + (endTime - startTime));
}else {
return "发送工作通知失败!";
}
return "发送工作通知成功!";
}, threadPool);
String s;
try {
s = future.get();
} catch (Exception e) {
throw new BizException("获取异步线程处理结果失败!");
}
threadPool.shutdown();
while (threadPool.isTerminated()) {
log.info(s);
break;
}
}
}

+ 28
- 7
pmapi/src/main/java/com/ningdatech/pmapi/todocenter/manage/TodoCenterManage.java View File

@@ -5,12 +5,14 @@ import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import com.ningdatech.basic.exception.BizException; import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.model.GenericResult;
import com.ningdatech.basic.model.PageVo; import com.ningdatech.basic.model.PageVo;
import com.ningdatech.pmapi.common.constant.CommonConstant; import com.ningdatech.pmapi.common.constant.CommonConstant;
import com.ningdatech.pmapi.common.model.entity.ExcelExportWriter; import com.ningdatech.pmapi.common.model.entity.ExcelExportWriter;
import com.ningdatech.pmapi.common.statemachine.event.ProjectStatusChangeEvent; import com.ningdatech.pmapi.common.statemachine.event.ProjectStatusChangeEvent;
import com.ningdatech.pmapi.common.statemachine.util.StateMachineUtils; import com.ningdatech.pmapi.common.statemachine.util.StateMachineUtils;
import com.ningdatech.pmapi.common.util.ExcelDownUtil; import com.ningdatech.pmapi.common.util.ExcelDownUtil;
import com.ningdatech.pmapi.common.util.SendWorkNoticeUtil;
import com.ningdatech.pmapi.organization.model.entity.DingEmployeeInfo; import com.ningdatech.pmapi.organization.model.entity.DingEmployeeInfo;
import com.ningdatech.pmapi.organization.model.entity.DingOrganization; import com.ningdatech.pmapi.organization.model.entity.DingOrganization;
import com.ningdatech.pmapi.organization.service.IDingEmployeeInfoService; import com.ningdatech.pmapi.organization.service.IDingEmployeeInfoService;
@@ -36,6 +38,7 @@ import com.wflow.contants.HisProInsEndActId;
import com.wflow.workflow.bean.dto.ProcessInstanceUserDto; import com.wflow.workflow.bean.dto.ProcessInstanceUserDto;
import com.wflow.workflow.bean.dto.ReqProcessHandlerDTO; import com.wflow.workflow.bean.dto.ReqProcessHandlerDTO;
import com.wflow.workflow.bean.process.ProgressNode; import com.wflow.workflow.bean.process.ProgressNode;
import com.wflow.workflow.bean.process.enums.NodeTypeEnum;
import com.wflow.workflow.bean.vo.ProcessInstanceVo; import com.wflow.workflow.bean.vo.ProcessInstanceVo;
import com.wflow.workflow.bean.vo.ProcessProgressVo; import com.wflow.workflow.bean.vo.ProcessProgressVo;
import com.wflow.workflow.bean.vo.ProcessTaskVo; import com.wflow.workflow.bean.vo.ProcessTaskVo;
@@ -53,6 +56,10 @@ import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors; import java.util.stream.Collectors;


import static cn.hutool.core.collection.CollUtil.isEmpty; import static cn.hutool.core.collection.CollUtil.isEmpty;
@@ -221,7 +228,16 @@ public class TodoCenterManage {
// 获取流程通过后当前审核人信息,向其发送工作通知 // 获取流程通过后当前审核人信息,向其发送工作通知
List<ProgressNode> newProgressInfo = newInstanceDetail.getProgressInfo(); List<ProgressNode> newProgressInfo = newInstanceDetail.getProgressInfo();
ProgressNode currentNode = newProgressInfo.get(newProgressInfo.size() - 1); ProgressNode currentNode = newProgressInfo.get(newProgressInfo.size() - 1);
UserInfo auditUserInfo = userInfoService.getById(Long.valueOf(currentNode.getUserId()));
UserInfo auditUserInfo = null;
// 说明当前节点是子流程节点
if (currentNode.getNodeType().name().equals(NodeTypeEnum.SUB.name())){
List<ProgressNode> children = currentNode.getChildren();
// 获取子流程当前审核人节点
ProgressNode subCurrentNode = children.get(children.size() - 1);
auditUserInfo = userInfoService.getById(Long.valueOf(subCurrentNode.getUserId()));
}else {
auditUserInfo = userInfoService.getById(Long.valueOf(currentNode.getUserId()));
}


// 如果流程状态是被退回状态,流程通过后,进入下一个审核人, // 如果流程状态是被退回状态,流程通过后,进入下一个审核人,
// 当前通过审核人一定不是最后一个审核人(下一个审核人至多是最后一个),更新流程状态为审核中 // 当前通过审核人一定不是最后一个审核人(下一个审核人至多是最后一个),更新流程状态为审核中
@@ -233,8 +249,9 @@ public class TodoCenterManage {
projectService.updateById(declaredProject); projectService.updateById(declaredProject);
// 获取发送浙政钉工作通知必要信息 // 获取发送浙政钉工作通知必要信息
WorkNoticeInfo passWorkNoticeInfo = getSendWorkNoticeInfo(auditUserInfo); WorkNoticeInfo passWorkNoticeInfo = getSendWorkNoticeInfo(auditUserInfo);
String passMsg = String.format(PASS_MSG_TEMPLATE, null, projectName);
// zwddClient.sendWorkNotice(passWorkNoticeInfo.getReceiverUserId(),passWorkNoticeInfo.getBizMsgId(),passMsg);
String passMsg = String.format(PASS_MSG_TEMPLATE, passWorkNoticeInfo.getOrganizationName(), projectName);
// 异步发送工作通知
// SendWorkNoticeUtil.sendWorkNotice(zwddClient,passWorkNoticeInfo,passMsg);
return; return;
} }
// 若不是被退回状态,流程通过后,判断当前登录用户是不是最后一个审核人 // 若不是被退回状态,流程通过后,判断当前登录用户是不是最后一个审核人
@@ -263,14 +280,16 @@ public class TodoCenterManage {
} }
WorkNoticeInfo passWorkNoticeInfo2 = getSendWorkNoticeInfo(startUserInfo); WorkNoticeInfo passWorkNoticeInfo2 = getSendWorkNoticeInfo(startUserInfo);
String passMsg2 = String.format(PASS_MSG_TEMPLATE2, projectName, processDefinitionName); String passMsg2 = String.format(PASS_MSG_TEMPLATE2, projectName, processDefinitionName);
// zwddClient.sendWorkNotice(passWorkNoticeInfo2.getReceiverUserId(),passWorkNoticeInfo2.getBizMsgId(),passMsg2);
// 异步发送工作通知
// SendWorkNoticeUtil.sendWorkNotice(zwddClient,passWorkNoticeInfo2,passMsg2);
}else { }else {
// 若有下一个审核人(当前节点的用户), // 若有下一个审核人(当前节点的用户),
// 向其发送浙政钉工作通知:标题:审核任务 内容:【单位名称】的【项目名称】需要您审核。 // 向其发送浙政钉工作通知:标题:审核任务 内容:【单位名称】的【项目名称】需要您审核。
// 获取发送浙政钉工作通知必要信息 // 获取发送浙政钉工作通知必要信息
WorkNoticeInfo sendWorkNoticeInfo = getSendWorkNoticeInfo(auditUserInfo); WorkNoticeInfo sendWorkNoticeInfo = getSendWorkNoticeInfo(auditUserInfo);
String msg = String.format(PASS_MSG_TEMPLATE, null, projectName); String msg = String.format(PASS_MSG_TEMPLATE, null, projectName);
// zwddClient.sendWorkNotice(sendWorkNoticeInfo.getReceiverUserId(),sendWorkNoticeInfo.getBizMsgId(),msg);
// 异步发送工作通知
// SendWorkNoticeUtil.sendWorkNotice(zwddClient,sendWorkNoticeInfo,msg);
} }
break; break;
// 盖章并通过 // 盖章并通过
@@ -285,7 +304,8 @@ public class TodoCenterManage {
processTaskService.handleTask(param, userId); processTaskService.handleTask(param, userId);
WorkNoticeInfo rejectWorkNoticeInfo = getSendWorkNoticeInfo(startUserInfo); WorkNoticeInfo rejectWorkNoticeInfo = getSendWorkNoticeInfo(startUserInfo);
String rejectMsg = String.format(REJECT_MSG_TEMPLATE, projectName, processDefinitionName); String rejectMsg = String.format(REJECT_MSG_TEMPLATE, projectName, processDefinitionName);
// zwddClient.sendWorkNotice(rejectWorkNoticeInfo.getReceiverUserId(),rejectWorkNoticeInfo.getBizMsgId(),rejectMsg);
// 异步发送工作通知
// SendWorkNoticeUtil.sendWorkNotice(zwddClient,rejectWorkNoticeInfo,rejectMsg);
// 更新项目状态和流程状态 // 更新项目状态和流程状态
updateRejectProjectStatus(userId, declaredProject); updateRejectProjectStatus(userId, declaredProject);
break; break;
@@ -301,7 +321,8 @@ public class TodoCenterManage {
// 给项目创建人、流程发起人发送浙政钉工作通知:【项目名称】的【流程名称】被退回,请及时处理。 // 给项目创建人、流程发起人发送浙政钉工作通知:【项目名称】的【流程名称】被退回,请及时处理。
WorkNoticeInfo backWorkNoticeInfo = getSendWorkNoticeInfo(startUserInfo); WorkNoticeInfo backWorkNoticeInfo = getSendWorkNoticeInfo(startUserInfo);
String backMsg = String.format(BACK_MSG_TEMPLATE, projectName, processDefinitionName); String backMsg = String.format(BACK_MSG_TEMPLATE, projectName, processDefinitionName);
// zwddClient.sendWorkNotice(backWorkNoticeInfo.getReceiverUserId(),backWorkNoticeInfo.getBizMsgId(),backMsg);
// 异步发送工作通知
// SendWorkNoticeUtil.sendWorkNotice(zwddClient,backWorkNoticeInfo,backMsg);
break; break;
// 撤回(流程发起人和当前流程审核人的前一个审核人操作) // 撤回(流程发起人和当前流程审核人的前一个审核人操作)
case WITHDRAW: case WITHDRAW:


+ 26
- 9
pmapi/src/main/java/com/ningdatech/pmapi/user/manage/UserInfoManage.java View File

@@ -15,24 +15,17 @@ import com.ningdatech.pmapi.sys.model.entity.Role;
import com.ningdatech.pmapi.sys.model.entity.UserRole; import com.ningdatech.pmapi.sys.model.entity.UserRole;
import com.ningdatech.pmapi.sys.service.IRoleService; import com.ningdatech.pmapi.sys.service.IRoleService;
import com.ningdatech.pmapi.sys.service.IUserRoleService; import com.ningdatech.pmapi.sys.service.IUserRoleService;
import com.ningdatech.pmapi.user.constant.LoginTypeEnum;
import com.ningdatech.pmapi.user.constant.UserAvailableEnum; import com.ningdatech.pmapi.user.constant.UserAvailableEnum;
import com.ningdatech.pmapi.user.entity.UserInfo; import com.ningdatech.pmapi.user.entity.UserInfo;
import com.ningdatech.pmapi.user.model.po.*; import com.ningdatech.pmapi.user.model.po.*;
import com.ningdatech.pmapi.user.model.vo.ResUserDetailVO; import com.ningdatech.pmapi.user.model.vo.ResUserDetailVO;
import com.ningdatech.pmapi.user.model.vo.ResUserInfoListVO; import com.ningdatech.pmapi.user.model.vo.ResUserInfoListVO;
import com.ningdatech.pmapi.user.model.vo.UserRoleVO; import com.ningdatech.pmapi.user.model.vo.UserRoleVO;
import com.ningdatech.pmapi.user.security.auth.constants.UserDeatilsServiceConstant;
import com.ningdatech.pmapi.user.security.auth.credential.CredentialAuthToken;
import com.ningdatech.pmapi.user.security.auth.model.UserFullInfoDTO; import com.ningdatech.pmapi.user.security.auth.model.UserFullInfoDTO;
import com.ningdatech.pmapi.user.service.IUserInfoService; import com.ningdatech.pmapi.user.service.IUserInfoService;
import com.ningdatech.pmapi.user.util.LoginUserUtil; import com.ningdatech.pmapi.user.util.LoginUserUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.web.authentication.WebAuthenticationDetails;
import org.springframework.security.web.context.HttpSessionSecurityContextRepository;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;


@@ -232,8 +225,32 @@ public class UserInfoManage {


public ResUserDetailVO currentUserInfo() { public ResUserDetailVO currentUserInfo() {
Long userId = LoginUserUtil.getUserId(); Long userId = LoginUserUtil.getUserId();
UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(userId);
return null;
UserInfo userInfo = iUserInfoService.getById(userId);
if (Objects.isNull(userInfo)) {
return null;
}
ResUserDetailVO resUserDetailVO = new ResUserDetailVO();
resUserDetailVO.setRealName(userInfo.getRealName());
resUserDetailVO.setUserId(userInfo.getId());
resUserDetailVO.setPhoneNo(userInfo.getMobile());
resUserDetailVO.setStatus(userInfo.getAvailable());

// 装配用户角色信息列表
List<UserRole> userRoleList = iUserRoleService.list(Wrappers.lambdaQuery(UserRole.class)
.eq(UserRole::getUserId, userId));
List<UserRoleVO> userRoleInfoList = new ArrayList<>();
if (CollUtil.isNotEmpty(userRoleList)) {
List<Long> roleIdList = userRoleList.stream().map(UserRole::getRoleId).collect(Collectors.toList());
List<Role> roleList = iRoleService.list(Wrappers.lambdaQuery(Role.class).in(Role::getId, roleIdList));
userRoleInfoList = roleList.stream().map(r -> {
UserRoleVO userRoleVO = new UserRoleVO();
userRoleVO.setId(r.getId());
userRoleVO.setName(r.getName());
return userRoleVO;
}).collect(Collectors.toList());
}
resUserDetailVO.setUserRoleInfoList(userRoleInfoList);
return resUserDetailVO;
} }


public void generationLogin(ReqGenerationLoginPO reqGenerationLoginPO) { public void generationLogin(ReqGenerationLoginPO reqGenerationLoginPO) {


+ 21
- 2
pmapi/src/main/java/com/ningdatech/pmapi/user/model/vo/ResUserDetailVO.java View File

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;


import java.time.LocalDateTime;
import java.util.List; import java.util.List;


/** /**
@@ -23,9 +24,27 @@ public class ResUserDetailVO {
@ApiModelProperty("手机号") @ApiModelProperty("手机号")
private String phoneNo; private String phoneNo;


@ApiModelProperty("用户角色信息列表")
private List<UserRoleVO> userRoleInfoList;

@ApiModelProperty("浙政钉 用户编码")
private String employeeCode;

@ApiModelProperty("所在单位(主职)")
private String orgName;

@ApiModelProperty("所在单位(主职)code")
private String orgCode;

@ApiModelProperty("所属区域")
private Long regionId;

@ApiModelProperty("用户角色")
private List<UserRoleVO> userRoleList;

@ApiModelProperty("状态 启用 ENABLE/禁用 DISABLE") @ApiModelProperty("状态 启用 ENABLE/禁用 DISABLE")
private String status; private String status;


@ApiModelProperty("用户角色信息列表")
private List<UserRoleVO> userRoleInfoList;
@ApiModelProperty("更新时间")
private LocalDateTime updateTime;
} }

+ 3
- 3
pmapi/src/test/java/com/ningdatech/pmapi/beanconfig/BeanConfig.java View File

@@ -23,11 +23,11 @@ public class BeanConfig {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();


// 设置核心线程数 // 设置核心线程数
executor.setCorePoolSize(50);
executor.setCorePoolSize(2);
// 设置最大线程数 // 设置最大线程数
executor.setMaxPoolSize(200);
executor.setMaxPoolSize(10);
// 设置队列容量 // 设置队列容量
executor.setQueueCapacity(200);
executor.setQueueCapacity(10);
// 设置线程活跃时间(秒) // 设置线程活跃时间(秒)
executor.setKeepAliveSeconds(800); executor.setKeepAliveSeconds(800);
// 设置默认线程名称 // 设置默认线程名称


+ 26
- 28
pmapi/src/test/java/com/ningdatech/pmapi/todocenter/TodoCenterTest.java View File

@@ -1,6 +1,7 @@
package com.ningdatech.pmapi.todocenter; package com.ningdatech.pmapi.todocenter;


import com.ningdatech.basic.exception.BizException; import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.model.GenericResult;
import com.ningdatech.pmapi.AppTests; import com.ningdatech.pmapi.AppTests;
import com.ningdatech.pmapi.beanconfig.BeanConfig; import com.ningdatech.pmapi.beanconfig.BeanConfig;
import com.ningdatech.pmapi.todocenter.bean.entity.WorkNoticeInfo; import com.ningdatech.pmapi.todocenter.bean.entity.WorkNoticeInfo;
@@ -17,10 +18,7 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext
import org.springframework.core.task.TaskExecutor; import org.springframework.core.task.TaskExecutor;


import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.*;
import java.util.function.Supplier; import java.util.function.Supplier;


import static com.ningdatech.pmapi.todocenter.constant.WorkNotice.PASS_MSG_TEMPLATE; import static com.ningdatech.pmapi.todocenter.constant.WorkNotice.PASS_MSG_TEMPLATE;
@@ -34,8 +32,8 @@ import static com.ningdatech.pmapi.todocenter.constant.WorkNotice.PASS_MSG_TEMPL
@Slf4j @Slf4j
public class TodoCenterTest extends AppTests { public class TodoCenterTest extends AppTests {


@Autowired
private TaskExecutor taskExecutor;
//@Autowired
//private TaskExecutor executor;


@Autowired @Autowired
private TodoCenterManage todoCenterManage; private TodoCenterManage todoCenterManage;
@@ -46,7 +44,7 @@ public class TodoCenterTest extends AppTests {
@Autowired @Autowired
private ZwddClient zwddClient; private ZwddClient zwddClient;
@Test @Test
public void sendWorkNoticeTest() {
public void sendWorkNoticeTest() throws ExecutionException, InterruptedException {
//String msg = String.format(PASS_MSG_TEMPLATE, "发改委", "0223-00-测试项目"); //String msg = String.format(PASS_MSG_TEMPLATE, "发改委", "0223-00-测试项目");
//log.info("开始发送工作通知"); //log.info("开始发送工作通知");
//zwddClient.sendWorkNotice("846085", "0223-00", msg); //zwddClient.sendWorkNotice("846085", "0223-00", msg);
@@ -62,37 +60,37 @@ public class TodoCenterTest extends AppTests {
UserInfo auditUserInfo = userInfoService.getById(userId); UserInfo auditUserInfo = userInfoService.getById(userId);
// 获取发送浙政钉工作通知必要信息 // 获取发送浙政钉工作通知必要信息
WorkNoticeInfo workNoticeInfo = todoCenterManage.getSendWorkNoticeInfo(auditUserInfo); WorkNoticeInfo workNoticeInfo = todoCenterManage.getSendWorkNoticeInfo(auditUserInfo);
String msg = String.format(PASS_MSG_TEMPLATE, "发改委", "0223-01-测试项目");
// workNoticeInfo.setBizMsgId("1");
String msg = String.format(PASS_MSG_TEMPLATE, "发改委", "0223-02-测试项目");

//// 先创建1个活动线程的线程池
//ExecutorService executor = Executors.newFixedThreadPool(1);


// 先创建1个活动线程的线程池
ExecutorService executor = Executors.newFixedThreadPool(1);
// 初始化线程池
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(10, 20,
60, TimeUnit.SECONDS, new ArrayBlockingQueue(20), new ThreadPoolExecutor.AbortPolicy());


// 将发送工作通知交给异步任务Future // 将发送工作通知交给异步任务Future
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> { CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
// 调用浙政钉的接口发送工作通知 // 调用浙政钉的接口发送工作通知
try {
long startTime = System.currentTimeMillis();
long startTime = System.currentTimeMillis();
GenericResult<Void> result =
zwddClient.sendWorkNotice(workNoticeInfo.getReceiverUserId(), workNoticeInfo.getBizMsgId(), msg); zwddClient.sendWorkNotice(workNoticeInfo.getReceiverUserId(), workNoticeInfo.getBizMsgId(), msg);
String resultMsg = result.getMsg();
if (resultMsg.equals("success")) {
log.info("异步任务执行完成, " + workNoticeInfo.getBizMsgId() + " 当前线程:" + Thread.currentThread().getName()); log.info("异步任务执行完成, " + workNoticeInfo.getBizMsgId() + " 当前线程:" + Thread.currentThread().getName());
long endTime = System.currentTimeMillis(); long endTime = System.currentTimeMillis();
log.info("方法执行完成返回,耗时:" + (endTime - startTime)); log.info("方法执行完成返回,耗时:" + (endTime - startTime));
} catch (Exception e) {
throw new BizException("发送工作通知失败!");
}
return "task finished!";
}, executor);

executor.shutdown();

while (executor.isTerminated()) {
String result = null;
try {
result = future.get();
} catch (Exception e) {
throw new RuntimeException(e);
}else {
return "发送工作通知失败!";
} }
log.info(result);
log.info("发送工作通知成功!");
return "发送工作通知成功!";
}, threadPool);
String s = future.get();
threadPool.shutdown();
while (threadPool.isTerminated()) {
log.info(s);
break;
} }
} }
} }

Loading…
Cancel
Save