功能开发,并删除多余文件
This commit is contained in:
parent
7f32dcd9bd
commit
bc254cd522
@ -11,7 +11,7 @@ import lombok.Getter;
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum ErrorCode implements IProjectRespCode {
|
||||
public enum BpmErrorCode implements IProjectRespCode {
|
||||
|
||||
|
||||
// ========== 流程模型 1-009-002-000 ==========
|
||||
@ -1,14 +1,8 @@
|
||||
package cn.axzo.server.common.enums;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
import org.flowable.bpmn.model.ExclusiveGateway;
|
||||
import org.flowable.bpmn.model.ParallelGateway;
|
||||
import org.flowable.bpmn.model.ServiceTask;
|
||||
import org.flowable.bpmn.model.UserTask;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public enum FlowNodeType {
|
||||
public enum BpmFlowNodeType {
|
||||
|
||||
//0 发起人 1审批 2抄送 3条件 4路由
|
||||
NODE_STARTER("NODE_STARTER",UserTask.class, "发起人节点"),
|
||||
@ -19,7 +13,7 @@ public enum FlowNodeType {
|
||||
private String desc;
|
||||
private Class<?> typeClass;
|
||||
|
||||
FlowNodeType(String type, Class<?> typeClass, String desc) {
|
||||
BpmFlowNodeType(String type, Class<?> typeClass, String desc) {
|
||||
this.type = type;
|
||||
this.typeClass = typeClass;
|
||||
this.desc = desc;
|
||||
@ -1,88 +0,0 @@
|
||||
package cn.axzo.server.common.enums;
|
||||
|
||||
/**
|
||||
* @Author: liyong.tian
|
||||
* @Date: 2022/9/5
|
||||
* @Description:
|
||||
*/
|
||||
public enum ResultCode {
|
||||
/**
|
||||
* 成功 [GET]
|
||||
*/
|
||||
SUCCESS(200),
|
||||
/**
|
||||
* [POST/PUT/PATCH] 用户新建或修改数据成功
|
||||
*/
|
||||
CREATED(201),
|
||||
/**
|
||||
* [*] 标识一个请求已经进入后台排队 (异步任务)
|
||||
*/
|
||||
ACCEPTED(202),
|
||||
/**
|
||||
* [DELETE]: 用户删除数据成功
|
||||
*/
|
||||
NO_CONTENT(204),
|
||||
/**
|
||||
* [POST/PUT/PATCH] 用户发出的请求有错误, 服务器没有进行新建或修改数据的操作, 该操作是幂等的.
|
||||
*/
|
||||
FAIL(400),
|
||||
/**
|
||||
* [*] 标识没有权限 (令牌、用户名、密码错误)
|
||||
*/
|
||||
UNAUTHORIZED(401),
|
||||
/**
|
||||
* [*] 标识用户得到授权(与401错误相对), 但是访问是被禁止的
|
||||
*/
|
||||
FORBIDDEN(403),
|
||||
/**
|
||||
* [*] 用户发出的请求针对的是不存在的记录, 服务器没有进行操作
|
||||
*/
|
||||
NOT_FOUND(404),
|
||||
/**
|
||||
* [GET] 用户请求的格式不可得 (比如用户请求JSON格式, 但是只有XML格式)
|
||||
*/
|
||||
NOT_ACCEPTABLE(406),
|
||||
/**
|
||||
* [GET] 用户请求的资源被永久删除, 且不会再得到
|
||||
*/
|
||||
GONE(410),
|
||||
/**
|
||||
* [POST/PUT/PATCH] 当创建一个对象时, 发生一个验证错误646
|
||||
*/
|
||||
UNPROCESSABLE_ENTITY(422),
|
||||
/**
|
||||
* 服务器内部错误
|
||||
*/
|
||||
INTERNAL_SERVER_ERROR(9999),
|
||||
/**
|
||||
* 通用业务异常
|
||||
*/
|
||||
SERVICE_EXCEPTION_ERROR(9998),
|
||||
|
||||
/**
|
||||
* ####业务的响应码####
|
||||
* 按业务依次划分 :
|
||||
* 一共6位, 第6位是业务代码 第1-5位响应码, 按业务不同码不同
|
||||
* #100000 全局级别
|
||||
*/
|
||||
|
||||
/**
|
||||
* 100001 当前用户被强制下线
|
||||
*/
|
||||
CUSTOM_100001(100001),
|
||||
/**
|
||||
* 确认弹窗响应码
|
||||
*/
|
||||
CUSTOM_100002(100002);
|
||||
|
||||
public int code;
|
||||
|
||||
ResultCode(int code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1 +0,0 @@
|
||||
package cn.axzo.server.common.util;
|
||||
@ -1,259 +0,0 @@
|
||||
package cn.axzo.server.config.filter;
|
||||
|
||||
import cn.azxo.framework.common.constatns.Constants;
|
||||
import cn.azxo.framework.common.utils.LogUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONException;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
import com.google.common.base.Strings;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.skywalking.apm.toolkit.trace.Trace;
|
||||
import org.apache.skywalking.apm.toolkit.trace.TraceContext;
|
||||
import org.slf4j.MDC;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.filter.OncePerRequestFilter;
|
||||
import org.springframework.web.util.ContentCachingRequestWrapper;
|
||||
import org.springframework.web.util.ContentCachingResponseWrapper;
|
||||
import org.springframework.web.util.WebUtils;
|
||||
|
||||
import javax.servlet.FilterChain;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @Author: liyong.tian
|
||||
* @Date: 2022/12/6 14:48
|
||||
* @Description: Http接口日志记录
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class HttpTraceLogFilter extends OncePerRequestFilter implements Ordered {
|
||||
|
||||
private static final String X_REQUEST_ID = "x-request-id";
|
||||
|
||||
@Override
|
||||
public int getOrder() {
|
||||
return Ordered.LOWEST_PRECEDENCE - 10;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Trace(operationName = "HttpTraceLogFilter")
|
||||
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
|
||||
FilterChain filterChain) throws ServletException, IOException {
|
||||
String uri = request.getRequestURI();
|
||||
String contextPath = request.getContextPath();
|
||||
String url = uri.substring(contextPath.length());
|
||||
//swagger 跳过
|
||||
if (url.contains("api-docs") || url.contains("swagger") || url.contains("checkDeath")) {
|
||||
filterChain.doFilter(request, response);
|
||||
return;
|
||||
}
|
||||
//静态资源 跳过
|
||||
if (url.contains(".")) {
|
||||
filterChain.doFilter(request, response);
|
||||
return;
|
||||
}
|
||||
if (!(request instanceof ContentCachingRequestWrapper)) {
|
||||
request = new ContentCachingRequestWrapper(request);
|
||||
}
|
||||
if (!(response instanceof ContentCachingResponseWrapper)) {
|
||||
response = new ContentCachingResponseWrapper(response);
|
||||
}
|
||||
|
||||
String requestId = request.getHeader(X_REQUEST_ID);
|
||||
if (Strings.isNullOrEmpty(requestId)) {
|
||||
MDC.put(X_REQUEST_ID, getTraceId());
|
||||
} else {
|
||||
MDC.put(X_REQUEST_ID, requestId);
|
||||
}
|
||||
String ctxLogId = request.getHeader(Constants.CTX_LOG_ID_MDC);
|
||||
if (Strings.isNullOrEmpty(ctxLogId)) {
|
||||
MDC.put(Constants.CTX_LOG_ID_MDC, getTraceId());
|
||||
} else {
|
||||
MDC.put(Constants.CTX_LOG_ID_MDC, ctxLogId);
|
||||
}
|
||||
|
||||
// 获取请求参数
|
||||
String parameter = null;
|
||||
String requestContentType = request.getHeader(HttpHeaders.CONTENT_TYPE);
|
||||
if (requestContentType != null) {
|
||||
if (requestContentType.startsWith(MediaType.APPLICATION_JSON_VALUE)) {
|
||||
//Json
|
||||
WrappedHttpServletRequest requestWrapper = new WrappedHttpServletRequest(request);
|
||||
parameter = getRequestBody(requestWrapper);
|
||||
request = requestWrapper;
|
||||
} else if (requestContentType.startsWith(MediaType.APPLICATION_FORM_URLENCODED_VALUE)) {
|
||||
//普通表单提交
|
||||
parameter = JSON.toJSONString(request.getParameterMap());
|
||||
} else if (requestContentType.startsWith(MediaType.MULTIPART_FORM_DATA_VALUE)) {
|
||||
//文件表单提交
|
||||
parameter = JSON.toJSONString("文件类型");
|
||||
}
|
||||
} else if (url.startsWith("/api")) {
|
||||
if ("GET".equals(request.getMethod())) {
|
||||
parameter = JSON.toJSONString(request.getParameterMap());
|
||||
} else if ("POST".equals(request.getMethod())) {
|
||||
WrappedHttpServletRequest requestWrapper = new WrappedHttpServletRequest(request);
|
||||
parameter = getRequestBody(requestWrapper);
|
||||
request = requestWrapper;
|
||||
}
|
||||
} else if ("GET".equals(request.getMethod())) {
|
||||
parameter = JSON.toJSONString(request.getParameterMap());
|
||||
}
|
||||
|
||||
long requestTime = System.currentTimeMillis();
|
||||
try {
|
||||
filterChain.doFilter(request, response);
|
||||
} finally {
|
||||
response.setHeader(Constants.CTX_LOG_ID_MDC, MDC.get(Constants.CTX_LOG_ID_MDC));
|
||||
response.setHeader(X_REQUEST_ID, MDC.get(Constants.CTX_LOG_ID_MDC));
|
||||
|
||||
long latency = System.currentTimeMillis() - requestTime;
|
||||
String responseBody = null;
|
||||
int responseStatus = response.getStatus();
|
||||
String responseContentType = response.getContentType();
|
||||
//Json
|
||||
if (responseContentType != null && responseContentType
|
||||
.startsWith(MediaType.APPLICATION_JSON_VALUE)) {
|
||||
responseBody = getResponseBody(response);
|
||||
}
|
||||
//记录日志
|
||||
HttpTraceLog traceLog = new HttpTraceLog();
|
||||
traceLog.setRequestContentType(requestContentType);
|
||||
traceLog.setPath(url);
|
||||
traceLog.setMethod(request.getMethod());
|
||||
traceLog.setTimeTaken(latency);
|
||||
traceLog.setParameter(parameter);
|
||||
traceLog.setResponseContentType(responseContentType);
|
||||
traceLog.setStatus(responseStatus);
|
||||
traceLog.setResponseBody(responseBody);
|
||||
traceLog.setRequestHeaders(getRequestHeader(request));
|
||||
if (traceLog.getResponseCode() != null && traceLog.getResponseCode().equals(9999)) {
|
||||
LogUtil.error(LogUtil.ErrorLevel.P0, LogUtil.ErrorType.ERROR_BUSINESS, JSON.toJSONString(traceLog));
|
||||
} else if (traceLog.getResponseCode() != null && traceLog.getResponseCode().equals(9998)) {
|
||||
log.warn(JSON.toJSONString(traceLog));
|
||||
} else {
|
||||
log.info(JSON.toJSONString(traceLog));
|
||||
}
|
||||
updateResponse(response);
|
||||
// 清理链路id
|
||||
MDC.clear();
|
||||
}
|
||||
}
|
||||
|
||||
private String getTraceId() {
|
||||
String contextTraceId = TraceContext.traceId();
|
||||
return Strings.isNullOrEmpty(contextTraceId)
|
||||
? UUID.randomUUID().toString().replaceAll("-", "") : contextTraceId;
|
||||
}
|
||||
|
||||
private String getRequestBody(WrappedHttpServletRequest request) throws IOException {
|
||||
// 获取请求参数
|
||||
return request.getRequestParams();
|
||||
}
|
||||
|
||||
@Trace(operationName = "HttpTraceLogFilter#getResponseBody")
|
||||
private String getResponseBody(HttpServletResponse response) {
|
||||
String responseBody = null;
|
||||
ContentCachingResponseWrapper wrapper = WebUtils
|
||||
.getNativeResponse(response, ContentCachingResponseWrapper.class);
|
||||
if (wrapper != null) {
|
||||
responseBody = new String(wrapper.getContentAsByteArray(), StandardCharsets.UTF_8);
|
||||
}
|
||||
return responseBody;
|
||||
}
|
||||
|
||||
public Map<String, String> getRequestHeader(HttpServletRequest request) {
|
||||
Map<String, String> ret = new HashMap<>();
|
||||
Enumeration<String> headerNames = request.getHeaderNames();
|
||||
while (headerNames.hasMoreElements()) {
|
||||
String headerName = headerNames.nextElement();
|
||||
ret.put(headerName, request.getHeader(headerName));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Trace(operationName = "HttpTraceLogFilter#updateResponse")
|
||||
private void updateResponse(HttpServletResponse response) throws IOException {
|
||||
ContentCachingResponseWrapper responseWrapper = WebUtils
|
||||
.getNativeResponse(response, ContentCachingResponseWrapper.class);
|
||||
Objects.requireNonNull(responseWrapper).copyBodyToResponse();
|
||||
}
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
private static class HttpTraceLog {
|
||||
|
||||
/**
|
||||
* 路径
|
||||
*/
|
||||
private String path;
|
||||
/**
|
||||
* 参数
|
||||
*/
|
||||
@JSONField(jsonDirect = true)
|
||||
private String parameter;
|
||||
private String requestContentType;
|
||||
private String responseContentType;
|
||||
private String method;
|
||||
private Long timeTaken;
|
||||
private Integer status;
|
||||
/**
|
||||
* 业务Code
|
||||
*/
|
||||
private Integer responseCode;//业务返回码
|
||||
/**
|
||||
* 响应参数
|
||||
*/
|
||||
@JSONField(jsonDirect = true)
|
||||
private String responseBody;
|
||||
|
||||
@JSONField(jsonDirect = true)
|
||||
private Map<String, String> requestHeaders;
|
||||
|
||||
public String getParameter() {
|
||||
if (parameter == null) {
|
||||
return parameter;
|
||||
} else {
|
||||
return parameter.replaceAll("\n", "").replaceAll("\t", "").replaceAll("\r", "");
|
||||
}
|
||||
}
|
||||
|
||||
public String getResponseBody() {
|
||||
if (responseBody == null) {
|
||||
return responseBody;
|
||||
} else {
|
||||
return responseBody.replaceAll("\n", "").replaceAll("\t", "").replaceAll("\r", "");
|
||||
}
|
||||
}
|
||||
|
||||
public void setResponseBody(String responseBody) {
|
||||
if (StringUtils.isBlank(responseBody)) {
|
||||
return;
|
||||
}
|
||||
this.responseBody = responseBody;
|
||||
JSONObject responseJson = null;
|
||||
try {
|
||||
responseJson = JSONObject.parseObject(responseBody);
|
||||
this.responseCode = responseJson.getInteger("code");
|
||||
} catch (JSONException e) {
|
||||
log.debug("ResponseBody非JSON返回", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,91 +0,0 @@
|
||||
package cn.axzo.server.config.filter;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import javax.servlet.ReadListener;
|
||||
import javax.servlet.ServletInputStream;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletRequestWrapper;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
|
||||
/**
|
||||
* @Author: liyong.tian
|
||||
* @Date: 2022/12/6 14:56
|
||||
* @Description:
|
||||
*/
|
||||
public class WrappedHttpServletRequest extends HttpServletRequestWrapper {
|
||||
|
||||
private byte[] bytes;
|
||||
private WrappedServletInputStream wrappedServletInputStream;
|
||||
|
||||
public WrappedHttpServletRequest(HttpServletRequest request) throws IOException {
|
||||
super(request);
|
||||
// 读取输入流里的请求参数,并保存到bytes里
|
||||
bytes = IOUtils.toByteArray(request.getInputStream());
|
||||
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
|
||||
this.wrappedServletInputStream = new WrappedServletInputStream(byteArrayInputStream);
|
||||
// 很重要,把post参数重新写入请求流
|
||||
reWriteInputStream();
|
||||
}
|
||||
|
||||
/**
|
||||
* 把参数重新写进请求里
|
||||
*/
|
||||
public void reWriteInputStream() {
|
||||
wrappedServletInputStream
|
||||
.setStream(new ByteArrayInputStream(bytes != null ? bytes : new byte[0]));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ServletInputStream getInputStream() throws IOException {
|
||||
return wrappedServletInputStream;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BufferedReader getReader() throws IOException {
|
||||
return new BufferedReader(new InputStreamReader(wrappedServletInputStream));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取post参数,可以自己再转为相应格式
|
||||
*/
|
||||
public String getRequestParams() throws IOException {
|
||||
return new String(bytes, this.getCharacterEncoding());
|
||||
}
|
||||
|
||||
private class WrappedServletInputStream extends ServletInputStream {
|
||||
|
||||
private InputStream stream;
|
||||
|
||||
public WrappedServletInputStream(InputStream stream) {
|
||||
this.stream = stream;
|
||||
}
|
||||
|
||||
public void setStream(InputStream stream) {
|
||||
this.stream = stream;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int read() throws IOException {
|
||||
return stream.read();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isFinished() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isReady() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setReadListener(ReadListener readListener) {
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1 +0,0 @@
|
||||
package cn.axzo.server.config;
|
||||
@ -1 +0,0 @@
|
||||
package cn.axzo.server.consumer;
|
||||
@ -1,22 +0,0 @@
|
||||
package cn.axzo.server.controller;
|
||||
|
||||
import cn.axzo.framework.web.http.ApiResponse;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @Author: liyong.tian
|
||||
* @Date: 2022/11/25 18:00
|
||||
* @Description: 健康检查接口
|
||||
*/
|
||||
@RestController
|
||||
public class HealthCheckController {
|
||||
|
||||
/**
|
||||
* 探活
|
||||
*/
|
||||
@GetMapping("/checkDeath")
|
||||
public ApiResponse<String> checkDeath() {
|
||||
return ApiResponse.ok("ok");
|
||||
}
|
||||
}
|
||||
@ -1 +0,0 @@
|
||||
package cn.axzo.server.controller.app;
|
||||
@ -1 +0,0 @@
|
||||
package cn.axzo.server.job;
|
||||
@ -1 +0,0 @@
|
||||
package cn.axzo.server.repository.dataobject;
|
||||
@ -1,6 +1,7 @@
|
||||
package cn.axzo.server.repository.dto;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import cn.axzo.server.common.enums.BpmFlowNodeType;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class BpmJsonNode {
|
||||
@ -12,7 +13,7 @@ public class BpmJsonNode {
|
||||
private String id;
|
||||
private String parentId;
|
||||
/**
|
||||
* {@link cn.axzo.server.common.enums.FlowNodeType}
|
||||
* {@link BpmFlowNodeType}
|
||||
* */
|
||||
private String type; // task, branch,
|
||||
private String name;
|
||||
|
||||
@ -1,15 +0,0 @@
|
||||
package cn.axzo.server.service.converter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author: liyong.tian
|
||||
* @Date: 2022/9/5
|
||||
* @Description:
|
||||
*/
|
||||
public interface EntityConverter<V, E>{
|
||||
|
||||
V toVo(E var);
|
||||
|
||||
List<V> toVo(List<E> var);
|
||||
}
|
||||
@ -0,0 +1,35 @@
|
||||
package cn.axzo.server.service.engine;
|
||||
|
||||
import cn.axzo.server.listener.BpmTaskEventListener;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.flowable.engine.delegate.TaskListener;
|
||||
import org.flowable.task.service.delegate.DelegateTask;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class EngineTaskEventListener implements TaskListener {
|
||||
|
||||
@Resource
|
||||
@Lazy
|
||||
BpmTaskEventListener taskEventListener;
|
||||
|
||||
@Override
|
||||
public void notify(DelegateTask delegateTask) {
|
||||
if (delegateTask.getEventName().equals(TaskListener.EVENTNAME_CREATE)) {
|
||||
taskEventListener.created(delegateTask);
|
||||
// 审批创建
|
||||
} else if (delegateTask.getEventName().equals(TaskListener.EVENTNAME_ASSIGNMENT)) {
|
||||
taskEventListener.assigned(delegateTask);
|
||||
} else if (delegateTask.getEventName().equals(TaskListener.EVENTNAME_COMPLETE)) {
|
||||
//审批完成
|
||||
taskEventListener.completed(delegateTask);
|
||||
} else if (delegateTask.getEventName().equals(TaskListener.EVENTNAME_DELETE)) {
|
||||
// 审批删除
|
||||
taskEventListener.deleted(delegateTask);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,7 +1,7 @@
|
||||
package cn.axzo.server.service.impl;
|
||||
|
||||
import cn.axzo.framework.domain.ServiceException;
|
||||
import cn.axzo.server.common.enums.ErrorCode;
|
||||
import cn.axzo.server.common.enums.BpmErrorCode;
|
||||
import cn.axzo.server.service.BpmModelService;
|
||||
import cn.axzo.server.service.converter.BpmModelConverter;
|
||||
import cn.axzo.server.service.dto.request.model.BpmModelCreateDTO;
|
||||
@ -90,12 +90,12 @@ public class BpmModelServiceImpl implements BpmModelService {
|
||||
public void deployBpmModelById(String modelId) {
|
||||
Model model = this.repositoryService.getModel(modelId);
|
||||
if (org.springframework.util.ObjectUtils.isEmpty(model)) {
|
||||
throw new ServiceException(ErrorCode.MODEL_NOT_EXISTS);
|
||||
throw new ServiceException(BpmErrorCode.MODEL_NOT_EXISTS);
|
||||
}
|
||||
|
||||
byte[] bpmnBytes = this.repositoryService.getModelEditorSource(model.getId());
|
||||
if (bpmnBytes == null) {
|
||||
throw new ServiceException(ErrorCode.MODEL_NOT_EXISTS);
|
||||
throw new ServiceException(BpmErrorCode.MODEL_NOT_EXISTS);
|
||||
}
|
||||
|
||||
processDefinitionServiceImpl.createProcessDeinition(model, bpmnBytes);
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
package cn.axzo.server.service.impl;
|
||||
|
||||
import cn.axzo.framework.domain.ServiceException;
|
||||
import cn.axzo.server.common.enums.ErrorCode;
|
||||
import cn.axzo.server.service.BpmProcessDefinitionService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.flowable.common.engine.impl.db.SuspensionState;
|
||||
@ -14,8 +13,8 @@ import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Objects;
|
||||
|
||||
import static cn.axzo.server.common.enums.ErrorCode.PROCESS_DEFINITION_KEY_NOT_MATCH;
|
||||
import static cn.axzo.server.common.enums.ErrorCode.PROCESS_DEFINITION_NAME_NOT_MATCH;
|
||||
import static cn.axzo.server.common.enums.BpmErrorCode.PROCESS_DEFINITION_KEY_NOT_MATCH;
|
||||
import static cn.axzo.server.common.enums.BpmErrorCode.PROCESS_DEFINITION_NAME_NOT_MATCH;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
|
||||
@ -1,22 +1,5 @@
|
||||
package cn.axzo.server.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import org.flowable.engine.*;
|
||||
import org.flowable.engine.history.HistoricProcessInstance;
|
||||
import org.flowable.engine.repository.ProcessDefinition;
|
||||
import org.flowable.engine.runtime.ProcessInstance;
|
||||
import org.flowable.engine.runtime.ProcessInstanceQuery;
|
||||
import org.flowable.task.api.Task;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.validation.Valid;
|
||||
import java.util.*;
|
||||
|
||||
import static cn.axzo.server.common.enums.ErrorCode.PROCESS_INSTANCE_CANCEL_FAIL_NOT_EXISTS;
|
||||
|
||||
public class BpmProcessInstanceServiceImpl {
|
||||
|
||||
// @Autowired
|
||||
|
||||
@ -1 +0,0 @@
|
||||
package cn.axzo.server.service.manager;
|
||||
@ -2,12 +2,11 @@ package cn.axzo.server.service.utils;
|
||||
|
||||
import cn.axzo.framework.domain.ServiceException;
|
||||
import cn.axzo.server.common.WorkflowConstants;
|
||||
import cn.axzo.server.common.enums.FlowNodeType;
|
||||
import cn.axzo.server.common.enums.BpmFlowNodeType;
|
||||
import cn.axzo.server.repository.dto.BpmJsonNode;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.google.common.collect.Lists;
|
||||
import lombok.SneakyThrows;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.time.DateUtils;
|
||||
import org.flowable.bpmn.BpmnAutoLayout;
|
||||
import org.flowable.bpmn.converter.BpmnXMLConverter;
|
||||
@ -19,9 +18,8 @@ import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.axzo.server.common.enums.ErrorCode.BPM_META_DATA_FORMAT_ERROR;
|
||||
import static cn.axzo.server.common.enums.BpmErrorCode.BPM_META_DATA_FORMAT_ERROR;
|
||||
import static org.flowable.bpmn.model.ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION;
|
||||
|
||||
public class BpmTransformUtil {
|
||||
@ -95,7 +93,7 @@ public class BpmTransformUtil {
|
||||
|
||||
private static String create(String fromId, JSONObject flowNode, BpmnModel model, Process process, List<SequenceFlow> sequenceFlows) throws InvocationTargetException, IllegalAccessException {
|
||||
String nodeType = flowNode.getString("type");
|
||||
if (FlowNodeType.NODE_STARTER.name().equals(nodeType)) {
|
||||
if (BpmFlowNodeType.NODE_STARTER.name().equals(nodeType)) {
|
||||
// flowNode.put("incoming", Collections.singletonList(fromId));
|
||||
String id = fromId;
|
||||
|
||||
@ -108,7 +106,7 @@ public class BpmTransformUtil {
|
||||
return id;
|
||||
}
|
||||
}
|
||||
else if (FlowNodeType.NODE_TASK.name().equals(nodeType)) {
|
||||
else if (BpmFlowNodeType.NODE_TASK.name().equals(nodeType)) {
|
||||
flowNode.put("incoming", Collections.singletonList(fromId));
|
||||
String id = createTask(flowNode,process,sequenceFlows);
|
||||
|
||||
@ -212,7 +210,7 @@ public class BpmTransformUtil {
|
||||
userTask.setName(flowNode.getString("nodeName"));
|
||||
userTask.setId(id);
|
||||
process.addFlowElement(userTask);
|
||||
if(FlowNodeType.NODE_STARTER.name().equals(flowNode.getString("type"))){
|
||||
if(BpmFlowNodeType.NODE_STARTER.name().equals(flowNode.getString("type"))){
|
||||
id = WorkflowConstants.START_EVENT_ID;
|
||||
}
|
||||
else{
|
||||
|
||||
@ -1 +0,0 @@
|
||||
package cn.axzo.server.service.validator;
|
||||
@ -1,203 +0,0 @@
|
||||
package cn.axzo.server.utils;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Constants;
|
||||
import lombok.Cleanup;
|
||||
import org.springframework.web.context.request.RequestAttributes;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
|
||||
import javax.servlet.ServletInputStream;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.HttpSession;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
*/
|
||||
public class ServletUtil {
|
||||
|
||||
/**
|
||||
* 获取ServletPath
|
||||
*/
|
||||
public static String getServletPath() {
|
||||
return ServletUtil.getRequest().getServletPath();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取Request Payload
|
||||
*/
|
||||
public static String getPayload() {
|
||||
try {
|
||||
@Cleanup ServletInputStream is = ServletUtil.getRequest().getInputStream();
|
||||
int nRead = 1;
|
||||
int nTotalRead = 0;
|
||||
byte[] bytes = new byte[10240 * 20];
|
||||
while (nRead > 0) {
|
||||
nRead = is.read(bytes, nTotalRead, bytes.length - nTotalRead);
|
||||
if (nRead > 0) {
|
||||
nTotalRead = nTotalRead + nRead;
|
||||
}
|
||||
}
|
||||
String str = new String(bytes, 0, nTotalRead, Constants.UTF_8);
|
||||
return str;
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 获取User-Agent
|
||||
*/
|
||||
public static String getUserAgent() {
|
||||
return ServletUtil.getHeader("User-Agent");
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否是手机端登陆
|
||||
*/
|
||||
public static boolean getIsMobileDevice() {
|
||||
return isMobileDevice(ServletUtil.getUserAgent());
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取HTTP头信息
|
||||
*/
|
||||
public static String getHeader(String name) {
|
||||
if(getRequest()!=null){
|
||||
return getRequest().getHeader(name);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取表单参数
|
||||
*/
|
||||
public static String getParameter(String name) {
|
||||
return getRequest().getParameter(name);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取request
|
||||
*/
|
||||
public static HttpServletRequest getRequest() {
|
||||
if(getRequestAttributes()!=null){
|
||||
return getRequestAttributes().getRequest();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取response
|
||||
*/
|
||||
public static HttpServletResponse getResponse() {
|
||||
return getRequestAttributes().getResponse();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取session
|
||||
*/
|
||||
public static HttpSession getSession() {
|
||||
return getRequest().getSession();
|
||||
}
|
||||
|
||||
public static ServletRequestAttributes getRequestAttributes() {
|
||||
RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
|
||||
return (ServletRequestAttributes) attributes;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将字符串渲染到客户端
|
||||
*
|
||||
* @param response 渲染对象
|
||||
* @param string 待渲染的字符串
|
||||
* @return null
|
||||
*/
|
||||
public static String renderString(HttpServletResponse response, String string) {
|
||||
try {
|
||||
response.setHeader("Access-Control-Allow-Origin", "*");
|
||||
response.setHeader("Cache-Control","no-cache");
|
||||
response.setContentType("application/json");
|
||||
response.setCharacterEncoding(Constants.UTF_8);
|
||||
response.getWriter().print(string);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否是Ajax异步请求
|
||||
*
|
||||
* @param request
|
||||
*/
|
||||
public static boolean isAjaxRequest(HttpServletRequest request) {
|
||||
String accept = request.getHeader("accept");
|
||||
if (accept != null && accept.indexOf("application/json") != -1) {
|
||||
return true;
|
||||
}
|
||||
String xRequestedWith = request.getHeader("X-Requested-With");
|
||||
if (xRequestedWith != null && xRequestedWith.indexOf("XMLHttpRequest") != -1) {
|
||||
return true;
|
||||
}
|
||||
String uri = request.getRequestURI();
|
||||
if (inStringIgnoreCase(uri, ".json", ".xml")) {
|
||||
return true;
|
||||
}
|
||||
String ajax = request.getParameter("__ajax");
|
||||
if (inStringIgnoreCase(ajax, "json", "xml")) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否包含字符串
|
||||
*
|
||||
* @param str 验证字符串
|
||||
* @param strs 字符串组
|
||||
* @return 包含返回true
|
||||
*/
|
||||
public static boolean inStringIgnoreCase(String str, String... strs) {
|
||||
if (str != null && strs != null) {
|
||||
for (String s : strs) {
|
||||
if (str.equalsIgnoreCase((s.trim()))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回JSONObject对象
|
||||
*/
|
||||
public static JSONObject getJsonObject() throws Exception{
|
||||
String builder = ServletUtil.getPayload();
|
||||
return JSONObject.parseObject(builder);
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否是移动设备
|
||||
* @param requestHeader
|
||||
* @return
|
||||
*/
|
||||
public static boolean isMobileDevice(String requestHeader) {
|
||||
String[] deviceArray = new String[]{"android", "windows phone", "iphone", "ios", "ipad" ,"mqqbrowser"};
|
||||
if (requestHeader == null) {
|
||||
return false;
|
||||
}
|
||||
requestHeader = requestHeader.toLowerCase();
|
||||
for (int i = 0; i < deviceArray.length; i++) {
|
||||
if (requestHeader.indexOf(deviceArray[i]) > 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user