Merge remote-tracking branch 'origin/master'
This commit is contained in:
@ -0,0 +1,37 @@
|
||||
package com.coscoshipping.ebtp.system.kafka.listener;
|
||||
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.coscoshipping.ebtp.system.operationlog.entity.SysOperationLog;
|
||||
import com.coscoshipping.ebtp.system.operationlog.service.ISysOperationLogService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.kafka.clients.consumer.ConsumerRecord;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.kafka.annotation.KafkaListener;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* kafka消费
|
||||
*
|
||||
* @author f
|
||||
*/
|
||||
@Component
|
||||
@Slf4j
|
||||
public class KafkaLogListener {
|
||||
|
||||
@Autowired
|
||||
private ISysOperationLogService sysOperationLogService;
|
||||
|
||||
|
||||
@KafkaListener(topics = "jl_ebtp_log", groupId = "biz-service-ebtp-kafka-consumer")
|
||||
public void ebtpLog(ConsumerRecord<?, ?> record) {
|
||||
Optional.ofNullable(record.value())
|
||||
.ifPresent(msg -> {
|
||||
System.out.println(msg);
|
||||
|
||||
SysOperationLog bean = JSONUtil.toBean(String.valueOf(msg), SysOperationLog.class);
|
||||
sysOperationLogService.insert(bean);
|
||||
});
|
||||
}
|
||||
}
|
@ -0,0 +1,124 @@
|
||||
package com.coscoshipping.ebtp.system.kafka.util;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.exceptions.ExceptionUtil;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.JavaType;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
|
||||
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
||||
import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* json util
|
||||
*
|
||||
* @author 付庆吉
|
||||
* @date 2020-09-16
|
||||
*/
|
||||
@Slf4j
|
||||
public class JsonUtils {
|
||||
|
||||
// 定义jackson对象
|
||||
private static final ObjectMapper MAPPER = new ObjectMapper();
|
||||
|
||||
/**
|
||||
* 将对象转换成json字符串。
|
||||
* <p>Title: pojoToJson</p>
|
||||
* <p>Description: </p>
|
||||
*
|
||||
* @param data
|
||||
* @return
|
||||
*/
|
||||
public static String objectToJson(Object data) {
|
||||
try {
|
||||
MAPPER.registerModule(new ParameterNamesModule())
|
||||
.registerModule(new Jdk8Module())
|
||||
.registerModule(new JavaTimeModule());
|
||||
return MAPPER.writeValueAsString(data);
|
||||
} catch (JsonProcessingException e) {
|
||||
log.info(ExceptionUtil.stacktraceToString(e));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将json结果集转化为对象
|
||||
*
|
||||
* @param jsonData json数据
|
||||
* @param beanType 对象中的object类型
|
||||
* @return
|
||||
*/
|
||||
public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {
|
||||
try {
|
||||
return MAPPER.readValue(jsonData, beanType);
|
||||
} catch (Exception e) {
|
||||
log.info(ExceptionUtil.stacktraceToString(e));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将json数据转换成pojo对象list
|
||||
* <p>Title: jsonToList</p>
|
||||
* <p>Description: </p>
|
||||
*
|
||||
* @param jsonData
|
||||
* @param beanType
|
||||
* @return
|
||||
*/
|
||||
public static <T> List<T> jsonToList(String jsonData, Class<T> beanType) {
|
||||
JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
|
||||
try {
|
||||
List<T> list = MAPPER.readValue(jsonData, javaType);
|
||||
return list;
|
||||
} catch (Exception e) {
|
||||
log.info(ExceptionUtil.stacktraceToString(e));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将List<DTO>转为List<VO>
|
||||
* <p>Title: jsonToList</p>
|
||||
* <p>Description: </p>
|
||||
*
|
||||
* @param jsonData
|
||||
* @param beanType
|
||||
* @return
|
||||
*/
|
||||
public static <T> List<T> jsonToList(List jsonData, Class<T> beanType) {
|
||||
List<T> list = new ArrayList<>();
|
||||
try {
|
||||
for (Object jd : jsonData) {
|
||||
T t = beanType.newInstance();
|
||||
BeanUtil.copyProperties(jd, t);
|
||||
list.add(t);
|
||||
}
|
||||
} catch (InstantiationException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 将可变参数转化为数组类型的字符串<VO>
|
||||
* <p>Title: jsonToList</p>
|
||||
* <p>Description: </p>
|
||||
*
|
||||
* @param args 参数列表
|
||||
* @return
|
||||
*/
|
||||
public static String argsToArray(Object... args) {
|
||||
return objectToJson(args);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
package com.coscoshipping.ebtp.system.operationlog.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.coscoshipping.ebtp.system.common.base.BaseController;
|
||||
import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse;
|
||||
import com.chinaunicom.mall.ebtp.common.log.OperationLogDetail;
|
||||
import com.chinaunicom.mall.ebtp.common.log.enums.EbtpLogBusinessModule;
|
||||
import com.chinaunicom.mall.ebtp.common.log.enums.EbtpLogType;
|
||||
import com.coscoshipping.ebtp.system.operationlog.entity.SysOperationLog;
|
||||
import com.coscoshipping.ebtp.system.operationlog.entity.SysOperationLogVO;
|
||||
import com.coscoshipping.ebtp.system.operationlog.service.ISysOperationLogService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@RestController
|
||||
@Api(value = "操作日志")
|
||||
@RequestMapping("/v1/operationLog")
|
||||
public class OperationLogController extends BaseController {
|
||||
@Autowired
|
||||
private ISysOperationLogService sysOperationLogService;
|
||||
|
||||
/**
|
||||
* 查询分页数据
|
||||
* @param operationLogVO 分页信息
|
||||
* @return 返回结果
|
||||
*/
|
||||
@ApiOperation("查询分页数据")
|
||||
@PostMapping("/getPage")
|
||||
public BaseResponse<IPage<SysOperationLog>> getPage(@ApiParam(value = "对象数据", required = true) @RequestBody SysOperationLogVO operationLogVO) {
|
||||
return BaseResponse.success(sysOperationLogService.getPage(operationLogVO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试操作日志注解+Kafka流程
|
||||
*/
|
||||
@ApiOperation("测试操作日志注解和Kafka流程")
|
||||
@OperationLogDetail(businessModule = EbtpLogBusinessModule.OTHER,operationType = EbtpLogType.UPDATE,detail = "客服-根据项目projectBizNum查询项目负责人相关信息")
|
||||
@GetMapping("/testLog")
|
||||
public BaseResponse<String> testLog(@RequestParam(value = "msg", required = false, defaultValue = "hello") String msg) {
|
||||
// 这里仅返回简单内容,实际日志信息由AOP+Kafka处理
|
||||
return BaseResponse.success("操作日志注解+Kafka流程测试成功,msg=" + msg);
|
||||
}
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
package com.coscoshipping.ebtp.system.operationlog.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.chinaunicom.mall.ebtp.common.base.dao.IBaseMapper;
|
||||
import com.coscoshipping.ebtp.system.operationlog.entity.SysOperationLog;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
@Mapper
|
||||
public interface SysOperationLogMapper extends IBaseMapper<SysOperationLog> {
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.coscoshipping.ebtp.system.operationlog.dao.OperationLogMapper">
|
||||
</mapper>
|
@ -0,0 +1,85 @@
|
||||
package com.coscoshipping.ebtp.system.operationlog.entity;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 操作日志实体类
|
||||
* 对应表:operation_log
|
||||
*/
|
||||
@Data
|
||||
@TableName("sys_operation_log")
|
||||
public class SysOperationLog implements Serializable {
|
||||
/** 编号 */
|
||||
@TableId
|
||||
private String id;
|
||||
|
||||
/** 链路跟踪标识 */
|
||||
@TableField("transaction_id")
|
||||
private String transactionId;
|
||||
|
||||
/** 内容 */
|
||||
@TableField("content")
|
||||
private String content;
|
||||
|
||||
/** 结果 */
|
||||
@TableField("result")
|
||||
private boolean result;
|
||||
|
||||
/** 创建时间 */
|
||||
@TableField("create_time")
|
||||
private String createTime;
|
||||
|
||||
/** 操作人token */
|
||||
@TableField("token")
|
||||
private String token;
|
||||
|
||||
/** 操作人ID */
|
||||
@TableField("user_id")
|
||||
private String userId;
|
||||
|
||||
/** 操作人名称 */
|
||||
@TableField("user_name")
|
||||
private String userName;
|
||||
|
||||
/** 操作类型 */
|
||||
@TableField("operation_type")
|
||||
private String operationType;
|
||||
|
||||
/** 服务名 */
|
||||
@TableField("service_name")
|
||||
private String serviceName;
|
||||
|
||||
/** 业务所属模块 */
|
||||
@TableField("business_module")
|
||||
private String businessModule;
|
||||
|
||||
/** 包名 */
|
||||
@TableField("package_name")
|
||||
private String packageName;
|
||||
|
||||
/** 方法名 */
|
||||
@TableField("method")
|
||||
private String method;
|
||||
|
||||
/** url */
|
||||
@TableField("url")
|
||||
private String url;
|
||||
|
||||
/** 日志描述 */
|
||||
@TableField("detail")
|
||||
private String detail;
|
||||
|
||||
/** 方法运行时间 */
|
||||
@TableField("run_time")
|
||||
private Long runTime;
|
||||
|
||||
/** 日志等级 */
|
||||
@TableField("level")
|
||||
private String level;
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package com.coscoshipping.ebtp.system.operationlog.entity;
|
||||
|
||||
import com.chinaunicom.mall.ebtp.common.base.entity.BasePageRequest;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@ApiModel("操作日志分页VO")
|
||||
public class SysOperationLogVO extends SysOperationLog implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "分页对象信息")
|
||||
private BasePageRequest basePageRequest;
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
package com.coscoshipping.ebtp.system.operationlog.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.coscoshipping.ebtp.system.operationlog.entity.SysOperationLog;
|
||||
import com.coscoshipping.ebtp.system.operationlog.entity.SysOperationLogVO;
|
||||
|
||||
public interface ISysOperationLogService {
|
||||
Boolean insert(SysOperationLog log);
|
||||
IPage<SysOperationLog> getPage(SysOperationLogVO operationLogVO);
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
package com.coscoshipping.ebtp.system.operationlog.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.chinaunicom.mall.ebtp.common.base.service.impl.BaseServiceImpl;
|
||||
import com.coscoshipping.ebtp.system.operationlog.dao.SysOperationLogMapper;
|
||||
import com.coscoshipping.ebtp.system.operationlog.entity.SysOperationLog;
|
||||
import com.coscoshipping.ebtp.system.operationlog.entity.SysOperationLogVO;
|
||||
import com.coscoshipping.ebtp.system.operationlog.service.ISysOperationLogService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class SysOperationLogServiceImpl extends BaseServiceImpl<SysOperationLogMapper, SysOperationLog> implements ISysOperationLogService {
|
||||
|
||||
@Override
|
||||
public Boolean insert(SysOperationLog log) {
|
||||
return super.save(log);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IPage<SysOperationLog> getPage(SysOperationLogVO operationLogVO) {
|
||||
LambdaQueryWrapper<SysOperationLog> query = new LambdaQueryWrapper<>();
|
||||
// 可根据operationLogVO添加更多查询条件
|
||||
if (operationLogVO.getTransactionId() != null) {
|
||||
query.eq(SysOperationLog::getTransactionId, operationLogVO.getTransactionId());
|
||||
}
|
||||
if (operationLogVO.getUserId() != null) {
|
||||
query.eq(SysOperationLog::getUserId, operationLogVO.getUserId());
|
||||
}
|
||||
if (operationLogVO.getOperationType() != null) {
|
||||
query.eq(SysOperationLog::getOperationType, operationLogVO.getOperationType());
|
||||
}
|
||||
query.orderByDesc(SysOperationLog::getCreateTime);
|
||||
if (operationLogVO.getBasePageRequest() == null) {
|
||||
operationLogVO.setBasePageRequest(new com.chinaunicom.mall.ebtp.common.base.entity.BasePageRequest());
|
||||
}
|
||||
|
||||
//查询
|
||||
IPage<SysOperationLog> result = new Page<>(operationLogVO.getBasePageRequest().getPageNo(), operationLogVO.getBasePageRequest().getPageSize());
|
||||
return this.page(result, query);
|
||||
|
||||
}
|
||||
}
|
@ -57,32 +57,34 @@ spring:
|
||||
|
||||
# 天宫Kafka增加了安全认证,需要配置安全属性
|
||||
kafka:
|
||||
bootstrap-servers: 10.172.48.110:32050,10.172.48.109:32050,10.172.48.111:32050
|
||||
bootstrap-servers: 192.168.110.231:9092
|
||||
template:
|
||||
default-topic: jl_eshop
|
||||
|
||||
# 生产者配置参数
|
||||
producer:
|
||||
client-id: core-service-ebtp-crypt
|
||||
properties:
|
||||
security.protocol: SASL_PLAINTEXT
|
||||
sasl.mechanism: SCRAM-SHA-256
|
||||
sasl.jaas.config: org.apache.kafka.common.security.scram.ScramLoginModule required username="eshop-kafka" password="Unicom#135";
|
||||
client-id: sys-manager-ebtp-project
|
||||
# properties:
|
||||
# security.protocol: SASL_PLAINTEXT
|
||||
# sasl.mechanism: SCRAM-SHA-256
|
||||
# sasl.jaas.config: org.apache.kafka.common.security.scram.ScramLoginModule required username="eshop-kafka" password="Unicom#135";
|
||||
|
||||
# 消费者配置参数
|
||||
consumer:
|
||||
group-id: core-service-ebtp-crypt-consumer
|
||||
group-id: biz-service-ebtp-kafka-consumer
|
||||
auto-offset-reset: latest
|
||||
properties:
|
||||
security.protocol: SASL_PLAINTEXT
|
||||
sasl.mechanism: SCRAM-SHA-256
|
||||
sasl.jaas.config: org.apache.kafka.common.security.scram.ScramLoginModule required username="eshop-kafka" password="Unicom#135";
|
||||
# properties:
|
||||
# security.protocol: SASL_PLAINTEXT
|
||||
# sasl.mechanism: SCRAM-SHA-256
|
||||
# sasl.jaas.config: org.apache.kafka.common.security.scram.ScramLoginModule required username="eshop-kafka" password="Unicom#135";
|
||||
|
||||
# 生产区 redis 配置
|
||||
redis:
|
||||
sentinel:
|
||||
master: mymaster
|
||||
nodes: 192.168.110.231:26379
|
||||
# sentinel:
|
||||
# master: mymaster
|
||||
# nodes: 192.168.110.231:26379
|
||||
host: 192.168.110.231
|
||||
port: 6379
|
||||
password: pass
|
||||
database:
|
||||
sharding: 1
|
||||
|
Reference in New Issue
Block a user