package com.kmall.common.service.impl; import com.google.common.collect.ImmutableBiMap; import com.kmall.common.Global; import com.kmall.common.dao.SysUserDao; import com.kmall.common.entity.SysUserEntity; import com.kmall.common.service.SysRoleService; import com.kmall.common.service.SysUserRoleService; import com.kmall.common.service.SysUserService; import com.kmall.common.utils.*; import org.apache.commons.lang.StringUtils; import org.apache.shiro.crypto.hash.Sha256Hash; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 系统用户 * * @author Scott * @email * @date 2016年12月18日 上午9:46:09 */ @Service("sysUserService") public class SysUserServiceImpl implements SysUserService { @Autowired private SysUserDao sysUserDao; @Autowired private SysUserRoleService sysUserRoleService; @Autowired private SysRoleService sysRoleService; @Override public List queryAllPerms(Long userId) { return sysUserDao.queryAllPerms(userId); } @Override public List queryAllMenuId(Long userId) { return sysUserDao.queryAllMenuId(userId); } @Override public SysUserEntity queryByUserName(String username) { return sysUserDao.queryByUserName(username); } @Override public SysUserEntity queryObject(Long userId) { return sysUserDao.queryObject(userId); } @Override public List queryList(Map map) { return sysUserDao.queryList(map); } @Override public int queryTotal(Map map) { return sysUserDao.queryTotal(map); } @Override @Transactional public void save(SysUserEntity user) { Map valideDate = MapBeanUtil.fromObject(user); ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder(); builder.put("username", "用户名"); builder.put("email", "邮箱"); builder.put("mobile", "手机号"); builder.put("roleType", "数据角色类型"); builder.put("status", "状态"); builder.put("roleId", "角色"); R r = ValidatorUtil.isEmpty(builder.build(), valideDate); if (Integer.valueOf(r.get("code").toString()) != 0) { throw new RRException(r.get("msg").toString()); } else { if (!"1".equals(user.getRoleType())) { builder.put("storeId", "门店"); } r = ValidatorUtil.isEmpty(builder.build(), valideDate); if (Integer.valueOf(r.get("code").toString()) != 0) { throw new RRException(r.get("msg").toString()); } } if (!user.getEmail().matches("^[a-z0-9A-Z]+[- | a-z0-9A-Z . _]+@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-z]{2,}$")) { throw new RRException("邮箱格式错误!"); } if (!PhoneFormatCheckUtils.isPhoneLegal(user.getMobile())) { throw new RRException("手机号格式错误!"); } user.setCreateTime(new Date()); //sha256加密 user.setPassword(new Sha256Hash(Global.DEFAULT_PASS_WORD).toHex()); sysUserDao.save(user); //检查角色是否越权 checkRole(user); //保存用户与角色关系 sysUserRoleService.saveOrUpdate(user.getUserId(), user.getRoleId()); } @Override @Transactional public void update(SysUserEntity user) { Map valideDate = MapBeanUtil.fromObject(user); ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder(); builder.put("username", "用户名"); builder.put("email", "邮箱"); builder.put("mobile", "手机号"); builder.put("roleType", "数据角色类型"); builder.put("status", "状态"); builder.put("roleId", "角色"); R r = ValidatorUtil.isEmpty(builder.build(), valideDate); if (Integer.valueOf(r.get("code").toString()) != 0) { throw new RRException(r.get("msg").toString()); } else { if (!"1".equals(user.getRoleType())) { builder.put("storeId", "门店"); } r = ValidatorUtil.isEmpty(builder.build(), valideDate); if (Integer.valueOf(r.get("code").toString()) != 0) { throw new RRException(r.get("msg").toString()); } } if (!user.getEmail().matches("^[a-z0-9A-Z]+[- | a-z0-9A-Z . _]+@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-z]{2,}$")) { throw new RRException("邮箱格式错误!"); } if (!PhoneFormatCheckUtils.isPhoneLegal(user.getMobile())) { throw new RRException("手机号格式错误!"); } if (StringUtils.isBlank(user.getPassword())) { user.setPassword(new Sha256Hash(Global.DEFAULT_PASS_WORD).toHex()); } else { user.setPassword(new Sha256Hash(user.getPassword()).toHex()); } sysUserDao.update(user); //检查角色是否越权 checkRole(user); //保存用户与角色关系 sysUserRoleService.saveOrUpdate(user.getUserId(), user.getRoleId()); } @Override @Transactional public void deleteBatch(Long[] userId) { sysUserDao.deleteBatch(userId); } @Override public int updatePassword(Long userId, String password, String newPassword) { Map map = new HashMap<>(); map.put("userId", userId); map.put("password", password); map.put("newPassword", newPassword); return sysUserDao.updatePassword(map); } /** * 检查角色是否越权 */ private void checkRole(SysUserEntity user) { //如果不是超级管理员,则需要判断用户的角色是否自己创建 if (user.getCreateUserId() == Constant.SUPER_ADMIN) { return; } //查询用户创建的角色列表 List roleIdList = sysRoleService.queryRoleIdList(user.getCreateUserId()); //判断是否越权 if (!roleIdList.containsAll(user.getRoleIdList())) { throw new RRException("新增用户所选角色,不是本人创建"); } } }