trackHelper

segment2.0
beeajax 2 years ago
parent da9c63579a
commit 3de81870cb

@ -0,0 +1,29 @@
package com.docus.server.tool;
import lombok.Data;
@Data
public class ProcessorContext {
//线程变量,请求线程内有效
private static final ThreadLocal<ProcessorContext> current = new ThreadLocal<>();
private String jsonStr;
//初始化
public static void init(String jsonStr) {
current.remove();
ProcessorContext context = new ProcessorContext();
context.jsonStr = jsonStr;
current.set(context);
}
//获取当前现场request
public static ProcessorContext get() {
return current.get();
}
//清除线程变量
public static void clear() {
current.remove();
}
}

@ -21,50 +21,37 @@ import java.util.Map;
*/
@Slf4j
public class VisitorProcessor extends AbstractProcessor {
private ITaskOriginalMessageService messageService;
private IConverter converter;
private IWsResult wsResult;
private ITaskOriginalMessageService taskOriginalMessageService;
@Override
public Object doProcess(TrackContext context) {
if (context.isError()) {
return afterThrowingProcess(context);
} else {
return afterReturnProcess(context);
}
}
/**
*
*/
@Override
public Object beforeProcess(TrackContext context) {
log.debug("=== AOP 前置通知 ===");
super.beforeProcess(context);
initBeans(context.getBeanNames());
String message = (String) context.getArgs()[0];
if (Func.isEmpty(message)) {
throw new RuntimeException("参数为空");
}
Object dto = converter.convert(message, context.getMethodName());
String jsonStr = JSON.toJSON(dto);
SpringUtils.invokeMethod(context.getClassType(), "setProperty", new Object[]{jsonStr});
Long taskId = taskOriginalMessageService.insertTaskOriginalMessage(jsonStr, message,
String jsonStr = JSON.toJSON(converter.convert(message, context.getMethodName()));
Long taskId = messageService.insertTaskOriginalMessage(jsonStr, message,
IIntegerEnum.fromDisplay(CollectTypeEnum.class, context.getGroup()));
return ParamsUtils.addParam("taskId", taskId).addParam("jsonStr", jsonStr).param();
context.setParams(ParamsUtils.addParam("taskId", taskId).addParam("jsonStr", jsonStr).param());
return null;
}
/**
*
*/
@Override
public Object afterReturnProcess(TrackContext context) {
log.debug("=== AOP 后置通知 ===");
Map beforeResult = (Map) context.getBeforeResult();
Long taskId = (Long) beforeResult.get("taskId");
String afterReturnResult = (String) beforeResult.get("jsonStr");
if (Func.isNotEmpty(taskId)) {
taskOriginalMessageService.updateTaskOriginalMessage(taskId, afterReturnResult, StateEnum.OK);
}
Map<String, Object> params = context.getParams();
Long taskId = (Long) params.get("taskId");
String afterReturnResult = (String) params.get("jsonStr");
messageService.updateTaskOriginalMessage(taskId, afterReturnResult, StateEnum.OK);
Map map = JSON.fromJSON(afterReturnResult, Map.class);
map.put("msg", "操作成功!");
return wsResult.ok(map);
@ -73,18 +60,16 @@ public class VisitorProcessor extends AbstractProcessor {
/**
*
*/
@Override
public Object afterThrowingProcess(TrackContext context) {
log.error("=== AOP 异常通知 ===");
Map<String, Object> params = ParamsUtils.addParam("msg", context.getExMessageResult()).param();
log.error(context.getExMessageResult());
Map<String, Object> params = context.getParams();
try {
Map beforeResult = (Map) context.getBeforeResult();
params.put("msg", context.getExMessageResult());
Map<String, Object> beforeResult = context.getParams();
Long taskId = (Long) beforeResult.get("taskId");
String afterReturnResult = (String) beforeResult.get("jsonStr");
log.error(context.getExMessageResult());
if (Func.isNotEmpty(taskId)) {
taskOriginalMessageService.updateTaskOriginalMessage(taskId, afterReturnResult, StateEnum.FAIL);
}
messageService.updateTaskOriginalMessage(taskId, afterReturnResult, StateEnum.FAIL);
params.putAll(JSON.fromJSON(afterReturnResult, Map.class));
return wsResult.fail(params);
} catch (Exception e) {
@ -92,18 +77,9 @@ public class VisitorProcessor extends AbstractProcessor {
}
}
/**
*
*/
@Override
public Object afterProcess(TrackContext context) {
log.debug("=== AOP 最后通知 ===");
return null;
}
private void initBeans(String[] beanNames) {
this.converter = (IConverter) SpringUtils.getBean(beanNames[0]);
this.wsResult = (IWsResult) SpringUtils.getBean(beanNames[1]);
this.taskOriginalMessageService = SpringUtils.getBean(ITaskOriginalMessageService.class);
this.messageService = SpringUtils.getBean(ITaskOriginalMessageService.class);
}
}

@ -2,6 +2,7 @@ package com.docus.server.ws.impl;
import com.docus.core.util.json.JSON;
import com.docus.log.annotation.TrackGroup;
import com.docus.log.context.TrackHelper;
import com.docus.server.record.pojo.dto.TBasicDTO;
import com.docus.server.record.service.ITBasicService;
import com.docus.server.visitor.VisitorProcessor;
@ -10,7 +11,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.concurrent.atomic.AtomicReference;
/**
* @BelongsProject: docus-webservice-sdry
@ -25,14 +25,7 @@ import java.util.concurrent.atomic.AtomicReference;
public class BasicServiceImpl implements IBasicService {
@Resource
private ITBasicService tBasicService;
private AtomicReference<TBasicDTO> atomicReference = new AtomicReference<>();
/**
* @param message
* @see com.docus.server.ws.convert.IConverter
* @see com.docus.server.ws.IWsResult
* @see VisitorProcessor aop
*/
@Override
@TrackGroup(group = "WEBSERVICE_XML_BASIC",
beanNames = {"tBasicConverter", "wsBasicResultImpl"}, processor = VisitorProcessor.class)
@ -46,7 +39,7 @@ public class BasicServiceImpl implements IBasicService {
* @param message
* @see com.docus.server.ws.convert.IConverter
* @see com.docus.server.ws.IWsResult
* @see VisitorProcessor aop
* @see VisitorProcessor
*/
@Override
@TrackGroup(group = "WEBSERVICE_XML_BASIC",
@ -56,12 +49,8 @@ public class BasicServiceImpl implements IBasicService {
return null;
}
public void setProperty(String json) {
this.atomicReference.set(JSON.fromJSON(json, TBasicDTO.class));
}
public TBasicDTO getTBasicDTO() {
return atomicReference.get();
return JSON.fromJSON((String) TrackHelper.getValue("jsonStr"), TBasicDTO.class);
}
}

@ -2,6 +2,7 @@ package com.docus.server.ws.impl;
import com.docus.core.util.json.JSON;
import com.docus.log.annotation.TrackGroup;
import com.docus.log.context.TrackHelper;
import com.docus.server.collect.service.CollectService;
import com.docus.server.sys.common.pojo.dto.DeptDTO;
import com.docus.server.visitor.VisitorProcessor;
@ -10,7 +11,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.concurrent.atomic.AtomicReference;
/**
* @author wen yongbin
@ -21,30 +21,20 @@ import java.util.concurrent.atomic.AtomicReference;
public class DeptServerImpl implements IDeptServer {
@Resource
private CollectService collectService;
private AtomicReference<DeptDTO> atomicReference = new AtomicReference<>();
/**
* @param message
* @see com.docus.server.ws.convert.IConverter
* @see com.docus.server.ws.IWsResult
* @see VisitorProcessor aop
* @see VisitorProcessor
*/
@Override
@TrackGroup(group = "WEBSERVICE_XML_DEPT",
beanNames = {"powerDeptConverter", "wsDeptResultImpl"}, processor = VisitorProcessor.class)
public String deptModify(String message) {
log.info("新增/修改科室数据:{}", message);
collectService.insertOrUpdateDept(getDeptDTO());
collectService.insertOrUpdateDept(JSON.fromJSON((String) TrackHelper.getValue("jsonStr"), DeptDTO.class));
return null;
}
public void setProperty(String json) {
DeptDTO deptDTO = JSON.fromJSON(json, DeptDTO.class);
this.atomicReference.set(deptDTO);
}
public DeptDTO getDeptDTO() {
return this.atomicReference.get();
}
}

@ -2,6 +2,7 @@ package com.docus.server.ws.impl;
import com.docus.core.util.json.JSON;
import com.docus.log.annotation.TrackGroup;
import com.docus.log.context.TrackHelper;
import com.docus.server.collect.service.CollectService;
import com.docus.server.sys.common.pojo.dto.UserDTO;
import com.docus.server.visitor.VisitorProcessor;
@ -10,7 +11,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.concurrent.atomic.AtomicReference;
/**
* @author wen yongbin
@ -21,29 +21,21 @@ import java.util.concurrent.atomic.AtomicReference;
public class UserServerImpl implements IUserServer {
@Resource
private CollectService collectService;
private AtomicReference<UserDTO> atomicReference = new AtomicReference<>();
/**
* @param message
* @see com.docus.server.ws.convert.IConverter
* @see com.docus.server.ws.IWsResult
* @see VisitorProcessor aop
* @see VisitorProcessor
*/
@Override
@TrackGroup(group = "WEBSERVICE_XML_USER",
beanNames = {"powerUserConverter", "wsUserResultImpl"}, processor = VisitorProcessor.class)
public String userModify(String message) {
log.debug("新增/修改用户数据:{}", message);
collectService.insertOrUpdateUser(getUserDTO());
collectService.insertOrUpdateUser(JSON.fromJSON((String) TrackHelper.getValue("jsonStr"), UserDTO.class));
return null;
}
public void setProperty(String json) {
this.atomicReference.set(JSON.fromJSON(json, UserDTO.class));
}
public UserDTO getUserDTO() {
return atomicReference.get();
}
}

@ -0,0 +1,21 @@
package com.docus.log.annotation;
import com.docus.log.processor.ITrackProcessor;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface LogTrackGroup {
String group();
String desc() default "";
String action();
Class<? extends ITrackProcessor> processor();
}

@ -0,0 +1,52 @@
package com.docus.log.context;
import java.util.Map;
/**
* helper for xxl-job
*
* @author xuxueli 2020-11-05
*/
public final class TrackHelper {
// ---------------------- base info ----------------------
/**
* current JobId
*
* @return
*/
public static Object getValue(String key) {
TrackContext trackContext = TrackContext.get();
if (trackContext == null) {
return null;
}
return trackContext.getParams().get(key);
}
/**
* current JobParam
*
* @return
*/
public static Map<String, Object> getParams() {
TrackContext trackContext = TrackContext.get();
if (trackContext == null) {
return null;
}
return trackContext.getParams();
}
public static void setParams(Map<String, Object> params) {
TrackContext trackContext = TrackContext.get();
if (trackContext == null) {
return;
}
trackContext.getParams().putAll(params);
}
}
Loading…
Cancel
Save