jbs-oms-common服务
className:LogInteceptor
class annotation --->Aspect
以下方法存在问题点:
1.此方法是拦截控制器的@Frozen和@Checkout注解,故应放在@ControllerAdvice注解的类中
2.aop中不应写具体的业务逻辑,如以下标红代码
@Before("excudeController()")
public void before(JoinPoint joinPoint) {
Object req = null;
Object[] args = joinPoint.getArgs();
if (ArrayUtils.isNotEmpty(args)) {
for (Object obj : args) {
if (!(obj instanceof HttpServletRequest || obj instanceof HttpServletResponse)) {
req = obj;
break;
}
}
}
String empId = HeaderThreadLocal.getThreadInstance().getEmployeeId();
/**
* 设置公用参数
*/
if (!Objects.equals(HeaderThreadLocal.getThreadInstance().getMethod(), HttpMethod.GET)) {
String reqUrl = HeaderThreadLocal.getThreadInstance().getUrl();
String[] specialOrders = specialOrderList.split(Constant.Separator.RESOURCE_IDS_SEPARATOR);
if (!Arrays.asList(specialOrders).stream().anyMatch(reqUrl::endsWith)) {
setCommonField(req, empId);
}
}
Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
if (method.isAnnotationPresent(Frozen.class) | method.isAnnotationPresent(CheckOut.class)) {
CheckStatusRequest orderRequest = new CheckStatusRequest();
Set<String> orderIdSet = new HashSet<>();
String checkBy = "";
if (req instanceof SysCheckStatusRequest) {
//签入签出
orderIdSet = ((SysCheckStatusRequest) req).getOrderIdSet();
checkBy = ((SysCheckStatusRequest) req).getCheckBy();
}
if (req instanceof ModifyTradeOrderRequest) {
//修改
orderIdSet.add(((ModifyTradeOrderRequest) req).getOrderId());
checkBy = ((ModifyTradeOrderRequest) req).getModifyBy();
}
if (req instanceof TradeOrderListRequest) {
//手动递交
TradeOrderListRequest tradeOrderListRequest = (TradeOrderListRequest) req;
orderIdSet = tradeOrderListRequest.getManualSubmitRequestList().stream().map(ManualSubmitRequest::getOrderId).collect(Collectors.toSet());
checkBy = ((TradeOrderListRequest) req).getModifyBy();
}
orderRequest.setOrderIdSet(orderIdSet);
orderRequest.setCheckBy(checkBy);
List<TradeOrderResponse> respList = tradeOrderService.searchTradeOrder(orderRequest).getData().getDatas();
if (ObjectUtils.isEmpty(respList)) {
throw new JbsException(ReturnStatusEnum.FIND_EMPTY.getMessage(), ReturnStatusEnum.FIND_EMPTY.getCode());
}
//判断@frozen是否为null
if (method.isAnnotationPresent(Frozen.class)) {
for (TradeOrderResponse item : respList) {
//冻结--->不往下执行
if (item.getFrozenStatus()) {
log.warn("订单{}已冻结!", item.getOrderId());
throw new JbsException(String.format(ReturnStatusEnum.ORDER_ORDER_FROZEN.getMessage() + ",orderId:%s", item.getOrderId()), ReturnStatusEnum.ORDER_ORDER_FROZEN.getCode());
}
}
}
//判断@checkOut是否为null
if (method.isAnnotationPresent(CheckOut.class)) {
for (TradeOrderResponse item : respList) {
//签出,未冻结---->往下执行--->只能当前签出人处理
if (item.getCheckOutStatus()) {
log.info("订单{}已签出!", item.getOrderId());
//当前签出人与DB中不符时,返回
if (!Objects.equals(item.getCheckBy(), orderRequest.getCheckBy())) {
throw new JbsException(String.format(ReturnStatusEnum.ORDER_CHECKBY_NOT_IDENTICAL.getMessage() + ",orderId:%s", item.getOrderId()), ReturnStatusEnum.ORDER_CHECKBY_NOT_IDENTICAL.getCode());
}
}
}
}
}
}
原文:https://www.cnblogs.com/qlsty/p/12188512.html