package com.cl.privilege.biz.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.RowBounds;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.cl.privilege.biz.IRoleService;
import com.cl.privilege.mapper.RoleMapper;
import com.cl.privilege.model.Role;
import com.cl.privilege.model.RoleSearchModel;
import com.cl.privilege.model.User;
import com.cl.privilege.utils.ConstantUtil;
import com.cl.privilege.utils.StringUtil;
@Service
public class RoleServiceImpl implements IRoleService {
@Autowired
private RoleMapper roleMapper;
private void setPersonInsert(Role role,User user)
{
Date d = new Date();
role.setCreatePerson(user.getUsername());
role.setUpdatePerson(user.getUsername());
role.setCreateDate(d);
role.setUpdateDate(d);
}
private void setPersonUpdate(Role role,User user)
{
Date d = new Date();
role.setUpdatePerson(user.getUsername());
role.setUpdateDate(d);
}
@Override
public Role getRoleById(Integer id) {
return roleMapper.selectByPrimaryKey(id);
}
@Override
public Integer createRole(Role role,User user) {
setPersonInsert(role,user);
return roleMapper.insertSelective(role);
}
@Override
public Integer updateRoleById(Role role,User user) {
setPersonUpdate(role,user);
return roleMapper.updateByPrimaryKeySelective(role);
}
@Override
public Integer deleteRoleById(Integer id)
{
return roleMapper.deleteRoleById(id);
}
@Override
public Integer getRoleTotalBySearch(RoleSearchModel searchModel)
{
return roleMapper.getRoleTotalBySearch(searchModel);
}
@Override
public List<Role> getRoleListBySearch(RoleSearchModel searchModel)
{
return roleMapper.getRoleListBySearch(searchModel,
new RowBounds((searchModel.getPageNo() - 1) * searchModel.getPageSize(), searchModel.getPageSize()));
}
@Override
public Boolean isUsedByUser(Integer roleId)
{
return roleMapper.isUsedByUser(roleId);
}
@Override
@Transactional
public String assignModuleAndResource(Integer roleId,String checkedStr)
{
String[] checkedArr = checkedStr.split(",");
List<Integer> moduleIds = new ArrayList<Integer>();
List<Integer> resourceIds = new ArrayList<Integer>();
for(String s:checkedArr)
{
if(s.startsWith("m_"))
{
moduleIds.add(Integer.parseInt(s.replace("m_", "")));
} else {
resourceIds.add(Integer.parseInt(s));
}
}
roleMapper.deleteRoleModuleById(roleId);
if(moduleIds.size()>0)
{
roleMapper.assignModules(moduleIds, roleId);
}
roleMapper.deleteRoleResourceById(roleId);
if(resourceIds.size()>0)
{
roleMapper.assignResources(resourceIds, roleId);
}
return ConstantUtil.Success;
}
@Override
public List<Role> getRoleListByUserId(Integer userId)
{
return roleMapper.getRoleListByUserId(userId);
}
@Override
public List<Role> getRoleList()
{
return roleMapper.getRoleList();
}
@Override
public String getRoleDataTables(RoleSearchModel searchModel)
{
Integer total = getRoleTotalBySearch(searchModel);
List<Role> roleList = getRoleListBySearch(searchModel);
if(roleList==null || roleList.size()==0)
{
return "{\"iTotalRecords\":0,\"iTotalDisplayRecords\":0,\"aaData\":[]}";
}
StringBuilder sb = new StringBuilder();
sb.append(String.format("{\"iTotalRecords\":%d,\"iTotalDisplayRecords\":%d,\"aaData\":[",total,total));
int i= 0;
for(Role r:roleList)
{
if(i != 0) sb.append(",");
addDataRow(sb,r);
i++;
}
sb.append("]}");
return sb.toString();
}
@Override
public String getRoleDataRow(Integer id)
{
Role r = getRoleById(id);
StringBuilder sb = new StringBuilder();
addDataRow(sb,r);
return sb.toString();
}
private void addDataRow(StringBuilder sb,Role r)
{
sb.append("[");
sb.append("\"<input type=\\\"checkbox\\\" name=\\\"id[]\\\" value=\\\"").append(r.getId()).append("\\\">\"");
sb.append(",").append(r.getId());
sb.append(",\"").append(r.getName()).append("\"");
sb.append(",\"").append(r.getRemark()).append("\"");
sb.append(",\"").append(r.getUpdatePerson()).append("\"");
sb.append(",\"").append(StringUtil.formatDate(r.getUpdateDate(),"yyyy-MM-dd HH:mm:ss")).append("\"");
sb.append(",\"")
.append("<a href=\\\"javascript:Role.update_click('").append(r.getId()).append("');\\\" class=\\\"btn btn-xs default btn-editable\\\"><i class=\\\"fa fa-edit\\\"></i> 修改</a>")
.append(" <a href=\\\"javascript:Role.remove('").append(r.getId()).append("');\\\" class=\\\"btn btn-xs default btn-editable\\\"><i class=\\\"fa fa-times\\\"></i> 删除</a>")
.append(" <a href=\\\"javascript:Role.assign_click('").append(r.getId()).append("');\\\" class=\\\"btn btn-xs default btn-editable\\\"><i class=\\\"fa fa-key\\\"></i> 分配权限</a>")
.append("\"");
sb.append("]");
}
@Override
public String getRoleForOptions(Integer userId)
{
List<Role> assignRoles = getRoleListByUserId(userId);
List<Role> allRoles = getRoleList();
Map<Integer,Role> hmAssignRoles = new HashMap<Integer,Role>();
for(Role r:assignRoles)
{
hmAssignRoles.put(r.getId(),r);
}
StringBuilder sb = new StringBuilder();
for(Role r:allRoles)
{
sb.append("<option value=\"").append(r.getId()).append("\"");
if(hmAssignRoles.containsKey(r.getId()))
{
sb.append(" selected");
}
sb.append(">").append(r.getName()).append("</option>");
}
return sb.toString();
}
}