操作日志

本文档介绍了数据库中`task_operation_log`表的设计,包括字段及其注释,用于记录日志信息。同时,展示了Java代码实现异步处理操作日志的逻辑,涉及任务池和角色配置的操作,如新增、修改和删除,并通过比较工具类对比操作前后的差异。
摘要由CSDN通过智能技术生成

《一》库表设计

CREATE TABLE `task_operation_log` (
  `id` int(12) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `log_unique_id` bigint(20) NOT NULL COMMENT '日志唯一标识',
  `app_code` varchar(50) DEFAULT NULL COMMENT '接入应用编码',
  `biz_code` int(1) DEFAULT NULL COMMENT '业务标识',
  `biz_name` varchar(50) DEFAULT NULL COMMENT '业务名称',
  `oper_type` int(1) DEFAULT NULL COMMENT '操作类型[1:增加,2:删除;3:修改]',
  `oper_content` text COMMENT '操作内容【内容标识+内容详情】',
  `oper_user_code` varchar(20) DEFAULT NULL COMMENT '操作者标识',
  `oper_user_name` varchar(30) DEFAULT NULL COMMENT '操作者名称',
  `create_time` datetime(6) DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
  `update_time` datetime(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
  `extend` varchar(200) DEFAULT NULL COMMENT '扩展多用于存储json类格式',
  `is_delete` tinyint(3) DEFAULT '0' COMMENT '是否逻辑删除:1是0否',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `idx_log_unique_id` (`log_unique_id`)
) ENGINE=InnoDB AUTO_INCREMENT=632 DEFAULT CHARSET=utf8 COMMENT='日志记录表';

《二》代码实现,异步实现

 


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.gildata.task.platform.api.dto.TaskRoleConfigDTO;
import com.gildata.task.platform.api.service.TaskRoleConfigCloudService;
import com.gildata.task.platform.common.constants.OperationLogContants;
import com.gildata.task.platform.common.enums.BizMonitorIndexEnum;
import com.gildata.task.platform.common.enums.BizTypeEnum;
import com.gildata.task.platform.common.exception.GlobalErrorInfo;
import com.gildata.task.platform.common.operationLog.TaskPoolConfigLog;
import com.gildata.task.platform.common.operationLog.TaskRoleConfigLog;
import com.gildata.task.platform.common.util.CompareUtil;
import com.gildata.task.platform.common.util.SnowflakeUtils;
import com.gildata.task.platform.common.util.date.DateUtils;
import com.gildata.task.platform.dao.mapper.TaskOperationLogMapper;
import com.gildata.task.platform.dao.mapper.TaskPoolConfigMapper;
import com.gildata.task.platform.dao.mapper.TaskRoleConfigMapper;
import com.gildata.task.platform.dao.model.TaskOperationLog;
import com.gildata.task.platform.dao.model.TaskPoolConfig;
import com.gildata.task.platform.dao.model.TaskRoleConfig;
import com.gildata.task.platform.provider.service.TaskOperaAsyService;
import com.gildata.task.platform.provider.service.TaskRoleConfigService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

/**
 * @author 
 * @ className:TaskOperaAsyServiceImpl
 * @ description: 异步处理操作日志
 * @ create 2020-12-29 15:32
 **/
@Slf4j
@Service
@Async
public class TaskOperaAsyServiceImpl implements TaskOperaAsyService {
    @Resource
    private TaskOperationLogMapper taskOperationLogMapper;
    @Resource
    private TaskRoleConfigMapper taskRoleConfigMapper;
    @Resource
    private TaskPoolConfigMapper taskPoolConfigMapper;

    private static final List<Integer> operationActionList = Arrays.asList(1, 2, 3);
    private static final List<Integer> bizTypeList = Arrays.asList(1, 2);

    /**
     * @param bizType         业务类型[1:任务池:2:角色]
     * @param operationAction 操作行为[1:增加,2:修改,3:删除]
     * @param json            上游传递的实体类对象转的JSON 字符串
     * @return
     */
    @Override
    public Integer operationLogDeal(Integer bizType, Integer operationAction, String json) {
        TaskOperationLog taskOperationLog = new TaskOperationLog();
        JSONObject requestResult = new JSONObject();
        if (bizType != null && !bizTypeList.contains(bizType)) {
            log.error(OperationLogContants.BIZ_TYPE_ERROR + "bizType:{}", bizType);
            return Integer.valueOf(0);
        }
        if (operationAction != null && !operationActionList.contains(operationAction)) {
            log.error(OperationLogContants.OPERATION_TYPE_ERROR + "operationAction:{}", operationAction);
            return Integer.valueOf(0);
        }
        if (StringUtils.isEmpty(json)) {
            log.error(OperationLogContants.INVALID_OPERATION_DATA + "json:{}", json);
            return Integer.valueOf(0);
        }

        switch (bizType) {
            //任务池
            case 1:
                TaskPoolConfigLog taskPoolConfigLog = JSON.parseObject(json, TaskPoolConfigLog.class);
                switch (operationAction) {
                    //新增
                    case 1:
                        taskOperationLog = addTaskPoolOperaLog(operationAction, taskPoolConfigLog, taskOperationLog);
                        try {
                            int count = taskOperationLogMapper.insertTaskOperLog(taskOperationLog);
                            Integer wrapperi = new Integer(count);
                            return wrapperi;
                        } catch (Exception e) {
                            log.error(OperationLogContants.FAILD_INSERT + "taskPoolConfigLog.getId:{}", taskPoolConfigLog.getId());
                            log.error(e.toString());
                        }
                        break;
                    //更新
                    case 2:
                        //任务池 ->启动 or 禁用,该操作属于更新
                        JSONArray taskPoolConfigArray = new JSONArray();
                        //IsTaskNode相关
                        if (taskPoolConfigLog.getId() == null) {
                            log.error("任务节不存在 taskPoolConfigLog.getId():{}", taskPoolConfigLog.getId());
                            return Integer.valueOf(0);
                        }

                        TaskPoolConfig taskPoolConfig = null;
                        try {
                            taskPoolConfig = taskPoolConfigMapper.findById(taskPoolConfigLog.getId());
                        } catch (Exception e) {
                            log.error("目录节点异常 :taskPoolConfig.getId():{}taskPoolConfig.getIsTaskNode():{}",
                                    taskPoolConfig.getId(), taskPoolConfig.getIsTaskNode());
                            log.error(e.toString());
                        }
                        taskOperationLog.setLogUniqueId(SnowflakeUtils.genId());
                        taskOperationLog.setAppCode(taskPoolConfigLog.getAppCode());
                        taskOperationLog.setOperUerCode(taskPoolConfigLog.getOperUerCode());
                        taskOperationLog.setOperUerName(taskPoolConfigLog.getOperUerName());
                        taskOperationLog.setOperType(operationAction);
                        TaskPoolConfigLog taskPoolConfigLog1 = new TaskPoolConfigLog();
                        BeanUtils.copyProperties(taskPoolConfig, taskPoolConfigLog1);
                        String[] ignoreArr = new String[]{"operUerCode", "operUerName"};
                        taskPoolConfigArray = CompareUtil.compareFields(taskPoolConfigLog, taskPoolConfigLog1, ignoreArr);
                        requestResult.put("taskPoolConfig", taskPoolConfigArray);
                        taskOperationLog.setOperContent(requestResult.toJSONString());
                        taskOperationLog.setBizCode(bizType);
                        taskOperationLog.setBizName(BizTypeEnum.getByCode(bizType).getDesc());
                        try {
                            int count = taskOperationLogMapper.insertTaskOperLog(taskOperationLog);
                            Integer wrapperi = new Integer(count);
                            return wrapperi;
                        } catch (Exception e) {
                            log.error(OperationLogContants.FAILD_INSERT + "taskPoolId:{}", taskPoolConfigLog.getId());
                            log.error(e.toString());
                        }
                        break;
                    //删除
                    case 3:
                        log.error("任务池删除操作的记录:开发小哥正在加紧开发中>>>");
                        break;
                    default:
                        log.error(OperationLogContants.OPERATION_TYPE_ERROR + "operationAction:{}", operationAction);
                        return Integer.valueOf(0);
                }
                break;
            //角色
            case 2:
                //获取更新前的信息
                TaskRoleConfigLog taskRoleConfiglog = JSON.parseObject(json, TaskRoleConfigLog.class);
                JSONArray taskRoleConfigArray = new JSONArray();
                switch (operationAction) {
                    //新增
                    case 1:
                        taskOperationLog = addTaskOperaLog(operationAction, taskRoleConfiglog, taskOperationLog);
                        try {
                            int count = taskOperationLogMapper.insertTaskOperLog(taskOperationLog);
                            Integer wrapperi = new Integer(count);
                            return wrapperi;
                        } catch (Exception e) {
                            log.error(GlobalErrorInfo.creatErrorInfo(BizMonitorIndexEnum.OPERATION_EXCEPTION.getCode(),
                                    OperationLogContants.FAILD_INSERT, taskRoleConfiglog.getId(), e));
                        }
                        break;
                    //更新
                    case 2:
                        //获取更新前的信息 -> taskRoleConfig
                        //获取更新后的信息
                        TaskRoleConfig taskRoleConfigDTO = null;
                        try {
                            taskRoleConfigDTO = taskRoleConfigMapper.selectTaskRoleConfigById(taskRoleConfiglog.getId());
                            if (taskRoleConfigDTO == null) {
                                log.error(OperationLogContants.GET_UPDATE_INFO_FAILD + "taskRoleConfigDTO:{}", taskRoleConfigDTO);
                                return Integer.valueOf(0);
                            }
                        } catch (Exception e) {
                            log.error(OperationLogContants.GET_UPDATE_INFO_FAILD + "taskRoleConfigDTO:{}", taskRoleConfigDTO);
                            log.error(e.toString());
                            return Integer.valueOf(0);
                        }
                        taskOperationLog.setLogUniqueId(SnowflakeUtils.genId());
                        taskOperationLog.setAppCode(taskRoleConfiglog.getAppCode());
                        taskOperationLog.setBizCode(BizTypeEnum.ROLE.getCode());
                        taskOperationLog.setBizName(BizTypeEnum.ROLE.getDesc());
                        taskOperationLog.setOperType(operationAction);
                        taskOperationLog.setLogUniqueId(SnowflakeUtils.genId());
                        taskOperationLog.setOperUerCode(taskRoleConfiglog.getOperUerCode());
                        taskOperationLog.setOperUerName(taskRoleConfiglog.getOperUerName());
                        //请求结果[差异处理]
                        TaskRoleConfigLog taskRoleConfigLog1 = new TaskRoleConfigLog();
                        BeanUtils.copyProperties(taskRoleConfigDTO, taskRoleConfigLog1);
                        String[] ignoreArr = new String[]{"operUerCode", "operUerName", "appCode"};
                        taskRoleConfigArray = CompareUtil.compareFields(taskRoleConfiglog, taskRoleConfigLog1, ignoreArr);
                        requestResult.put("taskRoleConfig", taskRoleConfigArray);
                        taskOperationLog.setOperContent(requestResult.toJSONString());
                        try {
                            int count = taskOperationLogMapper.insertTaskOperLog(taskOperationLog);
                            Integer wrapperi = new Integer(count);
                            return wrapperi;
                        } catch (Exception e) {
                            log.error(OperationLogContants.FAILD_INSERT + "taskRoleConfiglog.getId:{}", taskRoleConfiglog.getId());
                            log.error(e.toString());
                        }
                        break;
                    //删除
                    case 3:
                        log.error("角色删除操作的记录:开发小哥正在加紧开发中>>>");
                        //TODO
                        break;
                    default:
                        log.error(OperationLogContants.ERROR_TYPE + "operationAction:{}", operationAction);
                        return Integer.valueOf(0);
                }
                break;
            default:
                log.info(OperationLogContants.BIZ_TYPE_ERROR + "bizType:{}", bizType);
                return Integer.valueOf(0);
        }
        return Integer.valueOf(0);
    }

    //添加任务记录
    public TaskOperationLog addTaskOperaLog(Integer operationAction, TaskRoleConfigLog taskRoleConfigLog, TaskOperationLog taskOperationLog) {
        taskOperationLog.setBizCode(BizTypeEnum.ROLE.getCode());
        taskOperationLog.setBizName(BizTypeEnum.ROLE.getDesc());
        taskOperationLog.setOperType(operationAction);
        taskOperationLog.setLogUniqueId(SnowflakeUtils.genId());
        taskOperationLog.setOperUerCode(taskRoleConfigLog.getOperUerCode());
        taskOperationLog.setOperUerName(taskRoleConfigLog.getOperUerName());
        taskOperationLog.setAppCode(taskRoleConfigLog.getAppCode());
        return taskOperationLog;
    }


    public TaskOperationLog addTaskPoolOperaLog(Integer operationAction, TaskPoolConfigLog taskPoolConfigLog, TaskOperationLog taskOperationLog) {
        taskOperationLog.setBizCode(BizTypeEnum.TASK_POOL.getCode());
        taskOperationLog.setBizName(BizTypeEnum.TASK_POOL.getDesc());
        taskOperationLog.setOperType(operationAction);
        taskOperationLog.setLogUniqueId(SnowflakeUtils.genId());
        taskOperationLog.setOperUerCode(taskPoolConfigLog.getOperUerCode());
        taskOperationLog.setOperUerName(taskPoolConfigLog.getOperUerName());
        taskOperationLog.setAppCode(taskPoolConfigLog.getAppCode());
        return taskOperationLog;
    }

}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值