package com.app.mvc.acl.service;
import com.app.mvc.acl.convert.BaseConvert;
import com.app.mvc.acl.convert.RoleConvert;
import com.app.mvc.acl.dao.SysRoleAclDao;
import com.app.mvc.acl.dao.SysRoleDao;
import com.app.mvc.acl.dao.SysRoleUserDao;
import com.app.mvc.acl.domain.SysRole;
import com.app.mvc.acl.util.RequestHolder;
import com.app.mvc.acl.vo.RolePara;
import com.google.common.base.Preconditions;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* Created by jimin on 16/1/18.
*/
@Service
public class SysRoleService implements SysService {
@Resource
private SysRoleDao sysRoleDao;
@Resource
private SysRoleAclDao sysRoleAclDao;
@Resource
private SysRoleUserDao sysRoleUserDao;
@Resource
private SysLogService sysLogService;
public void save(RolePara para) {
BaseConvert.checkPara(para);
SysRole role = RoleConvert.of(para);
sysRoleDao.save(role);
sysLogService.saveRoleLog(null, role);
}
public void update(RolePara para) {
BaseConvert.checkPara(para);
SysRole before = sysRoleDao.findById(para.getId());
Preconditions.checkNotNull(before, "待更新角色不存在");
SysRole after = RoleConvert.of(para);
sysRoleDao.update(after);
sysLogService.saveRoleLog(before, after);
}
public List<SysRole> getBySupplierId(int supplierId) {
return sysRoleDao.getBySupplierId(supplierId);
}
public List<SysRole> list() {
int userSupplierId = RequestHolder.getCurrentUser().getSupplierId();
return getBySupplierId(userSupplierId);
}
public SysRole findById(int id) {
return sysRoleDao.findById(id);
}
@Override
public void recover(int targetId, Object o) {
SysRole role = (SysRole) o;
Preconditions.checkNotNull(role, "还原前的角色为空,无法还原");
SysRole before = sysRoleDao.findById(targetId);
Preconditions.checkNotNull(before, "待还原的角色不存在");
sysRoleDao.update(role);
sysLogService.saveRoleLog(before, role);
}
public void deleteById(int id) {
SysRole role = findById(id);
Preconditions.checkNotNull(role, "该角色不存在,无法执行删除操作");
Preconditions.checkArgument(sysRoleAclDao.countByRoleId(id) == 0, "该角色下还有权限点,不允许删除!");
Preconditions.checkArgument(sysRoleUserDao.countByRoleId(id) == 0, "该角色下还有用户,不允许删除!");
sysRoleDao.deleteById(id);
sysLogService.saveRoleLog(role, null);
}
}