diff --git a/src/main/java/com/coscoshipping/ebtp/system/kafka/listener/KafkaLogListener.java b/src/main/java/com/coscoshipping/ebtp/system/kafka/listener/KafkaLogListener.java
new file mode 100644
index 0000000..a75b77a
--- /dev/null
+++ b/src/main/java/com/coscoshipping/ebtp/system/kafka/listener/KafkaLogListener.java
@@ -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);
+ });
+ }
+}
diff --git a/src/main/java/com/coscoshipping/ebtp/system/kafka/util/JsonUtils.java b/src/main/java/com/coscoshipping/ebtp/system/kafka/util/JsonUtils.java
new file mode 100644
index 0000000..5b99cdd
--- /dev/null
+++ b/src/main/java/com/coscoshipping/ebtp/system/kafka/util/JsonUtils.java
@@ -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字符串。
+ *
Title: pojoToJson
+ * Description:
+ *
+ * @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 jsonToPojo(String jsonData, Class beanType) {
+ try {
+ return MAPPER.readValue(jsonData, beanType);
+ } catch (Exception e) {
+ log.info(ExceptionUtil.stacktraceToString(e));
+ }
+ return null;
+ }
+
+ /**
+ * 将json数据转换成pojo对象list
+ * Title: jsonToList
+ * Description:
+ *
+ * @param jsonData
+ * @param beanType
+ * @return
+ */
+ public static List jsonToList(String jsonData, Class beanType) {
+ JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
+ try {
+ List list = MAPPER.readValue(jsonData, javaType);
+ return list;
+ } catch (Exception e) {
+ log.info(ExceptionUtil.stacktraceToString(e));
+ }
+ return null;
+ }
+
+ /**
+ * 将List转为List
+ * Title: jsonToList
+ * Description:
+ *
+ * @param jsonData
+ * @param beanType
+ * @return
+ */
+ public static List jsonToList(List jsonData, Class beanType) {
+ List 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;
+ }
+
+
+ /**
+ * 将可变参数转化为数组类型的字符串
+ * Title: jsonToList
+ * Description:
+ *
+ * @param args 参数列表
+ * @return
+ */
+ public static String argsToArray(Object... args) {
+ return objectToJson(args);
+
+ }
+
+
+}
diff --git a/src/main/java/com/coscoshipping/ebtp/system/operationlog/controller/OperationLogController.java b/src/main/java/com/coscoshipping/ebtp/system/operationlog/controller/OperationLogController.java
new file mode 100644
index 0000000..3cd886c
--- /dev/null
+++ b/src/main/java/com/coscoshipping/ebtp/system/operationlog/controller/OperationLogController.java
@@ -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> 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 testLog(@RequestParam(value = "msg", required = false, defaultValue = "hello") String msg) {
+ // 这里仅返回简单内容,实际日志信息由AOP+Kafka处理
+ return BaseResponse.success("操作日志注解+Kafka流程测试成功,msg=" + msg);
+ }
+}
diff --git a/src/main/java/com/coscoshipping/ebtp/system/operationlog/dao/SysOperationLogMapper.java b/src/main/java/com/coscoshipping/ebtp/system/operationlog/dao/SysOperationLogMapper.java
new file mode 100644
index 0000000..5f5d45c
--- /dev/null
+++ b/src/main/java/com/coscoshipping/ebtp/system/operationlog/dao/SysOperationLogMapper.java
@@ -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 {
+}
diff --git a/src/main/java/com/coscoshipping/ebtp/system/operationlog/dao/mapper/OperationLogMapper.xml b/src/main/java/com/coscoshipping/ebtp/system/operationlog/dao/mapper/OperationLogMapper.xml
new file mode 100644
index 0000000..dd1a890
--- /dev/null
+++ b/src/main/java/com/coscoshipping/ebtp/system/operationlog/dao/mapper/OperationLogMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
diff --git a/src/main/java/com/coscoshipping/ebtp/system/operationlog/entity/SysOperationLog.java b/src/main/java/com/coscoshipping/ebtp/system/operationlog/entity/SysOperationLog.java
new file mode 100644
index 0000000..37f5ab5
--- /dev/null
+++ b/src/main/java/com/coscoshipping/ebtp/system/operationlog/entity/SysOperationLog.java
@@ -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;
+}
diff --git a/src/main/java/com/coscoshipping/ebtp/system/operationlog/entity/SysOperationLogVO.java b/src/main/java/com/coscoshipping/ebtp/system/operationlog/entity/SysOperationLogVO.java
new file mode 100644
index 0000000..3459ebd
--- /dev/null
+++ b/src/main/java/com/coscoshipping/ebtp/system/operationlog/entity/SysOperationLogVO.java
@@ -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;
+}
\ No newline at end of file
diff --git a/src/main/java/com/coscoshipping/ebtp/system/operationlog/service/ISysOperationLogService.java b/src/main/java/com/coscoshipping/ebtp/system/operationlog/service/ISysOperationLogService.java
new file mode 100644
index 0000000..7439afa
--- /dev/null
+++ b/src/main/java/com/coscoshipping/ebtp/system/operationlog/service/ISysOperationLogService.java
@@ -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 getPage(SysOperationLogVO operationLogVO);
+}
diff --git a/src/main/java/com/coscoshipping/ebtp/system/operationlog/service/impl/SysOperationLogServiceImpl.java b/src/main/java/com/coscoshipping/ebtp/system/operationlog/service/impl/SysOperationLogServiceImpl.java
new file mode 100644
index 0000000..3a224bc
--- /dev/null
+++ b/src/main/java/com/coscoshipping/ebtp/system/operationlog/service/impl/SysOperationLogServiceImpl.java
@@ -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 implements ISysOperationLogService {
+
+ @Override
+ public Boolean insert(SysOperationLog log) {
+ return super.save(log);
+ }
+
+ @Override
+ public IPage getPage(SysOperationLogVO operationLogVO) {
+ LambdaQueryWrapper 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 result = new Page<>(operationLogVO.getBasePageRequest().getPageNo(), operationLogVO.getBasePageRequest().getPageSize());
+ return this.page(result, query);
+
+ }
+}
diff --git a/src/main/resources/application-master.yml b/src/main/resources/application-master.yml
index 811f27b..773c0d6 100644
--- a/src/main/resources/application-master.yml
+++ b/src/main/resources/application-master.yml
@@ -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