# Conflicts:
#	nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/OutController.java
This commit is contained in:
2022-10-11 18:31:09 +08:00
21 changed files with 407 additions and 176 deletions

View File

@@ -28,6 +28,7 @@ import org.aspectj.lang.reflect.MethodSignature;
import org.nl.modules.common.utils.RequestHolder;
import org.nl.modules.common.utils.SecurityUtils;
import org.nl.modules.common.utils.StringUtils;
import org.nl.modules.common.utils.ThrowableUtil;
import org.nl.modules.logging.domain.Log;
import org.nl.modules.logging.service.LogService;
import org.springframework.stereotype.Component;
@@ -132,8 +133,7 @@ public class LogAspect {
public void logAfterThrowing(JoinPoint joinPoint, Throwable e) {
Log log = new Log("ERROR",System.currentTimeMillis() - currentTime.get());
currentTime.remove();
// log.setExceptionDetail(ThrowableUtil.getStackTrace(e).getBytes());
// log.setExceptionDetail(null);
log.setExceptionDetail(ThrowableUtil.getStackTrace(e).getBytes());
HttpServletRequest request = RequestHolder.getHttpServletRequest();
logService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request), (ProceedingJoinPoint)joinPoint, log);
}

View File

@@ -19,8 +19,8 @@ import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.reflect.MethodSignature;
import org.nl.modules.common.utils.PageUtil;
@@ -33,10 +33,6 @@ import org.nl.modules.logging.service.LogService;
import org.nl.modules.logging.service.dto.LogQueryCriteria;
import org.nl.modules.logging.service.mapstruct.LogErrorMapper;
import org.nl.modules.logging.service.mapstruct.LogSmallMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.Marker;
import org.slf4j.MarkerFactory;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
@@ -57,9 +53,8 @@ import java.util.Map;
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class LogServiceImpl implements LogService {
private static final Marker MARKER = MarkerFactory.getMarker("request");
private static final Logger log = LoggerFactory.getLogger(LogServiceImpl.class);
private final LogRepository logRepository;
private final LogErrorMapper logErrorMapper;
private final LogSmallMapper logSmallMapper;
@@ -107,9 +102,7 @@ public class LogServiceImpl implements LogService {
logDto.setMethod(methodName);
logDto.setUsername(username);
logDto.setParams(getParameter(method, joinPoint.getArgs()));
// logDto.setParams("");
logDto.setBrowser(browser);
log.info(MARKER,JSONObject.toJSONString(logDto));
logRepository.save(logDto);
}

View File

@@ -25,16 +25,10 @@ public class LokiController {
private final LokiService lokiService;
@GetMapping("/labels")
@GetMapping("/labels/values")
@ApiOperation("获取标签")
public ResponseEntity<Object> labels() {
return new ResponseEntity<>(lokiService.getLabels(), HttpStatus.OK);
}
@PostMapping("/values")
@ApiOperation("根据标签获取值")
public ResponseEntity<Object> getAllValues(@RequestBody String label) {
return new ResponseEntity<>(lokiService.getValuesByLabel(label), HttpStatus.OK);
public ResponseEntity<Object> labelsValues() {
return new ResponseEntity<>(lokiService.getLabelsValues(), HttpStatus.OK);
}
@PostMapping("/logs")

View File

@@ -1,5 +1,6 @@
package org.nl.modules.loki.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
/**
@@ -8,18 +9,6 @@ import com.alibaba.fastjson.JSONObject;
* @Date: 2022-08-15
*/
public interface LokiService {
/**
* 获取日志的所有标签
* @return
*/
JSONObject getLabels();
/**
* 根据label获取值
* @param label
* @return
*/
JSONObject getValuesByLabel(String label);
/**
* 获取日志信息
@@ -27,4 +16,10 @@ public interface LokiService {
* @return
*/
JSONObject getLogData(JSONObject json);
/**
* 获取labels和values树
* @return
*/
JSONArray getLabelsValues();
}

View File

@@ -2,6 +2,7 @@ package org.nl.modules.loki.service.impl;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import org.nl.modules.loki.service.LokiService;
@@ -23,20 +24,6 @@ public class LokiServiceImpl implements LokiService {
@Value("${loki.systemName}")
private String systemName;
@Override
public JSONObject getLabels() {
String result = HttpUtil.get(lokiUrl + "/labels", CharsetUtil.CHARSET_UTF_8);
JSONObject parse = (JSONObject) JSONObject.parse(result);
return parse;
}
@Override
public JSONObject getValuesByLabel(String label) {
String result = HttpUtil.get(lokiUrl + "/label/" + label + "/values", CharsetUtil.CHARSET_UTF_8);
JSONObject parse = (JSONObject) JSONObject.parse(result);
return parse;
}
@Override
public JSONObject getLogData(JSONObject json) {
String logLabel = "";
@@ -78,4 +65,49 @@ public class LokiServiceImpl implements LokiService {
return parse;
}
/**
* 获取labels和values树
*
* @return
*/
@Override
public JSONArray getLabelsValues() {
/**
* [{
* label:
* value:
* children:[{
* label
* value
* }]
* }]
*/
JSONArray result = new JSONArray();
// 获取所有标签
String labelString = HttpUtil.get(lokiUrl + "/labels", CharsetUtil.CHARSET_UTF_8);
JSONObject parse = (JSONObject) JSONObject.parse(labelString);
JSONArray labels = parse.getJSONArray("data");
for (int i=0; i<labels.size(); i++) {
// 获取标签下的所有值
String valueString = HttpUtil.get(lokiUrl + "/label/" + labels.getString(i) + "/values", CharsetUtil.CHARSET_UTF_8);
JSONObject parse2 = (JSONObject) JSONObject.parse(valueString);
JSONArray values = parse2.getJSONArray("data");
JSONArray children = new JSONArray();
// 组成树形状态 两级
for (int j=0; j<values.size(); j++) {
JSONObject leaf = new JSONObject();
leaf.put("label", values.getString(j));
leaf.put("value", values.getString(j));
children.add(leaf);
}
JSONObject node = new JSONObject();
node.put("label", labels.getString(i));
node.put("value", labels.getString(i));
node.put("children", children);
result.add(node);
}
return result;
}
}

View File

@@ -16,7 +16,6 @@
package org.nl.modules.quartz.task;
import lombok.extern.slf4j.Slf4j;
import org.nl.modules.wql.core.bean.WQLObject;
import org.springframework.stereotype.Component;
/**
@@ -29,7 +28,6 @@ import org.springframework.stereotype.Component;
public class TestTask {
public void run(){
log.info("run 执行成功");
}
@@ -38,7 +36,6 @@ public class TestTask {
}
public void run2(){
WQLObject.getWQLObject("sys_param");
log.info("run2 执行成功");
}
}

View File

@@ -105,29 +105,12 @@ public class ExecutionJob extends QuartzJobBean {
//更新状态
quartzJobService.updateIsPause(quartzJob);
}
// if (quartzJob.getEmail() != null) {
// EmailService emailService = SpringContextHolder.getBean(EmailService.class);
// // 邮箱报警
// EmailVo emailVo = taskAlarm(quartzJob, ThrowableUtil.getStackTrace(e));
// emailService.send(emailVo, emailService.find());
// }
} finally {
//异常时候打印日志
log.info(logDto.toString());
quartzLogRepository.save(logDto);
} finally {
}
}
// private EmailVo taskAlarm(QuartzJob quartzJob, String msg) {
// EmailVo emailVo = new EmailVo();
// emailVo.setSubject("定时任务【" + quartzJob.getJobName() + "】执行失败,请尽快处理!");
// Map<String, Object> data = new HashMap<>(16);
// data.put("task", quartzJob);
// data.put("msg", msg);
// TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("template", TemplateConfig.ResourceMode.CLASSPATH));
// Template template = engine.getTemplate("email/taskAlarm.ftl");
// emailVo.setContent(template.render(data));
// List<String> emails = Arrays.asList(quartzJob.getEmail().split("[,]"));
// emailVo.setTos(emails);
// return emailVo;
// }
}

View File

@@ -9,8 +9,10 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.modules.common.config.RsaProperties;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.common.utils.RedisUtils;
import org.nl.modules.common.utils.RsaUtils;
import org.nl.modules.common.utils.dto.CurrentUser;
import org.nl.modules.security.service.dto.AuthUserDto;
import org.nl.modules.system.service.RoleService;
@@ -48,8 +50,8 @@ public class MobileAuthorizationController {
@SaIgnore
public ResponseEntity<Object> login(@Validated @RequestBody AuthUserDto authUser, HttpServletRequest request) throws Exception {
// 密码解密 - 前端的加密规则: encrypt根据实际更改
String password = authUser.getPassword();
// String password = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey, authUser.getPassword());
// String password = authUser.getPassword();
String password = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey, authUser.getPassword());
// 校验数据库
// 根据用户名查询,在比对密码
UserDto userDto = userService.findByName(authUser.getUsername()); // 拿不到已经抛出异常
@@ -75,7 +77,6 @@ public class MobileAuthorizationController {
// 返回 token 与 用户信息
JSONObject jsonObject = new JSONObject();
jsonObject.put("roles", permissionList);
jsonObject.put("user", userDto);
Map<String, Object> authInfo = new HashMap<String, Object>(2) {{
put("token", StpUtil.getTokenValue());

View File

@@ -0,0 +1,16 @@
package org.nl.wms.autotask;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* 自动清除日志(操作日志、异常日志)数据
*/
@Slf4j
@Component
public class CleanLog {
public void run(){
log.info("run 执行成功");
}
}

View File

@@ -0,0 +1,15 @@
package org.nl.wms.log;
import java.lang.annotation.*;
/**
* @author: lyd
* @description: 自定义日志注解,用作LOKI日志分类
* @Date: 2022/10/10
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD})
@Documented
public @interface LokiLog {
LokiLogType type() default LokiLogType.DEFAULT;
}

View File

@@ -0,0 +1,63 @@
package org.nl.wms.log;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.MDC;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
/**
* @author: lyd
* @description: 自定义日志切面:https://cloud.tencent.com/developer/article/1655923
* @Date: 2022/10/10
*/
@Aspect
@Slf4j
@Component
public class LokiLogAspect {
/**
* 切到所有OperatorLog注解修饰的方法
*/
@Pointcut("@annotation(org.nl.wms.log.LokiLog)")
public void operatorLog() {
// 空方法
}
/**
* 利用@Around环绕增强
*
* @return
*/
@Around("operatorLog()")
public synchronized Object around(ProceedingJoinPoint pjp) throws Throwable {
// ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
// HttpServletRequest request = attributes.getRequest();
// HttpServletResponse response = attributes.getResponse();
Signature signature = pjp.getSignature();
MethodSignature methodSignature = (MethodSignature) signature;
Method method = methodSignature.getMethod();
LokiLog lokiLog = method.getAnnotation(LokiLog.class);
// 获取描述信息
LokiLogType logType = lokiLog.type();
MDC.put("log_file_type", logType.name());
log.info("输入参数:" + JSONObject.toJSONString(pjp.getArgs()));
Object proceed = pjp.proceed();
log.info("返回参数:" + JSONObject.toJSONString(proceed));
MDC.remove("log_file_type");
return proceed;
}
}

View File

@@ -0,0 +1,17 @@
package org.nl.wms.log;
/**
* @author: lyd
* @description:
* @Date: 2022/10/11
*/
public enum LokiLogType {
DEFAULT( "默认"),
LMS_TO_MES( "LMS请求MES"),
MES_TO_LMS( "MES请求LMS");
private String desc;
LokiLogType(String desc) {
}
}

View File

@@ -79,12 +79,15 @@ https://juejin.cn/post/6844903775631572999
<springProfile name="dev">
<root level="info">
<appender-ref ref="CONSOLE"/>
<!-- <appender-ref ref="lokiAppender" />-->
<appender-ref ref="lokiAppender" />
</root>
<logger name="jdbc.audit" level="ERROR" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
<logger name="jdbc.sqltiming" level="ERROR" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
<logger name="jdbc.resultset" level="ERROR" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
@@ -106,6 +109,9 @@ https://juejin.cn/post/6844903775631572999
<appender-ref ref="asyncFileAppender"/>
<appender-ref ref="lokiAppender" />
</root>
<logger name="jdbc.sqltiming" level="ERROR" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
<logger name="jdbc.audit" level="ERROR" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>