package com.app.mvc.acl.service;
import com.app.mvc.acl.convert.BaseConvert;
import com.app.mvc.acl.convert.LogConvert;
import com.app.mvc.acl.dao.SysLogDao;
import com.app.mvc.acl.domain.SysAcl;
import com.app.mvc.acl.domain.SysAclModule;
import com.app.mvc.acl.domain.SysBase;
import com.app.mvc.acl.domain.SysDept;
import com.app.mvc.acl.domain.SysLog;
import com.app.mvc.acl.domain.SysRole;
import com.app.mvc.acl.domain.SysUser;
import com.app.mvc.acl.dto.LogSearchDto;
import com.app.mvc.acl.enums.LogType;
import com.app.mvc.acl.vo.LogPara;
import com.app.mvc.beans.JsonMapper;
import com.app.mvc.beans.PageQuery;
import com.app.mvc.beans.PageResult;
import com.google.common.base.Joiner;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* Created by jimin on 16/1/18.
*/
@Slf4j
@Service
public class SysLogService {
@Resource
private SysLogDao sysLogDao;
public PageResult<SysLog> getPageByFuzzySearch(LogPara para, PageQuery page) {
BaseConvert.checkPara(page);
LogSearchDto dto = LogConvert.of(para);
int count = sysLogDao.countFuzzySearch(dto);
if (count > 0) {
List<SysLog> list = sysLogDao.fuzzySearch(dto, page);
return PageResult.<SysLog>builder().total(count).data(list).build();
}
return PageResult.<SysLog>builder().build();
}
public SysLog findById(int id) {
return sysLogDao.findById(id);
}
public void saveAclLog(SysAcl before, SysAcl after) {
SysBase base = BaseConvert.of();
SysLog sysLog = SysLog.builder().targetId(after.getId()).type(LogType.ACL.getCode()).oldValue(JsonMapper.obj2String(before))
.newValue(JsonMapper.obj2String(after)).operator(base.getOperator()).operateIp(base.getOperateIp()).build();
safetySaveLog(sysLog);
}
public void saveAclModuleLog(SysAclModule before, SysAclModule after) {
SysBase base = BaseConvert.of();
SysLog sysLog = SysLog.builder().targetId(after == null ? before.getId() : after.getId()).type(LogType.ACL_MODULE.getCode())
.oldValue(JsonMapper.obj2String(before)).newValue(JsonMapper.obj2String(after)).operator(base.getOperator()).operateIp(base.getOperateIp())
.build();
safetySaveLog(sysLog);
}
public void saveUserLog(SysUser before, SysUser after) {
SysBase base = BaseConvert.of();
SysLog sysLog = SysLog.builder().targetId(after.getId()).type(LogType.USER.getCode()).oldValue(JsonMapper.obj2String(before))
.newValue(JsonMapper.obj2String(after)).operator(base.getOperator()).operateIp(base.getOperateIp()).build();
safetySaveLog(sysLog);
}
public void saveRoleLog(SysRole before, SysRole after) {
SysBase base = BaseConvert.of();
SysLog sysLog = SysLog.builder().targetId(after == null ? before.getId() : after.getId()).type(LogType.ROLE.getCode())
.oldValue(JsonMapper.obj2String(before)).newValue(JsonMapper.obj2String(after)).operator(base.getOperator()).operateIp(base.getOperateIp())
.build();
safetySaveLog(sysLog);
}
public void saveDeptLog(SysDept before, SysDept after) {
SysBase base = BaseConvert.of();
SysLog sysLog = SysLog.builder().targetId(after == null ? before.getId() : after.getId()).type(LogType.DEPT.getCode())
.oldValue(JsonMapper.obj2String(before)).newValue(JsonMapper.obj2String(after)).operator(base.getOperator()).operateIp(base.getOperateIp())
.build();
safetySaveLog(sysLog);
}
public void saveRoleAclLog(int roleId, List<Integer> beforeList, List<Integer> afterList) {
SysBase base = BaseConvert.of();
SysLog sysLog = SysLog.builder().targetId(roleId).type(LogType.ROLE_ACL.getCode()).oldValue(Joiner.on(",").join(beforeList))
.newValue(JsonMapper.obj2String(Joiner.on(",").join(afterList))).operator(base.getOperator()).operateIp(base.getOperateIp()).build();
safetySaveLog(sysLog);
}
public void saveRoleUserLog(int roleId, List<Integer> beforeList, List<Integer> afterList) {
SysBase base = BaseConvert.of();
SysLog sysLog = SysLog.builder().targetId(roleId).type(LogType.ROLE_USER.getCode()).oldValue(Joiner.on(",").join(beforeList))
.newValue(JsonMapper.obj2String(Joiner.on(",").join(afterList))).operator(base.getOperator()).operateIp(base.getOperateIp()).build();
safetySaveLog(sysLog);
}
private void safetySaveLog(SysLog sysLog) {
try {
sysLogDao.save(sysLog);
} catch (Throwable e) {
log.error("add log exception, {}", JsonMapper.obj2String(sysLog), e);
}
}
}