package com.cl.privilege.biz.impl; import java.util.ArrayList; import java.util.Date; import java.util.List; 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 org.springframework.util.StringUtils; import com.cl.privilege.biz.IUserService; import com.cl.privilege.mapper.ModuleMapper; import com.cl.privilege.mapper.UserMapper; import com.cl.privilege.model.User; import com.cl.privilege.model.UserSearchModel; import com.cl.privilege.utils.ConstantUtil; import com.cl.privilege.utils.StringUtil; @Service public class UserServiceImpl implements IUserService { @Autowired private UserMapper userMapper; @Autowired private ModuleMapper moduleMapper; private void setPersonInsert(User user,User operator) { Date d = new Date(); user.setIsLock(false); user.setIsDelete(false); user.setCreatePerson(operator.getUsername()); user.setUpdatePerson(operator.getUsername()); user.setCreateDate(d); user.setUpdateDate(d); } private void setPersonUpdate(User user,User operator) { Date d = new Date(); user.setUpdatePerson(operator.getUsername()); user.setUpdateDate(d); } @Override public User getUserByUsername(String username) { return userMapper.getUserByUsername(username); } @Override public User getUserById(Integer id) { return userMapper.selectByPrimaryKey(id); } @Override public Integer getUserTotalBySearch(UserSearchModel searchModel) { return userMapper.getUserTotalBySearch(searchModel); } @Override public List<User> getUserListBySearch(UserSearchModel searchModel) { return userMapper.getUserListBySearch(searchModel, new RowBounds((searchModel.getPageNo() - 1) * searchModel.getPageSize(), searchModel.getPageSize())); } @Override public Integer createUser(User user,User operator) { setPersonInsert(user,operator); user.setPassword(StringUtil.makeMD5(user.getPassword())); return userMapper.insertSelective(user); } @Override public Integer updateUserById(User user,User operator) { setPersonUpdate(user,operator); return userMapper.updateByPrimaryKeySelective(user); } @Override @Transactional public Integer deleteUserById(Integer id,User operator) { User user = getUserById(id); if(user==null) { return 0; } //本设计中,设置用户是不能物理删除的,保证了所有记录用户操作日志的地方,关联用户可以用inner join,提高效率 userMapper.deleteUserRoleById(id); user.setIsDelete(true); setPersonUpdate(user,operator); return userMapper.updateByPrimaryKeySelective(user); } @Override @Transactional public String assignRole(Integer id,String selectedStr) { String[] selectedArr = selectedStr.split(","); List<Integer> roleIds = new ArrayList<Integer>(); for(String s:selectedArr) { if(StringUtils.hasText(s)) { roleIds.add(Integer.parseInt(s)); } } userMapper.deleteUserRoleById(id); if(roleIds.size()>0) { userMapper.assignRoles(roleIds, id); } return ConstantUtil.Success; } @Override public String getUserDataTables(UserSearchModel searchModel) { Integer total = getUserTotalBySearch(searchModel); List<User> userList = getUserListBySearch(searchModel); if(userList==null || userList.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(User u:userList) { if(i != 0) sb.append(","); addDataRow(sb,u); i++; } sb.append("]}"); return sb.toString(); } @Override public String getUserDataRow(Integer id) { User u = getUserById(id); StringBuilder sb = new StringBuilder(); addDataRow(sb,u); return sb.toString(); } private void addDataRow(StringBuilder sb,User u) { sb.append("["); sb.append("\"<input type=\\\"checkbox\\\" name=\\\"id[]\\\" value=\\\"").append(u.getId()).append("\\\">\""); sb.append(",").append(u.getId()); sb.append(",\"").append(u.getUsername()).append("\""); sb.append(",\"").append(u.getFullname()).append("\""); sb.append(",\"").append(u.getGender()?"男":"女").append("\""); sb.append(",\"").append(u.getIsAdmin()?"管理员":"普通").append("\""); sb.append(",\"").append(u.getIsLock()?"是":"否").append("\""); sb.append(",\"").append(u.getDepartmentName()==null?"":u.getDepartmentName()).append("\""); sb.append(",\"").append(u.getUpdatePerson()).append("\""); sb.append(",\"").append(StringUtil.formatDate(u.getUpdateDate(),"yyyy-MM-dd HH:mm:ss")).append("\""); sb.append(",\"") .append("<a href=\\\"javascript:User.update_click('").append(u.getId()).append("');\\\" class=\\\"btn btn-xs default btn-editable\\\"><i class=\\\"fa fa-edit\\\"></i> 修改</a>") .append("  <a href=\\\"javascript:").append(u.getIsLock()?"User.unlock('":"User.lock('").append(u.getId()).append("');\\\" class=\\\"btn btn-xs default btn-editable\\\"><i class=\\\"fa fa-").append(u.getIsLock()?"un":"").append("lock\\\"></i> ").append(u.getIsLock()?"解锁":"锁定").append("</a>") .append("  <a href=\\\"javascript:User.remove('").append(u.getId()).append("');\\\" class=\\\"btn btn-xs default btn-editable\\\"><i class=\\\"fa fa-times\\\"></i> 删除</a>") .append("  <a href=\\\"javascript:User.assign_click('").append(u.getId()).append("');\\\" class=\\\"btn btn-xs default btn-editable\\\"><i class=\\\"fa fa-key\\\"></i> 分配角色</a>") .append("\""); sb.append("]"); } }