package com.xiaoniu.subsystem.system.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xiaoniu.api.dto.ApiOperLogDTO;
import com.xiaoniu.common.core.utils.StringUtils;
import com.xiaoniu.subsystem.system.domain.dto.SysOperLogQueryDTO;
import com.xiaoniu.subsystem.system.mapper.SysOperLogMapper;
import com.xiaoniu.subsystem.system.service.ISysOperLogService;
import com.xiaoniu.system.api.domain.SysOperLog;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 操作日志 服务层处理
 *
 * @author xiaoniu
 */
@Service
public class SysOperLogServiceImpl extends ServiceImpl<SysOperLogMapper, SysOperLog> implements ISysOperLogService {
    @Autowired
    private SysOperLogMapper operLogMapper;

    /**
     * 新增操作日志
     *
     * @param operLog 操作日志对象
     * @return 结果
     */
    @Override
    public int insertOperlog(SysOperLog operLog) {
        return operLogMapper.insertOperlog(operLog);
    }

    /**
     * 查询系统操作日志集合
     *
     * @param operLog 操作日志对象
     * @return 操作日志集合
     */
    @Override
    public List<SysOperLog> selectOperLogList(SysOperLog operLog) {
        return operLogMapper.selectOperLogList(operLog);
    }

    /**
     * 批量删除系统操作日志
     *
     * @param operIds 需要删除的操作日志ID
     * @return 结果
     */
    @Override
    public int deleteOperLogByIds(Long[] operIds) {
        return operLogMapper.deleteOperLogByIds(operIds);
    }

    /**
     * 查询操作日志详细
     *
     * @param operId 操作ID
     * @return 操作日志对象
     */
    @Override
    public SysOperLog selectOperLogById(Long operId) {
        return operLogMapper.selectOperLogById(operId);
    }

    /**
     * 清空操作日志
     */
    @Override
    public void cleanOperLog() {
        operLogMapper.cleanOperLog();
    }

    @Override
    public void saveOperLog(ApiOperLogDTO dto) {
        SysOperLog sysOperLog = new SysOperLog();
        BeanUtils.copyProperties(dto, sysOperLog);
        try {
            operLogMapper.insertOperlog(sysOperLog);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public List<SysOperLog> getOperLogList(SysOperLogQueryDTO dto) {
        LambdaQueryWrapper<SysOperLog> wrapper = new LambdaQueryWrapper<>();
        if (StringUtils.isNotEmpty(dto.getOperName())) {
            wrapper.like(SysOperLog::getOperName, dto.getOperName());
        }
        if (StringUtils.isNotEmpty(dto.getBeginTime())) {
            wrapper.gt(SysOperLog::getOperTime, dto.getBeginTime() + " 00:00:01");
        }
        if (StringUtils.isNotEmpty(dto.getEndTime())) {
            wrapper.lt(SysOperLog::getOperTime, dto.getEndTime() + " 23:59:59");
        }
        wrapper.orderByDesc(SysOperLog::getOperTime);
        return baseMapper.selectList(wrapper);
    }
}
