Commit 8a31c288 by “zcwang”

add: 创建工单

parent d9758754
......@@ -234,6 +234,12 @@
<artifactId>missa-client</artifactId>
</dependency>
<dependency>
<groupId>com.netease.mail</groupId>
<artifactId>yx-openid-login</artifactId>
<version>1.0.1-SNAPSHOT</version>
</dependency>
<!--其他严选中间件依赖包按需添加-->
<!--
<dependency>
......@@ -355,6 +361,11 @@
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>com.netease.yanxuan.flowx</groupId>
<artifactId>yanxuan-flowx-sdk</artifactId>
<version>1.3</version>
</dependency>
</dependencies>
<repositories>
......
......@@ -6,27 +6,49 @@
*/
package com.netease.mail.yanxuan.change.biz.biz;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import com.alibaba.fastjson.JSON;
import com.netease.mail.yanxuan.change.biz.config.AppConfig;
import com.netease.mail.yanxuan.change.biz.meta.exception.ExceptionFactory;
import com.netease.mail.yanxuan.change.biz.service.ChangeFlowService;
import com.netease.mail.yanxuan.change.biz.service.change.ChangeConfigService;
import com.netease.mail.yanxuan.change.common.bean.CommonConstants;
import com.netease.mail.yanxuan.change.common.bean.RequestLocalBean;
import com.netease.mail.yanxuan.change.common.bean.ResponseCode;
import com.netease.mail.yanxuan.change.common.bean.ResponseCodeEnum;
import com.netease.mail.yanxuan.change.common.enums.ChangeFlowEnum;
import com.netease.mail.yanxuan.change.common.enums.ChangeStatusEnum;
import com.netease.mail.yanxuan.change.common.enums.ChangeSubjectEnum;
import com.netease.mail.yanxuan.change.common.enums.FlowOperationTypeEnum;
import com.netease.mail.yanxuan.change.common.enums.FlowxOperationEnum;
import com.netease.mail.yanxuan.change.common.enums.NeedFileEnum;
import com.netease.mail.yanxuan.change.common.util.DateUtils;
import com.netease.mail.yanxuan.change.dal.entity.ChangeConfig;
import com.netease.mail.yanxuan.change.dal.entity.ChangeRecord;
import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeFlowCreateReq;
import com.netease.mail.yanxuan.change.integration.flow.FlowRpcService;
import com.netease.yanxuan.flowx.sdk.meta.controller.communal.AjaxResponse;
import com.netease.yanxuan.flowx.sdk.meta.dto.base.FlowDataDTO;
import com.netease.yanxuan.flowx.sdk.meta.dto.flow.FlowCreateReqDTO;
import com.netease.yanxuan.flowx.sdk.meta.dto.flow.NodeSubmitReqDTO;
import lombok.extern.slf4j.Slf4j;
/**
* @Author zcwang
* @Date 2022/11/15
*/
@Component
@Slf4j
public class ChangeFlowBiz {
@Autowired
......@@ -38,7 +60,12 @@ public class ChangeFlowBiz {
@Autowired
private AppConfig appConfig;
@Autowired
private FlowRpcService flowRpcService;
public Boolean createAndSubmit(ChangeFlowCreateReq changeFlowCreateReq) {
String uid = RequestLocalBean.getUid();
String name = RequestLocalBean.getName();
// 校验变更主体
Boolean containsChangeSubject = ChangeSubjectEnum.getByType(changeFlowCreateReq.getChangeSubject());
Assert.isTrue(containsChangeSubject, "变更主体不存在");
......@@ -56,14 +83,73 @@ public class ChangeFlowBiz {
// 结束时间不可晚于第二天定时任务执行时间
Long tomorrowSpecificTime = DateUtils.getTomorrowSpecificTime("09:00:00");
Assert.isTrue(changeFlowCreateReq.getChangeConfirmResultTime() >= tomorrowSpecificTime, "时间不可晚于下次执行时间");
// 创建并提交工作流
Map<String, Object> content = new HashMap<>(10);
content.put("createUserName", name);
content.put("createUser", uid);
content.put("createTime", System.currentTimeMillis());
content.put("updateTime", System.currentTimeMillis());
content.put(CommonConstants.FLOW_OPERATION_KEY, FlowOperationTypeEnum.PASS.getValue());
// 创建并提交工单
createAndSubmitFlow(ChangeFlowEnum.CHANGE_FLOW_CONFIRM.getTopoId(), uid, name, JSON.toJSONString(content),
FlowxOperationEnum.CREATE.getName());
// 保存工单数据
ChangeRecord changeRecord = buildRecord(changeFlowCreateReq);
changeFlowService.saveRecord(changeRecord);
return null;
}
private void createAndSubmitFlow(String topoId, String uid, String userName, String content, String operateResult) {
// 先创建工单,创建完成后直接提交
FlowCreateReqDTO flowCreateReqDTO = new FlowCreateReqDTO();
flowCreateReqDTO.setTopoId(topoId);
flowCreateReqDTO.setUid(uid);
flowCreateReqDTO.setUserName(userName);
flowCreateReqDTO.setOperateResult(operateResult);
flowCreateReqDTO.setWorkOrderId(StringUtils.joinWith("-", topoId, UUID.randomUUID().toString()));
log.info("[createAndSubmitFlow] flowCreateReqDTO={}", flowCreateReqDTO);
AjaxResponse<String> flowCreateResponse = flowRpcService.create(CommonConstants.FLOWX_PRODUCT, flowCreateReqDTO);
String flowId;
if (ResponseCodeEnum.SUCCESS.getCode() == flowCreateResponse.getCode()) {
flowId = flowCreateResponse.getData();
log.info("[createAndSubmitFlow] flowId ={}", JSON.toJSONString(flowId));
} else {
log.error("[createAndSubmitFlow] create flow failed, query={}, errMsg={}", JSON.toJSONString(flowCreateReqDTO),
flowCreateResponse.getErrorMsg());
throw ExceptionFactory.createBiz(ResponseCode.CREATE_FLOW_ERROR, flowCreateResponse.getErrorMsg());
}
// 查询工单详情,根据详情提交
FlowDataDTO flowDataDTO;
AjaxResponse<FlowDataDTO> flowDetailResponse = flowRpcService.getDetail(CommonConstants.FLOWX_PRODUCT, flowId);
if (ResponseCodeEnum.SUCCESS.getCode() == flowDetailResponse.getCode()) {
flowDataDTO = flowDetailResponse.getData();
log.info("[createAndSubmitFlow] flowDataDTO={}", JSON.toJSONString(flowDataDTO));
} else {
log.error("[createAndSubmitFlow] get flow detail failed, query={}, errMsg={}", JSON.toJSONString(flowId),
flowCreateResponse.getErrorMsg());
throw ExceptionFactory.createBiz(ResponseCode.DETAIL_FLOW_ERROR, flowCreateResponse.getErrorMsg());
}
NodeSubmitReqDTO nodeSubmitReqDTO = new NodeSubmitReqDTO();
nodeSubmitReqDTO.setNodeId(flowDataDTO.getFlowMeta().getCurrNodeDataList().get(0).getNodeId());
nodeSubmitReqDTO.setUid(flowCreateReqDTO.getUid());
nodeSubmitReqDTO.setUserName(flowCreateReqDTO.getUserName());
nodeSubmitReqDTO.setFlowId(flowId);
nodeSubmitReqDTO.setTopoId(flowCreateReqDTO.getTopoId());
nodeSubmitReqDTO.setContent(flowCreateReqDTO.getContent());
nodeSubmitReqDTO.setOperateResult(FlowxOperationEnum.CREATE.getName());
// 提交工单
AjaxResponse<List<String>> submitResponse = flowRpcService.submit(CommonConstants.FLOWX_PRODUCT, flowId);
if (ResponseCodeEnum.SUCCESS.getCode() == flowDetailResponse.getCode()) {
List<String> nextNodeIdList = submitResponse.getData();
log.info("[createAndSubmitFlow] nextNodeIdList={}", JSON.toJSONString(nextNodeIdList));
} else {
log.error("[createAndSubmitFlow] submit flow failed, query={}, errMsg={}", JSON.toJSONString(flowId),
flowCreateResponse.getErrorMsg());
throw ExceptionFactory.createBiz(ResponseCode.SUBMIT_FLOW_ERROR, flowCreateResponse.getErrorMsg());
}
}
private ChangeRecord buildRecord(ChangeFlowCreateReq changeFlowCreateReq) {
ChangeRecord changeRecord = new ChangeRecord();
// todo
......
package com.netease.mail.yanxuan.change.biz.meta.exception;
import com.netease.mail.yanxuan.change.biz.meta.ResponseCode;
import com.netease.mail.yanxuan.change.common.bean.ResponseCode;
/**
* @author: bndong
......
package com.netease.mail.yanxuan.change.biz.meta.exception;
import com.netease.mail.yanxuan.change.biz.meta.ResponseCode;
import com.netease.mail.yanxuan.change.common.bean.ResponseCode;
/**
* @author: bndong
......
package com.netease.mail.yanxuan.change.biz.service;
import com.netease.mail.yanxuan.change.biz.meta.AjaxResult;
import com.netease.mail.yanxuan.change.common.bean.AjaxResult;
import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeConfigQueryReq;
import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeConfigReq;
......
package com.netease.mail.yanxuan.change.biz.service.impl;
import com.netease.mail.yanxuan.change.biz.meta.AjaxResult;
import com.netease.mail.yanxuan.change.biz.meta.ResponseCode;
import com.netease.mail.yanxuan.change.common.bean.AjaxResult;
import com.netease.mail.yanxuan.change.biz.service.AdminChangeConfigService;
import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeConfigQueryReq;
import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeConfigReq;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
/**
......
package com.netease.mail.yanxuan.change.biz.service.impl.change;
import com.netease.mail.yanxuan.change.biz.meta.ResponseCode;
import com.netease.mail.yanxuan.change.common.bean.ResponseCode;
import com.netease.mail.yanxuan.change.biz.meta.exception.ExceptionFactory;
import com.netease.mail.yanxuan.change.biz.service.change.ChangeExecConfigService;
import com.netease.mail.yanxuan.change.dal.entity.ChangeExecConfig;
......
package com.netease.mail.yanxuan.change.biz.service.impl.change;
import com.netease.mail.yanxuan.change.biz.meta.ResponseCode;
import com.netease.mail.yanxuan.change.common.bean.ResponseCode;
import com.netease.mail.yanxuan.change.biz.meta.exception.ExceptionFactory;
import com.netease.mail.yanxuan.change.biz.service.change.ChangeTypeService;
import com.netease.mail.yanxuan.change.dal.entity.ChangeType;
......
......@@ -4,7 +4,7 @@
* Copyright 2022 Netease, Inc. All rights reserved.
* NETEASE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package com.netease.mail.yanxuan.change.biz.meta;
package com.netease.mail.yanxuan.change.common.bean;
/**
* @Author zcwang
......@@ -13,7 +13,11 @@ package com.netease.mail.yanxuan.change.biz.meta;
*/
public class CommonConstants {
// 工单业务数据操作key
public static final String FLOW_OPERATION_KEY = "operation";;
public static Integer SIZE = 1;
public static Integer PAGE = 10;
public static String FLOWX_PRODUCT = "qc";
}
\ No newline at end of file
package com.netease.mail.yanxuan.change.common.bean;
/**
* @author: bndong
* @date: 2021/5/25
*/
public class RequestLocalBean {
/**
* 存储当前的用户的Id
*/
private static final ThreadLocal<Long> userIdLocal = new ThreadLocal<>();
/**
* 存储当期用户的uid
*/
private static final ThreadLocal<String> uidLocal = new ThreadLocal<>();
/**
* 存储当前请求的ip信息
*/
private static final ThreadLocal<String> ipLocal = new ThreadLocal<>();
/**
* 真实姓名
*/
private static final ThreadLocal<String> nameLocal = new ThreadLocal<>();
/**
* 最近登录时间
*/
private static final ThreadLocal<Long> lastLoginTimeLocal = new ThreadLocal<>();
public static void rmrRequestUserId() {
userIdLocal.remove();
}
public static Long getRequestUserId() {
return userIdLocal.get();
}
public static void setRequestUserId(Long userId) {
userIdLocal.set(userId);
}
public static void rmrRequestIp() {
ipLocal.remove();
}
public static String getRequestIp() {
return ipLocal.get();
}
public static void setRequestIp(String ip) {
ipLocal.set(ip);
}
public static void rmUid() {
uidLocal.remove();
}
public static String getUid() {
return uidLocal.get();
}
public static void setUid(String uid) {
uidLocal.set(uid);
}
public static void rmrName() {
nameLocal.remove();
}
public static String getName() {
return nameLocal.get();
}
public static void setName(String name) {
nameLocal.set(name);
}
public static void rmrLastLoginTime() {
lastLoginTimeLocal.remove();
}
public static Long getLastLoginTime() {
return lastLoginTimeLocal.get();
}
public static void setLastLoginTime(Long lastLoginTime) {
lastLoginTimeLocal.set(lastLoginTime);
}
public static void clear() {
RequestLocalBean.rmUid();
RequestLocalBean.rmrRequestIp();
RequestLocalBean.rmrRequestUserId();
RequestLocalBean.rmrName();
RequestLocalBean.rmrLastLoginTime();
}
}
package com.netease.mail.yanxuan.change.biz.meta;
package com.netease.mail.yanxuan.change.common.bean;
/**
* 返回的code
......@@ -120,7 +120,9 @@ public enum ResponseCode {
NO_GOOD_TASK(802, "不是商品任务"),
CONFIG_ERROR(1001, "配置错误"),
CREATE_FLOW_ERROR(1001, "创建工单错误"),
DETAIL_FLOW_ERROR(1002, "查询工单详情错误"),
SUBMIT_FLOW_ERROR(1002, "查询工单详情错误"),
//----------10xx-----------
......
......@@ -4,7 +4,7 @@
* Copyright 2022 Netease, Inc. All rights reserved.
* NETEASE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package com.netease.mail.yanxuan.change.biz.meta;
package com.netease.mail.yanxuan.change.common.bean;
import java.util.HashMap;
import java.util.Map;
......
/**
* @(#)ChangeFlowEnum.java, 2022/11/16.
* <p/>
* Copyright 2022 Netease, Inc. All rights reserved.
* NETEASE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package com.netease.mail.yanxuan.change.common.enums;
import lombok.Getter;
/**
* @Author zcwang
* @Date 2022/11/16
*/
public enum ChangeFlowEnum {
CHANGE_FLOW_START("79560500", "开始节点", "qc-change-flow"),
CHANGE_FLOW_SUBMIT("79560501", "变更申请提交", "qc-change-flow"),
CHANGE_FLOW_EXE("79560503","变更结果确认", "qc-change-flow"),
CHANGE_FLOW_CONFIRM("79560502","变更申请提交", "qc-change-flow"),
END("9999", "结束", "qc-change-flow");
@Getter
private final String nodeId;
private final String name;
@Getter
private final String topoId;
ChangeFlowEnum(String nodeId, String name, String topoId) {
this.nodeId = nodeId;
this.name = name;
this.topoId = topoId;
}
}
\ No newline at end of file
package com.netease.mail.yanxuan.change.common.enums;
import lombok.AllArgsConstructor;
/**
* @author tangld
* 工单操作类型
*/
@AllArgsConstructor
public enum FlowOperationTypeEnum {
/**
* 通过
*/
PASS("pass"),
/**
* 驳回
*/
REFUSE("refuse"),
/**
* 转交
*/
DELIVER("deliver");
private String value;
public String getValue() {
return value;
}
}
package com.netease.mail.yanxuan.change.common.enums;
import lombok.AllArgsConstructor;
@AllArgsConstructor
public enum FlowxOperationEnum {
/**
* 创建成功
*/
CREATE(1, "创建成功"),
/**
* 提交工单
*/
SUBMIT(2, "提交工单"),
/**
* 审核通过
*/
APPROVE(3, "审核通过"),
/**
* 审批不通过
*/
APPROVE_FAIL(4, "审批不通过"),
/**
* 驳回
*/
REFUSE(5, "驳回"),
/**
* 转交
*/
DELIVER(6, "转交"),
/**
* 系统自动提交
*/
SYSTEM(7, "系统自动提交工单");
/**
* 类型
*/
private Integer type;
/**
* 名称
*/
private String name;
public Integer getType() {
return type;
}
public String getName() {
return name;
}
}
/**
* @(#)FlowRpcService.java, 2022/11/16.
* <p/>
* Copyright 2022 Netease, Inc. All rights reserved.
* NETEASE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package com.netease.mail.yanxuan.change.integration.flow;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import com.netease.yanxuan.bpmstore.meta.AjaxResult;
import com.netease.yanxuan.flowx.sdk.meta.controller.communal.AjaxResponse;
import com.netease.yanxuan.flowx.sdk.meta.dto.base.FlowDataDTO;
import com.netease.yanxuan.flowx.sdk.meta.dto.flow.FlowCreateReqDTO;
import com.netease.yanxuan.missa.client.annotation.MissaClient;
import jdk.internal.org.objectweb.asm.tree.analysis.Value;
/**
* @Author zcwang
* @Date 2022/11/16
*/
@Service
@MissaClient(serviceCode = "yanxuan-flowx-server.service")
public interface FlowRpcService {
/**
* 创建流转工单
*
* @param product
* @param req
* @return
*/
@PostMapping(value ="/{product}/workOrderFlow/v1/create", consumes = MediaType.APPLICATION_JSON_VALUE)
AjaxResponse<String> create(@PathVariable("product") String product, FlowCreateReqDTO req);
@GetMapping(value = "/{product}/workOrder/v1/{flowId}/detail")
AjaxResponse<FlowDataDTO> getDetail(@PathVariable("product") String flowxProduct, @PathVariable("flowId") String flowId);
@PostMapping(value = "/{product}/workOrderFlow/v1/submit")
AjaxResponse<List<String>> submit(@PathVariable("product")String flowxProduct, String flowId);
}
\ No newline at end of file
/**
* @(#)FlowxCreateDTO.java, 2022/11/16.
* <p/>
* Copyright 2022 Netease, Inc. All rights reserved.
* NETEASE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package com.netease.mail.yanxuan.change.integration.flow;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author zcwang
* @Date 2022/11/16
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class FlowxCreateDTO {
/**
* 执行更新操作的员工id
*/
private String uid;
/**
* xxx@corp.netease.com
*/
private String userName;
/**
* 业务数据
*/
private String content;
/**
* topoId
*/
private String topoId;
/**
* 工单实例ID
*/
private String workOrderId;
/**
* 备注,提交操作时填写的备注框内容
*/
private String remark;
/**
* 操作结果,用于展示在操作日志中
*/
private String operateResult;
}
\ No newline at end of file
......@@ -15,7 +15,7 @@ import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import com.alibaba.fastjson.JSON;
import com.netease.mail.yanxuan.change.biz.meta.AjaxResult;
import com.netease.mail.yanxuan.change.common.bean.AjaxResult;
import com.netease.mail.yanxuan.change.biz.meta.exception.ServiceException;
import com.netease.mail.yanxuan.change.common.util.RequestUtil;
import com.netease.mail.yanxuan.change.common.util.ResponseUtil;
......
package com.netease.mail.yanxuan.change.web.config;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import com.netease.mail.yanxuan.change.common.bean.AjaxResult;
import com.netease.mail.yanxuan.change.common.bean.ResponseCodeEnum;
import com.netease.mail.yanxuan.change.common.bean.RequestLocalBean;
import com.netease.mail.yanxuan.change.common.util.ResponseUtil;
import lombok.extern.slf4j.Slf4j;
/**
* 严选用户登录拦截器
*
* @author lwtang
*/
@Component
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
String yxUid = RequestLocalBean.getUid();
if (yxUid == null) {
String text = JSON.toJSONString(AjaxResult.of(ResponseCodeEnum.SC_UNAUTHORIZED.getCode(), "not-login"));
String callback = request.getParameter("callback");
if (!StringUtils.isEmpty(callback)) {
text = callback + "(" + text + ")";
}
ResponseUtil.writeJson(response, text);
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
log.info("postHandle");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex) throws Exception {
log.info("afterCompletion");
}
}
package com.netease.mail.yanxuan.change.web.config;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.netease.mail.yanxuan.change.common.bean.RequestLocalBean;
import com.netease.mail.yx.openid.YxOpenidLogin;
import com.netease.mail.yx.openid.YxOpenidUser;
import lombok.extern.slf4j.Slf4j;
/**
* 提取用户uid
*
* @author lwtang
*/
@Component
@Slf4j
public class UserInterceptor implements HandlerInterceptor {
@Value("${product:product}")
String product;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
//获取cookie信息
Cookie[] cookies = request.getCookies();
String userCookie = null;
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("YX_OPENID_SESS")) {
userCookie = cookie.getValue();
}
}
}
log.info("YX_OPENID_SESS: {}", userCookie);
// 解析cookie
YxOpenidUser yxuser = null;
if (userCookie != null) {
yxuser = YxOpenidLogin.parseCookie(userCookie);
}
// ajax请求,走返回码
String accept = request.getHeader("Accept");
// cookie不存在或者超过一个小时(时间自己定)
if (yxuser == null || yxuser.getLoginTime() < System.currentTimeMillis() - 60 * 1000 * 1000) {
//如果是ajax请求
if (!accept.contains("text/html")
|| request.getRequestURI().contains("ajax")) {
log.info("ajax request user is null or login time too early, yxuser: {}", yxuser);
} else {
String url = request.getRequestURL().toString();
String loginUrl = YxOpenidLogin.getLoginUrl(url);
log.info("redirect url: {}", loginUrl);
response.sendRedirect(loginUrl);
}
} else {
// 获取用户信息
// 邮箱地址
String email = yxuser.getEmail();
RequestLocalBean.setUid(email);
// 中文姓名
String fullname = yxuser.getFullName();
RequestLocalBean.setName(fullname);
// 用户登录时间戳
long loginTime = yxuser.getLoginTime();
log.info("[UserAccess] user: {}, url: {}", email, request.getPathInfo());
RequestLocalBean.setLastLoginTime(loginTime);
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex) throws Exception {
RequestLocalBean.clear();
}
}
package com.netease.mail.yanxuan.change.web.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.web.servlet.config.annotation.AsyncSupportConfigurer;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
* @author zhangbingQAQ
* @date 2021/8/27 10:18
*/
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Autowired
private LoginInterceptor loginInterceptor;
/**
* 拦截器配置
*
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor).addPathPatterns("/**")
.excludePathPatterns("/i/health")
.excludePathPatterns("/getHeliosCacheConfig")
.excludePathPatterns("/getDistributedCacheSchedule")
.excludePathPatterns("/getLocalCacheSchedule")
.excludePathPatterns("/nameSpace")
.excludePathPatterns("/loadEnvClusterInfo")
.excludePathPatterns("/test/**")
.excludePathPatterns("/sdk/resultForCacheKey")
.excludePathPatterns("/sdk/reportDispatchResult")
.excludePathPatterns("/sdk/getOpMessage")
.excludePathPatterns("/sdk/opMessageResp")
.excludePathPatterns("/openapi/control/**")
.excludePathPatterns("/sacs/ape/callback");
super.addInterceptors(registry);
}
@Bean
public ThreadPoolTaskExecutor mvcTaskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10);
executor.setQueueCapacity(100);
executor.setMaxPoolSize(25);
return executor;
}
//配置异步支持,设置了一个用来异步执行业务逻辑的工作线程池,设置了默认的超时时间是60秒
@Override
public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
configurer.setTaskExecutor(mvcTaskExecutor());
configurer.setDefaultTimeout(apolloConfig.getLongPollingTimeout());
}
}
package com.netease.mail.yanxuan.change.web.controller;
import com.netease.mail.yanxuan.change.biz.meta.AjaxResult;
import com.netease.mail.yanxuan.change.common.bean.AjaxResult;
import com.netease.mail.yanxuan.change.biz.service.AdminChangeConfigService;
import com.netease.mail.yanxuan.change.dal.mapper.ChangeConfigMapper;
import com.netease.mail.yanxuan.change.dal.mapper.ChangeExecConfigMapper;
......
......@@ -18,7 +18,7 @@ import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSON;
import com.netease.mail.yanxuan.change.biz.biz.ChangeFlowBiz;
import com.netease.mail.yanxuan.change.biz.config.TitleConfig;
import com.netease.mail.yanxuan.change.biz.meta.AjaxResult;
import com.netease.mail.yanxuan.change.common.bean.AjaxResult;
import com.netease.mail.yanxuan.change.biz.service.ChangeFlowService;
import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeFlowCreateReq;
import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeFlowReq;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment