diff --git a/common-collect/src/main/java/com/docus/server/tool/ProcessorContext.java b/common-collect/src/main/java/com/docus/server/tool/ProcessorContext.java new file mode 100644 index 0000000..66d8584 --- /dev/null +++ b/common-collect/src/main/java/com/docus/server/tool/ProcessorContext.java @@ -0,0 +1,29 @@ +package com.docus.server.tool; + +import lombok.Data; + +@Data +public class ProcessorContext { + //线程变量,请求线程内有效 + private static final ThreadLocal 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(); + } + +} diff --git a/common-collect/src/main/java/com/docus/server/visitor/VisitorProcessor.java b/common-collect/src/main/java/com/docus/server/visitor/VisitorProcessor.java index 56ce9da..bb3b59a 100644 --- a/common-collect/src/main/java/com/docus/server/visitor/VisitorProcessor.java +++ b/common-collect/src/main/java/com/docus/server/visitor/VisitorProcessor.java @@ -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 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 params = ParamsUtils.addParam("msg", context.getExMessageResult()).param(); + log.error(context.getExMessageResult()); + Map params = context.getParams(); try { - Map beforeResult = (Map) context.getBeforeResult(); + params.put("msg", context.getExMessageResult()); + Map 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); } } diff --git a/common-collect/src/main/java/com/docus/server/ws/impl/BasicServiceImpl.java b/common-collect/src/main/java/com/docus/server/ws/impl/BasicServiceImpl.java index c01e0a0..9d2ef1f 100644 --- a/common-collect/src/main/java/com/docus/server/ws/impl/BasicServiceImpl.java +++ b/common-collect/src/main/java/com/docus/server/ws/impl/BasicServiceImpl.java @@ -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 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); } } diff --git a/common-collect/src/main/java/com/docus/server/ws/impl/DeptServerImpl.java b/common-collect/src/main/java/com/docus/server/ws/impl/DeptServerImpl.java index e39851c..6be7f6e 100644 --- a/common-collect/src/main/java/com/docus/server/ws/impl/DeptServerImpl.java +++ b/common-collect/src/main/java/com/docus/server/ws/impl/DeptServerImpl.java @@ -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 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(); - } } diff --git a/common-collect/src/main/java/com/docus/server/ws/impl/UserServerImpl.java b/common-collect/src/main/java/com/docus/server/ws/impl/UserServerImpl.java index ef233af..67b854a 100644 --- a/common-collect/src/main/java/com/docus/server/ws/impl/UserServerImpl.java +++ b/common-collect/src/main/java/com/docus/server/ws/impl/UserServerImpl.java @@ -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 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(); - } } diff --git a/starter-log/src/main/java/com/docus/log/annotation/LogTrackGroup.java b/starter-log/src/main/java/com/docus/log/annotation/LogTrackGroup.java new file mode 100644 index 0000000..3db5d1a --- /dev/null +++ b/starter-log/src/main/java/com/docus/log/annotation/LogTrackGroup.java @@ -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 processor(); +} diff --git a/starter-log/src/main/java/com/docus/log/context/TrackHelper.java b/starter-log/src/main/java/com/docus/log/context/TrackHelper.java new file mode 100644 index 0000000..5aeeeda --- /dev/null +++ b/starter-log/src/main/java/com/docus/log/context/TrackHelper.java @@ -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 getParams() { + TrackContext trackContext = TrackContext.get(); + if (trackContext == null) { + return null; + } + + return trackContext.getParams(); + } + + public static void setParams(Map params) { + TrackContext trackContext = TrackContext.get(); + if (trackContext == null) { + return; + } + + trackContext.getParams().putAll(params); + } + +}