《一》库表设计
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; } }